package com.sun.j2ee.blueprints.petstore.controller.web;
import java.util.HashMap;
import java.beans.Beans;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Locale;
import java.util.HashMap;
import javax.servlet.http.HttpSession;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import com.sun.j2ee.blueprints.signon.web.SignOnFilter;
import com.sun.j2ee.blueprints.waf.event.EventException;
import com.sun.j2ee.blueprints.waf.util.I18nUtil;
import com.sun.j2ee.blueprints.waf.controller.web.WebController;
import com.sun.j2ee.blueprints.waf.controller.web.EventMapping;
import com.sun.j2ee.blueprints.waf.event.Event;
import com.sun.j2ee.blueprints.customer.profile.ejb.ProfileLocal;
import com.sun.j2ee.blueprints.customer.ejb.CustomerLocal;
import com.sun.j2ee.blueprints.petstore.util.PetstoreKeys;
import com.sun.j2ee.blueprints.petstore.controller.events.SignOnEvent;
import com.sun.j2ee.blueprints.petstore.controller.web.PetstoreComponentManager;
public class SignOnNotifier
implements java.io.Serializable, HttpSessionAttributeListener {
public SignOnNotifier() { }
public void attributeRemoved(HttpSessionBindingEvent se) {}
public void attributeAdded(HttpSessionBindingEvent se) {
processEvent(se);
}
public void attributeReplaced(HttpSessionBindingEvent se) {
processEvent(se);
}
private void processEvent(HttpSessionBindingEvent se) {
HttpSession session = se.getSession();
String name = se.getName();
if (name.equals(SignOnFilter.SIGNED_ON_USER)) {
boolean aSignOn = ((Boolean)se.getValue()).booleanValue();
if (aSignOn) {
String userName = (String)session.getAttribute(SignOnFilter.USER_NAME);
PetstoreComponentManager sl = (PetstoreComponentManager)session.getAttribute(PetstoreKeys.COMPONENT_MANAGER);
WebController wc = sl.getWebController(session);
SignOnEvent soe = new SignOnEvent(userName);
EventMapping em = getEventMapping(session.getServletContext(), soe);
if (em != null) {
soe.setEJBActionClassName(em.getEJBActionClassName());
}
try {
wc.handleEvent(soe, session);
} catch (EventException e) {
System.err.println("SignOnNotifier Error handling event " + e);
}
CustomerLocal customer = sl.getCustomer(session);
if (session.getAttribute(PetstoreKeys.CUSTOMER) == null) {
session.setAttribute(PetstoreKeys.CUSTOMER, customer);
}
ProfileLocal profile = sl.getCustomer(session).getProfile();
Locale locale = I18nUtil.getLocaleFromString(profile.getPreferredLanguage());
session.setAttribute(PetstoreKeys.LOCALE, locale);
}
}
}
private EventMapping getEventMapping(ServletContext context, Event eventClass) {
HashMap eventMappings = (HashMap)context.getAttribute(PetstoreKeys.EVENT_MAPPINGS);
String eventClassName = eventClass.getClass().getName();
if ((eventMappings != null) && eventMappings.containsKey(eventClassName)) {
return (EventMapping)eventMappings.get(eventClassName);
} else {
return null;
}
}
}