1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.orchestra.conversation;
20
21 import java.util.HashSet;
22 import java.util.Set;
23
24 import org.apache.myfaces.orchestra.frameworkAdapter.FrameworkAdapter;
25
26
27
28
29
30
31
32
33
34
35 public class AccessScopeManager
36 {
37 private static final String REQ_ATTR_KEY = AccessScopeManager.class.getName();
38 private AccessScopeManagerConfiguration accessScopeManagerConfiguration;
39
40 private boolean recordAccess;
41 private boolean ignoreRequest;
42 private Set accessedConversations = new HashSet();
43
44 public static AccessScopeManager getInstance()
45 {
46
47
48
49
50
51
52
53
54 FrameworkAdapter fa = FrameworkAdapter.getCurrentInstance();
55 AccessScopeManager manager = (AccessScopeManager) fa.getRequestAttribute(REQ_ATTR_KEY);
56 if (manager != null)
57 {
58
59 return manager;
60 }
61
62
63
64
65 manager = (AccessScopeManager) fa.getBean(FlashScopeManager.class.getName());
66 if (manager != null)
67 {
68 fa.setRequestAttribute(REQ_ATTR_KEY, manager);
69 return manager;
70 }
71
72
73
74
75
76
77
78 FlashScopeManagerConfiguration cfg = (FlashScopeManagerConfiguration) fa.getBean(
79 FlashScopeManagerConfiguration.class.getName());
80 if (cfg != null)
81 {
82 manager = new AccessScopeManager();
83 manager.setAccessScopeManagerConfiguration(cfg);
84 fa.setRequestAttribute(REQ_ATTR_KEY, manager);
85 return manager;
86 }
87
88
89 manager = (AccessScopeManager) fa.getBean(AccessScopeManager.class.getName());
90 if (manager != null)
91 {
92 fa.setRequestAttribute(REQ_ATTR_KEY, manager);
93 return manager;
94 }
95
96
97
98 throw new IllegalArgumentException(
99 "Orchestra was unable to create an instance of bean with name 'AccessScopeManager'." +
100 " Ensure that JSF variable resolution uses your dependency injection (DI) framework" +
101 " (eg Spring's DelegatingVariableResolver is in your faces-config.xml file) and" +
102 " the standard Orchestra configuration beans are defined (eg by using"+
103 " <import resource=\"classpath*:/META-INF/spring-orchestra-init.xml\" />).");
104 }
105
106 public AccessScopeManagerConfiguration getAccessScopeManagerConfiguration()
107 {
108 return accessScopeManagerConfiguration;
109 }
110
111 public void setAccessScopeManagerConfiguration(AccessScopeManagerConfiguration accessScopeManagerConfiguration)
112 {
113 this.accessScopeManagerConfiguration = accessScopeManagerConfiguration;
114 }
115
116
117
118
119
120 public void beginRecording()
121 {
122 recordAccess = true;
123 }
124
125
126
127
128
129
130
131
132 public void addConversationAccess(String conversationName)
133 {
134
135
136 if (recordAccess && !ignoreRequest && !accessedConversations.contains(conversationName))
137 {
138 accessedConversations.add(conversationName);
139 }
140 }
141
142 public boolean isIgnoreRequest()
143 {
144 return ignoreRequest;
145 }
146
147
148
149
150
151
152
153
154 public void setIgnoreRequest()
155 {
156 this.ignoreRequest = true;
157 }
158
159 public boolean isConversationAccessed(String name)
160 {
161 if (ignoreRequest)
162 {
163 throw new IllegalStateException();
164 }
165
166 return accessedConversations.contains(name);
167 }
168 }