You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by go...@apache.org on 2011/12/21 13:22:52 UTC
svn commit: r1221695 - in
/directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component:
hub/ schema/
Author: gokturk
Date: Wed Dec 21 12:22:51 2011
New Revision: 1221695
URL: http://svn.apache.org/viewvc?rev=1221695&view=rev
Log:
* ComponentSchemaManager is implemented to manage component schema generation and installation into raw SchemaPartition.
* DefaultComponentSchemaGenerator is modified to generate generic schemas for every component type.
Added:
directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentSchemaManager.java (with props)
Removed:
directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/schema/ComponentOIDGenerator.java
Modified:
directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/schema/ADSComponentSchema.java
directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/schema/ComponentSchemaGenerator.java
directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/schema/DefaultComponentSchemaGenerator.java
Added: directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentSchemaManager.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentSchemaManager.java?rev=1221695&view=auto
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentSchemaManager.java (added)
+++ directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentSchemaManager.java Wed Dec 21 12:22:51 2011
@@ -0,0 +1,205 @@
+/*
+ * 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.component.hub;
+
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+import java.util.List;
+
+import org.apache.directory.server.component.ADSComponent;
+import org.apache.directory.server.component.schema.ADSComponentSchema;
+import org.apache.directory.server.component.schema.ComponentSchemaGenerator;
+import org.apache.directory.server.component.schema.DefaultComponentSchemaGenerator;
+import org.apache.directory.server.component.utilities.ADSComponentHelper;
+
+import org.apache.directory.server.core.api.interceptor.context.AddOperationContext;
+import org.apache.directory.server.core.api.interceptor.context.LookupOperationContext;
+import org.apache.directory.server.core.api.schema.SchemaPartition;
+import org.apache.directory.shared.ldap.model.entry.Entry;
+import org.apache.directory.shared.ldap.model.exception.LdapException;
+import org.apache.directory.shared.ldap.model.ldif.LdifEntry;
+import org.apache.directory.shared.ldap.model.ldif.LdifReader;
+import org.apache.directory.shared.ldap.model.name.Dn;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class ComponentSchemaManager
+{
+ /*
+ * Logger
+ */
+ private final Logger LOG = LoggerFactory.getLogger( ComponentSchemaManager.class );
+
+ /*
+ * Schema Partition reference
+ */
+ private SchemaPartition schemaPartition;
+
+ /*
+ * Schema generators
+ */
+ private Dictionary<String, ComponentSchemaGenerator> schemaGenerators;
+
+
+ public ComponentSchemaManager( SchemaPartition schemaPartition )
+ {
+ this.schemaPartition = schemaPartition;
+
+ schemaGenerators = new Hashtable<String, ComponentSchemaGenerator>();
+ }
+
+
+ /**
+ * Adds new schema generator for specified component type.
+ * Keeps the first added generator as default.
+ *
+ * @param componentType component type to register schema generator
+ * @param generator schema generator instance
+ */
+ public void addSchemaGenerator( String componentType, ComponentSchemaGenerator generator )
+ {
+ if ( schemaGenerators.get( componentType ) == null )
+ {
+ schemaGenerators.put( componentType, generator );
+ }
+ }
+
+
+ /**
+ * Generates and install the schema elements for component to represent it and its instances.
+ *
+ * @param component ADSComponent reference
+ * @throws LdapException
+ */
+ public void setComponentSchema( ADSComponent component ) throws LdapException
+ {
+ ADSComponentSchema schema = generateComponentSchema( component );
+ injectSchemaElements( schema );
+ }
+
+
+ /**
+ * Generates the schema elements for the component using its assigned SchemaGenerator
+ *
+ * @param component ADSComponent reference to generate schema elements for.
+ * @return Generated schema elements as ADSComponentSchema reference.
+ */
+ private ADSComponentSchema generateComponentSchema( ADSComponent component )
+ {
+ String componentType = component.getComponentType();
+
+ ComponentSchemaGenerator generator = schemaGenerators.get( componentType );
+ if ( generator == null )
+ {
+ generator = new DefaultComponentSchemaGenerator();
+ }
+
+ ADSComponentSchema schema = generator.generateADSComponentSchema( component );
+
+ return schema;
+ }
+
+
+ /**
+ * Injects schema elements into SchemaPartition.
+ *
+ * @param schema ADSComponentSchema reference to inject into SchemaPartition
+ * @throws LdapException
+ */
+ private void injectSchemaElements( ADSComponentSchema schema ) throws LdapException
+ {
+ if ( !schemaBaseExists( schema ) )
+ {
+ createSchemaBase( schema );
+ }
+
+ List<LdifEntry> schemaElements = schema.getSchemaElements();
+
+ for ( LdifEntry le : schemaElements )
+ {
+ AddOperationContext addContext = new AddOperationContext( null, le.getEntry() );
+ schemaPartition.add( addContext );
+ }
+ }
+
+
+ /**
+ * Checks if the base schema element is exist to hold provided schema's elements.
+ *
+ * @param schema ADSComponentSchema reference to check its parent schema
+ * @return whether base schema exists or not
+ */
+ private boolean schemaBaseExists( ADSComponentSchema schema )
+ {
+ LookupOperationContext luc = new LookupOperationContext( null );
+ try
+ {
+ luc.setDn( new Dn( schema.getParentSchemaDn() ) );
+ Entry e = schemaPartition.lookup( luc );
+
+ if ( e != null )
+ {
+ return true;
+ }
+ }
+ catch ( LdapException e )
+ {
+ LOG.info( "Error while checking base schema element" );
+ e.printStackTrace();
+ }
+ return false;
+ }
+
+
+ /**
+ * It install the base schema for the component.
+ * PS:(It is first considered to be unique for every component type,
+ * but now it is merged under one schema. So that's why we're using one resource for all of them.)
+ *
+ * TODO Fix base schema related references later. Will be more meaningfull when we merge component-hubs schemas and constants
+ * into ApacheDS's own configuration.
+ *
+ * @param schema ADSComponentSchema reference.
+ * @throws LdapException
+ */
+ private void createSchemaBase( ADSComponentSchema schema ) throws LdapException
+ {
+ try
+ {
+ LdifReader reader = new LdifReader( this.getClass().getResourceAsStream( "componenthub.ldif" ) );
+
+ for ( LdifEntry le : reader )
+ {
+ AddOperationContext addContext = new AddOperationContext( null, le.getEntry() );
+ schemaPartition.add( addContext );
+ }
+ }
+ catch ( LdapException e )
+ {
+ LOG.info( "Error while injecting base componenthub schema" );
+ e.printStackTrace();
+
+ throw e;
+ }
+
+ }
+}
Propchange: directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentSchemaManager.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/schema/ADSComponentSchema.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/schema/ADSComponentSchema.java?rev=1221695&r1=1221694&r2=1221695&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/schema/ADSComponentSchema.java (original)
+++ directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/schema/ADSComponentSchema.java Wed Dec 21 12:22:51 2011
@@ -42,7 +42,7 @@ public class ADSComponentSchema
/*
* Schema name which @schemaElements will go under.
*/
- private String parentSchemaName = null;
+ private String parentSchemaDn = null;
/*
* The object class which will be used to represent instances of the component.
@@ -52,7 +52,7 @@ public class ADSComponentSchema
public ADSComponentSchema( String parentSchema, List<LdifEntry> elements, String oc )
{
- parentSchemaName = parentSchema;
+ parentSchemaDn = parentSchema;
schemaElements = elements;
objectClassForComponent = oc;
}
@@ -63,9 +63,9 @@ public class ADSComponentSchema
*
* @return name of the schema
*/
- public String getParentSchemaName()
+ public String getParentSchemaDn()
{
- return parentSchemaName;
+ return parentSchemaDn;
}
Modified: directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/schema/ComponentSchemaGenerator.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/schema/ComponentSchemaGenerator.java?rev=1221695&r1=1221694&r2=1221695&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/schema/ComponentSchemaGenerator.java (original)
+++ directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/schema/ComponentSchemaGenerator.java Wed Dec 21 12:22:51 2011
@@ -20,7 +20,7 @@
package org.apache.directory.server.component.schema;
-import org.apache.felix.ipojo.Factory;
+import org.apache.directory.server.component.ADSComponent;
/**
@@ -34,12 +34,10 @@ public interface ComponentSchemaGenerato
* Generates a schema for representing all of factory's configurables.
* Returned schema is in right order to add it to LDAP without any sorting.
*
- * If factory does not need a custom schema, it does not generate a schema for
- * it, just returns the name of stock schema instead.
*
- * @param factory Factory reference to generate schema for.
+ * @param component ADSComponent reference to generate schema for.
* @return Schema in the form of LdifEntry list.
*/
- public ADSComponentSchema generateADSComponentSchema( Factory factory );
+ public ADSComponentSchema generateADSComponentSchema( ADSComponent component );
}
Modified: directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/schema/DefaultComponentSchemaGenerator.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/schema/DefaultComponentSchemaGenerator.java?rev=1221695&r1=1221694&r2=1221695&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/schema/DefaultComponentSchemaGenerator.java (original)
+++ directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/schema/DefaultComponentSchemaGenerator.java Wed Dec 21 12:22:51 2011
@@ -23,7 +23,8 @@ package org.apache.directory.server.comp
import java.util.ArrayList;
import java.util.List;
-import org.apache.directory.server.component.utilities.IPojoFactoryHelper;
+import org.apache.directory.server.component.ADSComponent;
+import org.apache.directory.server.component.utilities.ADSComponentHelper;
import org.apache.directory.server.component.utilities.ADSConstants;
import org.apache.directory.shared.ldap.model.exception.LdapInvalidAttributeValueException;
import org.apache.directory.shared.ldap.model.exception.LdapInvalidDnException;
@@ -39,19 +40,20 @@ public class DefaultComponentSchemaGener
{
private final Logger LOG = LoggerFactory.getLogger( DefaultComponentSchemaGenerator.class );
- private final String ADS_USER_COMPONENTS_SCHEMA_DN = "cn=usercomponents,ou=schema";
- private final String ADS_USER_COMPONENTS_SCHEMA_NAME = "usercomponents";
-
@Override
- public ADSComponentSchema generateADSComponentSchema( Factory componentFactory )
+ public ADSComponentSchema generateADSComponentSchema( ADSComponent component )
{
+ Factory componentFactory = component.getFactory();
+
+ String ADS_COMPONENT_SCHEMA_DN = ADSComponentHelper.getSchemaBaseDn( component );
+
List<LdifEntry> schemaElements = new ArrayList<LdifEntry>();
- String componentName = IPojoFactoryHelper.getComponentName( componentFactory );
+ String componentName = ADSComponentHelper.getComponentName( componentFactory );
- String attribsDn = "ou=attributeTypes," + ADS_USER_COMPONENTS_SCHEMA_DN;
- String ocsDn = "ou=objectClasses," + ADS_USER_COMPONENTS_SCHEMA_DN;
+ String attribsDn = "ou=attributeTypes," + ADS_COMPONENT_SCHEMA_DN;
+ String ocsDn = "ou=objectClasses," + ADS_COMPONENT_SCHEMA_DN;
//Will hold the m-must attributes while iterating over properties of the component
List<String> ocAttribs = new ArrayList<String>();
@@ -148,8 +150,10 @@ public class DefaultComponentSchemaGener
+ componentFactory );
}
- ADSComponentSchema compSchema = new ADSComponentSchema( ADS_USER_COMPONENTS_SCHEMA_NAME,
- schemaElements, componentName );
+ ADSComponentSchema compSchema = new ADSComponentSchema(
+ ADSComponentHelper.getSchemaBaseDn( component ),
+ schemaElements,
+ ADSComponentHelper.getComponentObjectClass( component ) );
return compSchema;
}