View Javadoc

1   /**
2    * This file Copyright (c) 2003-2011 Magnolia International
3    * Ltd.  (http://www.magnolia-cms.com). All rights reserved.
4    *
5    *
6    * This file is dual-licensed under both the Magnolia
7    * Network Agreement and the GNU General Public License.
8    * You may elect to use one or the other of these licenses.
9    *
10   * This file is distributed in the hope that it will be
11   * useful, but AS-IS and WITHOUT ANY WARRANTY; without even the
12   * implied warranty of MERCHANTABILITY or FITNESS FOR A
13   * PARTICULAR PURPOSE, TITLE, or NONINFRINGEMENT.
14   * Redistribution, except as permitted by whichever of the GPL
15   * or MNA you select, is prohibited.
16   *
17   * 1. For the GPL license (GPL), you can redistribute and/or
18   * modify this file under the terms of the GNU General
19   * Public License, Version 3, as published by the Free Software
20   * Foundation.  You should have received a copy of the GNU
21   * General Public License, Version 3 along with this program;
22   * if not, write to the Free Software Foundation, Inc., 51
23   * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
24   *
25   * 2. For the Magnolia Network Agreement (MNA), this file
26   * and the accompanying materials are made available under the
27   * terms of the MNA which accompanies this distribution, and
28   * is available at http://www.magnolia-cms.com/mna.html
29   *
30   * Any modifications to this file must keep this entire header
31   * intact.
32   *
33   */
34  package info.magnolia.jaas.principal;
35  
36  import info.magnolia.cms.security.auth.PrincipalCollection;
37  
38  import java.security.Principal;
39  import java.util.ArrayList;
40  import java.util.Collection;
41  import java.util.Iterator;
42  
43  import org.apache.commons.lang.StringUtils;
44  import org.apache.commons.lang.builder.ToStringBuilder;
45  import org.apache.commons.lang.builder.ToStringStyle;
46  
47  
48  /**
49   * Principal collection implementation based on simple list. Collection is managed externally.
50   * Date: Jun 29, 2005
51   * @author Sameer Charles $Id: PrincipalCollectionImpl.java 48388 2011-08-17 08:29:13Z dlipp $
52   */
53  public class PrincipalCollectionImpl implements PrincipalCollection {
54  
55      /**
56       * Stable serialVersionUID.
57       */
58      private static final long serialVersionUID = 222L;
59  
60      private static final String NAME = "PrincipalCollection";
61  
62      /**
63       * Collection of principal objects.
64       */
65      private final Collection<Principal> collection = new ArrayList<Principal>();
66  
67      private String name;
68  
69      /**
70       * Gets name given to this principal.
71       * @return name
72       */
73      @Override
74      public String getName() {
75          if (StringUtils.isEmpty(this.name)) {
76              return NAME;
77          }
78          return this.name;
79      }
80  
81      /**
82       * Sets this principal name.
83       */
84      @Override
85      public void setName(String name) {
86          this.name = name;
87      }
88  
89      /**
90       * Sets internal collection of principals.
91       * @deprecated since 4.5
92       */
93      @Override
94      @Deprecated
95      public void set(Collection<Principal> collection) {
96          throw new UnsupportedOperationException("use addAll() instead");
97      }
98  
99      /**
100      * Adds principal to the internal collection of principals.
101      * @param principal to be added to the collection
102      */
103     @Override
104     public void add(Principal principal) {
105         this.collection.add(principal);
106     }
107 
108     /**
109      * Adds principals to the internal collection of principals.
110      * @param principal to be added to the collection
111      */
112     @Override
113     public void addAll(Collection<Principal> principal) {
114         this.collection.addAll(principal);
115     }
116 
117     /**
118      * Removes principal from the collection if present or does nothing in case principal was not present in the collection.
119      * @param principal to be removed from the collection
120      */
121     @Override
122     public void remove(Principal principal) {
123         this.collection.remove(principal);
124     }
125 
126     /**
127      * removes all principals from the collection.
128      */
129     @Override
130     public void clearAll() {
131         this.collection.clear();
132     }
133 
134     /**
135      * Checks if this collection contains specified principal.
136      * @return true if the specified object exist in the collection, false otherwise.
137      */
138     @Override
139     public boolean contains(Principal principal) {
140         return this.collection.contains(principal);
141     }
142 
143     /**
144      * Checks if this collection contains principal with the specified name.
145      * @param name
146      * @return true if the collection contains the principal by the specified name, false otherwise.
147      */
148     @Override
149     public boolean contains(String name) {
150         return this.get(name) != null;
151     }
152 
153     /**
154      * Gets principal associated to the specified name from the collection.
155      * @param name
156      * @return principal object associated to the specified name.
157      */
158     @Override
159     public Principal get(String name) {
160         //TODO: change internal collection to a map and store names as keys to avoid loops !!!!
161         Iterator<Principal> principalIterator = this.collection.iterator();
162         while (principalIterator.hasNext()) {
163             Principal principal = principalIterator.next();
164             if (StringUtils.equalsIgnoreCase(name, principal.getName())) {
165                 return principal;
166             }
167         }
168         return null;
169     }
170 
171     /**
172      * Returns an iterator over the collection of principals.
173      * @return iterator for Principal objects
174      */
175     @Override
176     public Iterator<Principal> iterator() {
177         return collection.iterator();
178     }
179 
180     /**
181      * @see java.lang.Object#toString()
182      */
183     @Override
184     public String toString() {
185         return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).append("name", this.name).toString();
186     }
187 }