You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2004/10/28 10:06:13 UTC
svn commit: rev 55796 - in incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema: . bootstrap
Author: akarasulu
Date: Thu Oct 28 01:06:12 2004
New Revision: 55796
Added:
incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/GlobalRegistries.java
Modified:
incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/GlobalAttributeTypeRegistry.java
incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/GlobalMatchingRuleRegistry.java
incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/GlobalObjectClassRegistry.java
incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/GlobalSyntaxRegistry.java
incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/bootstrap/BootstrapMatchingRuleRegistry.java
incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/bootstrap/BootstrapObjectClassRegistry.java
incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/bootstrap/BootstrapSyntaxRegistry.java
Log:
Changes ...
o added new GlobalRegistries implementation of Registries
o made changes to accomodate need for public list methods
Modified: incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/GlobalAttributeTypeRegistry.java
==============================================================================
--- incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/GlobalAttributeTypeRegistry.java (original)
+++ incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/GlobalAttributeTypeRegistry.java Thu Oct 28 01:06:12 2004
@@ -193,7 +193,6 @@
}
-
public Iterator list()
{
return new JoinIterator( new Iterator[]
Modified: incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/GlobalMatchingRuleRegistry.java
==============================================================================
--- incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/GlobalMatchingRuleRegistry.java (original)
+++ incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/GlobalMatchingRuleRegistry.java Thu Oct 28 01:06:12 2004
@@ -19,9 +19,11 @@
import java.util.Map;
import java.util.HashMap;
+import java.util.Iterator;
import javax.naming.NamingException;
import org.apache.ldap.common.schema.MatchingRule;
+import org.apache.ldap.common.util.JoinIterator;
import org.apache.eve.SystemPartition;
import org.apache.eve.schema.bootstrap.BootstrapMatchingRuleRegistry;
@@ -173,5 +175,12 @@
throw new NamingException( "OID " + id + " not found in oid to " +
"schema name map!" );
+ }
+
+
+ public Iterator list()
+ {
+ return new JoinIterator( new Iterator[]
+ { byOid.values().iterator(),bootstrap.list() } );
}
}
Modified: incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/GlobalObjectClassRegistry.java
==============================================================================
--- incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/GlobalObjectClassRegistry.java (original)
+++ incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/GlobalObjectClassRegistry.java Thu Oct 28 01:06:12 2004
@@ -19,9 +19,11 @@
import java.util.Map;
import java.util.HashMap;
+import java.util.Iterator;
import javax.naming.NamingException;
import org.apache.ldap.common.schema.ObjectClass;
+import org.apache.ldap.common.util.JoinIterator;
import org.apache.eve.SystemPartition;
import org.apache.eve.schema.bootstrap.BootstrapObjectClassRegistry;
@@ -173,5 +175,12 @@
throw new NamingException( "OID " + id + " not found in oid to " +
"schema name map!" );
+ }
+
+
+ public Iterator list()
+ {
+ return new JoinIterator( new Iterator[]
+ { byOid.values().iterator(),bootstrap.list() } );
}
}
Added: incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/GlobalRegistries.java
==============================================================================
--- (empty file)
+++ incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/GlobalRegistries.java Thu Oct 28 01:06:12 2004
@@ -0,0 +1,468 @@
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed 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.eve.schema;
+
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.naming.NamingException;
+
+import org.apache.ldap.common.schema.ObjectClass;
+import org.apache.ldap.common.schema.Syntax;
+import org.apache.ldap.common.schema.MatchingRule;
+import org.apache.ldap.common.schema.AttributeType;
+import org.apache.eve.SystemPartition;
+import org.apache.eve.schema.bootstrap.*;
+
+
+/**
+ * Document me.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class GlobalRegistries implements Registries
+{
+ private GlobalAttributeTypeRegistry attributeTypeRegistry;
+ private GlobalComparatorRegistry comparatorRegistry;
+ private GlobalDitContentRuleRegistry ditContentRuleRegistry;
+ private GlobalDitStructureRuleRegistry ditStructureRuleRegistry;
+ private GlobalMatchingRuleRegistry matchingRuleRegistry;
+ private GlobalMatchingRuleUseRegistry matchingRuleUseRegistry;
+ private GlobalNameFormRegistry nameFormRegistry;
+ private GlobalNormalizerRegistry normalizerRegistry;
+ private GlobalObjectClassRegistry objectClassRegistry;
+ private GlobalOidRegistry oidRegistry;
+ private GlobalSyntaxCheckerRegistry syntaxCheckerRegistry;
+ private GlobalSyntaxRegistry syntaxRegistry;
+
+
+ public GlobalRegistries( SystemPartition systemPartition,
+ BootstrapRegistries bootstrapRegistries )
+ {
+ oidRegistry = new GlobalOidRegistry( systemPartition,
+ ( BootstrapOidRegistry ) bootstrapRegistries.getOidRegistry() );
+ normalizerRegistry = new GlobalNormalizerRegistry( systemPartition,
+ ( BootstrapNormalizerRegistry ) bootstrapRegistries.getNormalizerRegistry());
+ comparatorRegistry = new GlobalComparatorRegistry( systemPartition,
+ ( BootstrapComparatorRegistry ) bootstrapRegistries.getComparatorRegistry());
+ syntaxCheckerRegistry = new GlobalSyntaxCheckerRegistry( systemPartition,
+ ( BootstrapSyntaxCheckerRegistry ) bootstrapRegistries.getSyntaxCheckerRegistry());
+ syntaxRegistry = new GlobalSyntaxRegistry( systemPartition,
+ ( BootstrapSyntaxRegistry ) bootstrapRegistries.getSyntaxRegistry(),
+ oidRegistry );
+ matchingRuleRegistry = new GlobalMatchingRuleRegistry( systemPartition,
+ ( BootstrapMatchingRuleRegistry ) bootstrapRegistries.getMatchingRuleRegistry(),
+ oidRegistry );
+ attributeTypeRegistry = new GlobalAttributeTypeRegistry( systemPartition,
+ ( BootstrapAttributeTypeRegistry ) bootstrapRegistries.getAttributeTypeRegistry(),
+ oidRegistry );
+ objectClassRegistry = new GlobalObjectClassRegistry( systemPartition,
+ ( BootstrapObjectClassRegistry ) bootstrapRegistries.getObjectClassRegistry(),
+ oidRegistry );
+ ditContentRuleRegistry = new GlobalDitContentRuleRegistry( systemPartition,
+ ( BootstrapDitContentRuleRegistry ) bootstrapRegistries.getDitContentRuleRegistry(),
+ oidRegistry );
+ ditStructureRuleRegistry = new GlobalDitStructureRuleRegistry( systemPartition,
+ ( BootstrapDitStructureRuleRegistry ) bootstrapRegistries.getDitStructureRuleRegistry(),
+ oidRegistry );
+ matchingRuleUseRegistry = new GlobalMatchingRuleUseRegistry( systemPartition,
+ ( BootstrapMatchingRuleUseRegistry ) bootstrapRegistries.getMatchingRuleUseRegistry(),
+ oidRegistry );
+ nameFormRegistry = new GlobalNameFormRegistry( systemPartition,
+ ( BootstrapNameFormRegistry ) bootstrapRegistries.getNameFormRegistry(),
+ oidRegistry );
+ }
+
+
+ public AttributeTypeRegistry getAttributeTypeRegistry()
+ {
+ return attributeTypeRegistry;
+ }
+
+ public ComparatorRegistry getComparatorRegistry()
+ {
+ return comparatorRegistry;
+ }
+
+ public DITContentRuleRegistry getDitContentRuleRegistry()
+ {
+ return ditContentRuleRegistry;
+ }
+
+ public DITStructureRuleRegistry getDitStructureRuleRegistry()
+ {
+ return ditStructureRuleRegistry;
+ }
+
+ public MatchingRuleRegistry getMatchingRuleRegistry()
+ {
+ return matchingRuleRegistry;
+ }
+
+ public MatchingRuleUseRegistry getMatchingRuleUseRegistry()
+ {
+ return matchingRuleUseRegistry;
+ }
+
+ public NameFormRegistry getNameFormRegistry()
+ {
+ return nameFormRegistry;
+ }
+
+ public NormalizerRegistry getNormalizerRegistry()
+ {
+ return normalizerRegistry;
+ }
+
+ public ObjectClassRegistry getObjectClassRegistry()
+ {
+ return objectClassRegistry;
+ }
+
+ public OidRegistry getOidRegistry()
+ {
+ return oidRegistry;
+ }
+
+ public SyntaxCheckerRegistry getSyntaxCheckerRegistry()
+ {
+ return syntaxCheckerRegistry;
+ }
+
+ public SyntaxRegistry getSyntaxRegistry()
+ {
+ return syntaxRegistry;
+ }
+
+
+ // ------------------------------------------------------------------------
+ // Code used to sanity check the resolution of entities in registries
+ // ------------------------------------------------------------------------
+
+
+ /**
+ * Attempts to resolve the dependent schema objects of all entities that
+ * refer to other objects within the registries. Null references will be
+ * handed appropriately.
+ *
+ * @return a list of exceptions encountered while resolving entities
+ */
+ public List checkRefInteg()
+ {
+ ArrayList errors = new ArrayList();
+
+ Iterator list = objectClassRegistry.list();
+ while ( list.hasNext() )
+ {
+ ObjectClass oc = ( ObjectClass ) list.next();
+ resolve( oc, errors );
+ }
+
+ list = attributeTypeRegistry.list();
+ while ( list.hasNext() )
+ {
+ AttributeType at = ( AttributeType ) list.next();
+ resolve( at, errors );
+ }
+
+ list = matchingRuleRegistry.list();
+ while ( list.hasNext() )
+ {
+ MatchingRule mr = ( MatchingRule ) list.next();
+ resolve( mr, errors );
+ }
+
+ list = syntaxRegistry.list();
+ while ( list.hasNext() )
+ {
+ Syntax syntax = ( Syntax ) list.next();
+ resolve( syntax, errors );
+ }
+
+ return errors;
+ }
+
+
+ /**
+ * Attempts to resolve the SyntaxChecker associated with a Syntax.
+ *
+ * @param syntax the Syntax to resolve the SyntaxChecker of
+ * @param errors the list of errors to add exceptions to
+ * @return true if it succeeds, false otherwise
+ */
+ private boolean resolve( Syntax syntax, List errors )
+ {
+ if ( syntax == null )
+ {
+ return true;
+ }
+
+ try
+ {
+ syntax.getSyntaxChecker();
+ return true;
+ }
+ catch ( NamingException e )
+ {
+ errors.add( e );
+ return false;
+ }
+ }
+
+
+ private boolean resolve( MatchingRule mr, List errors )
+ {
+ boolean isSuccess = true;
+
+ if ( mr == null )
+ {
+ return true;
+ }
+
+ try
+ {
+ if ( mr.getComparator() == null )
+ {
+ String schema = matchingRuleRegistry.getSchemaName( mr.getOid() );
+ errors.add( new NullPointerException( "matchingRule "
+ + mr.getName() + " in schema " + schema + " with OID "
+ + mr.getOid() + " has a null comparator" ) );
+ isSuccess = false;
+ }
+ }
+ catch ( NamingException e )
+ {
+ errors.add( e );
+ isSuccess = false;
+ }
+
+ try
+ {
+ if ( mr.getNormalizer() == null )
+ {
+ String schema = matchingRuleRegistry.getSchemaName( mr.getOid() );
+ errors.add( new NullPointerException( "matchingRule "
+ + mr.getName() + " in schema " + schema + " with OID "
+ + mr.getOid() + " has a null normalizer" ) );
+ isSuccess = false;
+ }
+ }
+ catch ( NamingException e )
+ {
+ errors.add( e );
+ isSuccess = false;
+ }
+
+ try
+ {
+ isSuccess &= resolve( mr.getSyntax(), errors );
+
+ if ( mr.getSyntax() == null )
+ {
+ String schema = matchingRuleRegistry.getSchemaName( mr.getOid() );
+ errors.add( new NullPointerException( "matchingRule "
+ + mr.getName() + " in schema " + schema + " with OID " + mr.getOid()
+ + " has a null Syntax" ) );
+ isSuccess = false;
+ }
+ }
+ catch ( NamingException e )
+ {
+ errors.add( e );
+ isSuccess = false;
+ }
+
+ return isSuccess;
+ }
+
+
+ private boolean resolve( AttributeType at, List errors )
+ {
+ boolean isSuccess = true;
+ boolean hasMatchingRule = false;
+
+ if ( at == null )
+ {
+ return true;
+ }
+
+ try
+ {
+ isSuccess &= resolve( at.getSuperior(), errors );
+ }
+ catch ( NamingException e )
+ {
+ errors.add( e );
+ isSuccess = false;
+ }
+
+ try
+ {
+ isSuccess &= resolve( at.getEquality(), errors );
+
+ if ( at.getEquality() != null )
+ {
+ hasMatchingRule |= true;
+ }
+ }
+ catch ( NamingException e )
+ {
+ errors.add( e );
+ isSuccess = false;
+ }
+
+ try
+ {
+ isSuccess &= resolve( at.getOrdering(), errors );
+
+ if ( at.getOrdering() != null )
+ {
+ hasMatchingRule |= true;
+ }
+ }
+ catch ( NamingException e )
+ {
+ errors.add( e );
+ isSuccess = false;
+ }
+
+ try
+ {
+ isSuccess &= resolve( at.getSubstr(), errors );
+
+ if ( at.getSubstr() != null )
+ {
+ hasMatchingRule |= true;
+ }
+ }
+ catch ( NamingException e )
+ {
+ errors.add( e );
+ isSuccess = false;
+ }
+
+ try
+ {
+ isSuccess &= resolve( at.getSyntax(), errors );
+
+ if ( at.getSyntax() == null )
+ {
+ String schema = attributeTypeRegistry.getSchemaName( at.getOid() );
+ errors.add( new NullPointerException( "attributeType "
+ + at.getName() + " in schema " + schema + " with OID "
+ + at.getOid() + " has a null Syntax" ) );
+ isSuccess = false;
+ }
+ }
+ catch ( NamingException e )
+ {
+ errors.add( e );
+ isSuccess = false;
+ }
+
+ if ( hasMatchingRule )
+ {
+ // ----
+ }
+// try
+// {
+// String schema = attributeTypeRegistry.getSchemaName( at.getOid() );
+// if ( ! hasMatchingRule && at.getSyntax().isHumanReadable() )
+// {
+// errors.add( new NullPointerException( "attributeType "
+// + at.getName() + " in schema " + schema + " with OID "
+// + at.getOid() + " has a no matchingRules defined" ) );
+// isSuccess = false;
+// }
+// }
+// catch ( NamingException e )
+// {
+// errors.add( e );
+// isSuccess = false;
+// }
+
+ return isSuccess;
+ }
+
+
+ private boolean resolve( ObjectClass oc, List errors )
+ {
+ boolean isSuccess = true;
+
+ if ( oc == null )
+ {
+ return true;
+ }
+
+ ObjectClass[] superiors = new ObjectClass[0];
+ try
+ {
+ superiors = oc.getSuperClasses();
+ }
+ catch ( NamingException e )
+ {
+ superiors = new ObjectClass[0];
+ isSuccess = false;
+ errors.add( e );
+ }
+
+ for ( int ii = 0; ii < superiors.length; ii++ )
+ {
+ isSuccess &= resolve( superiors[ii], errors ) ;
+ }
+
+ AttributeType[] mayList = new AttributeType[0];
+ try
+ {
+ mayList = oc.getMayList();
+ }
+ catch ( NamingException e )
+ {
+ mayList = new AttributeType[0];
+ isSuccess = false;
+ errors.add( e );
+ }
+
+ for ( int ii = 0; ii < mayList.length; ii++ )
+ {
+ isSuccess &= resolve( mayList[ii], errors ) ;
+ }
+
+
+ AttributeType[] mustList = new AttributeType[0];
+ try
+ {
+ mustList = oc.getMustList();
+ }
+ catch ( NamingException e )
+ {
+ mustList = new AttributeType[0];
+ isSuccess = false;
+ errors.add( e );
+ }
+
+ for ( int ii = 0; ii < mustList.length; ii++ )
+ {
+ isSuccess &= resolve( mustList[ii], errors ) ;
+ }
+
+ return isSuccess;
+ }
+}
Modified: incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/GlobalSyntaxRegistry.java
==============================================================================
--- incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/GlobalSyntaxRegistry.java (original)
+++ incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/GlobalSyntaxRegistry.java Thu Oct 28 01:06:12 2004
@@ -19,9 +19,11 @@
import java.util.Map;
import java.util.HashMap;
+import java.util.Iterator;
import javax.naming.NamingException;
import org.apache.ldap.common.schema.Syntax;
+import org.apache.ldap.common.util.JoinIterator;
import org.apache.eve.SystemPartition;
import org.apache.eve.schema.bootstrap.BootstrapSyntaxRegistry;
@@ -173,5 +175,12 @@
throw new NamingException( "OID " + id + " not found in oid to " +
"schema name map!" );
+ }
+
+
+ public Iterator list()
+ {
+ return new JoinIterator( new Iterator[]
+ { byOid.values().iterator(),bootstrap.list() } );
}
}
Modified: incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/bootstrap/BootstrapMatchingRuleRegistry.java
==============================================================================
--- incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/bootstrap/BootstrapMatchingRuleRegistry.java (original)
+++ incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/bootstrap/BootstrapMatchingRuleRegistry.java Thu Oct 28 01:06:12 2004
@@ -179,7 +179,7 @@
}
- Iterator list()
+ public Iterator list()
{
return byOid.values().iterator();
}
Modified: incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/bootstrap/BootstrapObjectClassRegistry.java
==============================================================================
--- incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/bootstrap/BootstrapObjectClassRegistry.java (original)
+++ incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/bootstrap/BootstrapObjectClassRegistry.java Thu Oct 28 01:06:12 2004
@@ -151,7 +151,7 @@
*
* @return an iteration over the set of ObjectClasses within this registry.
*/
- Iterator list()
+ public Iterator list()
{
return byOid.values().iterator();
}
Modified: incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/bootstrap/BootstrapSyntaxRegistry.java
==============================================================================
--- incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/bootstrap/BootstrapSyntaxRegistry.java (original)
+++ incubator/directory/eve/trunk/backend/core/src/java/org/apache/eve/schema/bootstrap/BootstrapSyntaxRegistry.java Thu Oct 28 01:06:12 2004
@@ -172,7 +172,7 @@
}
- Iterator list()
+ public Iterator list()
{
return byOid.values().iterator();
}