/** * 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; }
/** * 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; }