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.context.MgnlContext;
38
39 import java.io.UnsupportedEncodingException;
40 import java.net.URLDecoder;
41 import java.util.Locale;
42
43 import org.apache.commons.lang.StringUtils;
44
45
46
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 extension;
59 private File file;
60 private String handle;
61 private Content mainContent;
62 private Content currentContent;
63 private String repository;
64 private String selector;
65 private String templateName;
66 private Locale locale;
67 private boolean isPreviewMode;
68 private String renderableVariation;
69
70 public void setOriginalURI(String originalURI) {
71 final String strippedURI = stripContextPathIfExists(originalURI);
72 if (this.originalURI != null && !this.originalURI.equals(strippedURI)) {
73 throw new IllegalStateException("Original URI can only be set once ! Existing value is \"" + this.originalURI + "\", tried to replace it with \"" + strippedURI + "\"");
74 }
75 this.originalURI = strippedURI;
76 }
77
78 public void setOriginalBrowserURI(String originalBrowserURI) {
79 final String strippedURI = stripContextPathIfExists(originalBrowserURI);
80 if (this.originalBrowserURI != null && !this.originalBrowserURI.equals(strippedURI)) {
81 throw new IllegalStateException("Original URI can only be set once ! Existing value is \"" + this.originalURI + "\", tried to replace it with \"" + strippedURI + "\"");
82 }
83 this.originalBrowserURI= strippedURI;
84 }
85
86 public void setCurrentURI(String currentURI) {
87 this.currentURI = stripContextPathIfExists(currentURI);
88 }
89
90
91
92
93
94 public String getCurrentURI() {
95 return currentURI;
96 }
97
98 public String getCharacterEncoding() {
99 if (characterEncoding == null) {
100 throw new IllegalStateException("Character encoding hasn't been setup in AggregationState yet !");
101 }
102 return characterEncoding;
103 }
104
105
106
107
108
109
110
111 public String getOriginalURI() {
112 return originalURI;
113 }
114
115 public String getOriginalURL() {
116 return originalURL;
117 }
118
119 public void setOriginalURL(String originalURL) {
120 this.originalURL = originalURL;
121 }
122
123 public String getOriginalBrowserURI() {
124 return originalBrowserURI;
125 }
126
127 public String getOriginalBrowserURL() {
128 return originalBrowserURL;
129 }
130
131 public void setOriginalBrowserURL(String originalBrowserURL) {
132 this.originalBrowserURL = originalBrowserURL;
133 }
134
135 public void setCharacterEncoding(String characterEncoding) {
136 this.characterEncoding = characterEncoding;
137 }
138
139 public String getExtension() {
140 return extension;
141 }
142
143 public void setExtension(String extension) {
144 this.extension = extension;
145 }
146
147 public File getFile() {
148 return file;
149 }
150
151 public void setFile(File file) {
152 this.file = file;
153 }
154
155 public String getHandle() {
156 return handle;
157 }
158
159 public void setHandle(String handle) {
160 this.handle = handle;
161 }
162
163 public Content getMainContent() {
164 return mainContent;
165 }
166
167 public void setMainContent(Content mainContent) {
168 this.mainContent = mainContent;
169 }
170
171 public Content getCurrentContent() {
172 return currentContent;
173 }
174
175 public void setCurrentContent(Content currentContent) {
176 this.currentContent = currentContent;
177 }
178
179 public String getRepository() {
180 return repository;
181 }
182
183 public void setRepository(String repository) {
184 this.repository = repository;
185 }
186
187
188
189
190 public String getSelector() {
191 return selector;
192 }
193
194
195
196
197
198 public void setSelector(String selector) {
199 try {
200 this.selector = URLDecoder.decode(selector, getCharacterEncoding());
201 }
202 catch (UnsupportedEncodingException e) {
203 this.selector = selector;
204 }
205 }
206
207 public String getTemplateName() {
208 return templateName;
209 }
210
211 public void setTemplateName(String templateName) {
212 this.templateName = templateName;
213 }
214
215
216
217
218
219 public Locale getLocale() {
220 if (locale == null) {
221 return MgnlContext.getLocale();
222 }
223
224 return locale;
225 }
226
227
228
229
230 public void setLocale(Locale locale) {
231 this.locale = locale;
232 }
233
234 public boolean isPreviewMode() {
235 return isPreviewMode;
236 }
237
238 public void setPreviewMode(boolean previewMode) {
239 isPreviewMode = previewMode;
240 }
241
242
243
244
245 public String getRenderableVariation() {
246 return renderableVariation;
247 }
248
249
250
251
252 public void setRenderableVariation(String renderableVariation) {
253 this.renderableVariation = renderableVariation;
254 }
255
256
257
258
259
260
261 protected String stripContextPathIfExists(String uri) {
262
263 String contextPath = MgnlContext.getContextPath();
264 if (uri != null && uri.startsWith(contextPath + "/")) {
265 return StringUtils.removeStart(uri, contextPath);
266 }
267 return uri;
268 }
269
270
271
272
273 public void resetURIs() {
274 this.originalURI = null;
275 this.originalURL = null;
276 this.originalBrowserURI = null;
277 this.originalBrowserURL = null;
278 this.currentURI = null;
279 }
280 }