1
2
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
26
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
138
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
146 }
147
148 public void execute(FacesContext context) throws FacesException {
149
150 }
151
152 public PhaseListener[] getPhaseListeners() {
153 return null;
154 }
155
156 public void removePhaseListener(PhaseListener listener) {
157
158 }
159
160 public void render(FacesContext context) throws FacesException {
161
162 }
163 }
164 }