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.module.groovy.console;
35
36 import info.magnolia.cms.core.Content;
37 import info.magnolia.cms.core.HierarchyManager;
38 import info.magnolia.cms.util.HierarchyManagerUtil;
39 import info.magnolia.cms.util.HierarchyManagerWrapper;
40 import info.magnolia.context.Context;
41 import info.magnolia.context.ContextDecorator;
42 import info.magnolia.context.DefaultRepositoryStrategy;
43 import info.magnolia.context.JCRSessionStrategy;
44 import info.magnolia.context.SystemContext;
45 import info.magnolia.context.SystemRepositoryStrategy;
46 import info.magnolia.context.UserContext;
47 import info.magnolia.exception.RuntimeRepositoryException;
48 import info.magnolia.module.groovy.support.nodes.MgnlGroovyNode;
49 import info.magnolia.objectfactory.Components;
50 import info.magnolia.repository.RepositoryManager;
51
52 import java.io.Serializable;
53
54 import javax.jcr.RepositoryException;
55 import javax.jcr.Session;
56
57
58
59
60
61
62
63
64 public class MgnlGroovyConsoleContext extends ContextDecorator {
65
66 private static final class InternalHierarchyManagerWrapper extends
67 HierarchyManagerWrapper {
68 private InternalHierarchyManagerWrapper(HierarchyManager wrappedHM) {
69 super(wrappedHM);
70 }
71
72 @Override
73 protected Content wrap(Content content) {
74 return new MgnlGroovyNode(content);
75 }
76 }
77
78 private static final class SerializableRepositoryStrategy extends DefaultRepositoryStrategy implements Serializable {
79 private static final long serialVersionUID = 1L;
80
81 public SerializableRepositoryStrategy(UserContext context) {
82 super(Components.getComponent(RepositoryManager.class), context);
83 }
84 }
85
86 private static final long serialVersionUID = 1L;
87
88 private static final String STRATEGY_ATTRIBUTE = MgnlGroovyConsole.class.getName() + ".strategy";
89
90 public MgnlGroovyConsoleContext(Context ctx) {
91 super(ctx);
92 }
93
94 @Override
95 public JCRSessionStrategy getRepositoryStrategy() {
96
97 JCRSessionStrategy strategy = (JCRSessionStrategy) getAttribute(STRATEGY_ATTRIBUTE, Context.SESSION_SCOPE);
98 if (strategy == null) {
99
100
101 if(SystemContext.class.isAssignableFrom(ctx.getClass())){
102 strategy = new SystemRepositoryStrategy(Components.getComponent(RepositoryManager.class));
103 } else {
104 strategy = new SerializableRepositoryStrategy((UserContext) ctx);
105 }
106 setAttribute(STRATEGY_ATTRIBUTE, strategy, Context.SESSION_SCOPE);
107 }
108 return strategy;
109 }
110
111 @Override
112 public HierarchyManager getHierarchyManager(String workspaceName) {
113 Session session;
114 try {
115 session = getRepositoryStrategy().getSession(workspaceName);
116 } catch (RepositoryException e) {
117 throw new RuntimeRepositoryException(e);
118 }
119 return new InternalHierarchyManagerWrapper(HierarchyManagerUtil.asHierarchyManager(session));
120 }
121 }