package com.sun.j2ee.blueprints.petstore.controller.web.actions;
import java.io.IOException;
import java.util.Hashtable;
import java.util.Locale;
import java.util.Vector;
import java.util.ArrayList;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletResponse;
import com.sun.j2ee.blueprints.waf.event.Event;
import com.sun.j2ee.blueprints.waf.event.EventResponse;
import com.sun.j2ee.blueprints.waf.controller.web.action.HTMLActionSupport;
import com.sun.j2ee.blueprints.waf.controller.web.action.HTMLActionException;
import com.sun.j2ee.blueprints.contactinfo.ejb.ContactInfo;
import com.sun.j2ee.blueprints.creditcard.ejb.CreditCard;
import com.sun.j2ee.blueprints.address.ejb.Address;
import com.sun.j2ee.blueprints.customer.profile.ejb.ProfileInfo;
import com.sun.j2ee.blueprints.petstore.util.PetstoreKeys;
import com.sun.j2ee.blueprints.petstore.controller.events.CustomerEvent;
import com.sun.j2ee.blueprints.petstore.controller.web.exceptions.MissingFormDataException;
import com.sun.j2ee.blueprints.signon.web.SignOnFilter;
public final class CustomerHTMLAction extends HTMLActionSupport {
private int eventType = -1;
public Event perform(HttpServletRequest request)
throws HTMLActionException {
String actionType= (String)request.getParameter("action");
CustomerEvent event = null;
if (actionType == null) return null;
if (actionType.equals("create")) {
ContactInfo info = extractContactInfo(request, "_a");
CreditCard creditCard = extractCreditCard(request);
ProfileInfo profileInfo = extractProfileInfo(request);
event = new CustomerEvent(CustomerEvent.CREATE, info, profileInfo, creditCard);
eventType = CustomerEvent.CREATE;
} else if (actionType.equals("update")) {
ContactInfo info = extractContactInfo(request, "_a");
CreditCard creditCard = extractCreditCard(request);
ProfileInfo profileInfo = extractProfileInfo(request);
event = new CustomerEvent(CustomerEvent.UPDATE, info, profileInfo, creditCard);
}
return event;
}
private ProfileInfo extractProfileInfo(HttpServletRequest request) {
ArrayList missingFields = null;
String preferredLanguage = request.getParameter("language").trim();
if (preferredLanguage.equals("")) {
if (missingFields == null) {
missingFields = new ArrayList();
}
missingFields.add("Language");
}
String defaultFavoriteCategory = request.getParameter("favorite_category").trim();
if (defaultFavoriteCategory.equals("")) {
if (missingFields == null) {
missingFields = new ArrayList();
}
missingFields.add("Favorite Category");
}
boolean defaultMyListPreference = true;
String defaultMyListPreferenceString = request.getParameter("mylist_on");
if (defaultMyListPreferenceString == null) defaultMyListPreference=false;
boolean defaultBannerPreference = true;
String defaultBannerPreferenceString = request.getParameter("banners_on");
if (defaultBannerPreferenceString == null) defaultBannerPreference=false;
return new ProfileInfo(preferredLanguage,
defaultFavoriteCategory,
defaultMyListPreference,
defaultBannerPreference);
}
private CreditCard extractCreditCard(HttpServletRequest request)
throws HTMLActionException {
ArrayList missingFields = null;
String creditCardNumber = request.getParameter("credit_card_number").trim();
if (creditCardNumber.equals("")) {
if (missingFields == null) {
missingFields = new ArrayList();
}
missingFields.add("Credit Card");
}
String creditCardType = request.getParameter("credit_card_type").trim();
if (creditCardNumber.equals("")) {
if (missingFields == null) {
missingFields = new ArrayList();
}
missingFields.add("Credit Card Type");
}
String creditCardExpiryMonth = request.getParameter("credit_card_expiry_month").trim();
if (creditCardNumber.equals("")) {
if (missingFields == null) {
missingFields = new ArrayList();
}
missingFields.add("Credit Card Expiry Month");
}
String creditCardExpiryYear = request.getParameter("credit_card_expiry_year").trim();
if (creditCardNumber.equals("")) {
if (missingFields == null) {
missingFields = new ArrayList();
}
missingFields.add("Credit Card Expiry Month");
}
String expiryDate = creditCardExpiryMonth + "/" + creditCardExpiryYear;
return new CreditCard(creditCardNumber,
creditCardType,
expiryDate);
}
private ContactInfo extractContactInfo(HttpServletRequest request, String suffix)
throws HTMLActionException {
ArrayList missingFields = null;
String familyName = request.getParameter("family_name" +suffix).trim();
if (familyName.equals("")) {
if (missingFields == null) {
missingFields = new ArrayList();
}
missingFields.add("Last Name");
}
String givenName = request.getParameter("given_name" +suffix).trim();
if (givenName.equals("")) {
if (missingFields == null) {
missingFields = new ArrayList();
}
missingFields.add("First Name");
}
String address1 = request.getParameter("address_1" +suffix).trim();
if (address1.equals("")){
if (missingFields == null) {
missingFields = new ArrayList();
}
missingFields.add("Street Address");
}
String address2 = request.getParameter("address_2" +suffix).trim();
if (address2.equals("")) {
address2 = null;
}
String city = request.getParameter("city" +suffix).trim();
if (city.equals("")){
if (missingFields == null) {
missingFields = new ArrayList();
}
missingFields.add("City");
}
String stateOrProvince = request.getParameter("state_or_province" +suffix).trim();
if (stateOrProvince.equals("")) {
if (missingFields == null) {
missingFields = new ArrayList();
}
missingFields.add("State or Province" +suffix);
}
String postalCode = request.getParameter("postal_code" +suffix).trim();
if (postalCode.equals("")){
if (missingFields == null) {
missingFields = new ArrayList();
}
missingFields.add("Postal Code");
}
String country = request.getParameter("country" + suffix).trim();
String telephone = request.getParameter("telephone_number" +suffix).trim();
if (telephone.equals("")){
if (missingFields == null) {
missingFields = new ArrayList();
}
missingFields.add("Telephone Number");
}
String email = null;
if (request.getParameter("email" +suffix) != null) {
email = request.getParameter("email" +suffix).trim();
}
if (missingFields != null) {
MissingFormDataException ex = new MissingFormDataException("Missing Address Data", missingFields);
request.setAttribute(PetstoreKeys.MISSING_FORM_DATA_EXCEPTION_KEY, ex);
return null;
}
Address address = new Address(address1, address2, city, stateOrProvince, postalCode, country);
return new ContactInfo(familyName, givenName, address, email, telephone);
}
public void doEnd(HttpServletRequest request, EventResponse eventResponse) {
if (eventType == CustomerEvent.CREATE) {
if (request.getSession().getAttribute(SignOnFilter.SIGNED_ON_USER) != null) {
request.getSession().removeAttribute(SignOnFilter.SIGNED_ON_USER);
}
request.getSession().setAttribute(SignOnFilter.SIGNED_ON_USER, new Boolean(true));
}
eventType = -1;
}
}