KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > exoplatform > portal > launcher > PortalContextListener


1 /***************************************************************************
2  * Copyright 2001-2003 The eXo Platform SARL All rights reserved. *
3  * Please look at license.txt in info directory for more license detail. *
4  **************************************************************************/

5 package org.exoplatform.portal.launcher;
6
7 import java.util.Locale JavaDoc ;
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 JavaDoc;
19 import javax.servlet.ServletContextEvent JavaDoc;
20 import javax.servlet.ServletContextListener JavaDoc;
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 /**
32  * Created by The eXo Platform SARL .
33  * Date: Jan 25, 2003
34  * Time: 5:25:52 PM
35  */

36 public class PortalContextListener implements ServletContextListener JavaDoc {
37   
38     protected ServletContext JavaDoc portalServletContext_ = null;
39
40     public void contextInitialized(ServletContextEvent JavaDoc 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     //add RetoreViewListener to set the correct selected page component
58
LifecycleFactory lfactory =
59       (LifecycleFactory) FactoryFinder.getFactory( FactoryFinder.LIFECYCLE_FACTORY );
60     Lifecycle lifecycle = lfactory.getLifecycle( LifecycleFactory.DEFAULT_LIFECYCLE );
61     lifecycle.addPhaseListener(new RestoreViewListener()) ;
62     //recustomize the view handler
63
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 JavaDoc 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         //hack to invoke processDecodes on the first request.
85
//jsf implementation call renderResponse in RestoreViewPhase on the
86
//first request. So the next phases of the first request won't be executed
87
uiPortal.processDecodes(FacesContext.getCurrentInstance()) ;
88         return ;
89       }
90       
91       //reset the page component if user change the page by URL
92
RequestInfo rinfo =
93         (RequestInfo) scontainer.getComponentInstanceOfType(RequestInfo.class);
94       String JavaDoc 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 JavaDoc 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