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.context;
35
36 import info.magnolia.cms.core.HierarchyManager;
37 import info.magnolia.cms.core.search.QueryManager;
38 import info.magnolia.cms.i18n.Messages;
39 import info.magnolia.cms.i18n.MessagesManager;
40 import info.magnolia.cms.security.AccessManager;
41 import info.magnolia.cms.security.PermissionUtil;
42 import info.magnolia.cms.security.Security;
43 import info.magnolia.cms.security.User;
44 import info.magnolia.cms.util.HierarchyManagerUtil;
45 import info.magnolia.jcr.RuntimeRepositoryException;
46
47 import java.io.Serializable;
48 import java.util.Collection;
49 import java.util.HashMap;
50 import java.util.Iterator;
51 import java.util.Locale;
52 import java.util.Map;
53 import java.util.Set;
54
55 import javax.jcr.LoginException;
56 import javax.jcr.RepositoryException;
57 import javax.jcr.Session;
58 import javax.security.auth.Subject;
59
60 import org.slf4j.Logger;
61 import org.slf4j.LoggerFactory;
62
63
64
65
66
67 public abstract class AbstractContext implements Context, Serializable {
68 private static final Logger log = LoggerFactory.getLogger(AbstractContext.class);
69
70 @Override
71 public User getUser() {
72 return Security.getSystemUser();
73 }
74
75 @Override
76 public Subject getSubject() {
77 return Security.getSystemSubject();
78 }
79
80
81
82
83 protected Locale locale;
84
85 private AttributeStrategy attributeStrategy;
86
87 private JCRSessionStrategy repositoryStrategy;
88
89 public AttributeStrategy getAttributeStrategy() {
90 return attributeStrategy;
91 }
92
93 public void setAttributeStrategy(AttributeStrategy strategy) {
94 this.attributeStrategy = strategy;
95 }
96
97 public JCRSessionStrategy getRepositoryStrategy() {
98 return repositoryStrategy;
99 }
100
101 public void setRepositoryStrategy(JCRSessionStrategy strategy) {
102 this.repositoryStrategy = strategy;
103 }
104
105 @Override
106 public Object getAttribute(String name, int scope) {
107 return getAttributeStrategy().getAttribute(name, scope);
108 }
109
110 @Override
111 public Map<String, Object> getAttributes(int scope) {
112 return getAttributeStrategy().getAttributes(scope);
113 }
114
115 @Override
116 public void removeAttribute(String name, int scope) {
117 getAttributeStrategy().removeAttribute(name, scope);
118 }
119
120 @Override
121 public void setAttribute(String name, Object value, int scope) {
122 getAttributeStrategy().setAttribute(name, value, scope);
123 }
124
125 @Override
126 public AccessManager getAccessManager(String workspace) {
127 return PermissionUtil.getAccessManager(workspace, getSubject());
128 }
129
130 @Override
131 public Session getJCRSession(String workspaceName) throws LoginException, RepositoryException {
132 return getRepositoryStrategy().getSession(workspaceName);
133 }
134
135
136
137
138
139
140 @Override
141 public Object getAttribute(String name) {
142 Object value = this.getAttribute(name, Context.LOCAL_SCOPE);
143 if (null == value) {
144 value = this.getAttribute(name, Context.SESSION_SCOPE);
145 }
146 if (null == value) {
147 value = this.getAttribute(name, Context.APPLICATION_SCOPE);
148 }
149 return value;
150 }
151
152
153
154
155 @Override
156 public Map<String, Object> getAttributes() {
157 final Map<String, Object> map = new HashMap<String, Object>();
158 map.putAll(this.getAttributes(Context.LOCAL_SCOPE));
159 map.putAll(this.getAttributes(Context.SESSION_SCOPE));
160 map.putAll(this.getAttributes(Context.APPLICATION_SCOPE));
161 return map;
162 }
163
164
165
166
167
168 @Override
169 public Locale getLocale() {
170 if (locale == null) {
171 final SystemContext sysctx = MgnlContext.getSystemContext();
172 if (this == sysctx) {
173
174 return null;
175 }
176 locale = sysctx.getLocale();
177 }
178 return locale;
179 }
180
181 @Override
182 public void setLocale(Locale locale) {
183 this.locale = locale;
184 }
185
186
187
188
189 @Override
190 public Messages getMessages() {
191 return getMessages(MessagesManager.DEFAULT_BASENAME);
192 }
193
194
195
196
197 @Override
198 public Messages getMessages(String basename) {
199 return MessagesManager.getMessages(basename, getLocale());
200 }
201
202 @Override
203 public HierarchyManager getHierarchyManager(String workspaceName) {
204 try {
205 return HierarchyManagerUtil.asHierarchyManager(getJCRSession(workspaceName));
206 } catch (RepositoryException e) {
207 throw new RuntimeRepositoryException(e);
208 }
209 }
210
211 @Override
212 public QueryManager getQueryManager(String workspaceName) {
213 return this.getHierarchyManager(workspaceName).getQueryManager();
214 }
215
216
217
218
219
220 @Override
221 public Object get(Object key) {
222 return this.getAttribute(key.toString());
223 }
224
225
226
227
228 @Override
229 public Object put(Object key, Object value) {
230 this.setAttribute(key.toString(), value, Context.LOCAL_SCOPE);
231 return value;
232 }
233
234
235
236
237 @Override
238 public void clear() {
239 for (String key : this.getAttributes().keySet()) {
240 this.removeAttribute(key, Context.LOCAL_SCOPE);
241 }
242 throw new UnsupportedOperationException("you can not clear a magnolia context");
243 }
244
245
246
247
248 @Override
249 public boolean containsValue(Object value) {
250 return this.getAttributes().containsValue(value);
251 }
252
253
254
255
256 @Override
257 public Set<Entry<String, Object>> entrySet() {
258 return this.getAttributes().entrySet();
259 }
260
261
262
263
264 @Override
265 public boolean isEmpty() {
266 return this.getAttributes().isEmpty();
267 }
268
269
270
271
272 @Override
273 public Set<String> keySet() {
274 return this.getAttributes().keySet();
275 }
276
277
278
279
280 @Override
281 public void putAll(Map map) {
282 for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) {
283 Entry entry = (Entry) iter.next();
284 this.setAttribute(entry.getKey().toString(), entry.getValue(), Context.LOCAL_SCOPE);
285 }
286 }
287
288
289
290
291 @Override
292 public Object remove(Object key) {
293 Object obj = this.getAttribute(key.toString());
294 this.removeAttribute(key.toString(), Context.LOCAL_SCOPE);
295 return obj;
296 }
297
298
299
300
301 @Override
302 public Collection<Object> values() {
303 return this.getAttributes().values();
304 }
305
306
307
308
309 @Override
310 public boolean containsKey(Object arg0) {
311 return this.getAttributes().containsKey(arg0);
312 }
313
314
315
316
317 @Override
318 public int size() {
319 return this.getAttributes().size();
320 }
321
322
323
324
325 @Override
326 public void release() {
327 getRepositoryStrategy().release();
328 }
329 }