KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > exoplatform > portal > filter > AdminRequestFilter


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.filter;
6
7 import java.io.IOException JavaDoc;
8 import javax.servlet.*;
9 import javax.servlet.http.HttpServletRequest JavaDoc;
10 import javax.servlet.http.HttpServletResponse JavaDoc;
11 import javax.servlet.http.HttpSession JavaDoc;
12 import org.apache.commons.logging.Log;
13 import org.exoplatform.commons.utils.ExceptionUtil;
14 import org.exoplatform.container.PortalContainer;
15 import org.exoplatform.container.RootContainer;
16 import org.exoplatform.container.SessionContainer;
17 import org.exoplatform.container.client.http.HttpClientInfo;
18 import org.exoplatform.container.monitor.ActionData;
19 import org.exoplatform.portal.session.PortalResources;
20 import org.exoplatform.portal.session.RequestInfo;
21 import org.exoplatform.services.database.HibernateServiceContainer;
22 import org.exoplatform.services.log.LogService;
23 /**
24  * Fri, May 30, 2003 @
25  * @author: Tuan Nguyen
26  * @email: tuan08@users.sourceforge.net
27  * @version: $Id: PrivateRequestFilter.java,v 1.25 2004/11/03 01:19:46 tuan08 Exp $
28  */

29 public class AdminRequestFilter implements Filter {
30   final public static String JavaDoc ACTION = "action" ;
31   final public static String JavaDoc ADMIN = "admin" ;
32   final public static String JavaDoc RETURN = "return" ;
33  
34   private Log log_ ;
35   private String JavaDoc portalName_ ;
36   private HibernateServiceContainer hserviceContainer_;
37     
38     public void init(FilterConfig filterConfig) {
39     portalName_ = filterConfig.getServletContext().getServletContextName() ;
40     PortalContainer pcontainer = RootContainer.getInstance().getPortalContainer(portalName_) ;
41     if(pcontainer == null){
42       pcontainer = RootContainer.getInstance().createPortalContainer(filterConfig.getServletContext());
43     }
44     PortalContainer.setInstance(pcontainer) ;
45     hserviceContainer_ =
46       (HibernateServiceContainer) pcontainer.getComponentInstanceOfType(HibernateServiceContainer.class) ;
47     LogService lservice = (LogService) pcontainer.getComponentInstanceOfType(LogService.class) ;
48     log_ = lservice.getLog("org.exoplatform.portal.filter") ;
49     PortalContainer.setInstance(null) ;
50     }
51     
52   public void doFilter(ServletRequest JavaDoc request, ServletResponse JavaDoc response,
53                        FilterChain chain) throws IOException JavaDoc, ServletException {
54    
55     long start = System.currentTimeMillis() ;
56     PortalContainer pcontainer = RootContainer.getInstance().getPortalContainer(portalName_) ;
57     PortalContainer.setInstance(pcontainer) ;
58     HttpServletRequest JavaDoc httpRequest = (HttpServletRequest JavaDoc) request ;
59     HttpSession JavaDoc session = httpRequest.getSession() ;
60     String JavaDoc action = httpRequest.getParameter(ACTION) ;
61     if(ADMIN.equals(action)) {
62       saveAdminPortal(httpRequest,pcontainer) ;
63     } else if(RETURN.equals(action)) {
64       HttpServletResponse JavaDoc httpResponse = (HttpServletResponse JavaDoc) response ;
65       restoreAdminPortal(httpRequest, httpResponse, pcontainer) ;
66       return ;
67     }
68     SessionContainer scontainer = (SessionContainer)pcontainer.getComponentInstance(session.getId()) ;
69     RequestInfo rinfo = null ;
70     if(scontainer != null) {
71       PortalResources appres =
72         (PortalResources)scontainer.getComponentInstanceOfType(PortalResources.class);
73       appres.getLocaleConfig().setInput(httpRequest) ;
74       rinfo = (RequestInfo) scontainer.getComponentInstanceOfType(RequestInfo.class);
75     }
76     try {
77       if (rinfo == null) {
78         String JavaDoc owner = RequestInfo.getPortalOwner(httpRequest) ;
79         scontainer = pcontainer.createSessionContainer(session.getId(), owner) ;
80         scontainer.getMonitor().setClientInfo(new HttpClientInfo(httpRequest)) ;
81         rinfo = (RequestInfo) scontainer.getComponentInstanceOfType(RequestInfo.class);
82       }
83       rinfo.init(httpRequest, RequestInfo.ADMIN_ACCESS) ;
84       scontainer.startActionLifcycle() ;
85       httpRequest.setAttribute("javax.servlet.include.path_info", rinfo.getViewId()) ;
86       chain.doFilter(request, response) ;
87     } catch (Throwable JavaDoc ex) {
88       ex = ExceptionUtil.getRootCause(ex) ;
89       log_.error("Error: ", ex) ;
90     } finally {
91       hserviceContainer_.closeAllSessions() ;
92       long end = System.currentTimeMillis() ;
93       ActionData data = new ActionData(rinfo.getPortalOwner(),
94                                        rinfo.getPageName(),
95                                        httpRequest.getMethod(),
96                                        end - start,
97                                        httpRequest.getParameterMap()) ;
98       scontainer.getMonitor().log(data) ;
99       scontainer.endActionLifcycle() ;
100       PortalContainer.setInstance(null) ;
101     }
102   }
103   
104   private void saveAdminPortal(HttpServletRequest JavaDoc httpRequest,
105                                PortalContainer pcontainer) {
106     HttpSession JavaDoc session = httpRequest.getSession() ;
107     SessionContainer scontainer = (SessionContainer)pcontainer.getComponentInstance(session.getId()) ;
108     Object JavaDoc jsfTree = session.getAttribute(RequestInfo.PORTAL_VIEW_ID) ;
109     Backup backup = new Backup(scontainer, jsfTree) ;
110     session.setAttribute("org.exoplatform.portal.backup", backup) ;
111     pcontainer.removeSessionContainer(session.getId()) ;
112     session.removeAttribute(RequestInfo.PORTAL_VIEW_ID) ;
113   }
114   
115   private void restoreAdminPortal(HttpServletRequest JavaDoc request,
116                                   HttpServletResponse JavaDoc response,
117                                   PortalContainer pcontainer) throws IOException JavaDoc {
118     HttpSession JavaDoc session = request.getSession() ;
119     Backup backup = (Backup)session.getAttribute("org.exoplatform.portal.backup") ;
120     session.removeAttribute("org.exoplatform.portal.backup") ;
121     SessionContainer scontainer = backup.scontainer_ ;
122     RequestInfo rinfo = (RequestInfo)scontainer.getComponentInstanceOfType(RequestInfo.class);
123     pcontainer.removeSessionContainer(session.getId()) ;
124     pcontainer.registerComponentInstance(session.getId(), scontainer) ;
125     session.setAttribute(rinfo.getViewId(), backup.jsfTree_) ;
126     response.sendRedirect(rinfo.getPageURI()) ;
127   }
128   
129   public void destroy() { }
130  
131   static class Backup {
132     SessionContainer scontainer_ ;
133     Object JavaDoc jsfTree_ ;
134     
135     public Backup(SessionContainer scontainer, Object JavaDoc jsfTree) {
136       scontainer_ = scontainer;
137       jsfTree_ = jsfTree ;
138     }
139   }
140 }
Popular Tags