/** * Authenticates a returning customer. * * @param uname UNAME of the customer * @param passwd PASSWD of the customer * @return the Big Customer Model object (with address and country name fields), if authentication * is successful, null otherwise. */ public BigCustomerModel authenticate(String uname, String passwd) { BigCustomerModel bigModel = null; try { // find Collection of customers with this C_UNAME // it should be actually one or none of them Collection coll = custHome.findByC_UNAME(uname); if (coll.isEmpty()) return null; // fail if no such customers // get the CustomerModel object Customer customer = (Customer) coll.iterator().next(); CustomerModel model = customer.getCustomer(); // check the password if (!model.getC_PASSWD().equals(passwd)) return null; // fail if passwds do not match // update C_LOGIN and C_EXPIRATION Date now = new Date(); customer.setC_LOGIN(now); customer.setC_EXPIRATION(new Date(now.getTime() + 7200000)); // create BigCustomerModel object // get fields from the Customer table bigModel = new BigCustomerModel( model.getC_ID(), model.getC_UNAME(), model.getC_PASSWD(), model.getC_FNAME(), model.getC_LNAME(), model.getC_ADDR_ID(), model.getC_PHONE(), model.getC_EMAIL(), model.getC_DISCOUNT(), model.getC_BIRTHDATE(), model.getC_DATA()); // get fields from the ADDRESS table Integer C_ADDR_ID = model.getC_ADDR_ID(); AddressModel address = addressHome.findByPrimaryKey(C_ADDR_ID).getAddress(); bigModel.setADDR_STREET1(address.getADDR_STREET1()); bigModel.setADDR_STREET2(address.getADDR_STREET2()); bigModel.setADDR_CITY(address.getADDR_CITY()); bigModel.setADDR_STATE(address.getADDR_STATE()); bigModel.setADDR_ZIP(address.getADDR_ZIP()); bigModel.setCO_ID(address.getADDR_CO_ID()); // get fields from the Country table Integer CO_ID = address.getADDR_CO_ID(); CountryModel country = countryHome.findByPrimaryKey(CO_ID).getCountry(); bigModel.setCO_NAME(country.getCO_NAME()); } catch (Exception re) { throw new EJBException(re); } return bigModel; }
/** * Returns the last order placed by the customer, by first authenticating him. * * @param C_UNAME name of the customer * @param S_PASSWD password supplied by the customer * @return the BigOrderModel object, if successfully authenticated; null otherwise */ public BigOrderModel getLastOrder(String C_UNAME, String C_PASSWD) { BigOrderModel bigOrder = null; CustomerModel custModel = null; try { // find Collection of customers with this C_UNAME // it should be actually one or none of them Collection coll = custHome.findByC_UNAME(C_UNAME); if (coll.isEmpty()) return null; // fail, if no such customers // get the CustomerModel object Customer customer = (Customer) coll.iterator().next(); custModel = customer.getCustomer(); // check the password if (!custModel.getC_PASSWD().equals(C_PASSWD)) return null; // fail if passwds do not match } catch (Exception e) { throw new EJBException(e); } // find the latest order Integer O_ID = null; Connection con = null; PreparedStatement prepStmt = null; ResultSet rs = null; try { con = datasource.getConnection(); String s = "SELECT max(o_id) FROM orders WHERE o_c_id = ?"; prepStmt = con.prepareStatement(s); prepStmt.setInt(1, custModel.getC_ID().intValue()); rs = prepStmt.executeQuery(); boolean exist = rs.next(); if (exist) { int i = rs.getInt(1); if (rs.wasNull()) { O_ID = null; } else { O_ID = new Integer(i); } } } catch (Exception ex) { throw new EJBException(ex); } finally { try { rs.close(); } catch (Exception e) { } try { prepStmt.close(); } catch (Exception e) { } try { con.close(); } catch (Exception e) { } } if (O_ID == null) { // no orders from this customer // return empty model object, which means that authentication was successfull, but no orders // ware found return new BigOrderModel(); } OrderModel orderModel = null; try { orderModel = orderHome.findByPrimaryKey(O_ID).getOrder(); } catch (Exception e) { throw new EJBException(e); } // create BigOrderModel object and fill it with right order related info bigOrder = new BigOrderModel( O_ID, orderModel.getO_C_ID(), orderModel.getO_DATE(), orderModel.getO_SUB_TOTAL(), orderModel.getO_TAX(), orderModel.getO_TOTAL(), orderModel.getO_SHIP_TYPE(), orderModel.getO_SHIP_DATE(), orderModel.getO_STATUS()); // set customer information fields bigOrder.setC_FNAME(custModel.getC_FNAME()); bigOrder.setC_LNAME(custModel.getC_LNAME()); bigOrder.setC_PHONE(custModel.getC_PHONE()); bigOrder.setC_EMAIL(custModel.getC_EMAIL()); try { // set billing address related info Integer B_O_ID = orderModel.getO_BILL_ADDR_ID(); AddressModel billAddr = addressHome.findByPrimaryKey(B_O_ID).getAddress(); bigOrder.setBILL_ADDR(billAddr); bigOrder.setBILL_CO_NAME( countryHome.findByPrimaryKey(billAddr.getADDR_CO_ID()).getCountry().getCO_NAME()); // set shipping address related info Integer S_O_ID = orderModel.getO_SHIP_ADDR_ID(); AddressModel shipAddr = addressHome.findByPrimaryKey(S_O_ID).getAddress(); bigOrder.setSHIP_ADDR(shipAddr); bigOrder.setSHIP_CO_NAME( countryHome.findByPrimaryKey(shipAddr.getADDR_CO_ID()).getCountry().getCO_NAME()); // set credit card transaction related info Cc_xactModel xact = xactHome.findByPrimaryKey(O_ID).getCc_xact(); bigOrder.setCX_TYPE(xact.getCX_TYPE()); bigOrder.setCX_AUTH_ID(xact.getCX_AUTH_ID()); // set lineItems related info Iterator iter = orderLineHome.findByOrderId(O_ID).iterator(); ArrayList list = new ArrayList(); while (iter.hasNext()) { OrderLineModel olm = ((OrderLine) iter.next()).getOrderLine(); BigOrderLineModel bigOrderLine = new BigOrderLineModel( olm.getOL_ID(), olm.getOL_O_ID(), olm.getOL_I_ID(), olm.getOL_QTY(), olm.getOL_DISCOUNT(), olm.getOL_COMMENTS()); ItemModel item = itemHome.findByPrimaryKey(olm.getOL_I_ID()).getItem(); bigOrderLine.setI_TITLE(item.getI_TITLE()); bigOrderLine.setI_PUBLISHER(item.getI_PUBLISHER()); bigOrderLine.setI_COST(item.getI_COST()); list.add(bigOrderLine); } bigOrder.setLineItems(list); } catch (Exception e) { throw new EJBException(e); } return bigOrder; }
/** * Creates a new Customer according to the spec. clause 2.6.3.2 * * @return the Big Customer Model object (with adress and coubtry name fields) */ public BigCustomerModel createNewCustomer( String C_FNAME, String C_LNAME, String ADDR_STREET1, String ADDR_STREET2, String ADDR_CITY, String ADDR_STATE, String ADDR_ZIP, Integer CO_ID, String C_PHONE, String C_EMAIL, Date C_BIRTHDATE, String C_DATA) { BigCustomerModel bigModel = null; try { // create a new address entry in the database Address address = addressHome.create(ADDR_STREET1, ADDR_STREET2, ADDR_CITY, ADDR_STATE, ADDR_ZIP, CO_ID); AddressModel addressModel = address.getAddress(); CountryModel countryModel = countryHome.findByPrimaryKey(CO_ID).getCountry(); // create a new cutomer entry in the database; // note that we don't know C_UNAME and C_PASSWD yet, because // according to the spec they depend on the C_ID Date now = new Date(); Customer customer = custHome.create( "", "", C_FNAME, C_LNAME, addressModel.getADDR_ID(), C_PHONE, C_EMAIL, now, now, now, new Date(now.getTime() + 7200000), new Double(((double) Util.getRandomInt(rand, 0, 50)) / 100.0), new Double(0.0), new Double(0.0), C_BIRTHDATE, C_DATA); CustomerModel customerModel = customer.getCustomer(); // fill if the missing C_UNAME and C_PASSWD String C_UNAME = Util.DigSyl(rand, customerModel.getC_ID().intValue(), 0); String C_PASSWD = C_UNAME.toLowerCase(); customer.setC_UNAME(C_UNAME); customer.setC_PASSWD(C_PASSWD); // create BigCustomerModel and populate it bigModel = new BigCustomerModel( customerModel.getC_ID(), C_UNAME, C_PASSWD, C_FNAME, C_LNAME, customerModel.getC_ADDR_ID(), C_PHONE, C_EMAIL, customerModel.getC_DISCOUNT(), C_BIRTHDATE, C_DATA); // get fields from the ADDRESS table bigModel.setADDR_STREET1(ADDR_STREET1); bigModel.setADDR_STREET2(ADDR_STREET2); bigModel.setADDR_CITY(ADDR_CITY); bigModel.setADDR_STATE(ADDR_STATE); bigModel.setADDR_ZIP(ADDR_ZIP); bigModel.setCO_ID(CO_ID); // get fields from the Country table bigModel.setCO_NAME(countryModel.getCO_NAME()); } catch (Exception e) { throw new EJBException(e); } return bigModel; }