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.lang.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 public String getOriginalURI() {
125 return originalURI;
126 }
127
128 public String getOriginalURL() {
129 return originalURL;
130 }
131
132 public void setOriginalURL(String originalURL) {
133 this.originalURL = originalURL;
134 }
135
136 public String getOriginalBrowserURI() {
137 return originalBrowserURI;
138 }
139
140 public String getOriginalBrowserURL() {
141 return originalBrowserURL;
142 }
143
144 public void setOriginalBrowserURL(String originalBrowserURL) {
145 this.originalBrowserURL = originalBrowserURL;
146 }
147
148 public void setCharacterEncoding(String characterEncoding) {
149 this.characterEncoding = characterEncoding;
150 }
151
152 public String getExtension() {
153 return extension;
154 }
155
156 public void setExtension(String extension) {
157 this.extension = extension;
158 }
159
160 public File getFile() {
161 return file;
162 }
163
164 public void setFile(File file) {
165 this.file = file;
166 }
167
168 public String getHandle() {
169 return handle;
170 }
171
172 public void setHandle(String handle) {
173 this.handle = handle;
174 }
175
176 public Node getMainContentNode() {
177 return mainContentNode;
178 }
179
180
181
182
183 public Content getMainContent() {
184 return ContentUtil.asContent(getMainContentNode());
185 }
186
187 public void setMainContentNode(final Node mainContentNode) {
188 this.mainContentNode = mainContentNode;
189 }
190
191
192
193
194 public void setMainContent(Content mainContent) {
195 setMainContentNode(mainContent == null ? null: mainContent.getJCRNode());
196 }
197
198 public Node getCurrentContentNode() {
199 return currentContentNode;
200 }
201
202
203
204
205 public Content getCurrentContent() {
206 return ContentUtil.asContent(getCurrentContentNode());
207 }
208
209 public void setCurrentContentNode(final Node currentContentNode) {
210 this.currentContentNode = currentContentNode;
211 }
212
213
214
215
216 public void setCurrentContent(Content currentContent) {
217 setCurrentContentNode(currentContent == null ? null : currentContent.getJCRNode());
218 }
219
220 public String getRepository() {
221 return repository;
222 }
223
224 public void setRepository(String repository) {
225 this.repository = repository;
226 }
227
228
229
230
231
232
233
234
235
236 public String getSelector() {
237 return selector;
238 }
239
240
241
242
243
244 public void setSelector(String selector) {
245 try {
246 this.selector = URLDecoder.decode(selector, getCharacterEncoding());
247 }
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 public Locale getLocale() {
276 if (locale == null) {
277 return MgnlContext.getLocale();
278 }
279
280 return locale;
281 }
282
283
284
285
286 public void setLocale(Locale locale) {
287 this.locale = locale;
288 }
289
290 public boolean isPreviewMode() {
291 return isPreviewMode;
292 }
293
294 public void setPreviewMode(boolean previewMode) {
295 isPreviewMode = previewMode;
296 }
297
298 public Channel getChannel() {
299 return channel;
300 }
301
302 public void setChannel(Channel channel) {
303 this.channel = channel;
304 }
305
306
307
308
309
310
311 protected String stripContextPathIfExists(String uri) {
312
313 String contextPath = MgnlContext.getContextPath();
314 if (uri != null && uri.startsWith(contextPath + "/")) {
315 return StringUtils.removeStart(uri, contextPath);
316 }
317 return uri;
318 }
319
320
321
322
323 public void resetURIs() {
324 this.originalURI = null;
325 this.originalURL = null;
326 this.originalBrowserURI = null;
327 this.originalBrowserURL = null;
328 this.currentURI = null;
329 }
330
331
332
333
334
335
336
337 public String[] getSelectors() {
338 return selectors;
339 }
340 }