o Added two new AT in apache schema for dealing with subentries using UUID instead of DN
o Modified the server code to deal with this new implementation

This is a partial commit, more modifications will come later. The branch won't build.

git-svn-id: https://svn.apache.org/repos/asf/directory/shared/branches/shared-subtree@966520 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/i18n/src/main/java/org/apache/directory/shared/i18n/I18n.java b/i18n/src/main/java/org/apache/directory/shared/i18n/I18n.java
index a1bcd9b..1524eb8 100644
--- a/i18n/src/main/java/org/apache/directory/shared/i18n/I18n.java
+++ b/i18n/src/main/java/org/apache/directory/shared/i18n/I18n.java
@@ -585,7 +585,7 @@
     ERR_04444( "ERR_04444" ),
     ERR_04445( "ERR_04445" ),
     ERR_04446( "ERR_04446" ),
-    ERR_04447( "ERR_04447" ),
+    ERR_04447_CANNOT_NORMALIZE_VALUE( "ERR_04447_CANNOT_NORMALIZE_VALUE" ),
     ERR_04448( "ERR_04448" ),
     ERR_04449( "ERR_04449" ),
     ERR_04450( "ERR_04450" ),
diff --git a/i18n/src/main/resources/org/apache/directory/shared/i18n/errors.properties b/i18n/src/main/resources/org/apache/directory/shared/i18n/errors.properties
index 9c3b46a..40babbf 100644
--- a/i18n/src/main/resources/org/apache/directory/shared/i18n/errors.properties
+++ b/i18n/src/main/resources/org/apache/directory/shared/i18n/errors.properties
@@ -569,7 +569,7 @@
 ERR_04444=I don't really know how to compare anything other than ServerBinaryValues at this point in time.
 ERR_04445=There is no Syntax associated with this attributeType
 ERR_04446=Cannot use standard serialization for a ServerStringValue
-ERR_04447=Cannot normalize the wrapped value {0}
+ERR_04447_CANNOT_NORMALIZE_VALUE=Cannot normalize the wrapped value {0}
 ERR_04448=I don't know what to do if value is not a ServerStringValue
 ERR_04449=The value ''{0}'' can't be normalized, it hasn't been added
 ERR_04450=The value ''{0}'' is incorrect, it hasn't been added
@@ -578,7 +578,7 @@
 ERR_04453=The upID ({0}) is not an OID or is different from the AttributeType OID ({1})
 ERR_04454=Cannot use standard serialization for a ServerAttribute
 ERR_04455=The ID ''{0}''is incompatible with the AttributeType's id ''{1}''
-ERR_04456=An ID cannnot be null, empty, or resolved to an emtpy value when trimmed
+ERR_04456=An ID cannot be null, empty, or resolved to an emtpy value when trimmed
 ERR_04457_NULL_ATTRIBUTE_ID=The ID should not be null or empty
 ERR_04458=Cannot add an attribute without an ID
 ERR_04459=We have had an error while adding the ''{0}'' AttributeType : {1}
diff --git a/ldap-constants/src/main/java/org/apache/directory/shared/ldap/constants/SchemaConstants.java b/ldap-constants/src/main/java/org/apache/directory/shared/ldap/constants/SchemaConstants.java
index 2bc2acd..61cfaf1 100644
--- a/ldap-constants/src/main/java/org/apache/directory/shared/ldap/constants/SchemaConstants.java
+++ b/ldap-constants/src/main/java/org/apache/directory/shared/ldap/constants/SchemaConstants.java
@@ -438,7 +438,15 @@
 
     // TriggerExecutionSubentries
     String TRIGGER_EXECUTION_SUBENTRIES_AT          = "triggerExecutionSubentries";
-    String TRIGGER_EXECUTION_SUBENTRIES_AT_OID      = "1.3.6.1.4.1.18060.0.4.1.2.27";
+    String TRIGGER_EXECUTION_SUBENTRIES_AT_OID      = "1.3.6.1.4.1.18060.0.4.1.2.12";
+
+    // Ads-SubschemaSubentries
+    String ADS_SUBSCHEMA_SUBENTRIES_AT              = "ads-subschemaSubentries";
+    String ADS_SUBSCHEMA_SUBENTRIES_AT_OID          = "1.3.6.1.4.1.18060.0.4.1.2.13";
+
+    // Ads-CollectiveAttributeSubentries
+    String ADS_COLLECTIVE_ATTRIBUTE_SUBENTRIES_AT   = "ads-collectiveAttributeSubentries";
+    String ADS_COLLECTIVE_ATTRIBUTE_SUBENTRIES_AT_OID = "1.3.6.1.4.1.18060.0.4.1.2.14";
 
     // Comparators
     String COMPARATORS_AT                           = "comparators";
diff --git a/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerEnableDisableLoadTest.java b/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerEnableDisableLoadTest.java
index 36951f0..3db33f5 100644
--- a/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerEnableDisableLoadTest.java
+++ b/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerEnableDisableLoadTest.java
@@ -149,14 +149,14 @@
         assertEquals( 0, disabled.size() );
 
         assertTrue( schemaManager.getErrors().isEmpty() );
-        assertEquals( 389, schemaManager.getAttributeTypeRegistry().size() );
+        assertEquals( 391, schemaManager.getAttributeTypeRegistry().size() );
         assertEquals( 48, schemaManager.getComparatorRegistry().size() );
         assertEquals( 48, schemaManager.getMatchingRuleRegistry().size() );
         assertEquals( 48, schemaManager.getNormalizerRegistry().size() );
         assertEquals( 114, schemaManager.getObjectClassRegistry().size() );
         assertEquals( 66, schemaManager.getSyntaxCheckerRegistry().size() );
         assertEquals( 71, schemaManager.getLdapSyntaxRegistry().size() );
-        assertEquals( 622, schemaManager.getGlobalOidRegistry().size() );
+        assertEquals( 624, schemaManager.getGlobalOidRegistry().size() );
 
         assertEquals( 12, schemaManager.getRegistries().getLoadedSchemas().size() );
         assertNull( schemaManager.getRegistries().getLoadedSchema( "nis" ) );
@@ -194,14 +194,14 @@
         assertNotNull( schemaManager.lookupAttributeTypeRegistry( "gecos" ) );
 
         assertTrue( schemaManager.getErrors().isEmpty() );
-        assertEquals( 416, schemaManager.getAttributeTypeRegistry().size() );
+        assertEquals( 418, schemaManager.getAttributeTypeRegistry().size() );
         assertEquals( 49, schemaManager.getComparatorRegistry().size() );
         assertEquals( 49, schemaManager.getMatchingRuleRegistry().size() );
         assertEquals( 49, schemaManager.getNormalizerRegistry().size() );
         assertEquals( 127, schemaManager.getObjectClassRegistry().size() );
         assertEquals( 68, schemaManager.getSyntaxCheckerRegistry().size() );
         assertEquals( 73, schemaManager.getLdapSyntaxRegistry().size() );
-        assertEquals( 665, schemaManager.getGlobalOidRegistry().size() );
+        assertEquals( 667, schemaManager.getGlobalOidRegistry().size() );
 
         assertEquals( 13, schemaManager.getRegistries().getLoadedSchemas().size() );
         assertNotNull( schemaManager.getRegistries().getLoadedSchema( "nis" ) );
@@ -234,14 +234,14 @@
         }
 
         assertTrue( schemaManager.getErrors().isEmpty() );
-        assertEquals( 389, schemaManager.getAttributeTypeRegistry().size() );
+        assertEquals( 391, schemaManager.getAttributeTypeRegistry().size() );
         assertEquals( 48, schemaManager.getComparatorRegistry().size() );
         assertEquals( 48, schemaManager.getMatchingRuleRegistry().size() );
         assertEquals( 48, schemaManager.getNormalizerRegistry().size() );
         assertEquals( 114, schemaManager.getObjectClassRegistry().size() );
         assertEquals( 66, schemaManager.getSyntaxCheckerRegistry().size() );
         assertEquals( 71, schemaManager.getLdapSyntaxRegistry().size() );
-        assertEquals( 622, schemaManager.getGlobalOidRegistry().size() );
+        assertEquals( 624, schemaManager.getGlobalOidRegistry().size() );
 
         assertEquals( 12, schemaManager.getRegistries().getLoadedSchemas().size() );
         assertNull( schemaManager.getRegistries().getLoadedSchema( "nis" ) );
diff --git a/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerLoadTest.java b/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerLoadTest.java
index 74991ae..13b71cc 100644
--- a/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerLoadTest.java
+++ b/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerLoadTest.java
@@ -282,14 +282,14 @@
         assertTrue( schemaManager.load( "apache" ) );
 
         assertTrue( schemaManager.getErrors().isEmpty() );
-        assertEquals( 146, schemaManager.getAttributeTypeRegistry().size() );
+        assertEquals( 148, schemaManager.getAttributeTypeRegistry().size() );
         assertEquals( 43, schemaManager.getComparatorRegistry().size() );
         assertEquals( 43, schemaManager.getMatchingRuleRegistry().size() );
         assertEquals( 43, schemaManager.getNormalizerRegistry().size() );
         assertEquals( 53, schemaManager.getObjectClassRegistry().size() );
         assertEquals( 62, schemaManager.getSyntaxCheckerRegistry().size() );
         assertEquals( 66, schemaManager.getLdapSyntaxRegistry().size() );
-        assertEquals( 308, schemaManager.getGlobalOidRegistry().size() );
+        assertEquals( 310, schemaManager.getGlobalOidRegistry().size() );
 
         assertEquals( 3, schemaManager.getRegistries().getLoadedSchemas().size() );
         assertNotNull( schemaManager.getRegistries().getLoadedSchema( "system" ) );
diff --git a/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerLoadWithDepsTest.java b/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerLoadWithDepsTest.java
index 8c15294..8629516 100644
--- a/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerLoadWithDepsTest.java
+++ b/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerLoadWithDepsTest.java
@@ -167,14 +167,14 @@
         schemaManager.loadWithDeps( "apache" );
 
         assertTrue( schemaManager.getErrors().isEmpty() );
-        assertEquals( 146, schemaManager.getAttributeTypeRegistry().size() );
+        assertEquals( 148, schemaManager.getAttributeTypeRegistry().size() );
         assertEquals( 43, schemaManager.getComparatorRegistry().size() );
         assertEquals( 43, schemaManager.getMatchingRuleRegistry().size() );
         assertEquals( 43, schemaManager.getNormalizerRegistry().size() );
         assertEquals( 53, schemaManager.getObjectClassRegistry().size() );
         assertEquals( 62, schemaManager.getSyntaxCheckerRegistry().size() );
         assertEquals( 66, schemaManager.getLdapSyntaxRegistry().size() );
-        assertEquals( 308, schemaManager.getGlobalOidRegistry().size() );
+        assertEquals( 310, schemaManager.getGlobalOidRegistry().size() );
 
         assertEquals( 3, schemaManager.getRegistries().getLoadedSchemas().size() );
         assertNotNull( schemaManager.getRegistries().getLoadedSchema( "system" ) );
@@ -251,14 +251,14 @@
         schemaManager.loadWithDeps( "other" );
 
         assertTrue( schemaManager.getErrors().isEmpty() );
-        assertEquals( 177, schemaManager.getAttributeTypeRegistry().size() );
+        assertEquals( 179, schemaManager.getAttributeTypeRegistry().size() );
         assertEquals( 48, schemaManager.getComparatorRegistry().size() );
         assertEquals( 48, schemaManager.getMatchingRuleRegistry().size() );
         assertEquals( 48, schemaManager.getNormalizerRegistry().size() );
         assertEquals( 66, schemaManager.getObjectClassRegistry().size() );
         assertEquals( 66, schemaManager.getSyntaxCheckerRegistry().size() );
         assertEquals( 71, schemaManager.getLdapSyntaxRegistry().size() );
-        assertEquals( 362, schemaManager.getGlobalOidRegistry().size() );
+        assertEquals( 364, schemaManager.getGlobalOidRegistry().size() );
 
         assertEquals( 5, schemaManager.getRegistries().getLoadedSchemas().size() );
         assertNotNull( schemaManager.getRegistries().getLoadedSchema( "system" ) );
diff --git a/ldap-schema/src/main/resources/schema/ou=schema/cn=apache/ou=attributetypes/m-oid=1.3.6.1.4.1.18060.0.4.1.2.11.ldif b/ldap-schema/src/main/resources/schema/ou=schema/cn=apache/ou=attributetypes/m-oid=1.3.6.1.4.1.18060.0.4.1.2.11.ldif
index ac1f7b5..ed55755 100644
--- a/ldap-schema/src/main/resources/schema/ou=schema/cn=apache/ou=attributetypes/m-oid=1.3.6.1.4.1.18060.0.4.1.2.11.ldif
+++ b/ldap-schema/src/main/resources/schema/ou=schema/cn=apache/ou=attributetypes/m-oid=1.3.6.1.4.1.18060.0.4.1.2.11.ldif
@@ -10,10 +10,11 @@
 m-oid: 1.3.6.1.4.1.18060.0.4.1.2.11
 entrycsn: 20090818052729.367000Z#000000#000#000000
 m-nousermodification: TRUE
-m-syntax: 1.3.6.1.4.1.1466.115.121.1.12
+m-syntax: 1.3.6.1.1.16.1
 objectclass: metaAttributeType
 objectclass: metaTop
 objectclass: top
 m-name: accessControlSubentries
-m-equality: distinguishedNameMatch
+m-equality: uuidMatch
+m-ordering: uuidOrderingMatch
 
diff --git a/ldap-schema/src/main/resources/schema/ou=schema/cn=apache/ou=attributetypes/m-oid=1.3.6.1.4.1.18060.0.4.1.2.27.ldif b/ldap-schema/src/main/resources/schema/ou=schema/cn=apache/ou=attributetypes/m-oid=1.3.6.1.4.1.18060.0.4.1.2.12.ldif
similarity index 66%
rename from ldap-schema/src/main/resources/schema/ou=schema/cn=apache/ou=attributetypes/m-oid=1.3.6.1.4.1.18060.0.4.1.2.27.ldif
rename to ldap-schema/src/main/resources/schema/ou=schema/cn=apache/ou=attributetypes/m-oid=1.3.6.1.4.1.18060.0.4.1.2.12.ldif
index 9f58bd2..c02930b 100644
--- a/ldap-schema/src/main/resources/schema/ou=schema/cn=apache/ou=attributetypes/m-oid=1.3.6.1.4.1.18060.0.4.1.2.27.ldif
+++ b/ldap-schema/src/main/resources/schema/ou=schema/cn=apache/ou=attributetypes/m-oid=1.3.6.1.4.1.18060.0.4.1.2.12.ldif
@@ -1,20 +1,21 @@
 version: 1
-dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.27,ou=attributeTypes,cn=apache,ou=schema
+dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.12,ou=attributeTypes,cn=apache,ou=schema
 createtimestamp: 20090818022729Z
 m-singlevalue: FALSE
 m-obsolete: FALSE
-m-description: Used to track subentries associated with a trigger area which an 
- entry falls under
+m-description: Used to track subentries associated with a trigger area which an
+  entry falls under
 m-usage: DIRECTORY_OPERATION
 creatorsname: uid=admin,ou=system
 m-collective: FALSE
-m-oid: 1.3.6.1.4.1.18060.0.4.1.2.27
+m-oid: 1.3.6.1.4.1.18060.0.4.1.2.12
 entrycsn: 20090818052729.833000Z#000000#000#000000
 m-nousermodification: TRUE
-m-syntax: 1.3.6.1.4.1.1466.115.121.1.12
+m-syntax: 1.3.6.1.1.16.1
 objectclass: metaAttributeType
 objectclass: metaTop
 objectclass: top
 m-name: triggerExecutionSubentries
-m-equality: distinguishedNameMatch
+m-equality: uuidMatch
+m-ordering: uuidOrderingMatch
 
diff --git a/ldap-schema/src/main/resources/schema/ou=schema/cn=apache/ou=attributetypes/m-oid=1.3.6.1.4.1.18060.0.4.1.2.13.ldif b/ldap-schema/src/main/resources/schema/ou=schema/cn=apache/ou=attributetypes/m-oid=1.3.6.1.4.1.18060.0.4.1.2.13.ldif
new file mode 100644
index 0000000..508fec0
--- /dev/null
+++ b/ldap-schema/src/main/resources/schema/ou=schema/cn=apache/ou=attributetypes/m-oid=1.3.6.1.4.1.18060.0.4.1.2.13.ldif
@@ -0,0 +1,21 @@
+version: 1
+dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.13,ou=attributeTypes,cn=apache,ou=schema
+createtimestamp: 20090818022729Z
+m-singlevalue: FALSE
+m-obsolete: FALSE
+m-description: Used to track subentries associated with a subschema area which 
+ an entry falls under
+m-usage: DIRECTORY_OPERATION
+creatorsname: uid=admin,ou=system
+m-collective: FALSE
+m-oid: 1.3.6.1.4.1.18060.0.4.1.2.13
+entrycsn: 20090818052729.833000Z#000000#000#000000
+m-nousermodification: TRUE
+m-syntax: 1.3.6.1.1.16.1
+objectclass: metaAttributeType
+objectclass: metaTop
+objectclass: top
+m-name: ads-subschemaSubentries
+m-equality: uuidMatch
+m-ordering: uuidOrderingMatch
+
diff --git a/ldap-schema/src/main/resources/schema/ou=schema/cn=apache/ou=attributetypes/m-oid=1.3.6.1.4.1.18060.0.4.1.2.14.ldif b/ldap-schema/src/main/resources/schema/ou=schema/cn=apache/ou=attributetypes/m-oid=1.3.6.1.4.1.18060.0.4.1.2.14.ldif
new file mode 100644
index 0000000..6441ca5
--- /dev/null
+++ b/ldap-schema/src/main/resources/schema/ou=schema/cn=apache/ou=attributetypes/m-oid=1.3.6.1.4.1.18060.0.4.1.2.14.ldif
@@ -0,0 +1,21 @@
+version: 1
+dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.14,ou=attributeTypes,cn=apache,ou=schema
+createtimestamp: 20090818022729Z
+m-singlevalue: FALSE
+m-obsolete: FALSE
+m-description: Used to track subentries associated with a collectiveAttribute a
+ rea which an entry falls under
+m-usage: DIRECTORY_OPERATION
+creatorsname: uid=admin,ou=system
+m-collective: FALSE
+m-oid: 1.3.6.1.4.1.18060.0.4.1.2.14
+entrycsn: 20090818052729.833000Z#000000#000#000000
+m-nousermodification: TRUE
+m-syntax: 1.3.6.1.1.16.1
+objectclass: metaAttributeType
+objectclass: metaTop
+objectclass: top
+m-name: ads-collectiveAttributeSubentries
+m-equality: uuidMatch
+m-ordering: uuidOrderingMatch
+
diff --git a/ldap/src/main/java/org/apache/directory/shared/ldap/entry/AbstractValue.java b/ldap/src/main/java/org/apache/directory/shared/ldap/entry/AbstractValue.java
index 2bf9555..dc52a46 100644
--- a/ldap/src/main/java/org/apache/directory/shared/ldap/entry/AbstractValue.java
+++ b/ldap/src/main/java/org/apache/directory/shared/ldap/entry/AbstractValue.java
@@ -19,9 +19,8 @@
  */
 package org.apache.directory.shared.ldap.entry;
 
-import org.apache.directory.shared.ldap.exception.LdapException;
-
 import org.apache.directory.shared.i18n.I18n;
+import org.apache.directory.shared.ldap.exception.LdapException;
 import org.apache.directory.shared.ldap.schema.AttributeType;
 import org.apache.directory.shared.ldap.schema.LdapComparator;
 import org.apache.directory.shared.ldap.schema.MatchingRule;
@@ -129,7 +128,7 @@
         }
         catch ( LdapException le )
         {
-            String message = I18n.err( I18n.ERR_04447, le.getLocalizedMessage() );
+            String message = I18n.err( I18n.ERR_04447_CANNOT_NORMALIZE_VALUE, le.getLocalizedMessage() );
             LOG.info( message );
             normalized = false;
         }
@@ -142,7 +141,7 @@
         }
         catch ( LdapException ne )
         {
-            String message = I18n.err( I18n.ERR_04447, ne.getLocalizedMessage() );
+            String message = I18n.err( I18n.ERR_04447_CANNOT_NORMALIZE_VALUE, ne.getLocalizedMessage() );
             LOG.info( message );
             normalized = false;
         }