View Javadoc

1   /* Copyright 2004 Acegi Technology Pty Limited
2    *
3    * Licensed under the Apache License, Version 2.0 (the "License");
4    * you may not use this file except in compliance with the License.
5    * You may obtain a copy of the License at
6    *
7    *     http://www.apache.org/licenses/LICENSE-2.0
8    *
9    * Unless required by applicable law or agreed to in writing, software
10   * distributed under the License is distributed on an "AS IS" BASIS,
11   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12   * See the License for the specific language governing permissions and
13   * limitations under the License.
14   */
15  
16  package org.acegisecurity;
17  
18  import java.io.Serializable;
19  
20  import java.util.Iterator;
21  import java.util.List;
22  import java.util.Vector;
23  
24  
25  /***
26   * Holds a group of {@link ConfigAttribute}s that are associated with a given
27   * secure object target.
28   * 
29   * <p>
30   * All the <code>ConfigAttributeDefinition</code>s associated with a given
31   * {@link org.acegisecurity.intercept.AbstractSecurityInterceptor} are
32   * stored in an {@link org.acegisecurity.intercept.ObjectDefinitionSource}.
33   * </p>
34   *
35   * @author Ben Alex
36   * @version $Id: ConfigAttributeDefinition.java,v 1.7 2005/11/17 00:55:49 benalex Exp $
37   */
38  public class ConfigAttributeDefinition implements Serializable {
39      //~ Instance fields ========================================================
40  
41      private List configAttributes = new Vector();
42  
43      //~ Constructors ===========================================================
44  
45      public ConfigAttributeDefinition() {
46          super();
47      }
48  
49      //~ Methods ================================================================
50  
51      /***
52       * Returns an <code>Iterator</code> over all the
53       * <code>ConfigAttribute</code>s defined by this
54       * <code>ConfigAttributeDefinition</code>.
55       * 
56       * <P>
57       * Allows <code>AccessDecisionManager</code>s and other classes to loop
58       * through every configuration attribute associated with a target secure
59       * object.
60       * </p>
61       *
62       * @return all the configuration attributes stored by the instance, or
63       *         <code>null</code> if an <code>Iterator</code> is unavailable
64       */
65      public Iterator getConfigAttributes() {
66          return this.configAttributes.iterator();
67      }
68  
69      /***
70       * Adds a <code>ConfigAttribute</code> that is related to the secure object
71       * method.
72       *
73       * @param newConfigAttribute the new configuration attribute to add
74       */
75      public void addConfigAttribute(ConfigAttribute newConfigAttribute) {
76          this.configAttributes.add(newConfigAttribute);
77      }
78  
79      /***
80       * Indicates whether the specified <code>ConfigAttribute</code> is
81       * contained within this <code>ConfigAttributeDefinition</code>.
82       *
83       * @param configAttribute the attribute to locate
84       *
85       * @return <code>true</code> if the specified <code>ConfigAttribute</code>
86       *         is contained, <code>false</code> otherwise
87       */
88      public boolean contains(ConfigAttribute configAttribute) {
89          return configAttributes.contains(configAttribute);
90      }
91  
92      public boolean equals(Object obj) {
93          if (obj instanceof ConfigAttributeDefinition) {
94              ConfigAttributeDefinition test = (ConfigAttributeDefinition) obj;
95  
96              List testAttrs = new Vector();
97              Iterator iter = test.getConfigAttributes();
98  
99              while (iter.hasNext()) {
100                 ConfigAttribute attr = (ConfigAttribute) iter.next();
101                 testAttrs.add(attr);
102             }
103 
104             if (this.configAttributes.size() != testAttrs.size()) {
105                 return false;
106             }
107 
108             for (int i = 0; i < this.configAttributes.size(); i++) {
109                 if (!this.configAttributes.get(i).equals(testAttrs.get(i))) {
110                     return false;
111                 }
112             }
113 
114             return true;
115         }
116 
117         return false;
118     }
119 
120     /***
121      * Returns the number of <code>ConfigAttribute</code>s defined by this
122      * <code>ConfigAttributeDefinition</code>.
123      *
124      * @return the number of <code>ConfigAttribute</code>s contained
125      */
126     public int size() {
127         return configAttributes.size();
128     }
129 
130     public String toString() {
131         return this.configAttributes.toString();
132     }
133 }