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