1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.tomahawk.util;
20
21 import java.util.HashMap;
22 import java.util.Map;
23
24 import javax.faces.application.Resource;
25 import javax.faces.application.ResourceHandler;
26 import javax.faces.component.UIOutput;
27 import javax.faces.context.FacesContext;
28
29 import org.apache.myfaces.shared_tomahawk.renderkit.JSFAttr;
30 import org.apache.myfaces.shared_tomahawk.renderkit.html.HTML;
31 import org.apache.myfaces.shared_tomahawk.renderkit.html.util.ResourceUtils;
32
33
34
35
36
37
38
39
40
41 public class TomahawkResourceUtils
42 {
43 public static final String HEAD_LOCATION = "head";
44 public static final String BODY_LOCATION = HTML.BODY_ELEM;
45 public static final String FORM_LOCATION = HTML.FORM_ELEM;
46 public static final String ADDED_RESOURCES_SET = "org.apache.myfaces.ADDED_RESOURCES_SET";
47
48
49
50
51
52
53
54
55 @SuppressWarnings("unchecked")
56 private static Map<String, Boolean> getAddedResources(FacesContext facesContext)
57 {
58 Map<String, Boolean> map = (Map<String, Boolean>) facesContext.getAttributes().get(ADDED_RESOURCES_SET);
59 if (map == null)
60 {
61 map = new HashMap<String, Boolean>();
62 facesContext.getAttributes().put(ADDED_RESOURCES_SET,map);
63 }
64 return map;
65 }
66
67 public static void resetAddedResources(FacesContext facesContext)
68 {
69 facesContext.getAttributes().remove(ADDED_RESOURCES_SET);
70 }
71
72 public static void markResourceAsAdded(FacesContext facesContext, String libraryName, String resourceName)
73 {
74 getAddedResources(facesContext).put(libraryName != null ? libraryName+'/'+resourceName : resourceName, Boolean.TRUE);
75 }
76
77 public static boolean isAddedResource(FacesContext facesContext, String libraryName, String resourceName)
78 {
79 return getAddedResources(facesContext).containsKey(libraryName != null ? libraryName+'/'+resourceName : resourceName);
80 }
81
82
83
84
85
86
87
88
89
90 public static void addOutputScriptResource(final FacesContext facesContext, final String libraryName, final String resourceName)
91 {
92 if (isAddedResource(facesContext, libraryName, resourceName))
93 {
94 return;
95 }
96
97 UIOutput outputScript = (UIOutput) facesContext.getApplication().
98 createComponent(facesContext, ResourceUtils.JAVAX_FACES_OUTPUT_COMPONENT_TYPE, ResourceUtils.DEFAULT_SCRIPT_RENDERER_TYPE);
99 outputScript.getAttributes().put(JSFAttr.LIBRARY_ATTR, libraryName);
100 outputScript.getAttributes().put(JSFAttr.NAME_ATTR, resourceName);
101 outputScript.setTransient(true);
102 outputScript.setId(facesContext.getViewRoot().createUniqueId());
103 facesContext.getViewRoot().addComponentResource(facesContext, outputScript);
104
105 markResourceAsAdded(facesContext, libraryName, resourceName);
106 }
107
108 public static void addOutputScriptResource(final FacesContext facesContext, final String libraryName, final String resourceName, final String target)
109 {
110 if (isAddedResource(facesContext, libraryName, resourceName))
111 {
112 return;
113 }
114
115 UIOutput outputScript = (UIOutput) facesContext.getApplication().
116 createComponent(facesContext, ResourceUtils.JAVAX_FACES_OUTPUT_COMPONENT_TYPE, ResourceUtils.DEFAULT_SCRIPT_RENDERER_TYPE);
117 outputScript.getAttributes().put(JSFAttr.LIBRARY_ATTR, libraryName);
118 outputScript.getAttributes().put(JSFAttr.NAME_ATTR, resourceName);
119 outputScript.setTransient(true);
120 outputScript.setId(facesContext.getViewRoot().createUniqueId());
121 facesContext.getViewRoot().addComponentResource(facesContext, outputScript);
122
123 markResourceAsAdded(facesContext, libraryName, resourceName);
124 }
125
126 public static void addOutputStylesheetResource(final FacesContext facesContext, final String libraryName, final String resourceName)
127 {
128 if (isAddedResource(facesContext, libraryName, resourceName))
129 {
130 return;
131 }
132
133 UIOutput outputStylesheet = (UIOutput) facesContext.getApplication().
134 createComponent(facesContext, ResourceUtils.JAVAX_FACES_OUTPUT_COMPONENT_TYPE, ResourceUtils.DEFAULT_STYLESHEET_RENDERER_TYPE);
135 outputStylesheet.getAttributes().put(JSFAttr.LIBRARY_ATTR, libraryName);
136 outputStylesheet.getAttributes().put(JSFAttr.NAME_ATTR, resourceName);
137 outputStylesheet.setTransient(true);
138 outputStylesheet.setId(facesContext.getViewRoot().createUniqueId());
139 facesContext.getViewRoot().addComponentResource(facesContext, outputStylesheet);
140
141 markResourceAsAdded(facesContext, libraryName, resourceName);
142 }
143
144 public static void addInlineOutputStylesheetResource(final FacesContext facesContext, Object value)
145 {
146 UIOutput stylesheet = (UIOutput) facesContext.getApplication().createComponent(facesContext,
147 ResourceUtils.JAVAX_FACES_OUTPUT_COMPONENT_TYPE, ResourceUtils.JAVAX_FACES_TEXT_RENDERER_TYPE);
148 UIOutput outputStylesheet = (UIOutput) facesContext.getApplication().
149 createComponent(facesContext, ResourceUtils.JAVAX_FACES_OUTPUT_COMPONENT_TYPE, ResourceUtils.DEFAULT_STYLESHEET_RENDERER_TYPE);
150 stylesheet.setValue( value);
151 stylesheet.setTransient(true);
152 stylesheet.setId(facesContext.getViewRoot().createUniqueId());
153 outputStylesheet.getChildren().add(stylesheet);
154 outputStylesheet.setTransient(true);
155 outputStylesheet.setId(facesContext.getViewRoot().createUniqueId());
156 facesContext.getViewRoot().addComponentResource(facesContext, outputStylesheet);
157 }
158
159 public static void addInlineOutputScriptResource(final FacesContext facesContext, String target, Object value)
160 {
161 UIOutput script = (UIOutput) facesContext.getApplication().createComponent(facesContext,
162 ResourceUtils.JAVAX_FACES_OUTPUT_COMPONENT_TYPE, ResourceUtils.JAVAX_FACES_TEXT_RENDERER_TYPE);
163 UIOutput outputScript = (UIOutput) facesContext.getApplication().
164 createComponent(facesContext, ResourceUtils.JAVAX_FACES_OUTPUT_COMPONENT_TYPE, ResourceUtils.DEFAULT_SCRIPT_RENDERER_TYPE);
165 if (target != null)
166 {
167 script.getAttributes().put(JSFAttr.TARGET_ATTR, target);
168 }
169 script.setValue( value);
170 script.setTransient(true);
171 script.setId(facesContext.getViewRoot().createUniqueId());
172 outputScript.getChildren().add(script);
173 outputScript.setTransient(true);
174 outputScript.setId(facesContext.getViewRoot().createUniqueId());
175 facesContext.getViewRoot().addComponentResource(facesContext, outputScript);
176 }
177
178 public static String getIconSrc(final FacesContext facesContext, final String libraryName, final String resourceName)
179 {
180 final ResourceHandler resourceHandler = facesContext.getApplication().getResourceHandler();
181 final Resource resource;
182
183 if ((libraryName != null) && (libraryName.length() > 0))
184 {
185 resource = resourceHandler.createResource(resourceName, libraryName);
186 }
187 else
188 {
189 resource = resourceHandler.createResource(resourceName);
190 }
191
192 if (resource == null)
193 {
194 return "RES_NOT_FOUND";
195 }
196 else
197 {
198 return resource.getRequestPath();
199 }
200 }
201 }