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.ContentUtil;
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 handle;
62 private Node mainContentNode;
63 private Node currentContentNode;
64 private String repository;
65 private String selector;
66 private String[] selectors = new String[0];
67 private String templateName;
68 private Locale locale;
69 private boolean isPreviewMode;
70 private Channel channel = new Channel();
71
72 public void setOriginalURI(String originalURI) {
73 final String strippedURI = stripContextPathIfExists(originalURI);
74 if (this.originalURI != null && !this.originalURI.equals(strippedURI)) {
75 throw new IllegalStateException("Original URI can only be set once ! Existing value is \"" + this.originalURI + "\", tried to replace it with \"" + strippedURI + "\"");
76 }
77 this.originalURI = strippedURI;
78 }
79
80 public void setOriginalBrowserURI(String originalBrowserURI) {
81 final String strippedURI = stripContextPathIfExists(originalBrowserURI);
82 if (this.originalBrowserURI != null && !this.originalBrowserURI.equals(strippedURI)) {
83 throw new IllegalStateException("Original URI can only be set once ! Existing value is \"" + this.originalURI + "\", tried to replace it with \"" + strippedURI + "\"");
84 }
85 this.originalBrowserURI = strippedURI;
86 }
87
88 public void setCurrentURI(String currentURI) {
89 this.currentURI = stripContextPathIfExists(currentURI);
90 }
91
92 public void setQueryString(String queryString) {
93 this.queryString = queryString;
94 }
95
96
97
98
99 public String getQueryString() {
100 return queryString;
101 }
102
103
104
105
106
107 public String getCurrentURI() {
108 return currentURI;
109 }
110
111 public String getCharacterEncoding() {
112 if (characterEncoding == null) {
113 throw new IllegalStateException("Character encoding hasn't been setup in AggregationState yet !");
114 }
115 return characterEncoding;
116 }
117
118
119
120
121
122
123
124
125 public String getOriginalURI() {
126 return originalURI;
127 }
128
129 public String getOriginalURL() {
130 return originalURL;
131 }
132
133 public void setOriginalURL(String originalURL) {
134 this.originalURL = originalURL;
135 }
136
137 public String getOriginalBrowserURI() {
138 return originalBrowserURI;
139 }
140
141 public String getOriginalBrowserURL() {
142 return originalBrowserURL;
143 }
144
145 public void setOriginalBrowserURL(String originalBrowserURL) {
146 this.originalBrowserURL = originalBrowserURL;
147 }
148
149 public void setCharacterEncoding(String characterEncoding) {
150 this.characterEncoding = characterEncoding;
151 }
152
153 public String getExtension() {
154 return extension;
155 }
156
157 public void setExtension(String extension) {
158 this.extension = extension;
159 }
160
161 public File getFile() {
162 return file;
163 }
164
165 public void setFile(File file) {
166 this.file = file;
167 }
168
169 public String getHandle() {
170 return handle;
171 }
172
173 public void setHandle(String handle) {
174 this.handle = handle;
175 }
176
177 public Node getMainContentNode() {
178 return mainContentNode;
179 }
180
181
182
183
184 public Content getMainContent() {
185 return ContentUtil.asContent(getMainContentNode());
186 }
187
188 public void setMainContentNode(final Node mainContentNode) {
189 this.mainContentNode = mainContentNode;
190 }
191
192
193
194
195 public void setMainContent(Content mainContent) {
196 setMainContentNode(mainContent == null ? null : mainContent.getJCRNode());
197 }
198
199 public Node getCurrentContentNode() {
200 return currentContentNode;
201 }
202
203
204
205
206 public Content getCurrentContent() {
207 return ContentUtil.asContent(getCurrentContentNode());
208 }
209
210 public void setCurrentContentNode(final Node currentContentNode) {
211 this.currentContentNode = currentContentNode;
212 }
213
214
215
216
217 public void setCurrentContent(Content currentContent) {
218 setCurrentContentNode(currentContent == null ? null : currentContent.getJCRNode());
219 }
220
221 public String getRepository() {
222 return repository;
223 }
224
225 public void setRepository(String repository) {
226 this.repository = repository;
227 }
228
229
230
231
232
233
234
235
236
237 public String getSelector() {
238 return selector;
239 }
240
241
242
243
244
245 public void setSelector(String selector) {
246 try {
247 this.selector = URLDecoder.decode(selector, getCharacterEncoding());
248 } catch (UnsupportedEncodingException e) {
249 this.selector = selector;
250 }
251
252 if (StringUtils.isNotEmpty(selector)) {
253 selectors = this.selector.split(Path.SELECTOR_DELIMITER);
254 }
255 for (String sel : selectors) {
256 final String[] splitSelector = sel.split("=");
257 if (splitSelector.length == 2) {
258 MgnlContext.setAttribute(splitSelector[0], splitSelector[1]);
259 }
260 }
261 }
262
263 public String getTemplateName() {
264 return templateName;
265 }
266
267 public void setTemplateName(String templateName) {
268 this.templateName = templateName;
269 }
270
271
272
273
274
275
276 public Locale getLocale() {
277 if (locale == null) {
278 return MgnlContext.getLocale();
279 }
280
281 return locale;
282 }
283
284
285
286
287 public void setLocale(Locale locale) {
288 this.locale = locale;
289 }
290
291 public boolean isPreviewMode() {
292 return isPreviewMode;
293 }
294
295 public void setPreviewMode(boolean previewMode) {
296 isPreviewMode = previewMode;
297 }
298
299 public Channel getChannel() {
300 return channel;
301 }
302
303 public void setChannel(Channel channel) {
304 this.channel = channel;
305 }
306
307
308
309
310
311
312
313 protected String stripContextPathIfExists(String uri) {
314
315 String contextPath = MgnlContext.getContextPath();
316 if (uri != null && uri.startsWith(contextPath + "/")) {
317 return StringUtils.removeStart(uri, contextPath);
318 }
319 return uri;
320 }
321
322
323
324
325 public void resetURIs() {
326 this.originalURI = null;
327 this.originalURL = null;
328 this.originalBrowserURI = null;
329 this.originalBrowserURL = null;
330 this.currentURI = null;
331 }
332
333
334
335
336
337
338
339
340 public String[] getSelectors() {
341 return selectors;
342 }
343 }