You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2010/07/31 16:23:31 UTC
svn commit: r981063 - in /directory:
apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/administrative/
apacheds/trunk/core/src/main/java/org/apache/directory/server/core/admin/
apacheds/trunk/core/src/main/java/org/apache/directory...
Author: elecharny
Date: Sat Jul 31 14:23:30 2010
New Revision: 981063
URL: http://svn.apache.org/viewvc?rev=981063&view=rev
Log:
o Added the AdministrativePoint classes
o Removed the AdministrativeRole class from core (we will use the one in shared-ldap)
Added:
directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/administrative/
directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/administrative/AbstractAdministrativePoint.java
directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/administrative/AdministrativePoint.java
directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/administrative/AutonomousAdministrativePoint.java
directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/administrative/InnerAdministrativePoint.java
directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/administrative/SpecificAdministrativePoint.java
directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/subtree/AdministrativeRole.java
Removed:
directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/subtree/AdministrativeRole.java
Modified:
directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/admin/AdministrativePointInterceptor.java
directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/subtree/Subentry.java
directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java
Added: directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/administrative/AbstractAdministrativePoint.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/administrative/AbstractAdministrativePoint.java?rev=981063&view=auto
==============================================================================
--- directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/administrative/AbstractAdministrativePoint.java (added)
+++ directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/administrative/AbstractAdministrativePoint.java Sat Jul 31 14:23:30 2010
@@ -0,0 +1,151 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.directory.server.core.administrative;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.directory.shared.ldap.name.DN;
+import org.apache.directory.shared.ldap.subtree.AdministrativeRole;
+
+/**
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public abstract class AbstractAdministrativePoint implements AdministrativePoint
+{
+ /** The AA's DN */
+ protected DN dn;
+
+ /** The AA's UUID */
+ protected String uuid;
+
+ /** The AdmonistrativeRole */
+ protected AdministrativeRole role;
+
+ /** The parent AdministrativePoint */
+ protected AdministrativePoint parent;
+
+ /** The children AdministrativePoints */
+ protected Map<String, AdministrativePoint> children;
+
+ protected AbstractAdministrativePoint( DN dn, String uuid, AdministrativeRole role )
+ {
+ this.dn = dn;
+ this.uuid = uuid;
+ this.role = role;
+ this.children = new ConcurrentHashMap<String, AdministrativePoint>();
+ }
+
+ /**
+ * @return The administrativeRole
+ */
+ public abstract AdministrativeRole getRole();
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public DN getDn()
+ {
+ return dn;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public String getUuid()
+ {
+ return uuid;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean isAutonomous()
+ {
+ return false;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean isInner()
+ {
+ return false;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean isSpecific()
+ {
+ return false;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public AdministrativePoint getParent()
+ {
+ return parent;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public void setParent( AdministrativePoint parent )
+ {
+ this.parent = parent;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public Map<String, AdministrativePoint> getChildren()
+ {
+ return children;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public void setChildren( Map<String, AdministrativePoint> children )
+ {
+ this.children = children;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public void addChild( AdministrativePoint child )
+ {
+ children.put( child.getUuid(), child );
+ }
+}
Added: directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/administrative/AdministrativePoint.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/administrative/AdministrativePoint.java?rev=981063&view=auto
==============================================================================
--- directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/administrative/AdministrativePoint.java (added)
+++ directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/administrative/AdministrativePoint.java Sat Jul 31 14:23:30 2010
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.directory.server.core.administrative;
+
+import java.util.Map;
+
+import org.apache.directory.shared.ldap.name.DN;
+
+/**
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public interface AdministrativePoint
+{
+ /**
+ * @return The AdministrativePoint DN
+ */
+ DN getDn();
+
+
+ /**
+ * @return The AdministrativePoint UUID
+ */
+ String getUuid();
+
+
+ /**
+ * @return true if the AdministrativePoint is an AutonomousArea
+ */
+ boolean isAutonomous();
+
+
+ /**
+ * @return true if the AdministrativePoint is an InnerArea
+ */
+ boolean isInner();
+
+
+ /**
+ * @return true if the AdministrativePoint is a SpecificArea
+ */
+ boolean isSpecific();
+
+
+ /**
+ * @return The parent AdministrativePoint, if any
+ */
+ AdministrativePoint getParent();
+
+
+ /**
+ * Set the AdministrativePoint parent
+ *
+ * @param parent the AdministrativePoint parent
+ */
+ void setParent( AdministrativePoint parent );
+
+
+ /**
+ * @return The list of children AdministrativePoint. May be empty
+ */
+ Map<String, AdministrativePoint> getChildren();
+
+
+ /**
+ * Add an AdministrativePoint child
+ *
+ * @param child the AdministrativePoint child to add
+ */
+ void addChild( AdministrativePoint child );
+
+
+ /**
+ * Set the AdministrativePoint children
+ *
+ * @param children the AdministrativePoint children
+ */
+ void setChildren( Map<String, AdministrativePoint> children );
+}
Added: directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/administrative/AutonomousAdministrativePoint.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/administrative/AutonomousAdministrativePoint.java?rev=981063&view=auto
==============================================================================
--- directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/administrative/AutonomousAdministrativePoint.java (added)
+++ directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/administrative/AutonomousAdministrativePoint.java Sat Jul 31 14:23:30 2010
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.directory.server.core.administrative;
+
+import org.apache.directory.shared.ldap.name.DN;
+import org.apache.directory.shared.ldap.subtree.AdministrativeRole;
+
+/**
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class AutonomousAdministrativePoint extends AbstractAdministrativePoint
+{
+ /**
+ * Create an instance of AutonomousAdministrativePoint
+ *
+ * @param dn The AdministrativePoint DN
+ * @param uuid The AdministrativePoint UUID
+ */
+ protected AutonomousAdministrativePoint( DN dn, String uuid )
+ {
+ super( dn, uuid, AdministrativeRole.AutonomousArea );
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean isAutonomous()
+ {
+ return true;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public AdministrativeRole getRole()
+ {
+ return AdministrativeRole.AutonomousArea;
+ }
+}
Added: directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/administrative/InnerAdministrativePoint.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/administrative/InnerAdministrativePoint.java?rev=981063&view=auto
==============================================================================
--- directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/administrative/InnerAdministrativePoint.java (added)
+++ directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/administrative/InnerAdministrativePoint.java Sat Jul 31 14:23:30 2010
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.directory.server.core.administrative;
+
+import org.apache.directory.shared.ldap.name.DN;
+import org.apache.directory.shared.ldap.subtree.AdministrativeRole;
+
+/**
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class InnerAdministrativePoint extends AbstractAdministrativePoint
+{
+ /**
+ * Create an instance of InnerAdministrativePoint
+ *
+ * @param dn The AdministrativePoint DN
+ * @param uuid The AdministrativePoint UUID
+ * @param role The AdministrativePoint role
+ */
+ protected InnerAdministrativePoint( DN dn, String uuid, AdministrativeRole role )
+ {
+ super( dn, uuid, role );
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean isInner()
+ {
+ return true;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public AdministrativeRole getRole()
+ {
+ return role;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public AdministrativePoint getParent()
+ {
+ return parent;
+ }
+}
Added: directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/administrative/SpecificAdministrativePoint.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/administrative/SpecificAdministrativePoint.java?rev=981063&view=auto
==============================================================================
--- directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/administrative/SpecificAdministrativePoint.java (added)
+++ directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/administrative/SpecificAdministrativePoint.java Sat Jul 31 14:23:30 2010
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.directory.server.core.administrative;
+
+import org.apache.directory.shared.ldap.name.DN;
+import org.apache.directory.shared.ldap.subtree.AdministrativeRole;
+
+/**
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class SpecificAdministrativePoint extends AbstractAdministrativePoint
+{
+ /**
+ * Create an instance of SpecificAdministrativePoint
+ *
+ * @param dn The AdministrativePoint DN
+ * @param uuid The AdministrativePoint UUID
+ * @param role The AdministrativePoint role
+ */
+ protected SpecificAdministrativePoint( DN dn, String uuid, AdministrativeRole role )
+ {
+ super( dn, uuid, role );
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean isSpecific()
+ {
+ return true;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public AdministrativeRole getRole()
+ {
+ return role;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public AdministrativePoint getParent()
+ {
+ return parent;
+ }
+}
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/admin/AdministrativePointInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/admin/AdministrativePointInterceptor.java?rev=981063&r1=981062&r2=981063&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/admin/AdministrativePointInterceptor.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/admin/AdministrativePointInterceptor.java Sat Jul 31 14:23:30 2010
@@ -65,6 +65,7 @@ import org.apache.directory.shared.ldap.
import org.apache.directory.shared.ldap.name.DN;
import org.apache.directory.shared.ldap.schema.AttributeType;
import org.apache.directory.shared.ldap.schema.SchemaManager;
+import org.apache.directory.shared.ldap.subtree.AdministrativeRole;
import org.apache.directory.shared.ldap.util.StringTools;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -96,6 +97,9 @@ public class AdministrativePointIntercep
/** A reference to the AdministrativeRole AT */
private static AttributeType ADMINISTRATIVE_ROLE_AT;
+ /** A reference to the EntryUUID AT */
+ private static AttributeType ENTRY_UUID_AT;
+
/** The possible roles */
private static final Set<String> ROLES = new HashSet<String>();
@@ -205,6 +209,7 @@ public class AdministrativePointIntercep
{
}
+
//-------------------------------------------------------------------------------------------
// Helper methods
//-------------------------------------------------------------------------------------------
@@ -278,7 +283,9 @@ public class AdministrativePointIntercep
schemaManager = directoryService.getSchemaManager();
nexus = directoryService.getPartitionNexus();
+ // Init the At we use locally
ADMINISTRATIVE_ROLE_AT = schemaManager.getAttributeType( SchemaConstants.ADMINISTRATIVE_ROLE_AT );
+ ENTRY_UUID_AT = schemaManager.getAttributeType( SchemaConstants.ENTRY_UUID_AT );
// Load all the AdministratvePoint :
// Autonomous Administrative Point first, then Specific
@@ -404,6 +411,11 @@ public class AdministrativePointIntercep
// Ok, we are golden.
next.add( addContext );
+ // Now, update the cache
+ String uuid = addContext.getEntry().get( ENTRY_UUID_AT ).getString();
+ AdministrativeRole adminRole = null;
+
+
LOG.debug( "Added an Autonomous Administrative Point at {}", entry.getDn() );
return;
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/subtree/Subentry.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/subtree/Subentry.java?rev=981063&r1=981062&r2=981063&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/subtree/Subentry.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/subtree/Subentry.java Sat Jul 31 14:23:30 2010
@@ -6,28 +6,29 @@
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
- * under the License.
- *
+ * under the License.
+ *
*/
package org.apache.directory.server.core.subtree;
import java.util.Set;
+import org.apache.directory.shared.ldap.subtree.AdministrativeRole;
import org.apache.directory.shared.ldap.subtree.SubtreeSpecification;
/**
* An operational view of a subentry within the system. A Subentry can have
- * many types (Collective, Schema, AccessControl or Trigger) but only one
+ * many types (Collective, Schema, AccessControl or Trigger) but only one
* Subtree Specification.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
@@ -36,11 +37,11 @@ public class Subentry
{
/** The Subtree Specification associated with this subentry */
private SubtreeSpecification ss;
-
+
/** The administratives roles */
private Set<AdministrativeRole> administrativeRoles;
-
-
+
+
/**
* Stores the subtree
*
@@ -50,7 +51,7 @@ public class Subentry
{
this.ss = ss;
}
-
+
/**
* @return The subtree specification
@@ -62,7 +63,7 @@ public class Subentry
/**
- *
+ *
* TODO setAdministrativeRoles.
*
* @param administrativeRoles
@@ -77,44 +78,47 @@ public class Subentry
{
return administrativeRoles;
}
-
-
+
+
/**
- * Tells if the type contains the Collective attribute Administrative Role
+ * Tells if the type contains the Collective attribute Administrative Role
*/
final boolean isCollectiveAdminRole()
{
- return administrativeRoles.contains( AdministrativeRole.COLLECTIVE_ADMIN_ROLE );
+ return administrativeRoles.contains( AdministrativeRole.CollectiveAttributeInnerArea ) ||
+ administrativeRoles.contains( AdministrativeRole.CollectiveAttributeSpecificArea );
}
-
-
+
+
/**
- * Tells if the type contains the SubSchema Administrative Role
+ * Tells if the type contains the SubSchema Administrative Role
*/
final boolean isSchemaAdminRole()
{
- return administrativeRoles.contains( AdministrativeRole.SUB_SCHEMA_ADMIN_ROLE );
+ return administrativeRoles.contains( AdministrativeRole.SubSchemaSpecificArea );
}
-
-
+
+
/**
- * Tells if the type contains the Access Control Administrative Role
+ * Tells if the type contains the Access Control Administrative Role
*/
final boolean isAccessControlAdminRole()
{
- return administrativeRoles.contains( AdministrativeRole.ACCESS_CONTROL_ADMIN_ROLE );
+ return administrativeRoles.contains( AdministrativeRole.AccessControlSpecificArea ) ||
+ administrativeRoles.contains( AdministrativeRole.AccessControlInnerArea );
}
-
-
+
+
/**
- * Tells if the type contains the Triggers Administrative Role
+ * Tells if the type contains the Triggers Administrative Role
*/
final boolean isTriggersAdminRole()
{
- return administrativeRoles.contains( AdministrativeRole.TRIGGERS_ADMIN_ROLE );
+ return administrativeRoles.contains( AdministrativeRole.TriggerExecutionSpecificArea ) ||
+ administrativeRoles.contains( AdministrativeRole.TriggerExecutionInnerArea );
}
-
-
+
+
/**
* @see Object#toString()
*/
Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java?rev=981063&r1=981062&r2=981063&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/subtree/SubentryInterceptor.java Sat Jul 31 14:23:30 2010
@@ -6,16 +6,16 @@
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
- * under the License.
- *
+ * under the License.
+ *
*/
package org.apache.directory.server.core.subtree;
@@ -80,6 +80,7 @@ import org.apache.directory.shared.ldap.
import org.apache.directory.shared.ldap.name.DN;
import org.apache.directory.shared.ldap.schema.AttributeType;
import org.apache.directory.shared.ldap.schema.SchemaManager;
+import org.apache.directory.shared.ldap.subtree.AdministrativeRole;
import org.apache.directory.shared.ldap.subtree.SubtreeSpecification;
import org.apache.directory.shared.ldap.subtree.SubtreeSpecificationParser;
import org.slf4j.Logger;
@@ -108,10 +109,10 @@ public class SubentryInterceptor extends
/** The SubTree specification parser instance */
private SubtreeSpecificationParser ssParser;
-
+
/** The Subtree evaluator instance */
private SubtreeEvaluator evaluator;
-
+
/** A reference to the nexus for direct backend operations */
private PartitionNexus nexus;
@@ -120,16 +121,16 @@ public class SubentryInterceptor extends
/** A reference to the ObjectClass AT */
private static AttributeType OBJECT_CLASS_AT;
-
+
/** A reference to the AdministrativeRole AT */
private static AttributeType ADMINISTRATIVE_ROLE_AT;
-
+
/** A reference to the SubtreeSpecification AT */
private static AttributeType SUBTREE_SPECIFICATION_AT;
/** A reference to the AccessControlSubentries AT */
private static AttributeType ACCESS_CONTROL_SUBENTRIES_AT;
-
+
/** A reference to the AccessControlSubentries AT */
private static AttributeType SUBSCHEMA_SUBENTRY_AT;
@@ -138,9 +139,9 @@ public class SubentryInterceptor extends
/** A reference to the TriggerExecutionSubentries AT */
private static AttributeType TRIGGER_EXECUTION_SUBENTRIES_AT;
-
+
/** An enum used for the entries update */
- private enum OperationEnum
+ private enum OperationEnum
{
ADD,
REMOVE,
@@ -171,7 +172,7 @@ public class SubentryInterceptor extends
/**
- * SearchResultFilter used to filter out normal entries but shows subentries based on
+ * SearchResultFilter used to filter out normal entries but shows subentries based on
* objectClass values.
*/
public class HideEntriesFilter implements EntryFilter
@@ -189,19 +190,19 @@ public class SubentryInterceptor extends
}
}
-
+
//-------------------------------------------------------------------------------------------
// Interceptor initialization
//-------------------------------------------------------------------------------------------
/**
* Initialize the Subentry Interceptor
- *
+ *
* @param directoryService The DirectoryService instance
*/
public void init( DirectoryService directoryService ) throws LdapException
{
super.init( directoryService );
-
+
nexus = directoryService.getPartitionNexus();
schemaManager = directoryService.getSchemaManager();
@@ -215,11 +216,11 @@ public class SubentryInterceptor extends
TRIGGER_EXECUTION_SUBENTRIES_AT = schemaManager.getAttributeType( SchemaConstants.TRIGGER_EXECUTION_SUBENTRIES_AT );
SUBENTRY_OPATTRS = new AttributeType[]
- {
- ACCESS_CONTROL_SUBENTRIES_AT,
+ {
+ ACCESS_CONTROL_SUBENTRIES_AT,
SUBSCHEMA_SUBENTRY_AT,
- COLLECTIVE_ATTRIBUTE_SUBENTRIES_AT,
- TRIGGER_EXECUTION_SUBENTRIES_AT
+ COLLECTIVE_ATTRIBUTE_SUBENTRIES_AT,
+ TRIGGER_EXECUTION_SUBENTRIES_AT
};
ssParser = new SubtreeSpecificationParser( schemaManager );
@@ -258,10 +259,10 @@ public class SubentryInterceptor extends
{
Entry subentry = subentries.get();
DN subentryDn = subentry.getDn();
-
+
String subtree = subentry.get( SUBTREE_SPECIFICATION_AT ).getString();
SubtreeSpecification ss;
-
+
try
{
ss = ssParser.parse( subtree );
@@ -271,15 +272,15 @@ public class SubentryInterceptor extends
LOG.warn( "Failed while parsing subtreeSpecification for " + subentryDn );
continue;
}
-
+
Subentry newSubentry = new Subentry();
-
+
newSubentry.setAdministrativeRoles( getSubentryAdminRoles( subentry ) );
newSubentry.setSubtreeSpecification( ss );
-
+
subentryCache.addSubentry( subentryDn, newSubentry );
}
-
+
subentries.close();
}
catch ( Exception e )
@@ -309,22 +310,22 @@ public class SubentryInterceptor extends
if ( oc.contains( SchemaConstants.ACCESS_CONTROL_SUBENTRY_OC ) )
{
- adminRoles.add( AdministrativeRole.ACCESS_CONTROL_ADMIN_ROLE );
+ adminRoles.add( AdministrativeRole.AccessControlInnerArea );
}
if ( oc.contains( SchemaConstants.SUBSCHEMA_OC ) )
{
- adminRoles.add( AdministrativeRole.SUB_SCHEMA_ADMIN_ROLE );
+ adminRoles.add( AdministrativeRole.SubSchemaSpecificArea );
}
if ( oc.contains( SchemaConstants.COLLECTIVE_ATTRIBUTE_SUBENTRY_OC ) )
{
- adminRoles.add( AdministrativeRole.COLLECTIVE_ADMIN_ROLE );
+ adminRoles.add( AdministrativeRole.CollectiveAttributeSpecificArea );
}
if ( oc.contains( ApacheSchemaConstants.TRIGGER_EXECUTION_SUBENTRY_OC ) )
{
- adminRoles.add( AdministrativeRole.TRIGGERS_ADMIN_ROLE );
+ adminRoles.add( AdministrativeRole.TriggerExecutionInnerArea );
}
return adminRoles;
@@ -350,7 +351,7 @@ public class SubentryInterceptor extends
if ( opContext.hasRequestControl( SUBENTRY_CONTROL ) )
{
SubentriesControl subentriesControl = ( SubentriesControl ) opContext.getRequestControl( SUBENTRY_CONTROL );
-
+
return subentriesControl.isVisible();
}
@@ -358,7 +359,7 @@ public class SubentryInterceptor extends
}
/**
- * Update all the entries under an AP adding the
+ * Update all the entries under an AP adding the
*/
private void updateEntries( OperationEnum operation, CoreSession session, DN subentryDn, DN apDn, SubtreeSpecification ss, DN baseDn, List<EntryAttribute> operationalAttributes ) throws LdapException
{
@@ -380,17 +381,17 @@ public class SubentryInterceptor extends
{
Entry candidate = subentries.get();
DN candidateDn = candidate.getDn();
-
+
if ( evaluator.evaluate( ss, apDn, candidateDn, candidate ) )
{
List<Modification> modifications = null;
-
+
switch ( operation )
{
case ADD :
modifications = getOperationalModsForAdd( candidate, operationalAttributes );
break;
-
+
case REMOVE :
modifications = getOperationalModsForRemove( subentryDn, candidate );
break;
@@ -401,7 +402,7 @@ public class SubentryInterceptor extends
break;
*/
}
-
+
LOG.debug( "The entry {} has been evaluated to true for subentry {}", candidate.getDn(), subentryDn );
nexus.modify( new ModifyOperationContext( session, candidateDn, modifications ) );
}
@@ -413,25 +414,25 @@ public class SubentryInterceptor extends
}
}
-
+
/**
* Checks if the given DN is a namingContext
*/
private boolean isNamingContext( DN dn ) throws LdapException
{
DN namingContext = nexus.findSuffix( dn );
-
+
return dn.equals( namingContext );
}
-
-
+
+
/**
* Get the administrativePoint role
*/
private void checkAdministrativeRole( OperationContext opContext, DN apDn ) throws LdapException
{
Entry administrationPoint = opContext.lookup( apDn, ByPassConstants.LOOKUP_BYPASS );
-
+
// The administrativeRole AT must exist and not be null
EntryAttribute administrativeRole = administrationPoint.get( ADMINISTRATIVE_ROLE_AT );
@@ -442,8 +443,8 @@ public class SubentryInterceptor extends
throw new LdapNoSuchAttributeException( I18n.err( I18n.ERR_306, apDn ) );
}
}
-
-
+
+
/**
* Get the SubtreeSpecification, parse it and stores it into the subentry
*/
@@ -462,10 +463,10 @@ public class SubentryInterceptor extends
LOG.warn( msg );
throw new LdapInvalidAttributeValueException( ResultCodeEnum.INVALID_ATTRIBUTE_SYNTAX, msg );
}
-
+
subentry.setSubtreeSpecification( ss );
}
-
+
/**
* Checks to see if an entry being renamed has a descendant that is an
@@ -489,7 +490,7 @@ public class SubentryInterceptor extends
EntryFilteringCursor aps = nexus.search( searchOperationContext );
try
- {
+ {
if ( aps.next() )
{
aps.close();
@@ -500,7 +501,7 @@ public class SubentryInterceptor extends
{
throw new LdapOperationException( e.getMessage() );
}
-
+
return false;
}
@@ -616,8 +617,8 @@ public class SubentryInterceptor extends
attrs.put( ocFinalState );
return getSubentryAdminRoles( attrs );
}
-
-
+
+
/**
* Update the list of modifications with a modification associated with a specific
* role, if it's requested.
@@ -654,7 +655,7 @@ public class SubentryInterceptor extends
throws Exception
{
List<Modification> modifications = new ArrayList<Modification>();
-
+
getOperationalModForReplace( subentry.isAccessControlAdminRole(), ACCESS_CONTROL_SUBENTRIES_AT, entry, oldDn, newDn, modifications );
getOperationalModForReplace( subentry.isSchemaAdminRole(), SUBSCHEMA_SUBENTRY_AT, entry, oldDn, newDn, modifications );
getOperationalModForReplace( subentry.isCollectiveAdminRole(), COLLECTIVE_ATTRIBUTE_SUBENTRIES_AT, entry, oldDn, newDn, modifications );
@@ -677,19 +678,19 @@ public class SubentryInterceptor extends
EntryAttribute accessControlSubentries = new DefaultEntryAttribute( ACCESS_CONTROL_SUBENTRIES_AT, dn.getNormName() );
attributes.add( accessControlSubentries );
}
-
+
if ( subentry.isSchemaAdminRole() )
{
EntryAttribute subschemaSubentry = new DefaultEntryAttribute( SUBSCHEMA_SUBENTRY_AT, dn.getNormName() );
attributes.add( subschemaSubentry );
}
-
+
if ( subentry.isCollectiveAdminRole() )
{
EntryAttribute collectiveAttributeSubentries = new DefaultEntryAttribute( COLLECTIVE_ATTRIBUTE_SUBENTRIES_AT, dn.getNormName() );
attributes.add( collectiveAttributeSubentries );
}
-
+
if ( subentry.isTriggersAdminRole() )
{
EntryAttribute tiggerExecutionSubentries = new DefaultEntryAttribute( TRIGGER_EXECUTION_SUBENTRIES_AT, dn.getNormName() );
@@ -749,16 +750,16 @@ public class SubentryInterceptor extends
for ( EntryAttribute operationalAttribute : operationalAttributes )
{
EntryAttribute opAttrInEntry = entry.get( operationalAttribute.getAttributeType() );
-
+
if ( ( opAttrInEntry != null ) && ( opAttrInEntry.size() > 0 ) )
{
EntryAttribute newOperationalAttribute = operationalAttribute.clone();
-
+
for ( Value<?> value : opAttrInEntry )
{
newOperationalAttribute.add( value );
}
-
+
modifications.add( new DefaultModification( ModificationOperation.REPLACE_ATTRIBUTE, newOperationalAttribute ) );
}
else
@@ -769,10 +770,10 @@ public class SubentryInterceptor extends
return modifications;
}
-
+
/**
- * Get the list of modification to apply to all the entries
+ * Get the list of modification to apply to all the entries
*/
private List<Modification> getModsOnEntryModification( DN name, Entry oldEntry, Entry newEntry ) throws LdapException
{
@@ -827,10 +828,10 @@ public class SubentryInterceptor extends
return modList;
}
-
-
+
+
/**
- * Update the Operational Attribute with the reference to the subentry
+ * Update the Operational Attribute with the reference to the subentry
*/
private void setOperationalAttribute( Entry entry, DN subentryDn, AttributeType opAttr) throws LdapException
{
@@ -845,7 +846,7 @@ public class SubentryInterceptor extends
operational.add( subentryDn.getNormName() );
}
-
+
//-------------------------------------------------------------------------------------------
// Interceptor API methods
//-------------------------------------------------------------------------------------------
@@ -868,7 +869,7 @@ public class SubentryInterceptor extends
// Not allowed : we can't get a parent in those cases
throw new LdapOtherException( "Cannot find an AdministrativePoint for " + dn );
}
-
+
// Get the administrativePoint role : we must have one immediately
// upper
DN apDn = dn.getParent();
@@ -909,7 +910,7 @@ public class SubentryInterceptor extends
*/
DN baseDn = apDn;
baseDn = baseDn.addAll( subentry.getSubtreeSpecification().getBase() );
-
+
updateEntries( OperationEnum.ADD, addContext.getSession(), dn, apDn, subentry.getSubtreeSpecification(), baseDn, operationalAttributes );
// Store the newly modified entry into the context for later use in interceptor
@@ -927,33 +928,33 @@ public class SubentryInterceptor extends
for ( DN subentryDn : subentryCache )
{
DN apDn = subentryDn.getParent();
-
+
// No need to evaluate the entry if it's not below an AP.
if ( dn.isChildOf( apDn ) )
{
Subentry subentry = subentryCache.getSubentry( subentryDn );
SubtreeSpecification ss = subentry.getSubtreeSpecification();
-
+
// Now, evaluate the entry wrt the subentry ss
// and inject a ref to the subentry if it evaluates to true
if ( evaluator.evaluate( ss, apDn, dn, entry ) )
{
-
+
if ( subentry.isAccessControlAdminRole() )
{
setOperationalAttribute( entry, subentryDn, ACCESS_CONTROL_SUBENTRIES_AT );
}
-
+
if ( subentry.isSchemaAdminRole() )
{
setOperationalAttribute( entry, subentryDn, SUBSCHEMA_SUBENTRY_AT );
}
-
+
if ( subentry.isCollectiveAdminRole() )
{
setOperationalAttribute( entry, subentryDn, COLLECTIVE_ATTRIBUTE_SUBENTRIES_AT );
}
-
+
if ( subentry.isTriggersAdminRole() )
{
setOperationalAttribute( entry, subentryDn, TRIGGER_EXECUTION_SUBENTRIES_AT );
@@ -971,7 +972,7 @@ public class SubentryInterceptor extends
}
}
-
+
/**
* {@inheritDoc}
*/
@@ -985,7 +986,7 @@ public class SubentryInterceptor extends
if ( entry.contains( OBJECT_CLASS_AT, SchemaConstants.SUBENTRY_OC ) )
{
Subentry removedSubentry = subentryCache.getSubentry( dn );
-
+
/* ----------------------------------------------------------------
* Find the baseDn for the subentry and use that to search the tree
* for all entries included by the subtreeSpecification. Then we
@@ -1014,7 +1015,7 @@ public class SubentryInterceptor extends
}
}
-
+
/**
* {@inheritDoc}
*/
@@ -1041,7 +1042,7 @@ public class SubentryInterceptor extends
List<Modification> modifications = modifyContext.getModItems();
Entry entry = modifyContext.getEntry();
-
+
// We have three types of modifications :
// 1) A modification applied on a normal entry
// 2) A modification done on a subentry (the entry will have a 'subentry' ObjectClass)
@@ -1062,7 +1063,7 @@ public class SubentryInterceptor extends
break;
}
}
-
+
boolean containsSubentryOC = entry.contains( OBJECT_CLASS_AT, SchemaConstants.SUBENTRY_OC );
// Check if we have a modified subentry attribute in a Subentry entry
@@ -1086,14 +1087,14 @@ public class SubentryInterceptor extends
subentry.setSubtreeSpecification( ssNew );
subentry.setAdministrativeRoles( getSubentryTypes( entry, modifications ) );
subentryCache.addSubentry( dn, subentry );
-
+
next.modify( modifyContext );
// search for all entries selected by the old SS and remove references to subentry
DN apName = dn.getParent();
DN oldBaseDn = apName;
oldBaseDn = oldBaseDn.addAll( ssOld.getBase() );
-
+
ExprNode filter = new PresenceNode( OBJECT_CLASS_AT );
SearchControls controls = new SearchControls();
controls.setSearchScope( SearchControls.SUBTREE_SCOPE );
@@ -1112,7 +1113,7 @@ public class SubentryInterceptor extends
{
Entry candidate = subentries.get();
DN candidateDn = candidate.getDn();
-
+
if ( evaluator.evaluate( ssOld, apName, candidateDn, candidate ) )
{
nexus.modify( new ModifyOperationContext( modifyContext.getSession(), candidateDn,
@@ -1142,7 +1143,7 @@ public class SubentryInterceptor extends
{
Entry candidate = subentries.get();
DN candidateDn = candidate.getDn();
-
+
if ( evaluator.evaluate( ssNew, apName, candidateDn, candidate ) )
{
nexus.modify( new ModifyOperationContext( modifyContext.getSession(), candidateDn,
@@ -1161,7 +1162,7 @@ public class SubentryInterceptor extends
if ( !containsSubentryOC )
{
- Entry newEntry = modifyContext.getAlteredEntry();
+ Entry newEntry = modifyContext.getAlteredEntry();
List<Modification> subentriesOpAttrMods = getModsOnEntryModification( dn, entry, newEntry );
@@ -1183,7 +1184,7 @@ public class SubentryInterceptor extends
* <u>Case 1 :</u><br>
* A normal entry (ie, not a subentry or an AP) may be part of some administrative areas.
* We have to remove the references to the associated areas if the entry gets out of them.<br>
- * This entry can also be moved to some other administrative area, and it should then be
+ * This entry can also be moved to some other administrative area, and it should then be
* updated to point to the associated subentries.
* <br><br>
* There is one preliminary condition : If the entry has a descendant which is an
@@ -1196,8 +1197,8 @@ public class SubentryInterceptor extends
* selected by the new subtreeSpecification by adding a reference to the subentry into them.
* <br><br>
* <u>Case 3 :</u><br>
- *
- *
+ *
+ *
* @param next The next interceptor in the chain
* @param moveContext The context containing all the needed informations to proceed
* @throws LdapException If the move failed
@@ -1215,7 +1216,7 @@ public class SubentryInterceptor extends
// o Check that there is a new AP where we move the subentry
// o Remove the op Attr from all the entry selected by the subentry
// o Add the op Attr in all the selected entry by the subentry
-
+
// If we move it, we have to check that
// the new parent is an AP
checkAdministrativeRole( moveContext, newSuperiorDn );
@@ -1230,7 +1231,7 @@ public class SubentryInterceptor extends
newName.normalize( schemaManager.getNormalizerMapping() );
subentryCache.addSubentry( newName, subentry );
-
+
next.move( moveContext );
subentry = subentryCache.getSubentry( newName );
@@ -1255,14 +1256,14 @@ public class SubentryInterceptor extends
Entry candidate = subentries.get();
DN dn = candidate.getDn();
dn.normalize( schemaManager.getNormalizerMapping() );
-
+
if ( evaluator.evaluate( ss, apName, dn, candidate ) )
{
nexus.modify( new ModifyOperationContext( moveContext.getSession(), dn, getOperationalModsForReplace(
oldDn, newName, subentry, candidate ) ) );
}
}
-
+
subentries.close();
}
catch ( Exception e )
@@ -1275,7 +1276,7 @@ public class SubentryInterceptor extends
// A normal entry. It may be part of a SubtreeSpecifciation. In this
// case, we have to update the opAttrs (removing old ones and adding the
// new ones)
-
+
// First, an moved entry which has an AP in one of its descendant
// can't be moved.
if ( hasAdministrativeDescendant( moveContext, oldDn ) )
@@ -1322,7 +1323,7 @@ public class SubentryInterceptor extends
newName.normalize( schemaManager.getNormalizerMapping() );
subentryCache.addSubentry( newName, subentry );
-
+
next.moveAndRename( moveAndRenameContext );
subentry = subentryCache.getSubentry( newName );
@@ -1346,14 +1347,14 @@ public class SubentryInterceptor extends
Entry candidate = subentries.get();
DN dn = candidate.getDn();
dn.normalize( schemaManager.getNormalizerMapping() );
-
+
if ( evaluator.evaluate( ss, apName, dn, candidate ) )
{
nexus.modify( new ModifyOperationContext( moveAndRenameContext.getSession(), dn, getOperationalModsForReplace(
oldDn, newName, subentry, candidate ) ) );
}
}
-
+
subentries.close();
}
catch ( Exception e )
@@ -1427,14 +1428,14 @@ public class SubentryInterceptor extends
Entry candidate = subentries.get();
DN dn = candidate.getDn();
dn.normalize( schemaManager.getNormalizerMapping() );
-
+
if ( evaluator.evaluate( ss, apName, dn, candidate ) )
{
nexus.modify( new ModifyOperationContext( renameContext.getSession(), dn, getOperationalModsForReplace(
oldDn, newName, subentry, candidate ) ) );
}
}
-
+
subentries.close();
}
catch ( Exception e )
@@ -1534,7 +1535,7 @@ public class SubentryInterceptor extends
operational.add( subentryDn.getNormName() );
}
-
+
if ( subentry.isSchemaAdminRole() )
{
operational = subentryAttrs.get( SUBSCHEMA_SUBENTRY_AT );
@@ -1547,7 +1548,7 @@ public class SubentryInterceptor extends
operational.add( subentryDn.getNormName() );
}
-
+
if ( subentry.isCollectiveAdminRole() )
{
operational = subentryAttrs.get( COLLECTIVE_ATTRIBUTE_SUBENTRIES_AT );
@@ -1560,7 +1561,7 @@ public class SubentryInterceptor extends
operational.add( subentryDn.getNormName() );
}
-
+
if ( subentry.isTriggersAdminRole() )
{
operational = subentryAttrs.get( TRIGGER_EXECUTION_SUBENTRIES_AT );
Added: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/subtree/AdministrativeRole.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/subtree/AdministrativeRole.java?rev=981063&view=auto
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/subtree/AdministrativeRole.java (added)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/subtree/AdministrativeRole.java Sat Jul 31 14:23:30 2010
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.directory.shared.ldap.subtree;
+
+import org.apache.directory.shared.ldap.util.StringTools;
+
+/**
+*
+* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+*/
+public enum AdministrativeRole
+{
+ /** The AutonomousArea role */
+ AutonomousArea( "autonomousArea" ),
+
+ /** The AccessControlSpecificArea role */
+ AccessControlSpecificArea( "accessControlSpecificArea" ),
+
+ /** The AccessControlInnerArea role */
+ AccessControlInnerArea( "accessControlInnerArea" ),
+
+ /** The CollectiveAttributeSpecificArea role */
+ CollectiveAttributeSpecificArea( "collectiveAttributeSpecificArea" ),
+
+ /** The CollectiveAttributeInnerArea role */
+ CollectiveAttributeInnerArea( "collectiveAttributeInnerArea" ),
+
+ /** The SubSchemaSpecificArea role */
+ SubSchemaSpecificArea( "subSchemaSpecificArea" ),
+
+ /** The TriggerExecutionSpecificArea role */
+ TriggerExecutionSpecificArea( "triggerExecutionSpecificArea" ),
+
+ /** The TriggerExecutionInnerArea role */
+ TriggerExecutionInnerArea( "triggerExecutionInnerArea" );
+
+ /** The AdministrativeRole as a String */
+ private String role;
+
+ /**
+ * Creates an instance of AdministrativeRole
+ */
+ private AdministrativeRole( String role )
+ {
+ this.role = StringTools.toLowerCase( StringTools.trim( role ) );
+ }
+
+
+ /**
+ * @return The AdministrativeRole as a String
+ */
+ public String getRole()
+ {
+ return role;
+ }
+}