1 package org.saf.struts.config;
2
3 import org.apache.commons.digester.Digester;
4
5 import org.saf.struts.bean.AuthorizationAction;
6 import org.saf.struts.bean.AuthorizationDefinition;
7 import org.saf.struts.bean.AuthorizationErrorForward;
8 import org.saf.struts.bean.AuthorizationManager;
9 import org.saf.struts.bean.AuthorizationMethod;
10 import org.saf.struts.bean.AuthorizationPutDefinition;
11
12 import org.xml.sax.InputSource;
13
14 import java.io.IOException;
15
16 import java.util.Collection;
17 import java.util.HashMap;
18 import java.util.Iterator;
19 import java.util.Map;
20
21
22 public class StrutsAuthorizationConfig {
23 private AuthorizationErrorForward authorizationErrorForward;
24 private AuthorizationManager authorizationManager;
25 private Map authorizationActionMap;
26 private Map authorizationDefinitionMap;
27 private Map authorizationErrorForwardMap;
28
29 /***
30 * Creates a new StrutsAuthorizationConfig
31 */
32 public StrutsAuthorizationConfig() {
33 authorizationActionMap = new HashMap();
34 authorizationDefinitionMap = new HashMap();
35 }
36
37 /***
38 * @return Returns the authorizationActionMap.
39 */
40 public Map getAuthorizationActionMap() {
41 return authorizationActionMap;
42 }
43
44 /***
45 * @return Returns the authorizationDefinitionMap.
46 */
47 public Map getAuthorizationDefinitionMap() {
48 return authorizationDefinitionMap;
49 }
50
51 /***
52 * @param authorizationErrorForward The authorizationErrorForward to set.
53 */
54 public void setAuthorizationErrorForward(
55 AuthorizationErrorForward authorizationErrorForward) {
56 this.authorizationErrorForward = authorizationErrorForward;
57 }
58
59 /***
60 * @return Returns the authorizationErrorForward.
61 */
62 public AuthorizationErrorForward getAuthorizationErrorForward() {
63 return authorizationErrorForward;
64 }
65
66 /***
67 * @return Returns the authorizationErrorForwardMap.
68 */
69 public Map getAuthorizationErrorForwardMap() {
70 return authorizationErrorForwardMap;
71 }
72
73 /***
74 * @param authorizationManager The authorizationManager to set.
75 */
76 public void setAuthorizationManager(
77 AuthorizationManager authorizationManager) {
78 this.authorizationManager = authorizationManager;
79 }
80
81 /***
82 * @return Returns the authorizationManager.
83 */
84 public AuthorizationManager getAuthorizationManager() {
85 return authorizationManager;
86 }
87
88 public void addAuthorizationAction(AuthorizationAction action) {
89 if (authorizationActionMap == null) {
90 authorizationActionMap = new HashMap();
91 }
92
93 authorizationActionMap.put(action.getType(), action);
94 }
95
96 public void addAuthorizationDefinition(AuthorizationDefinition definition) {
97 if (authorizationDefinitionMap == null) {
98 authorizationDefinitionMap = new HashMap();
99 }
100
101 authorizationDefinitionMap.put(definition.getRefId(), definition);
102 }
103
104 public void addAuthorizationErrorForward(AuthorizationErrorForward forward) {
105 if (authorizationErrorForwardMap == null) {
106 authorizationErrorForwardMap = new HashMap();
107 }
108
109 authorizationErrorForwardMap.put(forward.getRefId(), forward);
110 }
111
112 public void readConfig(InputSource is) throws IOException {
113 Digester digester = new Digester();
114
115 digester.push(this);
116
117 digester.addObjectCreate("struts-authorization/authorization-manager",
118 AuthorizationManager.class);
119 digester.addSetProperties("struts-authorization/authorization-manager");
120 digester.addSetNext("struts-authorization/authorization-manager",
121 "setAuthorizationManager");
122
123 digester.addObjectCreate("struts-authorization/authorization-error-forwards/error-forward",
124 AuthorizationErrorForward.class);
125 digester.addSetProperties(
126 "struts-authorization/authorization-error-forwards/error-forward");
127 digester.addSetNext("struts-authorization/authorization-error-forwards/error-forward",
128 "addAuthorizationErrorForward");
129
130 digester.addObjectCreate("struts-authorization/authorization-default-error-forward/error-forward",
131 AuthorizationErrorForward.class);
132 digester.addSetProperties(
133 "struts-authorization/authorization-default-error-forward/error-forward");
134 digester.addSetNext("struts-authorization/authorization-default-error-forward/error-forward",
135 "setAuthorizationErrorForward");
136
137 digester.addObjectCreate("struts-authorization/authorization-definition/definition",
138 AuthorizationDefinition.class);
139 digester.addSetProperties(
140 "struts-authorization/authorization-definition/definition");
141 digester.addSetProperties("struts-authorization/authorization-definition/definition",
142 "extends", "extendsAuthorizationDefinitionId");
143 digester.addObjectCreate("struts-authorization/authorization-definition/definition/put",
144 AuthorizationPutDefinition.class);
145 digester.addSetProperties(
146 "struts-authorization/authorization-definition/definition/put");
147 digester.addSetNext("struts-authorization/authorization-definition/definition/put",
148 "addDefinition");
149 digester.addSetNext("struts-authorization/authorization-definition/definition",
150 "addAuthorizationDefinition");
151
152 digester.addObjectCreate("struts-authorization/authorization-actions/action",
153 AuthorizationAction.class);
154 digester.addSetProperties(
155 "struts-authorization/authorization-actions/action");
156 digester.addSetProperties("struts-authorization/authorization-actions/action",
157 "defId", "authorizationDefinitionId");
158 digester.addSetProperties("struts-authorization/authorization-actions/action",
159 "errorForwardId", "authorizationErrorForwardId");
160 digester.addObjectCreate("struts-authorization/authorization-actions/action/action-method",
161 AuthorizationMethod.class);
162 digester.addSetProperties(
163 "struts-authorization/authorization-actions/action/action-method");
164 digester.addSetProperties("struts-authorization/authorization-actions/action/action-method",
165 "defId", "authorizationDefinitionId");
166 digester.addSetProperties("struts-authorization/authorization-actions/action/action-method",
167 "errorForwardId", "authorizationErrorForwardId");
168 digester.addSetNext("struts-authorization/authorization-actions/action/action-method",
169 "addAuthorizationMethod");
170 digester.addSetNext("struts-authorization/authorization-actions/action",
171 "addAuthorizationAction");
172
173 try {
174 digester.parse(is);
175 modifyAuthorizationDefinitionMap();
176 } catch (Exception ex) {
177 throw new IOException(ex.getMessage());
178 }
179 }
180
181 private AuthorizationDefinition getAuthorizationDefinitionList(
182 AuthorizationDefinition authorizationDefinition,
183 AuthorizationDefinition mainAuthorizationDefinition) {
184 if ((mainAuthorizationDefinition != null) &&
185 (mainAuthorizationDefinition.getDefinitionMap() != null)) {
186 authorizationDefinition.addAllDefinitions(mainAuthorizationDefinition.getDefinitionMap());
187 }
188
189 if ((mainAuthorizationDefinition != null) &&
190 (mainAuthorizationDefinition.getExtendsAuthorizationDefinitionId() != null)) {
191 mainAuthorizationDefinition = (AuthorizationDefinition) authorizationDefinitionMap.get(mainAuthorizationDefinition.getExtendsAuthorizationDefinitionId());
192 authorizationDefinition = getAuthorizationDefinitionList(authorizationDefinition,
193 mainAuthorizationDefinition);
194 }
195
196 return authorizationDefinition;
197 }
198
199 private void modifyAuthorizationDefinitionMap() {
200 if (authorizationDefinitionMap != null) {
201 Collection authorizationDefinitionIdList = authorizationDefinitionMap.keySet();
202
203 for (Iterator iter = authorizationDefinitionIdList.iterator();
204 iter.hasNext();) {
205 String authorizationDefinitionId = (String) iter.next();
206 AuthorizationDefinition authorizationDefinition = (AuthorizationDefinition) authorizationDefinitionMap.get(authorizationDefinitionId);
207
208 if (authorizationDefinition.getExtendsAuthorizationDefinitionId() != null) {
209 AuthorizationDefinition mainAuthorizationDefinition = (AuthorizationDefinition) authorizationDefinitionMap.get(authorizationDefinition.getExtendsAuthorizationDefinitionId());
210 authorizationDefinition = getAuthorizationDefinitionList(authorizationDefinition,
211 mainAuthorizationDefinition);
212 authorizationDefinitionMap.put(authorizationDefinition.getRefId(),
213 authorizationDefinition);
214 }
215 }
216 }
217 }
218 }