001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing,
013 * software distributed under the License is distributed on an
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 * KIND, either express or implied. See the License for the
016 * specific language governing permissions and limitations
017 * under the License.
018 *
019 */
020 package org.apache.directory.shared.ldap.aci;
021
022
023 import java.util.ArrayList;
024 import java.util.Collection;
025 import java.util.Collections;
026 import java.util.Set;
027
028 import org.apache.directory.shared.ldap.constants.AuthenticationLevel;
029
030
031 /**
032 * An {@link ACIItem} which specifies {@link ProtectedItem}s first and then
033 * {@link UserClass}es each {@link ProtectedItem} will have. (18.4.2.4. X.501)
034 *
035 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
036 * @version $Rev: 664290 $, $Date: 2008-06-07 08:28:06 +0200 (Sam, 07 jui 2008) $
037 */
038 public class ItemFirstACIItem extends ACIItem
039 {
040 private static final long serialVersionUID = -8199453391060356463L;
041
042 private final Collection<ProtectedItem> protectedItems;
043
044 private final Collection<ItemPermission> itemPermissions;
045
046
047 /**
048 * Creates a new instance.
049 *
050 * @param identificationTag
051 * the id string of this item
052 * @param precedence
053 * the precedence of this item
054 * @param authenticationLevel
055 * the level of authentication required to this item
056 * @param protectedItems
057 * the collection of {@link ProtectedItem}s this item protects
058 * @param itemPermissions
059 * the collection of {@link ItemPermission}s each
060 * <tt>protectedItems</tt> will have
061 */
062 public ItemFirstACIItem( String identificationTag, int precedence, AuthenticationLevel authenticationLevel,
063 Collection<ProtectedItem> protectedItems, Collection<ItemPermission> itemPermissions )
064 {
065 super( identificationTag, precedence, authenticationLevel );
066
067 this.protectedItems = Collections.unmodifiableCollection( new ArrayList<ProtectedItem>( protectedItems ) );
068 this.itemPermissions = Collections.unmodifiableCollection( new ArrayList<ItemPermission>( itemPermissions ) );
069 }
070
071
072 /**
073 * Returns the collection of {@link ProtectedItem}s.
074 */
075 public Collection<ProtectedItem> getProtectedItems()
076 {
077 return protectedItems;
078 }
079
080
081 /**
082 * Returns the collection of {@link ItemPermission}s.
083 */
084 public Collection<ItemPermission> getItemPermissions()
085 {
086 return itemPermissions;
087 }
088
089
090 public String toString()
091 {
092 StringBuilder buf = new StringBuilder();
093
094 // identificationTag
095 buf.append( "{ identificationTag \"" );
096 buf.append( getIdentificationTag() );
097
098 // precedence
099 buf.append( "\", precedence " );
100 buf.append( getPrecedence() );
101
102 // authenticationLevel
103 buf.append( ", authenticationLevel " );
104 buf.append( getAuthenticationLevel().getName() );
105
106 // itemOrUserFirst
107 buf.append( ", itemOrUserFirst itemFirst: { " );
108
109 // protectedItems
110 buf.append( "protectedItems { " );
111
112 boolean isFirst = true;
113
114 for ( ProtectedItem item:protectedItems )
115 {
116 if ( isFirst )
117 {
118 isFirst = false;
119 }
120 else
121 {
122 buf.append( ", " );
123 }
124
125 buf.append( item.toString() );
126 }
127
128 // itemPermissions
129 buf.append( " }, itemPermissions { " );
130
131 isFirst = true;
132
133 for ( ItemPermission permission:itemPermissions )
134 {
135 if ( isFirst )
136 {
137 isFirst = false;
138 }
139 else
140 {
141 buf.append( ", " );
142 }
143
144 buf.append( permission.toString() );
145 }
146
147 buf.append( " } } }" );
148
149 return buf.toString();
150 }
151
152
153 public Collection<ACITuple> toTuples()
154 {
155 Collection<ACITuple> tuples = new ArrayList<ACITuple>();
156
157 for ( ItemPermission itemPermission:itemPermissions )
158 {
159 Set<GrantAndDenial> grants = itemPermission.getGrants();
160 Set<GrantAndDenial> denials = itemPermission.getDenials();
161 int precedence = itemPermission.getPrecedence() >= 0 ? itemPermission.getPrecedence() : this
162 .getPrecedence();
163
164 if ( grants.size() > 0 )
165 {
166 tuples.add( new ACITuple( itemPermission.getUserClasses(), getAuthenticationLevel(), protectedItems,
167 toMicroOperations( grants ), true, precedence ) );
168 }
169 if ( denials.size() > 0 )
170 {
171 tuples.add( new ACITuple( itemPermission.getUserClasses(), getAuthenticationLevel(), protectedItems,
172 toMicroOperations( denials ), false, precedence ) );
173 }
174 }
175
176 return tuples;
177 }
178 }