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 2012/05/10 13:34:04 UTC
svn commit: r1336604 - in
/directory/shared/branches/shared-osgi/ipojo-manager: ./ src/ src/main/
src/main/java/ src/main/java/org/ src/main/java/org/apache/
src/main/java/org/apache/directory/
src/main/java/org/apache/directory/shared/ src/main/java/o...
Author: gokturk
Date: Thu May 10 11:34:03 2012
New Revision: 1336604
URL: http://svn.apache.org/viewvc?rev=1336604&view=rev
Log:
IPojo manager to load schema elements in both OSGI and nonOSGI environments.
Added:
directory/shared/branches/shared-osgi/ipojo-manager/
directory/shared/branches/shared-osgi/ipojo-manager/pom.xml
directory/shared/branches/shared-osgi/ipojo-manager/src/
directory/shared/branches/shared-osgi/ipojo-manager/src/main/
directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/
directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/org/
directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/org/apache/
directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/org/apache/directory/
directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/org/apache/directory/shared/
directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/org/apache/directory/shared/ipojo/
directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/org/apache/directory/shared/ipojo/helpers/
directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/org/apache/directory/shared/ipojo/helpers/IPojoHelper.java
directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/org/apache/directory/shared/ipojo/helpers/OSGIHelper.java
directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/org/apache/directory/shared/ipojo/helpers/OSGIHelpersActivator.java
directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/org/apache/directory/shared/ipojo/schema/
directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/org/apache/directory/shared/ipojo/schema/SchemaElementsManager.java
Added: directory/shared/branches/shared-osgi/ipojo-manager/pom.xml
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-osgi/ipojo-manager/pom.xml?rev=1336604&view=auto
==============================================================================
--- directory/shared/branches/shared-osgi/ipojo-manager/pom.xml (added)
+++ directory/shared/branches/shared-osgi/ipojo-manager/pom.xml Thu May 10 11:34:03 2012
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ 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.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.directory.shared</groupId>
+ <artifactId>shared-parent</artifactId>
+ <version>1.0.0-M13-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>shared-ipojo-manager</artifactId>
+ <name>Apache Directory Shared OSGI/IPOJO Manager</name>
+ <packaging>bundle</packaging>
+
+ <description>Provides main facility for handling IPojo component management</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.ipojo</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>shared-ldap-model</artifactId>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifestFile>META-INF/MANIFEST.MF</manifestFile>
+ <addMavenDescriptor>false</addMavenDescriptor>
+ </archive>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <inherited>true</inherited>
+ <extensions>true</extensions>
+ <configuration>
+ <manifestLocation>META-INF</manifestLocation>
+ <unpackBundle>true</unpackBundle>
+ <instructions>
+ <Bundle-ActivationPolicy>lazy</Bundle-ActivationPolicy>
+ <Bundle-SymbolicName>${project.groupId}.ipojo.manager</Bundle-SymbolicName>
+ <Bundle-Activator>org.apache.directory.shared.ipojo.helpers.OSGIHelpersActivator</Bundle-Activator>
+ <Export-Package>
+ {local-packages};version=${project.version};-noimport:=true
+ </Export-Package>
+ </instructions>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
+
Added: directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/org/apache/directory/shared/ipojo/helpers/IPojoHelper.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/org/apache/directory/shared/ipojo/helpers/IPojoHelper.java?rev=1336604&view=auto
==============================================================================
--- directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/org/apache/directory/shared/ipojo/helpers/IPojoHelper.java (added)
+++ directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/org/apache/directory/shared/ipojo/helpers/IPojoHelper.java Thu May 10 11:34:03 2012
@@ -0,0 +1,115 @@
+/*
+ * 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.ipojo.helpers;
+
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+import java.util.List;
+
+import org.apache.felix.ipojo.ComponentFactory;
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.ConfigurationException;
+import org.apache.felix.ipojo.Factory;
+import org.apache.felix.ipojo.MissingHandlerException;
+import org.apache.felix.ipojo.UnacceptableConfiguration;
+
+
+/**
+ * Provides helper methods to access IPojo factories by their name, and instantiate instance of factories.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class IPojoHelper
+{
+ /**
+ * Gets IPojo {@link ComponentFactory} by given factory name.
+ *
+ * @param factoryName factory name to get its equilavent {@link ComponentFactory}
+ * @return IPojo {@link ComponentFactory} reference
+ */
+ public static ComponentFactory getFactory( String factoryName )
+ {
+ try
+ {
+ String filter = "(factory.name=" + factoryName + ")";
+ List<ComponentFactory> factories = ( List<ComponentFactory> ) OSGIHelper.getServices(
+ Factory.class.getName(), filter );
+ if ( factories == null )
+ {
+ return null;
+ }
+ return factories.get( 0 );
+ }
+ catch ( ClassCastException e )
+ {
+ return null;
+ }
+ }
+
+
+ /**
+ * Creates an instance of given IPojo factory.
+ *
+ * @param factoryName Factory name to create its instance
+ * @param instanceName Name of instance being created. Pass 'null' if its not important.
+ * @param props Configuration to instance being created.
+ * @return {@link ComponentInstance} reference to created instance
+ */
+ public static ComponentInstance createIPojoComponent( String factoryName, String instanceName, Dictionary props )
+ {
+ ComponentFactory factory = IPojoHelper.getFactory( factoryName );
+ if ( factory == null )
+ {
+ return null;
+ }
+
+ if ( instanceName != null )
+ {
+ if ( props == null )
+ {
+ props = new Hashtable<String, String>();
+ }
+
+ props.put( "instance.name", instanceName );
+ }
+
+ try
+ {
+ return factory.createComponentInstance( props );
+ }
+ catch ( UnacceptableConfiguration e )
+ {
+ e.printStackTrace();
+ return null;
+ }
+ catch ( MissingHandlerException e )
+ {
+ e.printStackTrace();
+ return null;
+ }
+ catch ( ConfigurationException e )
+ {
+ e.printStackTrace();
+ return null;
+ }
+
+ }
+}
Added: directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/org/apache/directory/shared/ipojo/helpers/OSGIHelper.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/org/apache/directory/shared/ipojo/helpers/OSGIHelper.java?rev=1336604&view=auto
==============================================================================
--- directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/org/apache/directory/shared/ipojo/helpers/OSGIHelper.java (added)
+++ directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/org/apache/directory/shared/ipojo/helpers/OSGIHelper.java Thu May 10 11:34:03 2012
@@ -0,0 +1,125 @@
+/*
+ * 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.ipojo.helpers;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+
+
+/**
+ * Provides some OSGI helpers related to Service publication and access.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class OSGIHelper
+{
+ /** BundleContext reference which will be assigned through BundleActivator */
+ public static BundleContext bundleCtx;
+
+
+ /**
+ * Determines if Shared is launched in OSGI container.
+ *
+ * @return {@link Boolean}
+ */
+ public static boolean isAPIInOSGIContainer()
+ {
+ if ( bundleCtx == null )
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+
+ /**
+ * Gets OSGI Services by given specification and filter.
+ *
+ * @param serviceClassName Name of published service class name.
+ * @param filter Filter to match against services.
+ * @return List of matching services as List<Object>
+ */
+ public static List<?> getServices( String serviceClassName, String filter )
+ {
+ if ( !isAPIInOSGIContainer() )
+ {
+ return null;
+ }
+
+ try
+ {
+ ServiceReference[] serviceReferences = bundleCtx.getServiceReferences( serviceClassName, filter );
+ List<Object> services = new ArrayList<Object>();
+ for ( ServiceReference ref : serviceReferences )
+ {
+ services.add( bundleCtx.getService( ref ) );
+ }
+
+ return services;
+ }
+ catch ( InvalidSyntaxException e )
+ {
+ e.printStackTrace();
+ return null;
+ }
+ catch ( IllegalStateException e )
+ {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+
+ /**
+ * Gets the first service of given specification.
+ *
+ * @param serviceClassName Published OSGI Service class name.
+ * @return The first matched service in service registry.
+ */
+ public static Object getService( String serviceClassName )
+ {
+ if ( !isAPIInOSGIContainer() )
+ {
+ return null;
+ }
+
+ ServiceReference ref = bundleCtx.getServiceReference( serviceClassName );
+ if ( ref == null )
+ {
+ return null;
+ }
+
+ try
+ {
+ return bundleCtx.getService( ref );
+ }
+ catch ( IllegalStateException e )
+ {
+ e.printStackTrace();
+ return null;
+ }
+ }
+}
Added: directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/org/apache/directory/shared/ipojo/helpers/OSGIHelpersActivator.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/org/apache/directory/shared/ipojo/helpers/OSGIHelpersActivator.java?rev=1336604&view=auto
==============================================================================
--- directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/org/apache/directory/shared/ipojo/helpers/OSGIHelpersActivator.java (added)
+++ directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/org/apache/directory/shared/ipojo/helpers/OSGIHelpersActivator.java Thu May 10 11:34:03 2012
@@ -0,0 +1,47 @@
+/*
+ * 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.ipojo.helpers;
+
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+
+/**
+ * BundleActivator to keep and release BundleContext reference for further uses by helper classes.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class OSGIHelpersActivator implements BundleActivator
+{
+
+ public void start( BundleContext context ) throws Exception
+ {
+ //Save the BundleContext reference
+ OSGIHelper.bundleCtx = context;
+ }
+
+
+ public void stop( BundleContext context ) throws Exception
+ {
+ //Null the BundleContext reference
+ OSGIHelper.bundleCtx = null;
+ }
+}
Added: directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/org/apache/directory/shared/ipojo/schema/SchemaElementsManager.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/org/apache/directory/shared/ipojo/schema/SchemaElementsManager.java?rev=1336604&view=auto
==============================================================================
--- directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/org/apache/directory/shared/ipojo/schema/SchemaElementsManager.java (added)
+++ directory/shared/branches/shared-osgi/ipojo-manager/src/main/java/org/apache/directory/shared/ipojo/schema/SchemaElementsManager.java Thu May 10 11:34:03 2012
@@ -0,0 +1,91 @@
+package org.apache.directory.shared.ipojo.schema;
+
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import org.apache.directory.shared.ipojo.helpers.IPojoHelper;
+import org.apache.directory.shared.ldap.model.schema.LdapComparator;
+import org.apache.directory.shared.ldap.model.schema.Normalizer;
+import org.apache.directory.shared.ldap.model.schema.SyntaxChecker;
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.InstanceManager;
+
+
+/**
+ * Class used to get Schema Elements from IPojo component registry.
+ * Schema Elements must be published without specifying component name, which leaves them published
+ * with their class name.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class SchemaElementsManager
+{
+ /**
+ * Gets {@link LdapComparator} reference by its class name as IPojo component name.
+ *
+ * @param factoryName Class name of a LdapComparator
+ * @param oid OID value to instantiate LdapComparator.
+ * @return {@link LdapComparator} reference fetched from IPojo
+ * @throws Exception
+ */
+ public LdapComparator<?> getLdapComparator( String factoryName, String oid ) throws Exception
+ {
+ Dictionary<String, String> props = new Hashtable<String, String>();
+ props.put( "ads.comp.comparator.oid", oid );
+
+ ComponentInstance _comparator = IPojoHelper.createIPojoComponent( factoryName, null, props );
+ if ( _comparator == null )
+ {
+ throw new Exception( "Required Comparator is not registered as IPojo Component" );
+ }
+
+ LdapComparator<?> comparator = ( LdapComparator<?> ) ( ( InstanceManager ) _comparator ).getPojoObject();
+
+ return comparator;
+ }
+
+
+ /**
+ * Gets {@link Normalizer} reference by its class name as IPojo component name.
+ *
+ * @param factoryName Class name of a Normalizer
+ * @return {@link Normalizer} reference fetched from IPojo
+ * @throws Exception
+ */
+ public Normalizer getNormalizer( String factoryName ) throws Exception
+ {
+ ComponentInstance _normalizer = IPojoHelper.createIPojoComponent( factoryName, null, null );
+
+ if ( _normalizer == null )
+ {
+ throw new Exception( "Required Normalizer is not registered as IPojo Component" );
+ }
+
+ Normalizer normalizer = ( Normalizer ) ( ( InstanceManager ) _normalizer ).getPojoObject();
+
+ return normalizer;
+ }
+
+
+ /**
+ * Gets {@link SyntaxChecker} reference by its class name as IPojo component name.
+ *
+ * @param factoryName Class name of a SyntaxChecker
+ * @return {@link SyntaxChecker} reference fetched from IPojo
+ * @throws Exception
+ */
+ public SyntaxChecker getSyntaxChecker( String factoryName ) throws Exception
+ {
+ ComponentInstance _syntaxer = IPojoHelper.createIPojoComponent( factoryName, null, null );
+
+ if ( _syntaxer == null )
+ {
+ throw new Exception( "Required Syntax Checker is not registered as IPojo Component" );
+ }
+
+ SyntaxChecker syntaxer = ( SyntaxChecker ) ( ( InstanceManager ) _syntaxer ).getPojoObject();
+
+ return syntaxer;
+ }
+}