|
|
OrderDAOCS |
|
/*
* $Id: OrderDAOCS.java,v 1.1.2.4 2001/03/15 03:50:33 gmurray Exp $
* Copyright 2001 Sun Microsystems, Inc. All rights reserved.
* Copyright 2001 Sun Microsystems, Inc. Tous droits réservés.
*/
package com.sun.j2ee.blueprints.customer.order.dao;
import java.util.Collection;
import java.util.Iterator;
import java.util.Locale;
import java.text.NumberFormat;
import java.text.DecimalFormat;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.sun.j2ee.blueprints.customer.util.I18nUtil;
import com.sun.j2ee.blueprints.customer.util.DatabaseNames;
import com.sun.j2ee.blueprints.customer.util.Address;
import com.sun.j2ee.blueprints.customer.order.model.LineItem;
import com.sun.j2ee.blueprints.customer.order.model.MutableOrderModel;
import com.sun.j2ee.blueprints.customer.order.exceptions.OrderDAOSysException;
import com.sun.j2ee.blueprints.customer.order.exceptions.OrderDAOAppException;
import com.sun.j2ee.blueprints.customer.order.exceptions.OrderDAODBUpdateException;
import com.sun.j2ee.blueprints.util.tracer.Debug;
/**
* This class represents the implementation of the
* create and store methods of the base class OrderDAOImpl for
* Cloudscape.
*
* @see UUIDGenerator
*/
public class OrderDAOCS extends OrderDAOImpl {
public OrderDAOCS() throws OrderDAOSysException {
super();
}
/**
* part of the OrderDAO abstract class
*/
public int create(MutableOrderModel details) throws OrderDAOSysException,
OrderDAODBUpdateException,
OrderDAOAppException {
int orderId = getUniqueOrderId();
insertOrder(orderId, details);
insertLineItem(orderId, details);
insertOrderStatus(orderId, details);
return(orderId);
}
private int getUniqueOrderId() throws OrderDAOSysException,
OrderDAODBUpdateException {
try {
getDBConnection();
return(UUIDGenerator.nextSeqNum(dbConnection));
} catch(OrderDAODBUpdateException oddb) {
throw new OrderDAODBUpdateException(oddb.getMessage());
} catch(OrderDAOSysException se) {
throw new OrderDAOSysException("SQLException while getting " +
"order ID : \n" + se);
} finally {
closeConnection();
}
}
/**
* part of the OrderDAO abstract class
*/
public void store(MutableOrderModel details) throws OrderDAOSysException,
OrderDAODBUpdateException,
OrderDAOAppException {
updateOrder(details);
updateLineItem(details);
updateOrderStatus(details);
}
private void insertOrder(int orderId, MutableOrderModel details) throws
OrderDAODBUpdateException,
OrderDAOAppException,
OrderDAOSysException {
if (!isValidData(details))
throw new OrderDAOAppException("Illegal data values for insert");
String queryStr = "INSERT INTO " + DatabaseNames.ORDER_TABLE
+ "(orderid,userid,orderdate,"
+ "shipaddr1,shipaddr2,shipcity,shipstate,shipzip,shipcountry,"
+ "billaddr1,billaddr2,billcity,billstate,billzip,billcountry,"
+ "courier,totalprice,"
+ "shiptofirstname,shiptolastname,"
+ "billtofirstname,billtolastname,"
+ "creditcard,exprdate,cardtype, locale)" + "VALUES ("
+ orderId + ","
+ "'" + details.getUserId().trim() + "',"
+ "'" + details.getOrderDate().getCloudscapeDateString() + "',"
+ "'"+details.getShipToAddr().getStreetName1().trim() +"',";
if (details.getShipToAddr().getStreetName2() != null)
queryStr += "'"+details.getShipToAddr().getStreetName2().trim() +"',";
else
queryStr += "' ',";
queryStr += "'"+details.getShipToAddr().getCity().trim() + "',"
+ "'"+details.getShipToAddr().getState().trim() + "',"
+ "'"+details.getShipToAddr().getZipCode().trim() + "',"
+ "'"+details.getShipToAddr().getCountry().trim() + "',"
+ "'"+details.getBillToAddr().getStreetName1().trim() +"',";
if (details.getBillToAddr().getStreetName2() != null)
queryStr += "'"+details.getShipToAddr().getStreetName2().trim() +"',";
else
queryStr += "' ',";
queryStr += "'"+details.getBillToAddr().getCity().trim() + "',"
+ "'"+details.getBillToAddr().getState().trim() + "',"
+ "'"+details.getBillToAddr().getZipCode().trim() + "',"
+ "'"+details.getBillToAddr().getCountry().trim() + "',"
+ "'"+details.getCarrier().trim() + "',"
+ details.getTotalPrice() + ","
+ "'"+details.getShipToFirstName().trim() + "',"
+ "'"+details.getShipToLastName().trim() + "',"
+ "'"+details.getBillToFirstName().trim() + "',"
+ "'"+details.getBillToLastName().trim() + "',"
+ "'"+details.getCreditCard().getCardNo().trim() + "',"
+ "'"+details.getCreditCard().getExpiryDateString().trim() + "',"
+ "'"+details.getCreditCard().getCardType().trim() + "',"
+ "'"+I18nUtil.getLocaleString(details.getLocale()) + "' )";
Debug.println("queryString is: "+ queryStr);
PreparedStatement stmt = null;
try {
getDBConnection();
stmt = createPreparedStatement(dbConnection, queryStr);
int resultCount = stmt.executeUpdate();
if ( resultCount != 1 )
throw new OrderDAODBUpdateException(
"ERROR in ORDER_TABLE INSERT !! resultCount = "
+ resultCount);
} catch(SQLException se) {
Debug.println("!!!!SQL Ex while insertOrder : " + se);
throw new OrderDAOSysException("SQLException while inserting " +
"order " + orderId + " : \n" + se);
} finally {
closeStatement(stmt);
closeConnection();
}
}
private void insertLineItem(int orderId, MutableOrderModel details) throws
OrderDAOSysException,
OrderDAODBUpdateException,
OrderDAOAppException {
LineItem LI;
int resultCount;
PreparedStatement stmt = null;
try {
getDBConnection();
for (Iterator it = details.getLineItems().iterator() ; it.hasNext() ;) {
LI = (LineItem) it.next();
if (LI == null)
throw new OrderDAOAppException("LineItem is null");
String queryStr = "INSERT INTO "
+ DatabaseNames.LINE_ITEM_TABLE
+ "(orderid,linenum,itemid,quantity,unitprice) VALUES ("
+ orderId + ","
+ LI.getLineNo() + ","
+ "'"+ LI.getItemNo().trim() + "',"
+ LI.getQty() + ","
+ LI.getUnitPrice() + ")";
Debug.println("queryString is: "+ queryStr);
stmt = createPreparedStatement(dbConnection, queryStr);
resultCount = stmt.executeUpdate();
if ( resultCount != 1 )
throw new OrderDAODBUpdateException
("ERROR in LINE_ITEM_TABLE INSERT !! resultCount = "
+ resultCount);
}
} catch(SQLException se) {
throw new OrderDAOSysException("SQLException while inserting " +
"line item for order " + orderId + " : \n" + se);
} finally {
closeStatement(stmt);
closeConnection();
}
}
private void insertOrderStatus(int orderId, MutableOrderModel details)
throws OrderDAOSysException,
OrderDAODBUpdateException {
PreparedStatement stmt = null;
try {
getDBConnection();
int lineNum = UUIDGenerator.nextSeqNum(dbConnection);
String queryStr = "INSERT INTO "
+ DatabaseNames.ORDER_STATUS_TABLE
+ "(orderid,linenum,updatedate,status) VALUES ("
+ orderId + ","
+ lineNum + ","
+ " current_date,"
+ "'" + details.getStatus().trim() + "')";
Debug.println("queryString is: "+ queryStr);
stmt = createPreparedStatement(dbConnection, queryStr);
int resultCount = stmt.executeUpdate();
if ( resultCount != 1 )
throw new OrderDAODBUpdateException
("ERROR in ORDER_STATUS_TABLE INSERT !! resultCount = "
+ resultCount);
} catch(SQLException se) {
throw new OrderDAOSysException("SQLException while inserting " +
"order status : \n" + se);
} finally {
closeStatement(stmt);
closeConnection();
}
}
private void updateOrder(MutableOrderModel details) throws
OrderDAODBUpdateException,
OrderDAOSysException {
String queryStr = "UPDATE " + DatabaseNames.ORDER_TABLE
+ " SET userid = " + "'" + details.getUserId().trim() + "',"
+ "orderdate = " + "'" + details.getOrderDate().getCloudscapeDateString()+ "',"
+ "shipaddr1 = " + "'" + details.getShipToAddr().getStreetName1().trim() + "',";
if (details.getShipToAddr().getStreetName2() != null)
queryStr += "shipaddr2 = " + "'"
+ details.getShipToAddr().getStreetName2().trim() + "',";
else
queryStr += "shipaddr2 = ' ',";
queryStr += "shipcity = " + "'" + details.getShipToAddr().getCity().trim() + "',"
+ "shipstate = " + "'" + details.getShipToAddr().getState().trim() + "',"
+ "shipzip = " + "'" + details.getShipToAddr().getZipCode().trim() + "',"
+ "shipcountry = " + "'" + details.getShipToAddr().getCountry().trim() + "',"
+ "billaddr1 = " + "'" + details.getBillToAddr().getStreetName1().trim() + "',";
if (details.getBillToAddr().getStreetName2() != null)
queryStr += "billaddr2 = " + "'"
+ details.getBillToAddr().getStreetName2().trim() + "',";
else
queryStr += "billaddr2 = ' ',";
queryStr += "billcity = " + "'" + details.getBillToAddr().getCity().trim() + "',"
+ "billstate = " + "'" + details.getBillToAddr().getState().trim() + "',"
+ "billzip = " + "'" + details.getBillToAddr().getZipCode().trim() + "',"
+ "billcountry = " + "'" + details.getBillToAddr().getCountry().trim() + "',"
+ "courier = " + "'" + details.getCarrier().trim() + "',"
+ "totalprice = " + formatPrice(details.getTotalPrice()) + ","
+ "shiptofirstname = " + "'" + details.getShipToFirstName().trim() + "',"
+ "shiptolastname = " + "'" + details.getShipToLastName().trim() + "',"
+ "billtofirstname = " + "'" + details.getBillToFirstName().trim() + "',"
+ "billtolastname = " + "'" + details.getBillToLastName().trim() + "',"
+ "creditcard = " + "'" + details.getCreditCard().getCardNo().trim() + "',"
+ "exprdate = " + "'" + details.getCreditCard().getExpiryDateString().trim() + "',"
+ "cardtype = " + "'" + details.getCreditCard().getCardType().trim()+ "',"
+ "locale = " + "'" + I18nUtil.getLocaleString(details.getLocale())+ "'"
+ " WHERE orderid = " + details.getOrderId();
Debug.println("queryString is: "+ queryStr);
PreparedStatement stmt = null;
try {
getDBConnection();
stmt = createPreparedStatement(dbConnection, queryStr);
int resultCount = stmt.executeUpdate();
if ( resultCount != 1 )
throw new OrderDAODBUpdateException
("ERROR updating order in ORDER_TABLE!! resultCount = " +
resultCount);
} catch(SQLException se) {
throw new OrderDAOSysException("SQLException while updating " +
"order : \n" + se);
} finally {
closeStatement(stmt);
closeConnection();
}
}
private String formatPrice(double price){
NumberFormat nf = NumberFormat.getInstance(Locale.US);
DecimalFormat df = (DecimalFormat)nf;
df.setMinimumFractionDigits(2);
df.setMaximumFractionDigits(2);
String pattern = "##.00";
df.applyPattern(pattern);
df.setDecimalSeparatorAlwaysShown(true);
return df.format(price);
}
private void updateLineItem(MutableOrderModel details) throws
OrderDAOSysException,
OrderDAOAppException,
OrderDAODBUpdateException {
LineItem LI;
int resultCount;
PreparedStatement stmt = null;
try {
getDBConnection();
for (Iterator it = details.getLineItems().iterator() ; it.hasNext() ;) {
LI = (LineItem) it.next();
if (LI == null)
throw new OrderDAOAppException("LineItem is null");
String queryStr = "UPDATE "+ DatabaseNames.LINE_ITEM_TABLE
+ " SET itemid = " + "'"+ LI.getItemNo().trim() + "',"
+ "quantity = " + LI.getQty() + ","
+ "unitprice = " + LI.getUnitPrice()
+ " WHERE orderid = " + details.getOrderId()
+ " AND linenum = " + LI.getLineNo();
Debug.println("queryString is: "+ queryStr);
stmt = createPreparedStatement(dbConnection, queryStr);
resultCount = stmt.executeUpdate();
if ( resultCount != 1 )
throw new OrderDAODBUpdateException
("ERROR updating LINE_ITEM_TABLE !! resultCount = "
+ resultCount);
}
} catch(SQLException se) {
throw new OrderDAOSysException("SQLException while updating " +
"line item : \n" + se);
} finally {
closeStatement(stmt);
closeConnection();
}
}
private void updateOrderStatus(MutableOrderModel details) throws
OrderDAOSysException,
OrderDAODBUpdateException {
PreparedStatement stmt = null;
try {
getDBConnection();
String queryStr = "UPDATE " + DatabaseNames.ORDER_STATUS_TABLE
+ " SET status = " + "'"+ details.getStatus().trim() + "'"
+ " WHERE orderid = " + details.getOrderId();
Debug.println("queryString is: "+ queryStr);
stmt = createPreparedStatement(dbConnection,queryStr);
int resultCount = stmt.executeUpdate();
if ( resultCount != 1 )
throw new OrderDAODBUpdateException
("ERROR updating ORDER_STATUS_TABLE !! resultCount = "
+ resultCount);
} catch(SQLException se) {
throw new OrderDAOSysException("SQLException while updating " +
"order status : \n" + se);
} finally {
closeStatement(stmt);
closeConnection();
}
}
}
|
|
OrderDAOCS |
|