View Javadoc

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 }