1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.cms.core;
35
36 import info.magnolia.cms.beans.runtime.File;
37 import info.magnolia.cms.util.SelectorUtil;
38 import info.magnolia.context.MgnlContext;
39
40 import java.io.UnsupportedEncodingException;
41 import java.net.URLDecoder;
42 import java.util.Locale;
43
44 import javax.jcr.Node;
45
46 import org.apache.commons.lang3.StringUtils;
47
48
49
50
51 public class AggregationState {
52 private String characterEncoding;
53 private String originalURI;
54 private String originalURL;
55 private String originalBrowserURI;
56 private String originalBrowserURL;
57 private String currentURI;
58 private String queryString;
59 private String extension;
60 private File file;
61 private String uriPrefix;
62 private String handle;
63 private Node mainContentNode;
64 private Node currentContentNode;
65 private String repository;
66 private String selector;
67 private String[] selectors = new String[0];
68 private String templateName;
69 private Locale locale;
70 private boolean isPreviewMode;
71 private Channel.html#Channel">Channel channel = new Channel();
72
73 public void setOriginalURI(String originalURI) {
74 final String strippedURI = stripContextPathIfExists(originalURI);
75 if (this.originalURI != null && !this.originalURI.equals(strippedURI)) {
76 throw new IllegalStateException("Original URI can only be set once ! Existing value is \"" + this.originalURI + "\", tried to replace it with \"" + strippedURI + "\"");
77 }
78 this.originalURI = strippedURI;
79 }
80
81 public void setOriginalBrowserURI(String originalBrowserURI) {
82 final String strippedURI = stripContextPathIfExists(originalBrowserURI);
83 if (this.originalBrowserURI != null && !this.originalBrowserURI.equals(strippedURI)) {
84 throw new IllegalStateException("Original URI can only be set once ! Existing value is \"" + this.originalURI + "\", tried to replace it with \"" + strippedURI + "\"");
85 }
86 this.originalBrowserURI = strippedURI;
87 }
88
89 public void setCurrentURI(String currentURI) {
90
91
92
93 if (currentURI != null && !currentURI.equals(getCurrentURI())) {
94 this.currentURI = stripContextPathIfExists(currentURI);
95 }
96 }
97
98 public void setQueryString(String queryString) {
99 this.queryString = queryString;
100 }
101
102
103
104
105 public String getQueryString() {
106 return queryString;
107 }
108
109
110
111
112
113 public String getCurrentURI() {
114 return currentURI;
115 }
116
117 public String getCharacterEncoding() {
118 if (characterEncoding == null) {
119 throw new IllegalStateException("Character encoding hasn't been setup in AggregationState yet !");
120 }
121 return characterEncoding;
122 }
123
124
125
126
127
128
129
130
131 public String getOriginalURI() {
132 return originalURI;
133 }
134
135 public String getOriginalURL() {
136 return originalURL;
137 }
138
139 public void setOriginalURL(String originalURL) {
140 this.originalURL = originalURL;
141 }
142
143 public String getOriginalBrowserURI() {
144 return originalBrowserURI;
145 }
146
147 public String getOriginalBrowserURL() {
148 return originalBrowserURL;
149 }
150
151 public void setOriginalBrowserURL(String originalBrowserURL) {
152 this.originalBrowserURL = originalBrowserURL;
153 }
154
155 public void setCharacterEncoding(String characterEncoding) {
156 this.characterEncoding = characterEncoding;
157 }
158
159 public String getExtension() {
160 return extension;
161 }
162
163 public void setExtension(String extension) {
164 this.extension = extension;
165 }
166
167 public File getFile() {
168 return file;
169 }
170
171 public void setFile(File file) {
172 this.file = file;
173 }
174
175 public String getUriPrefix() {
176 return uriPrefix;
177 }
178
179 public void setUriPrefix(String uriPrefix) {
180 this.uriPrefix = uriPrefix;
181 }
182
183 public String getHandle() {
184 return handle;
185 }
186
187 public void setHandle(String handle) {
188 this.handle = handle;
189 }
190
191 public Node getMainContentNode() {
192 return mainContentNode;
193 }
194
195 public void setMainContentNode(final Node mainContentNode) {
196 this.mainContentNode = mainContentNode;
197 }
198
199 public Node getCurrentContentNode() {
200 return currentContentNode;
201 }
202
203 public void setCurrentContentNode(final Node currentContentNode) {
204 this.currentContentNode = currentContentNode;
205 }
206
207 public String getRepository() {
208 return repository;
209 }
210
211 public void setRepository(String repository) {
212 this.repository = repository;
213 }
214
215
216
217
218
219
220
221
222
223 public String getSelector() {
224 return selector;
225 }
226
227
228
229
230
231 public void setSelector(String selector) {
232 try {
233 this.selector = URLDecoder.decode(selector, getCharacterEncoding());
234 } catch (UnsupportedEncodingException e) {
235 this.selector = selector;
236 }
237
238
239 for (String sel : selectors) {
240 final String[] splitSelector = sel.split("=");
241 if (splitSelector.length == 2) {
242 MgnlContext.removeAttribute(splitSelector[0]);
243 }
244 }
245
246 if (StringUtils.isNotEmpty(selector)) {
247 selectors = this.selector.split(SelectorUtil.SELECTOR_DELIMITER);
248 } else {
249 selectors = new String[0];
250 }
251
252 for (String sel : selectors) {
253 final String[] splitSelector = sel.split("=");
254 if (splitSelector.length == 2) {
255 MgnlContext.setAttribute(splitSelector[0], splitSelector[1]);
256 }
257 }
258 }
259
260 public String getTemplateName() {
261 return templateName;
262 }
263
264 public void setTemplateName(String templateName) {
265 this.templateName = templateName;
266 }
267
268
269
270
271
272
273 public Locale getLocale() {
274 if (locale == null) {
275 return MgnlContext.getLocale();
276 }
277
278 return locale;
279 }
280
281
282
283
284 public void setLocale(Locale locale) {
285 this.locale = locale;
286 }
287
288 public boolean isPreviewMode() {
289 return isPreviewMode;
290 }
291
292 public void setPreviewMode(boolean previewMode) {
293 isPreviewMode = previewMode;
294 }
295
296 public Channel getChannel() {
297 return channel;
298 }
299
300 public void setChannel(Channel channel) {
301 this.channel = channel;
302 }
303
304
305
306
307
308
309
310 protected String stripContextPathIfExists(String uri) {
311
312 String contextPath = MgnlContext.getContextPath();
313 if (uri != null && uri.startsWith(contextPath + "/")) {
314 return StringUtils.removeStart(uri, contextPath);
315 }
316 return uri;
317 }
318
319
320
321
322 public void resetURIs() {
323 this.originalURI = null;
324 this.originalURL = null;
325 this.originalBrowserURI = null;
326 this.originalBrowserURL = null;
327 this.currentURI = null;
328 }
329
330
331
332
333
334
335
336
337 public String[] getSelectors() {
338 return selectors;
339 }
340 }