1 | |
|
2 | |
|
3 | |
|
4 | |
|
5 | |
|
6 | |
|
7 | |
|
8 | |
|
9 | |
|
10 | |
|
11 | |
|
12 | |
|
13 | |
|
14 | |
|
15 | |
|
16 | |
|
17 | |
|
18 | |
|
19 | |
package org.apache.myfaces.resource; |
20 | |
|
21 | |
import java.io.InputStream; |
22 | |
import java.net.URL; |
23 | |
|
24 | |
import javax.faces.application.ProjectStage; |
25 | |
import javax.faces.context.FacesContext; |
26 | |
|
27 | |
import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFWebConfigParam; |
28 | |
import org.apache.myfaces.shared.resource.AliasResourceMetaImpl; |
29 | |
import org.apache.myfaces.shared.resource.ResourceLoader; |
30 | |
import org.apache.myfaces.shared.resource.ResourceMeta; |
31 | |
import org.apache.myfaces.shared.resource.ResourceMetaImpl; |
32 | |
import org.apache.myfaces.shared.util.ClassUtils; |
33 | |
import org.apache.myfaces.shared.util.WebConfigParamUtils; |
34 | |
import org.apache.myfaces.shared.renderkit.html.util.ResourceUtils; |
35 | |
|
36 | |
|
37 | |
|
38 | |
|
39 | |
public class InternalClassLoaderResourceLoader extends ResourceLoader |
40 | |
{ |
41 | |
|
42 | |
|
43 | |
|
44 | |
|
45 | |
|
46 | |
|
47 | |
|
48 | |
@JSFWebConfigParam(since = "2.0.1", defaultValue = "false", expectedValues = "true,false", group = "render") |
49 | |
public static final String USE_MULTIPLE_JS_FILES_FOR_JSF_UNCOMPRESSED_JS |
50 | |
= "org.apache.myfaces.USE_MULTIPLE_JS_FILES_FOR_JSF_UNCOMPRESSED_JS"; |
51 | |
|
52 | |
|
53 | |
|
54 | |
|
55 | |
|
56 | |
|
57 | |
|
58 | |
|
59 | |
|
60 | |
|
61 | |
|
62 | |
|
63 | |
@JSFWebConfigParam(since = "2.0.10,2.1.4", defaultValue = "normal", |
64 | |
expectedValues = "normal, minimal-modern, minimal", group = "render") |
65 | |
public static final String MYFACES_JSF_MODE = "org.apache.myfaces.JSF_JS_MODE"; |
66 | |
|
67 | |
private final boolean _useMultipleJsFilesForJsfUncompressedJs; |
68 | |
private final String _jsfMode; |
69 | |
private final boolean _developmentStage; |
70 | |
|
71 | |
public InternalClassLoaderResourceLoader(String prefix) |
72 | |
{ |
73 | 0 | super(prefix); |
74 | 0 | _useMultipleJsFilesForJsfUncompressedJs |
75 | |
= WebConfigParamUtils.getBooleanInitParameter(FacesContext.getCurrentInstance().getExternalContext(), |
76 | |
USE_MULTIPLE_JS_FILES_FOR_JSF_UNCOMPRESSED_JS, false); |
77 | |
|
78 | 0 | _jsfMode = WebConfigParamUtils.getStringInitParameter(FacesContext.getCurrentInstance().getExternalContext(), |
79 | |
MYFACES_JSF_MODE, ResourceUtils.JSF_MYFACES_JSFJS_NORMAL); |
80 | 0 | _developmentStage = FacesContext.getCurrentInstance().isProjectStage(ProjectStage.Development); |
81 | 0 | } |
82 | |
|
83 | |
@Override |
84 | |
public String getLibraryVersion(String path) |
85 | |
{ |
86 | 0 | return null; |
87 | |
} |
88 | |
|
89 | |
@Override |
90 | |
public InputStream getResourceInputStream(ResourceMeta resourceMeta) |
91 | |
{ |
92 | |
InputStream is; |
93 | 0 | if (getPrefix() != null && !"".equals(getPrefix())) |
94 | |
{ |
95 | 0 | String name = getPrefix() + '/' + resourceMeta.getResourceIdentifier(); |
96 | 0 | is = getClassLoader().getResourceAsStream(name); |
97 | 0 | if (is == null) |
98 | |
{ |
99 | 0 | is = this.getClass().getClassLoader().getResourceAsStream(name); |
100 | |
} |
101 | 0 | return is; |
102 | |
} |
103 | |
else |
104 | |
{ |
105 | 0 | is = getClassLoader().getResourceAsStream(resourceMeta.getResourceIdentifier()); |
106 | 0 | if (is == null) |
107 | |
{ |
108 | 0 | is = this.getClass().getClassLoader().getResourceAsStream(resourceMeta.getResourceIdentifier()); |
109 | |
} |
110 | 0 | return is; |
111 | |
} |
112 | |
} |
113 | |
|
114 | |
public URL getResourceURL(String resourceId) |
115 | |
{ |
116 | |
URL url; |
117 | 0 | if (getPrefix() != null && !"".equals(getPrefix())) |
118 | |
{ |
119 | 0 | String name = getPrefix() + '/' + resourceId; |
120 | 0 | url = getClassLoader().getResource(name); |
121 | 0 | if (url == null) |
122 | |
{ |
123 | 0 | url = this.getClass().getClassLoader().getResource(name); |
124 | |
} |
125 | 0 | return url; |
126 | |
} |
127 | |
else |
128 | |
{ |
129 | 0 | url = getClassLoader().getResource(resourceId); |
130 | 0 | if (url == null) |
131 | |
{ |
132 | 0 | url = this.getClass().getClassLoader().getResource(resourceId); |
133 | |
} |
134 | 0 | return url; |
135 | |
} |
136 | |
} |
137 | |
|
138 | |
@Override |
139 | |
public URL getResourceURL(ResourceMeta resourceMeta) |
140 | |
{ |
141 | 0 | return getResourceURL(resourceMeta.getResourceIdentifier()); |
142 | |
} |
143 | |
|
144 | |
@Override |
145 | |
public String getResourceVersion(String path) |
146 | |
{ |
147 | 0 | return null; |
148 | |
} |
149 | |
|
150 | |
@Override |
151 | |
public ResourceMeta createResourceMeta(String prefix, String libraryName, String libraryVersion, |
152 | |
String resourceName, String resourceVersion) |
153 | |
{ |
154 | |
|
155 | 0 | final boolean javaxFacesLib = libraryName != null && |
156 | |
ResourceUtils.JAVAX_FACES_LIBRARY_NAME.equals(libraryName); |
157 | 0 | final boolean javaxFaces = javaxFacesLib && |
158 | |
ResourceUtils.JSF_JS_RESOURCE_NAME.equals(resourceName); |
159 | |
|
160 | 0 | if (javaxFaces) |
161 | |
{ |
162 | 0 | if (_developmentStage) |
163 | |
{ |
164 | 0 | if (_useMultipleJsFilesForJsfUncompressedJs) |
165 | |
{ |
166 | 0 | return new AliasResourceMetaImpl(prefix, libraryName, libraryVersion, |
167 | |
resourceName, resourceVersion, ResourceUtils.JSF_UNCOMPRESSED_JS_RESOURCE_NAME, true); |
168 | |
} |
169 | |
else |
170 | |
{ |
171 | |
|
172 | |
|
173 | |
|
174 | |
|
175 | 0 | return new AliasResourceMetaImpl(prefix, libraryName, libraryVersion, resourceName, resourceVersion, |
176 | |
"jsf-uncompressed-full.js", false); |
177 | |
} |
178 | |
} |
179 | 0 | else if (_jsfMode.equals(ResourceUtils.JSF_MYFACES_JSFJS_MINIMAL) ) |
180 | |
{ |
181 | 0 | return new AliasResourceMetaImpl(prefix, libraryName, libraryVersion, resourceName, resourceVersion, |
182 | |
ResourceUtils.JSF_MINIMAL_JS_RESOURCE_NAME, false); |
183 | |
} |
184 | 0 | else if (_jsfMode.equals(ResourceUtils.JSF_MYFACES_JSFJS_MINIMAL_MODERN) ) |
185 | |
{ |
186 | 0 | return new AliasResourceMetaImpl(prefix, libraryName, libraryVersion, resourceName, resourceVersion, |
187 | |
ResourceUtils.JSF_MINIMAL_MODERN_JS_RESOURCE_NAME, false); |
188 | |
} |
189 | |
else |
190 | |
{ |
191 | 0 | return null; |
192 | |
} |
193 | |
} |
194 | 0 | else if (javaxFacesLib && !_developmentStage && !_jsfMode.equals(ResourceUtils.JSF_MYFACES_JSFJS_NORMAL) && |
195 | |
(ResourceUtils.JSF_MYFACES_JSFJS_I18N.equals(resourceName) || |
196 | |
ResourceUtils.JSF_MYFACES_JSFJS_EXPERIMENTAL.equals(resourceName) || |
197 | |
ResourceUtils.JSF_MYFACES_JSFJS_LEGACY.equals(resourceName)) ) |
198 | |
{ |
199 | 0 | return new ResourceMetaImpl(prefix, libraryName, libraryVersion, resourceName, resourceVersion); |
200 | |
} |
201 | 0 | else if (_developmentStage && libraryName != null && |
202 | |
ResourceUtils.MYFACES_LIBRARY_NAME.equals(libraryName) && |
203 | |
ResourceUtils.MYFACES_JS_RESOURCE_NAME.equals(resourceName)) |
204 | |
{ |
205 | |
|
206 | 0 | return new AliasResourceMetaImpl(prefix, libraryName, libraryVersion, |
207 | |
resourceName, resourceVersion, ResourceUtils.MYFACES_JS_RESOURCE_NAME_UNCOMPRESSED, true); |
208 | |
} |
209 | 0 | else if (_developmentStage && libraryName != null && libraryName.startsWith("org.apache.myfaces.core")) |
210 | |
{ |
211 | 0 | return new ResourceMetaImpl(prefix, libraryName, libraryVersion, resourceName, resourceVersion); |
212 | |
} |
213 | |
else |
214 | |
{ |
215 | 0 | return null; |
216 | |
} |
217 | |
} |
218 | |
|
219 | |
|
220 | |
|
221 | |
|
222 | |
|
223 | |
|
224 | |
|
225 | |
protected ClassLoader getClassLoader() |
226 | |
{ |
227 | 0 | return ClassUtils.getContextClassLoader(); |
228 | |
} |
229 | |
|
230 | |
@Override |
231 | |
public boolean libraryExists(String libraryName) |
232 | |
{ |
233 | 0 | if (getPrefix() != null && !"".equals(getPrefix())) |
234 | |
{ |
235 | 0 | URL url = getClassLoader().getResource(getPrefix() + '/' + libraryName); |
236 | 0 | if (url == null) |
237 | |
{ |
238 | 0 | url = this.getClass().getClassLoader().getResource(getPrefix() + '/' + libraryName); |
239 | |
} |
240 | 0 | if (url != null) |
241 | |
{ |
242 | 0 | return true; |
243 | |
} |
244 | 0 | } |
245 | |
else |
246 | |
{ |
247 | 0 | URL url = getClassLoader().getResource(libraryName); |
248 | 0 | if (url == null) |
249 | |
{ |
250 | 0 | url = this.getClass().getClassLoader().getResource(libraryName); |
251 | |
} |
252 | 0 | if (url != null) |
253 | |
{ |
254 | 0 | return true; |
255 | |
} |
256 | |
} |
257 | 0 | return false; |
258 | |
} |
259 | |
|
260 | |
} |