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.jcr.RuntimeRepositoryException;
48 import info.magnolia.jcr.wrapper.NodeWrappingDelegateSessionWrapper;
49 import info.magnolia.module.groovy.support.nodes.MgnlGroovyJCRNode;
50 import info.magnolia.module.groovy.support.nodes.MgnlGroovyNode;
51 import info.magnolia.objectfactory.Components;
52 import info.magnolia.repository.RepositoryManager;
53
54 import java.io.Serializable;
55
56 import javax.jcr.LoginException;
57 import javax.jcr.Node;
58 import javax.jcr.RepositoryException;
59 import javax.jcr.Session;
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 InternalJCRSessionWrapper extends
79 NodeWrappingDelegateSessionWrapper {
80 private InternalJCRSessionWrapper(Session session) {
81 super(session);
82 }
83
84 @Override
85 protected Node wrapNode(Node node) {
86 return new MgnlGroovyJCRNode(node);
87 }
88
89 }
90
91
92 private static final class SerializableRepositoryStrategy extends DefaultRepositoryStrategy implements Serializable {
93 private static final long serialVersionUID = 1L;
94
95 public SerializableRepositoryStrategy(UserContext context) {
96 super(Components.getComponent(RepositoryManager.class), context);
97 }
98 }
99
100 private static final long serialVersionUID = 1L;
101
102 public MgnlGroovyConsoleContext(Context ctx) {
103 super(ctx);
104 }
105
106 @Override
107 public JCRSessionStrategy getRepositoryStrategy() {
108
109 JCRSessionStrategy strategy = super.getRepositoryStrategy();
110 if (strategy == null) {
111
112
113 if (SystemContext.class.isAssignableFrom(ctx.getClass())) {
114 strategy = new SystemRepositoryStrategy(Components.getComponent(RepositoryManager.class));
115 } else {
116 strategy = new SerializableRepositoryStrategy((UserContext) ctx);
117 }
118 setRepositoryStrategy(strategy);
119 }
120 return strategy;
121 }
122
123 @Override
124 public HierarchyManager getHierarchyManager(String workspaceName) {
125 Session session;
126 try {
127 session = getRepositoryStrategy().getSession(workspaceName);
128 } catch (RepositoryException e) {
129 throw new RuntimeRepositoryException(e);
130 }
131 return new InternalHierarchyManagerWrapper(HierarchyManagerUtil.asHierarchyManager(session));
132 }
133
134 @Override
135 public Session getJCRSession(String workspaceName) throws LoginException, RepositoryException {
136 Session session;
137 try {
138 session = getRepositoryStrategy().getSession(workspaceName);
139 } catch (RepositoryException e) {
140 throw new RuntimeRepositoryException(e);
141 }
142 return new InternalJCRSessionWrapper(session);
143 }
144 }