1 5 package org.exoplatform.portal.launcher; 6 7 import java.util.Locale ; 8 import javax.faces.FactoryFinder; 9 import javax.faces.application.Application; 10 import javax.faces.application.ApplicationFactory; 11 import javax.faces.application.ViewHandler; 12 import javax.faces.context.FacesContext; 13 import javax.faces.event.PhaseEvent; 14 import javax.faces.event.PhaseId; 15 import javax.faces.event.PhaseListener; 16 import javax.faces.lifecycle.Lifecycle; 17 import javax.faces.lifecycle.LifecycleFactory; 18 import javax.servlet.ServletContext ; 19 import javax.servlet.ServletContextEvent ; 20 import javax.servlet.ServletContextListener ; 21 import org.exoplatform.container.PortalContainer; 22 import org.exoplatform.container.RootContainer; 23 import org.exoplatform.container.SessionContainer; 24 import org.exoplatform.portal.faces.application.ExoPortalViewHandler; 25 import org.exoplatform.portal.faces.component.UIPortal; 26 import org.exoplatform.portal.session.ExoPortal; 27 import org.exoplatform.portal.session.RequestInfo; 28 import org.exoplatform.services.log.LogUtil; 29 import org.exoplatform.services.portal.model.Node; 30 import org.exoplatform.services.resources.ResourceBundleService; 31 36 public class PortalContextListener implements ServletContextListener { 37 38 protected ServletContext portalServletContext_ = null; 39 40 public void contextInitialized(ServletContextEvent event) { 41 portalServletContext_ = event.getServletContext(); 42 RootContainer rootContainer = RootContainer.getInstance(); 43 PortalContainer pcontainer = rootContainer.getPortalContainer(portalServletContext_.getServletContextName()) ; 44 if(pcontainer == null){ 45 pcontainer = rootContainer.createPortalContainer(portalServletContext_); 46 } 47 PortalContainer.setInstance(pcontainer) ; 48 customizeFaces() ; 49 ResourceBundleService rservice = 50 ((ResourceBundleService)pcontainer.getComponentInstanceOfType(ResourceBundleService.class)) ; 51 rservice.getResourceBundle("locale.custom.custom", Locale.ENGLISH) ; 52 rservice.getResourceBundle("locale.users.default", Locale.ENGLISH) ; 53 PortalContainer.setInstance(null) ; 54 } 55 56 private void customizeFaces() { 57 LifecycleFactory lfactory = 59 (LifecycleFactory) FactoryFinder.getFactory( FactoryFinder.LIFECYCLE_FACTORY ); 60 Lifecycle lifecycle = lfactory.getLifecycle( LifecycleFactory.DEFAULT_LIFECYCLE ); 61 lifecycle.addPhaseListener(new RestoreViewListener()) ; 62 ApplicationFactory appFactory = 64 (ApplicationFactory) FactoryFinder.getFactory( FactoryFinder.APPLICATION_FACTORY); 65 Application app = appFactory.getApplication() ; 66 ViewHandler impl = app.getViewHandler() ; 67 app.setViewHandler(new ExoPortalViewHandler(impl)) ; 68 } 69 70 public void contextDestroyed(ServletContextEvent event) { 71 RootContainer rootContainer = RootContainer.getInstance(); 72 PortalContainer pcontainer = 73 rootContainer.getPortalContainer(event.getServletContext().getServletContextName()); 74 if(pcontainer.isStarted())pcontainer.stop() ; 75 rootContainer.removePortalContainer(event.getServletContext()) ; 76 } 77 78 79 public static class RestoreViewListener implements PhaseListener { 80 public void afterPhase(PhaseEvent event) { 81 SessionContainer scontainer = SessionContainer.getInstance() ; 82 UIPortal uiPortal = (UIPortal)scontainer.getComponentInstanceOfType(ExoPortal.class) ; 83 if(scontainer.getMonitor().getActionCount() < 1) { 84 uiPortal.processDecodes(FacesContext.getCurrentInstance()) ; 88 return ; 89 } 90 91 RequestInfo rinfo = 93 (RequestInfo) scontainer.getComponentInstanceOfType(RequestInfo.class); 94 String nodeURI = rinfo.getPageName() ; 95 if(nodeURI != null && ! uiPortal.getSelectedNode().getUri().equals(nodeURI)) { 96 Node node = uiPortal.getRootNode().findNode(nodeURI) ; 97 if(node != null) { 98 try { 99 uiPortal.setSelectedNode(node) ; 100 } catch (Exception ex) { 101 LogUtil.getLog(getClass()).error("Error: ", ex) ; 102 } 103 } 104 event.getFacesContext().renderResponse() ; 105 } 106 } 107 108 public void beforePhase(PhaseEvent event) { 109 110 } 111 112 public PhaseId getPhaseId() { return PhaseId.RESTORE_VIEW ; } 113 } 114 } | Popular Tags |