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