View Javadoc

1   /*
2    * $Id: ServletTools.java,v 1.18 2011/06/16 09:29:41 jbmeslin Exp $
3    * 
4    */
5   package org.rcfaces.core.internal.util;
6   
7   import java.util.Locale;
8   
9   import javax.faces.FacesException;
10  import javax.faces.FactoryFinder;
11  import javax.faces.context.FacesContext;
12  import javax.faces.context.FacesContextFactory;
13  import javax.faces.event.PhaseListener;
14  import javax.faces.lifecycle.Lifecycle;
15  import javax.servlet.ServletContext;
16  import javax.servlet.http.HttpServletRequest;
17  import javax.servlet.http.HttpServletResponse;
18  
19  import org.apache.commons.logging.Log;
20  import org.apache.commons.logging.LogFactory;
21  import org.rcfaces.core.internal.util.WebXmlParser.ServletBean;
22  
23  /**
24   * 
25   * @author Olivier Oeuillot (latest modification by $Author: jbmeslin $)
26   * @version $Revision: 1.18 $ $Date: 2011/06/16 09:29:41 $
27   */
28  public class ServletTools {
29      private static final String REVISION = "$Revision: 1.18 $";
30  
31      private static final Log LOG = LogFactory.getLog(ServletTools.class);
32  
33      public static String computeResourceURI(ServletContext servletContext,
34              String defaultURI, Class servletClass) {
35  
36          WebXmlParser parser = new WebXmlParser(servletContext);
37  
38          ServletBean servlets[] = parser.getServletsByClassName(servletClass
39                  .getName());
40  
41          if (LOG.isDebugEnabled()) {
42              LOG
43                      .debug("Search pattern associated to servlet class '"
44                              + servletClass + "' => " + servlets.length
45                              + " response(s)");
46          }
47  
48          if (servlets.length < 1) {
49              if (LOG.isDebugEnabled()) {
50                  LOG.debug("Return default uri ('" + defaultURI
51                          + "') for pattern of servlet '" + servletClass + "'.");
52              }
53  
54              return defaultURI;
55          }
56  
57          for (int i = 0; i < servlets.length; i++) {
58              ServletBean servlet = servlets[i];
59  
60              String patterns[] = servlet.listUrlPatterns();
61              if (patterns.length < 1) {
62                  continue;
63              }
64  
65              for (int j = 0; j < patterns.length; j++) {
66                  String pattern = patterns[j];
67  
68                  if (pattern.startsWith("/") == false
69                          || pattern.endsWith("/*") == false) {
70  
71                      if (LOG.isDebugEnabled()) {
72                          LOG.debug("Refuse pattern '" + pattern + "'");
73                      }
74                      continue;
75                  }
76  
77                  if (LOG.isDebugEnabled()) {
78                      LOG.debug("Accept pattern '" + pattern + "'");
79                  }
80  
81                  return pattern.substring(0, pattern.length() - 2);
82              }
83          }
84  
85          if (LOG.isDebugEnabled()) {
86              LOG.debug("Return default uri ('" + defaultURI
87                      + "') for pattern of servlet '" + servletClass + "'.");
88          }
89  
90          return defaultURI;
91      }
92  
93      public static Locale getDefaultLocale(ServletContext servletContext,
94              HttpServletRequest request, HttpServletResponse response) {
95  
96          boolean releaseContext = false;
97          FacesContext facesContext = FacesContext.getCurrentInstance();
98  
99          if (facesContext == null) {
100             FacesContextFactory facesContextFactory = (FacesContextFactory) FactoryFinder
101                     .getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
102 
103             Lifecycle lifeCycle = EmptyLifecycle.SINGLETON;
104 
105             facesContext = facesContextFactory.getFacesContext(servletContext,
106                     request, response, lifeCycle);
107             releaseContext = true;
108         }
109 
110         Locale locale;
111         try {
112             locale = facesContext.getApplication().getDefaultLocale();
113 
114         } finally {
115             if (releaseContext) {
116                 facesContext.release();
117             }
118         }
119 
120         if (locale != null) {
121             if (LOG.isDebugEnabled()) {
122                 LOG.debug("Application default locale: " + locale);
123             }
124             return locale;
125         }
126 
127         if (LOG.isDebugEnabled()) {
128             LOG.debug("No application default locale, use system default: "
129                     + locale);
130         }
131         return Locale.getDefault();
132 
133     }
134 
135     /**
136      * 
137      * @author Olivier Oeuillot (latest modification by $Author: jbmeslin $)
138      * @version $Revision: 1.18 $ $Date: 2011/06/16 09:29:41 $
139      */
140     private static final class EmptyLifecycle extends Lifecycle {
141 
142         public static final Lifecycle SINGLETON = new EmptyLifecycle();
143 
144         public void addPhaseListener(PhaseListener listener) {
145             // System.out.println("Add phase listener !");
146         }
147 
148         public void execute(FacesContext context) throws FacesException {
149             // System.out.println("EXECUTE !");
150         }
151 
152         public PhaseListener[] getPhaseListeners() {
153             return null;
154         }
155 
156         public void removePhaseListener(PhaseListener listener) {
157             // System.out.println("Remove phase listener !");
158         }
159 
160         public void render(FacesContext context) throws FacesException {
161             // System.out.println("Render !");
162         }
163     }
164 }