directory-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alex Karasulu <akaras...@apache.org>
Subject Re: svn commit: r501176 [1/6] - in /directory/sandbox/jconlon/osgi-services/configuration-service: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/configuration/ src/main/java/org/apache/configuration/...
Date Mon, 29 Jan 2007 20:56:42 GMT
Hi John,

Just a reminder.  It might be nice to add some Javadocs so we can 
navigate this code especially when it makes it's way into the trunk.

Thanks,
Alex

jconlon@apache.org wrote:
> Author: jconlon
> Date: Mon Jan 29 12:38:25 2007
> New Revision: 501176
> 
> URL: http://svn.apache.org/viewvc?view=rev&rev=501176
> Log:
> OSGi Configuration Admin project.
> 
> Added:
>     directory/sandbox/jconlon/osgi-services/configuration-service/
>     directory/sandbox/jconlon/osgi-services/configuration-service/pom.xml
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/ConfigurationDao.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/ConfigurationDaoException.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/ConfigurationDaoListener.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/ConfigurationDaoNotifier.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/Command.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/CommandProcessing.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/ContextMapping.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/JndiConfigurationDaoNotifier.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/KeyMapping.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/NameMapping.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/CommandProcessor.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/ConfigurationDaoImpl.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/ConfigurationDaoNotifierImpl.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/ContextMapper.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/CreateCommand.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/DefaultNameMapper.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/DefaultReadCommand.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/DeleteCommand.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/JndiConfigurationDaoNotifierImpl.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/KeyMapper.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/ListCommand.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/SimpleDirContextAdapter.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/SimpleReadCommand.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/UpdateCommand.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/package-info.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/package-info.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/package-info.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/event/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/event/AsyncExecutorService.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/event/ConfigurationChangeManager.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/event/ConfigurationEventBroadcaster.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/event/ManagedServiceFactoryTrackerCustomizer.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/event/ManagedServiceFactoryTrackingAdapter.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/event/ManagedServiceTrackerCustomizer.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/event/ManagedServiceTrackingAdapter.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/event/PluginManager.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/event/package-info.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/felix/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/felix/framework/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/felix/framework/FilterImpl.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/felix/framework/StringMap.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/felix/framework/package-info.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/impl/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/impl/ConfigurationAdminImpl.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/impl/ConfigurationAdminServiceFactory.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/impl/ConfigurationDictionary.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/impl/ConfigurationImpl.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/impl/ConfigurationStore.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/impl/ConfigurationStoreImpl.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/impl/ConfigurationTransformer.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/impl/package-info.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/springosgi/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/springosgi/BundleContextFactory.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/springosgi/ServiceTracking.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/springosgi/ServiceTrackingAdapter.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/springosgi/package-info.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/resources/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/resources/META-INF/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/resources/META-INF/spring/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/resources/META-INF/spring/configuration-osgi.xml
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/resources/META-INF/spring/configuration.xml
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/resources/META-INF/spring/daoJndi.xml
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/main/resources/META-INF/spring/event.xml
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/ConfigurationAdminImplTest.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/ConfigurationImplTest.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/dao/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/dao/jndi/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/dao/jndi/impl/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/dao/jndi/impl/ConfigurationDaoIntegrationTest.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/dao/jndi/impl/MockInitialContextFactory.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/event/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/event/ConfigurationChangeIntegrationTest.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/event/ConfigurationChangeTest.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/event/ConfigurationNotifier.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/event/MockConfigurationDaoListener.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/event/MockConfigurationListener.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/event/MockManagedServiceFactoryTrackingDelegate.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/event/MockManagedServiceTrackingDelegate.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/event/RegistrationChangeIntegrationTest.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/impl/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/impl/ConfigurationStoreImplTest.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/impl/MockConfigurationTransformer.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/util/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/java/org/apache/configuration/util/ApacheDSUtil.java
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/event.xml
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/log4j.properties
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/logback.xml
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/mockBundleContextFactory.xml
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/mockConfigurationDaoEventListener.xml
>     directory/sandbox/jconlon/osgi-services/configuration-service/src/test/resources/mockInitialContextFactory.xml
> 
> Added: directory/sandbox/jconlon/osgi-services/configuration-service/pom.xml
> URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/pom.xml?view=auto&rev=501176
> ==============================================================================
> --- directory/sandbox/jconlon/osgi-services/configuration-service/pom.xml (added)
> +++ directory/sandbox/jconlon/osgi-services/configuration-service/pom.xml Mon Jan 29 12:38:25 2007
> @@ -0,0 +1,207 @@
> +<?xml version="1.0" encoding="UTF-8"?>
> +<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.osgi.services</groupId>
> +		<artifactId>build</artifactId>
> +		<version>1.0.6-SNAPSHOT</version>
> +	</parent>
> +	
> +	<description>
> +	An OSGi Bundle offering an implementation of the OSGi ConfigAdmin Service.
> +	</description>
> +	<artifactId>configuration-service</artifactId>
> +	<version>0.4.0</version>
> +	<packaging>bundle</packaging>
> +	<name>${pom.artifactId} bundle</name>
> +	<build>
> +		<plugins>
> +		
> +		    <plugin>
> +				<groupId>org.apache.maven.plugins</groupId>
> +				<artifactId>maven-compiler-plugin</artifactId>
> +				<configuration>
> +					<source>1.5</source>
> +					<target>1.5</target>
> +				</configuration>
> +			</plugin>
> +		
> +			<plugin>
> +		        <groupId>org.apache.felix</groupId>
> +		        <artifactId>maven-bundle-plugin</artifactId>
> +		        <extensions>true</extensions>
> +		        <configuration>
> +		          <instructions>
> +		            <Export-Package>org.osgi.service.cm</Export-Package>
> +		            <Private-Package>org.apache.configuration.*,org.apache.felix.framework.util.ldap</Private-Package>
> +		          </instructions>
> +		        </configuration>
> +		    </plugin>
> +		</plugins>
> +	</build>
> +	<dependencies>
> +	    
> +		
> +		
> +		<!-- For the OSGi interfaces. -->
> +		<dependency>
> +			<groupId>org.apache.felix</groupId>
> +			<artifactId>org.osgi.compendium</artifactId>
> +			<version>0.9.0-incubator-SNAPSHOT</version>
> +		</dependency>
> +		
> +		<!-- For the FilterImpl class. -->
> +		<dependency>
> +			<groupId>org.apache.felix</groupId>
> +			<artifactId>org.apache.felix.framework</artifactId>
> +			<version>0.9.0-incubator-SNAPSHOT</version>
> +		</dependency>
> +		
> +		<dependency>
> +		    <groupId>org.springframework.osgi</groupId>
> +            <artifactId>spring-osgi-core</artifactId>
> +			<version>1.0-SNAPSHOT</version>
> +			<scope>provided</scope>
> +		</dependency>
> +		
> +		<dependency>
> +  			<groupId>commons-lang</groupId>
> +			<artifactId>commons-lang</artifactId>
> +  			<version>2.1</version>
> +  			<scope>provided</scope>
> +  		</dependency>
> +  		
> +  		<dependency>
> +  			<groupId>commons-collections</groupId>
> +			<artifactId>commons-collections</artifactId>
> +  			<version>3.2</version>
> +  			<scope>provided</scope>
> +  		</dependency>
> +  		
> +		<!-- To be removed. 
> +		<dependency>
> +			<groupId>org.apache.felix</groupId>
> +			<artifactId>org.apache.felix.servicebinder</artifactId>
> +			<version>0.8.0-SNAPSHOT</version>
> +			<scope>provided</scope>
> +		</dependency>-->
> +		
> +		
> +		
> +		
> +		 
> +  
> +        <!-- To be replaced with logback -->
> +		<dependency>
> +			<groupId>org.slf4j</groupId>
> +			<artifactId>nlog4j</artifactId>
> +			<version>1.2.25</version>
> +			<scope>provided</scope>
> +			<exclusions>
> +				<exclusion>
> +					<groupId>xerces</groupId>
> +					<artifactId>xerces</artifactId>
> +				</exclusion>
> +				<exclusion>
> +					<groupId>com.sun.jdmk</groupId>
> +					<artifactId>jmxtools</artifactId>
> +				</exclusion>
> +				<exclusion>
> +					<groupId>javax.jms</groupId>
> +					<artifactId>jms</artifactId>
> +				</exclusion>
> +				<exclusion>
> +					<groupId>javax.mail</groupId>
> +					<artifactId>mail</artifactId>
> +				</exclusion>
> +				<exclusion>
> +					<groupId>javax.activation</groupId>
> +					<artifactId>activation</artifactId>
> +				</exclusion>
> +				<exclusion>
> +					<groupId>com.sun.jmx</groupId>
> +					<artifactId>jmxri</artifactId>
> +				</exclusion>
> +				<exclusion>
> +					<groupId>checkstyle</groupId>
> +					<artifactId>checkstyle</artifactId>
> +				</exclusion>
> +			</exclusions>
> +		</dependency>
> +		 
> +		
> +		<dependency>
> +			<groupId>org.slf4j</groupId>
> +			<artifactId>jcl104-over-slf4j</artifactId>
> +			<version>1.2</version>
> +			<scope>test</scope>
> +		</dependency>
> +		
> +		<!--  Will replace logging with these deps.
> +		<dependency>
> +			<groupId>org.slf4j</groupId>
> +			<artifactId>slf4j-api</artifactId>
> +			<version>1.2</version>
> +			<scope>test</scope>
> +		</dependency>
> +		<dependency>
> +			<groupId>ch.qos.logback</groupId>
> +			<artifactId>logback-core</artifactId>
> +			<version>0.9-SNAPSHOT</version>
> +			<scope>test</scope>
> +		</dependency>
> +		<dependency>
> +			<groupId>ch.qos.logback</groupId>
> +			<artifactId>logback-classic</artifactId>
> +			<version>0.9-SNAPSHOT</version>
> +			<scope>test</scope>
> +		</dependency>
> +		-->
> +		
> +		<dependency>
> +		    <groupId>org.springframework.osgi</groupId>
> +			<artifactId>spring-mock</artifactId>
> +			<version>2.1-SNAPSHOT</version>
> +			<scope>test</scope>
> +		</dependency>
> +		
> +		<dependency>
> +			<groupId>org.springframework.osgi</groupId>
> +  			<artifactId>spring-osgi-mock</artifactId>
> +  			<version>1.0-SNAPSHOT</version>
> +            <scope>test</scope>
> +		</dependency>
> +		
> +		<dependency>
> +			<groupId>org.springframework.osgi</groupId>
> +			<artifactId>spring-core</artifactId>
> +			<version>2.1-SNAPSHOT</version>
> +			<scope>test</scope>
> +		</dependency>
> +		<dependency>
> +			<groupId>org.springframework.osgi</groupId>
> +			<artifactId>spring-context</artifactId>
> +			<version>2.1-SNAPSHOT</version>
> +			<scope>test</scope>
> +		</dependency>
> +		<dependency>
> +			<groupId>org.springframework.osgi</groupId>
> +			<artifactId>spring-beans</artifactId>
> +			<version>2.1-SNAPSHOT</version>
> +			<scope>test</scope>
> +		</dependency>
> +		<dependency>
> +  			<groupId>org.springframework.osgi</groupId>
> +			<artifactId>spring-dao</artifactId>
> +  			<version>2.1-SNAPSHOT</version>
> +  			<scope>test</scope>
> +  		</dependency>
> +		<dependency>
> +			<groupId>org.apache.directory.server</groupId>
> +			<artifactId>apacheds-core</artifactId>
> +			<version>1.0.0</version>
> +			<scope>test</scope>
> +		</dependency>
> +  
> +	</dependencies>
> +</project>
> 
> Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/ConfigurationDao.java
> URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/ConfigurationDao.java?view=auto&rev=501176
> ==============================================================================
> --- directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/ConfigurationDao.java (added)
> +++ directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/ConfigurationDao.java Mon Jan 29 12:38:25 2007
> @@ -0,0 +1,67 @@
> +/*
> + *   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.configuration.dao;
> +
> +
> +import java.util.List;
> +
> +import org.apache.configuration.impl.ConfigurationDictionary;
> +
> +/**
> + * 
> + * ConfigurationDao.
> + *
> + * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
> + * @version $Rev$, $Date$
> + */
> +public interface ConfigurationDao extends ConfigurationDaoNotifier
> +{
> +
> +    /* (non-Javadoc)
> +     * @see org.apache.configuration.dao.ConfigurationDao#create(org.apache.configuration.util.ConfigurationDictionary)
> +     */
> +    public String create( ConfigurationDictionary configurationDictionary );
> +
> +
> +    /* (non-Javadoc)
> +     * @see org.apache.configuration.dao.ConfigurationDao#findByPrimaryKey(java.lang.String)
> +     */
> +    public ConfigurationDictionary read( String pid );
> +
> +    /* (non-Javadoc)
> +     * @see org.apache.configuration.dao.ConfigurationDao#update(org.apache.configuration.util.ConfigurationDictionary)
> +     */
> +    void update( ConfigurationDictionary configurationDictionary );
> +    
> +    
> +    /* (non-Javadoc)
> +     * @see org.apache.configuration.dao.ConfigurationDao#delete(org.apache.configuration.util.ConfigurationDictionary)
> +     */
> +    public void delete( ConfigurationDictionary configurationDictionary );
> +
> +    /**
> +     * 
> +     * 
> +     *
> +     * @return list of {@link ConfigurationDictionary} or an empty list.
> +     */
> +    public List<ConfigurationDictionary> findAll();
> +   
> +}
> \ No newline at end of file
> 
> Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/ConfigurationDaoException.java
> URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/ConfigurationDaoException.java?view=auto&rev=501176
> ==============================================================================
> --- directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/ConfigurationDaoException.java (added)
> +++ directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/ConfigurationDaoException.java Mon Jan 29 12:38:25 2007
> @@ -0,0 +1,84 @@
> +/*
> + *   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.configuration.dao;
> +
> +/**
> + * Signals that a failure occured during a data access operation.  
> + * 
> + * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
> + * @version $Rev$, $Date$
> + */
> +public class ConfigurationDaoException extends RuntimeException
> +{
> +
> +    /**
> +     * 
> +     */
> +    private static final long serialVersionUID = -2227350478329832413L;
> +
> +
> +    /**
> +     * Creates a new instance of ConfigurationDaoException.
> +     *
> +     */
> +    public ConfigurationDaoException()
> +    {
> +        
> +    }
> +
> +
> +    /**
> +     * Creates a new instance of ConfigurationDaoException.
> +     *
> +     * @param message
> +     */
> +    public ConfigurationDaoException( String message )
> +    {
> +        super( message );
> +        
> +    }
> +
> +
> +    /**
> +     * Creates a new instance of ConfigurationDaoException.
> +     *
> +     * @param cause
> +     */
> +    public ConfigurationDaoException( Throwable cause )
> +    {
> +        super( cause );
> +       
> +    }
> +
> +
> +    /**
> +     * Creates a new instance of ConfigurationDaoException.
> +     *
> +     * @param message
> +     * @param cause
> +     */
> +    public ConfigurationDaoException( String message, Throwable cause )
> +    {
> +        super( message, cause );
> +       
> +    }
> +
> +}
> 
> Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/ConfigurationDaoListener.java
> URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/ConfigurationDaoListener.java?view=auto&rev=501176
> ==============================================================================
> --- directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/ConfigurationDaoListener.java (added)
> +++ directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/ConfigurationDaoListener.java Mon Jan 29 12:38:25 2007
> @@ -0,0 +1,50 @@
> +/*
> + *   Copyright 2005 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.configuration.dao;
> +
> +import org.apache.configuration.impl.ConfigurationDictionary;
> +
> +/**
> + * 
> + * ConfigurationDaoListener listens to configuration changes on a ConfigurationDao.
> + * 
> + * 
> + * @see ConfigurationDao
> + * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
> + * @version $Rev$, $Date$
> + */
> +public interface ConfigurationDaoListener
> +{
> +    /**
> +     * ChangeType.
> +     *
> +     * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
> +     * @version $Rev$, $Date$
> +     */
> +    public enum ChangeType { CREATED, DELETED, UPDATED }
> +
> +    /**
> +     * 
> +     * ConfigurationDictionary in the persisted store has changed.
> +     *
> +     * @see ConfigurationDao
> +     * @param changeType that occured on the persisted configurationDictionary
> +     * @param configurationDictionary that changed
> +     */
> +    public void configurationChanged( ChangeType changeType, ConfigurationDictionary configurationDictionary );
> +}
> 
> Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/ConfigurationDaoNotifier.java
> URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/ConfigurationDaoNotifier.java?view=auto&rev=501176
> ==============================================================================
> --- directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/ConfigurationDaoNotifier.java (added)
> +++ directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/ConfigurationDaoNotifier.java Mon Jan 29 12:38:25 2007
> @@ -0,0 +1,36 @@
> +/*
> + *   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.configuration.dao;
> +
> +
> +/**
> + * 
> + * ConfigurationDaoNotifier notifies ConfigurationDaoListeners of changes to the DAOs.
> + *
> + * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
> + * @version $Rev$, $Date$
> + */
> +public interface ConfigurationDaoNotifier
> +{
> +    void setConfigurationListener( ConfigurationDaoListener configurationListener );
> +    
> +    public void removeConfigurationListener();
> +
> +}
> \ No newline at end of file
> 
> Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/Command.java
> URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/Command.java?view=auto&rev=501176
> ==============================================================================
> --- directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/Command.java (added)
> +++ directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/Command.java Mon Jan 29 12:38:25 2007
> @@ -0,0 +1,41 @@
> +/*
> + *   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.configuration.dao.jndi;
> +
> +import javax.naming.directory.DirContext;
> +
> +/**
> + * Command is a command object that provides a specific directory service functionality.
> + *
> + * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
> + * @version $Rev$, $Date$
> + */
> +public interface Command <T>
> +{
> +     /**
> +      * 
> +      * execute the command
> +      *
> +      * @param dirContext
> +      * @return results
> +      */
> +     T execute(DirContext dirContext);
> +}
> 
> Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/CommandProcessing.java
> URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/CommandProcessing.java?view=auto&rev=501176
> ==============================================================================
> --- directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/CommandProcessing.java (added)
> +++ directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/CommandProcessing.java Mon Jan 29 12:38:25 2007
> @@ -0,0 +1,39 @@
> +/*
> + *   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.configuration.dao.jndi;
> +
> +/**
> + * CommandProcessing is a processor of <code>Command</code>s.
> + *
> + * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
> + * @version $Rev$, $Date$
> + */
> +public interface CommandProcessing
> +{
> +
> +    /**
> +     * 
> +     * @param <T> type of result
> +     * @param dirCommand to process
> +     * @return result
> +     */
> +    <T> T submit(Command<T> dirCommand);
> +}
> 
> Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/ContextMapping.java
> URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/ContextMapping.java?view=auto&rev=501176
> ==============================================================================
> --- directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/ContextMapping.java (added)
> +++ directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/ContextMapping.java Mon Jan 29 12:38:25 2007
> @@ -0,0 +1,53 @@
> +/*
> + *   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.configuration.dao.jndi;
> +
> +import javax.naming.NamingException;
> +import javax.naming.directory.Attribute;
> +import javax.naming.directory.Attributes;
> +import javax.naming.directory.DirContext;
> +
> +import org.apache.configuration.impl.ConfigurationDictionary;
> +
> +/**
> + * 
> + * ContextMapping.
> + *
> + * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
> + * @version $Rev$, $Date$
> + */
> +public interface ContextMapping extends KeyMapping
> +{
> +    /**
> +     * 
> +     */
> +    public static final String APACHEDS_SERVICE_PID = "apacheservicepid";
> +    public static final String APACHEDS_SERVICE_CONFIGURATION_OBJECTCLASS = "apacheServiceConfiguration";
> +    
> +    
> +    
> +    DirContext transform(ConfigurationDictionary configurationDictionary);
> +    
> +    ConfigurationDictionary transform( Attributes atts )throws NamingException;
> +    
> +    void addValueToAttribute(Object value,Attribute attribute );
> +    
> +    
> +}
> 
> Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/JndiConfigurationDaoNotifier.java
> URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/JndiConfigurationDaoNotifier.java?view=auto&rev=501176
> ==============================================================================
> --- directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/JndiConfigurationDaoNotifier.java (added)
> +++ directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/JndiConfigurationDaoNotifier.java Mon Jan 29 12:38:25 2007
> @@ -0,0 +1,39 @@
> +/*
> + *   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.configuration.dao.jndi;
> +
> +import javax.naming.event.NamespaceChangeListener;
> +import javax.naming.event.ObjectChangeListener;
> +
> +import org.apache.configuration.dao.ConfigurationDaoNotifier;
> +
> +/**
> + * JndiConfigurationDaoNotifier listens to JNDI events and notifies ConfigurationDaoListeners
> + * of changes.
> + *
> + * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
> + * @version $Rev$, $Date$
> + */
> +public interface JndiConfigurationDaoNotifier extends ConfigurationDaoNotifier, 
> +    NamespaceChangeListener, ObjectChangeListener
> +{
> +
> +}
> 
> Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/KeyMapping.java
> URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/KeyMapping.java?view=auto&rev=501176
> ==============================================================================
> --- directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/KeyMapping.java (added)
> +++ directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/KeyMapping.java Mon Jan 29 12:38:25 2007
> @@ -0,0 +1,50 @@
> +/*
> + *   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.configuration.dao.jndi;
> +
> +import java.util.Dictionary;
> +
> +/**
> + * KeyMapping.
> + *
> + * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
> + * @version $Rev$, $Date$
> + */
> +public interface KeyMapping
> +{
> +
> +    /**
> +     * 
> +     *  ChangeType a dictionary from the directory format to an OSGi configuration.
> +     *  @param directoryDictionary
> +     */
> +    
> +     public void translateDirctoryKeysToOsgiKeys(Dictionary directoryDictionary) ;
> +        
> +    
> +    /**
> +      * 
> +      * ChangeType a OSGi configuration to a dictionary suitable for the directory.
> +      *
> +      * @param configurationDictionary
> +     */
> +     public void translateOsgiKeysToDirectoryKeys(Dictionary configurationDictionary) ;
> +}
> 
> Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/NameMapping.java
> URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/NameMapping.java?view=auto&rev=501176
> ==============================================================================
> --- directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/NameMapping.java (added)
> +++ directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/NameMapping.java Mon Jan 29 12:38:25 2007
> @@ -0,0 +1,94 @@
> +/*
> + *   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.configuration.dao.jndi;
> +
> +import javax.naming.InvalidNameException;
> +import javax.naming.Name;
> +import javax.naming.ldap.LdapName;
> +
> +import org.apache.configuration.impl.ConfigurationDictionary;
> +
> +/**
> + * NameMapping creates a name from a given object.
> + *
> + * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
> + * @version $Rev$, $Date$
> + */
> +public interface NameMapping
> +{
> +    
> +    /**
> +     * APACHEDS_NAMIMG_KEY is the name of a ConfigurationAdmin properties key that 
> +     * specifies the distinguished ldap name to use for persisting a property. If
> +     * it is missing from a configuration a default name will be choosen.
> +     */
> +    public static final String APACHEDS_NAMIMG_KEY ="apache.configuration.ldap.dn";
> +
> +    
> +    /**
> +     * 
> +     * Add an APACHEDS_NAMIMG_KEY and value to the configurationDictionary if the name does not fit the default
> +     * pattern.
> +     *
> +     * @param configurationDictionary
> +     * @param name
> +     */
> +    public void addAlternateName(ConfigurationDictionary configurationDictionary, String name);
> +    /**
> +     * 
> +     * Creates a name for the given configurationDictionary. If the configurationDictionary
> +     * contains a APACHEDS_NAMIMG_KEY it will be used for the name and then removed
> +     * from the configurationDictioanry.  If configurationDictionary does not contain
> +     * the a APACHEDS_NAMIMG_KEY a default name will be created based on the value 
> +     * returned from the <code>getDefaultNamingBaseName<code> method. 
> +     *
> +     * @param configurationDictionary 
> +     * @return name
> +     */
> +    Name getDistinguishedName(ConfigurationDictionary configurationDictionary);
> +    
> +    /**
> +     * 
> +     * get a Pid for the given configurationDictionary
> +     *
> +     * @param configurationDictionary
> +     * @return
> +     */
> +    String getPid(ConfigurationDictionary configurationDictionary);
> +    
> +    /**
> +     * 
> +     * get a mutable name for the search base dn.
> +     *
> +     * @return Name of the baseDn
> +     * @throws InvalidNameException
> +     */
> +    LdapName getSearchBaseName() throws InvalidNameException;
> +    
> +    /**
> +     * 
> +     * get a mutable name for the default naming dn.
> +     *
> +     * @return Name of the baseDn for creating default names.
> +     * @throws InvalidNameException
> +     */
> +    LdapName getDefaultNamingBaseName() throws InvalidNameException;
> +}
> 
> Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/CommandProcessor.java
> URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/CommandProcessor.java?view=auto&rev=501176
> ==============================================================================
> --- directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/CommandProcessor.java (added)
> +++ directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/CommandProcessor.java Mon Jan 29 12:38:25 2007
> @@ -0,0 +1,105 @@
> +/*
> + *   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.configuration.dao.jndi.impl;
> +
> +import javax.naming.NamingException;
> +import javax.naming.directory.DirContext;
> +import javax.naming.spi.InitialContextFactory;
> +
> +import org.apache.configuration.dao.ConfigurationDaoException;
> +import org.apache.configuration.dao.jndi.Command;
> +import org.apache.configuration.dao.jndi.CommandProcessing;
> +import org.slf4j.Logger;
> +import org.slf4j.LoggerFactory;
> +
> +/**
> + * CommandProcessor that obtains a dirContext and closes a dirContext for every operation.
> + *
> + * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
> + * @version $Rev$, $Date$
> + */
> +public class CommandProcessor implements CommandProcessing
> +{
> +    private static final Logger log = LoggerFactory.getLogger( CommandProcessor.class );
> +    private final InitialContextFactory initialContextFactory;
> +
> +    
> +
> +
> +    /**
> +     * Creates a new instance of CommandProcessor.
> +     *
> +     * @param initialContextFactory
> +     */
> +    public CommandProcessor( final InitialContextFactory initialContextFactory )
> +    {
> +        super();
> +        this.initialContextFactory = initialContextFactory;
> +    }
> +
> +
> +    /* (non-Javadoc)
> +     * @see org.apache.configuration.dao.jndi.CommandProcessing#submit(org.apache.configuration.dao.jndi.Command)
> +     */
> +    public <T> T submit( Command<T> dirCommand )
> +    {
> +        DirContext dirContext = null;
> +        T results = null;
> +        ConfigurationDaoException exception = null;
> +        try
> +        {
> +            dirContext = (DirContext)initialContextFactory.getInitialContext( null );
> +            if(dirContext == null){
> +                throw new IllegalStateException("DirContext is null.");
> +            }
> +        }
> +        catch ( NamingException e )
> +        {
> +           log.error( "Failed to retrieve a dirContext.",e );
> +           throw new ConfigurationDaoException("Failed to retrieve a dirContext.",e);
> +        }
> +        
> +        try
> +        {
> +            results = dirCommand.execute( dirContext );
> +        }
> +        catch ( ConfigurationDaoException e )
> +        {
> +            exception= e;
> +        }finally{
> +            try
> +            {
> +                if(dirContext!=null){
> +                    dirContext.close();
> +                }
> +            }
> +            catch ( NamingException e )
> +            {
> +                log.error( "Failed to close the dirContext.",e );
> +            }
> +        }
> +        if(exception!=null){
> +            throw exception;
> +        }
> +        return results;
> +    }
> +
> +}
> 
> Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/ConfigurationDaoImpl.java
> URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/ConfigurationDaoImpl.java?view=auto&rev=501176
> ==============================================================================
> --- directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/ConfigurationDaoImpl.java (added)
> +++ directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/ConfigurationDaoImpl.java Mon Jan 29 12:38:25 2007
> @@ -0,0 +1,169 @@
> +/*
> + *   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.configuration.dao.jndi.impl;
> +
> +
> +import java.util.Collections;
> +import java.util.List;
> +
> +import org.apache.configuration.dao.ConfigurationDao;
> +import org.apache.configuration.dao.ConfigurationDaoListener;
> +import org.apache.configuration.dao.ConfigurationDaoNotifier;
> +import org.apache.configuration.dao.jndi.ContextMapping;
> +import org.apache.configuration.dao.jndi.Command;
> +import org.apache.configuration.dao.jndi.CommandProcessing;
> +import org.apache.configuration.dao.jndi.NameMapping;
> +import org.apache.configuration.impl.ConfigurationDictionary;
> +import org.slf4j.Logger;
> +import org.slf4j.LoggerFactory;
> +
> +
> +/**
> + * ConfigurationDaoImpl is a JNDI based ConfiguarationDao
> + * 
> + * Consider extending org.springframework.dao.support.DaoSupport.
> + * 
> + * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
> + * @version $Rev$, $Date$
> + */
> +public class ConfigurationDaoImpl implements ConfigurationDao
> +{
> +
> +    private static final Logger log = LoggerFactory.getLogger( ConfigurationDaoImpl.class );
> +    private static final String ALL_FILTER = "(objectclass="
> +        + ContextMapping.APACHEDS_SERVICE_CONFIGURATION_OBJECTCLASS + ")";
> +
> +    private ContextMapping contextMapping;
> +    private NameMapping nameMapping;
> +    private CommandProcessing commandProcessing;
> +    private ConfigurationDaoNotifier configurationDaoNotifier;
> +    
> +
> +    /* (non-Javadoc)
> +     * @see org.apache.configuration.dao.ConfigurationDao#create(org.apache.configuration.util.ConfigurationDictionary)
> +     */
> +    public String create( ConfigurationDictionary configurationDictionary )
> +    {
> +        Command<String> createCommand = new CreateCommand( nameMapping, contextMapping, configurationDictionary.createCopy() );
> +        return commandProcessing.submit( createCommand );
> +    }
> +
> +
> +    /* (non-Javadoc)
> +     * @see org.apache.configuration.dao.ConfigurationDao#read(java.lang.String)
> +     */
> +    public ConfigurationDictionary read( String pid )
> +    {
> +        if(pid ==null){
> +            throw new IllegalArgumentException("pid argument cannot be null.");
> +        }
> +        Command<ConfigurationDictionary> readCommand = new DefaultReadCommand( nameMapping, contextMapping, pid );
> +        return commandProcessing.submit( readCommand );
> +    }
> +
> +
> +    /* (non-Javadoc)
> +     * @see org.apache.configuration.dao.ConfigurationDao#update(org.apache.configuration.util.ConfigurationDictionary)
> +     */
> +    public void update( ConfigurationDictionary configurationDictionary )
> +    {
> +        Command<Boolean> updateCommand = new UpdateCommand( nameMapping, contextMapping, configurationDictionary );
> +        boolean updated = commandProcessing.submit( updateCommand );
> +            if(!updated){
> +                log.debug( "Create the initial configurationDictionary.");
> +                create( configurationDictionary );
> +            }
> +    }
> +
> +
> +    /* (non-Javadoc)
> +     * @see org.apache.configuration.dao.ConfigurationDao#delete(org.apache.configuration.util.ConfigurationDictionary)
> +     */
> +    public void delete( ConfigurationDictionary configurationDictionary )
> +    {
> +        Command<Void> deleteCommand = new DeleteCommand( nameMapping.getDistinguishedName( configurationDictionary ) );
> +        commandProcessing.submit( deleteCommand );
> +    }
> +
> +
> +    /* (non-Javadoc)
> +     * @see org.apache.configuration.dao.ConfigurationDao#findAll()
> +     */
> +
> +    public List<ConfigurationDictionary> findAll()
> +    {
> +        log.debug( "Listing all configuration entries." );
> +        Command<List<ConfigurationDictionary>> listCommand = new ListCommand( ALL_FILTER, nameMapping,
> +            contextMapping );
> +        List<ConfigurationDictionary> results = commandProcessing.submit( listCommand );
> +        if(results!=null){
> +            return results;
> +        }
> +        return Collections.emptyList();
> +    }
> +
> +
> +    public void setContextMapping( ContextMapping contextMapping )
> +    {
> +        this.contextMapping = contextMapping;
> +    }
> +
> +
> +    public void setNameMapping( NameMapping nameMapping )
> +    {
> +        this.nameMapping = nameMapping;
> +    }
> +
> +
> +    public void setDirCommandProcessor( CommandProcessing commandProcessing )
> +    {
> +        this.commandProcessing = commandProcessing;
> +    }
> +
> +
> +    public void setConfigurationListener( ConfigurationDaoListener configurationListener )
> +    {
> +        
> +       
> +        configurationDaoNotifier.setConfigurationListener( configurationListener );
> +
> +    }
> +
> +
> +    public void removeConfigurationListener()
> +    {
> +        configurationDaoNotifier.removeConfigurationListener();
> +
> +    }
> +
> +
> +    public ConfigurationDaoNotifier getConfigurationDaoEventGenerator()
> +    {
> +        return configurationDaoNotifier;
> +    }
> +
> +
> +    public void setConfigurationDaoEventGenerator( ConfigurationDaoNotifier configurationDaoNotifier )
> +    {
> +        this.configurationDaoNotifier = configurationDaoNotifier;
> +    }
> +
> +}
> 
> Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/ConfigurationDaoNotifierImpl.java
> URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/ConfigurationDaoNotifierImpl.java?view=auto&rev=501176
> ==============================================================================
> --- directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/ConfigurationDaoNotifierImpl.java (added)
> +++ directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/ConfigurationDaoNotifierImpl.java Mon Jan 29 12:38:25 2007
> @@ -0,0 +1,166 @@
> +/*
> + *   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.configuration.dao.jndi.impl;
> +
> +
> +import javax.naming.InvalidNameException;
> +import javax.naming.NamingException;
> +import javax.naming.directory.DirContext;
> +import javax.naming.event.EventContext;
> +import javax.naming.event.EventDirContext;
> +import javax.naming.spi.InitialContextFactory;
> +
> +import org.apache.configuration.dao.ConfigurationDaoException;
> +import org.apache.configuration.dao.ConfigurationDaoListener;
> +import org.apache.configuration.dao.ConfigurationDaoNotifier;
> +import org.apache.configuration.dao.jndi.JndiConfigurationDaoNotifier;
> +import org.apache.configuration.dao.jndi.NameMapping;
> +
> +
> +/**
> + * ConfigurationDaoNotifierImpl notifies ConfigurationDaoListeners of changes to the 
> + * JNDI store.
> + *
> + * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
> + * @version $Rev$, $Date$
> + */
> +public class ConfigurationDaoNotifierImpl implements ConfigurationDaoNotifier
> +{
> +
> +    private JndiConfigurationDaoNotifier jndiConfigurationDaoNotifier;
> +    private NameMapping nameMapping;
> +    private InitialContextFactory initialContextFactory;
> +
> +    private EventDirContext eventDirContext = null;
> +
> +
> +    /**
> +     * Creates a new instance of ConfigurationDaoNotifierImpl.
> +     *
> +     */
> +    public ConfigurationDaoNotifierImpl()
> +    {
> +        super();
> +
> +    }
> +
> +
> +    /**
> +     * 
> +     * setChangeListener to listen to configuration changes on the backend.
> +     *
> +     * @param listener
> +     * @throws NamingException 
> +     */
> +    public void setConfigurationListener( ConfigurationDaoListener configurationListener )
> +    {
> +        if ( jndiConfigurationDaoNotifier == null )
> +        {
> +            throw new IllegalStateException( "jndiConfigurationDaoNotifier cannot be null." );
> +        }
> +        jndiConfigurationDaoNotifier.setConfigurationListener( configurationListener );
> +
> +        try
> +        {
> +            if ( eventDirContext == null )
> +            {
> +                 DirContext dirContext = (DirContext)initialContextFactory.getInitialContext( null );
> +                 eventDirContext =(EventDirContext) dirContext.lookup( "" );
> +            }
> +            eventDirContext.addNamingListener( nameMapping.getSearchBaseName(), EventContext.SUBTREE_SCOPE,
> +                jndiConfigurationDaoNotifier );
> +        }
> +        catch ( InvalidNameException e )
> +        {
> +            throw new ConfigurationDaoException( "Could not create a eventDirContext to set a configurationListener.",
> +                e );
> +        }
> +        catch ( NamingException e )
> +        {
> +            throw new ConfigurationDaoException( "Could not set a configurationListener with search base.", e );
> +        }
> +    }
> +
> +
> +    /* (non-Javadoc)
> +     * @see org.apache.configuration.dao.ConfigurationDaoNotifier#removeConfigurationListener()
> +     */
> +    public void removeConfigurationListener()
> +    {
> +        if ( jndiConfigurationDaoNotifier == null )
> +        {
> +            return;
> +        }
> +        else
> +        {
> +            jndiConfigurationDaoNotifier.removeConfigurationListener();
> +        }
> +        if ( eventDirContext != null )
> +        {
> +            try
> +            {
> +                eventDirContext.close();
> +            }
> +            catch ( NamingException e )
> +            {
> +                //ignore
> +            }
> +            finally
> +            {
> +                eventDirContext = null;
> +            }
> +
> +        }
> +
> +    }
> +
> +
> +    public JndiConfigurationDaoNotifier getConfigurationDaoNotifier()
> +    {
> +        return jndiConfigurationDaoNotifier;
> +    }
> +
> +
> +    public void setJndiConfigurationDaoNotifier(
> +        JndiConfigurationDaoNotifier jndiConfigurationDaoNotifier )
> +    {
> +        this.jndiConfigurationDaoNotifier = jndiConfigurationDaoNotifier;
> +    }
> +
> +
> +    public void setNameMapping( NameMapping nameMapping )
> +    {
> +        this.nameMapping = nameMapping;
> +    }
> +
> +
> +    public InitialContextFactory getInitialContextFactory()
> +    {
> +        return initialContextFactory;
> +    }
> +
> +
> +    public void setInitialContextFactory( InitialContextFactory initialContextFactory )
> +    {
> +        this.initialContextFactory = initialContextFactory;
> +    }
> +
> +}
> 
> Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/ContextMapper.java
> URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/ContextMapper.java?view=auto&rev=501176
> ==============================================================================
> --- directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/ContextMapper.java (added)
> +++ directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/ContextMapper.java Mon Jan 29 12:38:25 2007
> @@ -0,0 +1,182 @@
> +/*
> + *   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.configuration.dao.jndi.impl;
> +
> +import java.util.Dictionary;
> +import java.util.Enumeration;
> +import java.util.Vector;
> +
> +import javax.naming.NamingEnumeration;
> +import javax.naming.NamingException;
> +import javax.naming.directory.Attribute;
> +import javax.naming.directory.Attributes;
> +import javax.naming.directory.BasicAttribute;
> +import javax.naming.directory.DirContext;
> +
> +import org.apache.configuration.dao.jndi.ContextMapping;
> +import org.apache.configuration.dao.jndi.KeyMapping;
> +import org.apache.configuration.impl.ConfigurationDictionary;
> +
> +/**
> + * ContextMapper.
> + *
> + * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
> + * @version $Rev$, $Date$
> + */
> +public class ContextMapper implements ContextMapping
> +{
> +
> +    private KeyMapping keyMapping;
> +    /**
> +     * 
> +     * Map a Configuration From Attributes.
> +     *
> +     * @param atts
> +     * @return
> +     */
> +    public ConfigurationDictionary transform( Attributes atts ) throws NamingException
> +    {
> +        ConfigurationDictionary configurationDictionary = new ConfigurationDictionary();
> +        
> +        NamingEnumeration<? extends Attribute> enumer = atts.getAll();
> +        while ( enumer.hasMoreElements() )
> +        {
> +            Attribute attribute =  enumer.nextElement();
> +            addAttribute( attribute,  configurationDictionary );
> +            
> +        }
> +        return configurationDictionary;
> +    }
> +    
> +     /**
> +      * 
> +      * Map a configuration to a Context.
> +      *
> +      * @param configurationDictionary
> +      * @param context
> +      */
> +    public DirContext transform( ConfigurationDictionary configurationDictionaryIn )
> +    {
> +        if(configurationDictionaryIn.get("objectclass"  )==null){
> +            throw new IllegalArgumentException("There was no objectclass properties defined.");
> +        }
> +        ConfigurationDictionary configurationDictionary = configurationDictionaryIn.createCopy();
> +        SimpleDirContextAdapter context = new SimpleDirContextAdapter();
> +        Enumeration keys = configurationDictionary.keys();
> +        while ( keys.hasMoreElements() )
> +        {
> +            String key = (String)keys.nextElement();
> +            Attribute attribute = new BasicAttribute(key);
> +            Object value= configurationDictionary.get( key );
> +            addValueToAttribute(value, attribute);
> +            context.setAttribute( attribute );
> +        }
> +        return context;
> +    }
> +    
> +    
> +    /**
> +     * 
> +     * Add an attribute as a value to a configurationDictionary
> +     * 
> +     * @param configurationDictionary .
> +     * @param attribute 
> +     * @throws NamingException 
> +     * @throws NamingException 
> +     */
> +    private void addAttribute(Attribute attribute, ConfigurationDictionary configurationDictionary ) throws NamingException {
> +        if(attribute.size( )>1){
> +            Vector<Object> vector = new Vector<Object>(attribute.size( ));
> +            NamingEnumeration<?> enumer = attribute.getAll();
> +            while ( enumer.hasMoreElements() )
> +            {
> +                Object o =  enumer.nextElement();
> +                vector.add( o );
> +                
> +            }
> +            configurationDictionary.put( attribute.getID(), vector );
> +        }else if (attribute.size( )==1) {
> +            String key = attribute.getID();
> +            Object value = attribute.get();
> +            configurationDictionary.put( key, value );
> +        }else{
> +            throw new IllegalStateException("No attribute found for "+attribute);
> +        }
> +    }
> +    
> +    /**
> +     * 
> +     * Add a value as an attribute.
> +     * 
> +     * @param value maybe an object, array of values, or a vector of values.
> +     * @param attribute to add values to.
> +     */
> +    public void addValueToAttribute(Object value,Attribute attribute ){
> +        if(value == null){
> +            throw new IllegalArgumentException("Argument value cannot be null");
> +        }
> +        if(attribute == null){
> +            throw new IllegalArgumentException("Argument attribute cannot be null");
> +        }
> +        if (value.getClass().isArray()){
> +            addArray((Object[]) value, attribute);
> +        }else if(value instanceof Vector){
> +            addVector((Vector)value, attribute);
> +        }else  {
> +            attribute.add(value);
> +        }
> +    }
> +    
> +    private void addArray(Object[] value,Attribute attribute ){
> +        for ( int i = 0; i < value.length; i++ )
> +        {
> +            attribute.add(value[i]);
> +        }
> +    }
> +    
> +    private void addVector(Vector value,Attribute attribute ){
> +        for ( Object object : value )
> +        {
> +            attribute.add(object);
> +        }
> +    }
> +
> +    public void translateDirctoryKeysToOsgiKeys( Dictionary directoryDictionary )
> +    {
> +        keyMapping.translateDirctoryKeysToOsgiKeys(  directoryDictionary);
> +        
> +    }
> +
> +    public void translateOsgiKeysToDirectoryKeys( Dictionary configurationDictionary )
> +    {
> +        keyMapping.translateOsgiKeysToDirectoryKeys(  configurationDictionary);
> +        
> +    }
> +
> +    public void setKeyMapping( KeyMapping keyMapping )
> +    {
> +        this.keyMapping = keyMapping;
> +    }
> +
> +   
> +
> +
> +}
> 
> Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/CreateCommand.java
> URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/CreateCommand.java?view=auto&rev=501176
> ==============================================================================
> --- directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/CreateCommand.java (added)
> +++ directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/CreateCommand.java Mon Jan 29 12:38:25 2007
> @@ -0,0 +1,106 @@
> +/*
> + *   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.configuration.dao.jndi.impl;
> +
> +import javax.naming.Name;
> +import javax.naming.NamingException;
> +import javax.naming.directory.DirContext;
> +
> +import org.apache.configuration.dao.ConfigurationDaoException;
> +import org.apache.configuration.dao.jndi.Command;
> +import org.apache.configuration.dao.jndi.ContextMapping;
> +import org.apache.configuration.dao.jndi.NameMapping;
> +import org.apache.configuration.impl.ConfigurationDictionary;
> +import org.slf4j.Logger;
> +import org.slf4j.LoggerFactory;
> +
> +/**
> + * CreateCommand.
> + *
> + * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
> + * @version $Rev$, $Date$
> + */
> +public class CreateCommand implements Command<String>
> +{
> +    private static final Logger log = LoggerFactory.getLogger( CreateCommand.class );
> +    private final ContextMapping contextMapping;
> +    private final ConfigurationDictionary configurationDictionary;
> +    private final String pid;
> +    private final Name name;
> +
> +    /**
> +     * Creates a new instance of CreateCommand.
> +     *
> +     */
> +    public CreateCommand(NameMapping nameMapping, ContextMapping contextMapping, ConfigurationDictionary configurationDictionary)
> +    {
> +        this.contextMapping=contextMapping;
> +        this.configurationDictionary=configurationDictionary.createCopy();
> +        this.pid =  nameMapping.getPid( this.configurationDictionary );
> +        this.name = nameMapping.getDistinguishedName( this.configurationDictionary ) ;
> +        modifyConfiguration( this.configurationDictionary);
> +        
> +        if(pid==null){
> +            throw new IllegalArgumentException( " could not find a Pid in "+configurationDictionary);
> +        }
> +        if(name==null){
> +            throw new IllegalArgumentException( " could not find a DistinguishedName in "+configurationDictionary);
> +        }
> +    }
> +
> +
> +    /* (non-Javadoc)
> +     * @see org.apache.configuration.dao.jndi.Command#execute(javax.naming.directory.DirContext)
> +     */
> +    public String execute( DirContext dirContext )
> +    {
> +        DirContext obj = createDirContext();
> +        
> +        try
> +        {
> +            dirContext.bind( name, obj );
> +        }
> +        catch ( NamingException e )
> +        {
> +            log.error( "Failed to create an entry "+configurationDictionary+" named "+name,e );
> +            throw new ConfigurationDaoException("Failed to execute the create. ",e);
> +        }
> +        log.debug( "Created an entry for {} with DN [{}].",configurationDictionary, name );
> +        return pid;
> +    }
> +
> +
> +    
> +    
> +    private void modifyConfiguration(ConfigurationDictionary configurationDictionary)
> +    {
> +        contextMapping.translateOsgiKeysToDirectoryKeys(  configurationDictionary);
> +    }
> +    
> +    private DirContext createDirContext(){
> +        DirContext result= contextMapping.transform( configurationDictionary );
> +        if(result==null){
> +            throw new IllegalStateException("Could not transform the configuration Dictionary "+configurationDictionary);
> +        }
> +        return result;
> +    }
> +
> +}
> 
> Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/DefaultNameMapper.java
> URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/DefaultNameMapper.java?view=auto&rev=501176
> ==============================================================================
> --- directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/DefaultNameMapper.java (added)
> +++ directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/DefaultNameMapper.java Mon Jan 29 12:38:25 2007
> @@ -0,0 +1,141 @@
> +package org.apache.configuration.dao.jndi.impl;
> +
> +
> +import javax.naming.InvalidNameException;
> +import javax.naming.Name;
> +import javax.naming.ldap.LdapName;
> +
> +import org.apache.configuration.dao.ConfigurationDaoException;
> +import org.apache.configuration.dao.jndi.ContextMapping;
> +import org.apache.configuration.dao.jndi.NameMapping;
> +import org.apache.configuration.impl.ConfigurationDictionary;
> +import org.osgi.framework.Constants;
> +import org.slf4j.Logger;
> +import org.slf4j.LoggerFactory;
> +
> +
> +public class DefaultNameMapper implements NameMapping
> +{
> +
> +    /** the log for this class */
> +    private static final Logger log = LoggerFactory.getLogger( DefaultNameMapper.class );
> +    
> +    private String searchBase;
> +
> +    private String defaultNamingBase;
> +
> +
> +    /**
> +     * 
> +     * Creates a name for the given configurationDictionary. If the configurationDictionary
> +     * contains a APACHEDS_NAMIMG_KEY it will be used for the name and then removed
> +     * from the configurationDictioanry.  If configurationDictionary does not contain
> +     * the a APACHEDS_NAMIMG_KEY a default name will be created based on the value 
> +     * returned from the <code>getDefaultNamingBaseName<code> method. 
> +     *
> +     * @param configurationDictionary 
> +     * @return name
> +     */
> +    public Name getDistinguishedName( ConfigurationDictionary configurationDictionary )
> +    {
> +        Object nameObject = configurationDictionary.remove( APACHEDS_NAMIMG_KEY );
> +        if ( nameObject == null )
> +        {
> +            String pid =  getPid( configurationDictionary );
> +            return getDefaultedDistinguishedName( pid );
> +        }
> +
> +        String explicitName = (String)  nameObject;
> +        try
> +        {
> +            log.debug("Found explicitNaming Object {} ",nameObject);
> +            return new LdapName( explicitName );
> +        }
> +        catch ( InvalidNameException e )
> +        {
> +            throw new ConfigurationDaoException( "Could not form a distinguished Name from " + explicitName,e );
> +        }
> +    }
> +
> +
> +    public String getPid( ConfigurationDictionary configurationDictionary )
> +    {
> +        if ( configurationDictionary.get( Constants.SERVICE_PID ) != null )
> +        {
> +            return ( String ) configurationDictionary.get( Constants.SERVICE_PID );
> +        }
> +        else if ( configurationDictionary.get( ContextMapping.APACHEDS_SERVICE_PID ) != null )
> +        {
> +            return ( String ) configurationDictionary.get( ContextMapping.APACHEDS_SERVICE_PID );
> +        }
> +        throw new IllegalArgumentException( "Could not determine the service pid." );
> +    }
> +
> +
> +    public LdapName getSearchBaseName() throws InvalidNameException
> +    {
> +        return new LdapName( searchBase );
> +    }
> +
> +
> +    public LdapName getDefaultNamingBaseName() throws InvalidNameException
> +    {
> +
> +        return new LdapName( defaultNamingBase );
> +    }
> +
> +
> +    public void setSearchBase( String searchBase )
> +    {
> +        this.searchBase = searchBase;
> +    }
> +
> +
> +    public void setDefaultNamingBase( String defaultNamingBase )
> +    {
> +        this.defaultNamingBase = defaultNamingBase;
> +    }
> +
> +
> +    private Name getDefaultedDistinguishedName( String pid )
> +    {
> +
> +        LdapName dn;
> +        try
> +        {
> +            dn = getDefaultNamingBaseName();
> +            dn.add( ContextMapping.APACHEDS_SERVICE_PID + '=' + pid );
> +        }
> +        catch ( InvalidNameException e )
> +        {
> +            throw new ConfigurationDaoException( "Invalid Name " + pid + ' ' + e.toString() );
> +        }
> +
> +        return dn;
> +    }
> +
> +
> +    /**
> +     * 
> +     * Add an APACHEDS_NAMIMG_KEY and value to the configurationDictionary if the name does not fit the default
> +     * pattern.
> +     *
> +     * @param configurationDictionary
> +     * @param name
> +     */
> +    public void addAlternateName( ConfigurationDictionary configurationDictionary, String name )
> +    {
> +        String pid = (String) configurationDictionary.get(ContextMapping.APACHEDS_SERVICE_PID);
> +        Name lName = getDefaultedDistinguishedName( pid );
> +        
> +        if(lName.toString().equals( name )){
> +            log.debug( "{} of entry equals the default name {}.",name,lName.toString());
> +        }else{
> +            log.debug( "{} of entry does not equals the default name {}.",name,lName.toString()); 
> +            configurationDictionary.put( APACHEDS_NAMIMG_KEY, name );
> +        }
> +        
> +    }
> +    
> +    
> +}
> 
> Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/DefaultReadCommand.java
> URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/DefaultReadCommand.java?view=auto&rev=501176
> ==============================================================================
> --- directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/DefaultReadCommand.java (added)
> +++ directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/DefaultReadCommand.java Mon Jan 29 12:38:25 2007
> @@ -0,0 +1,105 @@
> +/*
> + *   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.configuration.dao.jndi.impl;
> +
> +
> +import java.util.List;
> +
> +import javax.naming.NameNotFoundException;
> +import javax.naming.directory.DirContext;
> +
> +import org.apache.configuration.dao.ConfigurationDaoException;
> +import org.apache.configuration.dao.jndi.ContextMapping;
> +import org.apache.configuration.dao.jndi.Command;
> +import org.apache.configuration.dao.jndi.NameMapping;
> +import org.apache.configuration.impl.ConfigurationDictionary;
> +import org.slf4j.Logger;
> +import org.slf4j.LoggerFactory;
> +
> +
> +/**
> + * DefaultReadCommand delegates to a search based lookup to 
> + * read a configurationDictionary from the directory.
> + *
> + * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
> + * @version $Rev$, $Date$
> + */
> +public class DefaultReadCommand implements Command<ConfigurationDictionary>
> +{
> +
> +    private static final Logger log = LoggerFactory.getLogger( DefaultReadCommand.class );
> +    private final Command<List<ConfigurationDictionary>> delegate;
> +    public static final String FILTER_PART_ONE = "(&(objectclass="
> +        + ContextMapping.APACHEDS_SERVICE_CONFIGURATION_OBJECTCLASS + ") (" + ContextMapping.APACHEDS_SERVICE_PID + "=";
> +    private final String pid;
> +
> +
> +    /**
> +     * Creates a new instance of SimpleReadCommand.
> +     *
> +     */
> +    public DefaultReadCommand( NameMapping nameMapping, ContextMapping contextMapping, String pid )
> +    {
> +        if(pid==null){
> +            throw new IllegalArgumentException("pid argument cannot be null.");
> +        }
> +        this.pid = pid;
> +        String filter = FILTER_PART_ONE + pid + "))";
> +
> +        this.delegate = new ListCommand( filter, nameMapping, contextMapping );
> +
> +    }
> +
> +
> +    /**
> +     * 
> +     * execute delegates to a search based lookup to find the pid.
> +     *
> +     * @param dirContext
> +     * @return
> +     */
> +    public ConfigurationDictionary execute( DirContext dirContext )
> +    {
> +        try
> +        {
> +            List<ConfigurationDictionary> list = delegate.execute( dirContext );
> +            if ( list==null || list.isEmpty() )
> +            {
> +                ConfigurationDaoException e = new ConfigurationDaoException( 
> +                    "Search for pid:" + pid + " returned no entries.", new NameNotFoundException() );
> +                throw e;
> +            }
> +            else if ( list.size() > 1 )
> +            {
> +                throw new ConfigurationDaoException( "Primary Key Integrity Failure. Search for " + pid + " returned "
> +                    + list.size() + " entries." );
> +            }
> +            return list.get(0);
> +        }
> +        catch ( ConfigurationDaoException e )
> +        {
> +            log.error( pid + " could not be read with a delegated search.", e );
> +            throw e;
> +        }
> +
> +    }
> +
> +}
> 
> Added: directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/DeleteCommand.java
> URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/DeleteCommand.java?view=auto&rev=501176
> ==============================================================================
> --- directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/DeleteCommand.java (added)
> +++ directory/sandbox/jconlon/osgi-services/configuration-service/src/main/java/org/apache/configuration/dao/jndi/impl/DeleteCommand.java Mon Jan 29 12:38:25 2007
> @@ -0,0 +1,75 @@
> +/*
> + *   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.configuration.dao.jndi.impl;
> +
> +import javax.naming.Name;
> +import javax.naming.NamingException;
> +import javax.naming.directory.DirContext;
> +
> +import org.apache.configuration.dao.ConfigurationDaoException;
> +import org.apache.configuration.dao.jndi.Command;
> +import org.slf4j.Logger;
> +import org.slf4j.LoggerFactory;
> +
> +/**
> + * DeleteCommand deletes a configurationDictionary from the directory.
> + *
> + * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
> + * @version $Rev$, $Date$
> + */
> +public class DeleteCommand implements Command<Void>
> +{
> +
> +    private static final Logger log = LoggerFactory.getLogger( DeleteCommand.class );
> +    private final Name name;
> +    /**
> +     * Creates a new instance of SimpleReadCommand.
> +     *
> +     */
> +    public DeleteCommand(Name name)
> +    {
> +        this.name=name;
> +    }
> +
> +
> +    /* (non-Javadoc)
> +     * @see org.apache.configuration.dao.jndi.Command#execute(javax.naming.directory.DirContext)
> +     */
> +    public Void execute( DirContext dirContext )
> +    {
> +        
> +        try
> +        {
> +            dirContext.destroySubcontext( name );
> +        }
> +        catch ( NamingException e )
> +        {
> +            log.error( name+" could not be read.",e );
> +            throw new ConfigurationDaoException(name+" could not be deleted.", e);
> +        }
> +       
> +      
> +       return null;
> +    }
> +    
> +    
> +
> +}
> 
> 
> 


Mime
View raw message