You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by er...@apache.org on 2005/11/07 14:35:44 UTC
svn commit: r331269 - in
/directory/sandbox/erodriguez/osgi-spec/configuration/src:
main/java/org/apache/configuration/ main/java/org/apache/configuration/impl/
main/java/org/apache/configuration/store/ test/java/org/apache/configuration/
Author: erodriguez
Date: Mon Nov 7 05:35:34 2005
New Revision: 331269
URL: http://svn.apache.org/viewcvs?rev=331269&view=rev
Log:
Added basic context listening to the Config Admin service, with test cases.
Added:
directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/ConfigurationConfig.java (with props)
directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/ConfigurationListener.java (with props)
directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/impl/JndiConfigurationStore.java (with props)
directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/store/EventConfigurationStore.java (with props)
directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/store/EventDirContextListener.java (with props)
directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/store/JndiEventConfigurationStoreImpl.java (with props)
directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/ConfigurationTest.java (with props)
directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/DictionaryFactory.java (with props)
directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/JndiQueryBuilderTest.java (with props)
directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/PrimeSearchActivator.java (with props)
directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/ServiceConfigurationTest.java (with props)
directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/configuration-changepw.ldif
directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/configuration-dns.ldif
directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/configuration-kerberos.ldif
directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/configuration-ntp.ldif
Added: directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/ConfigurationConfig.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/ConfigurationConfig.java?rev=331269&view=auto
==============================================================================
--- directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/ConfigurationConfig.java (added)
+++ directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/ConfigurationConfig.java Mon Nov 7 05:35:34 2005
@@ -0,0 +1,46 @@
+/*
+ * 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;
+
+import org.apache.ldap.server.DirectoryService;
+import org.apache.ldap.server.configuration.Configuration;
+
+public class ConfigurationConfig extends Configuration
+{
+ private static final long serialVersionUID = 8173869543480836087L;
+
+ private static final String name = "Apache Configuration Admin Service";
+
+ public ConfigurationConfig()
+ {
+ }
+
+ /**
+ * Creates a new instance with default settings that operates on the
+ * {@link DirectoryService} with the specified ID.
+ */
+ public ConfigurationConfig( String instanceId )
+ {
+ setInstanceId( instanceId );
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+}
Propchange: directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/ConfigurationConfig.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/ConfigurationListener.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/ConfigurationListener.java?rev=331269&view=auto
==============================================================================
--- directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/ConfigurationListener.java (added)
+++ directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/ConfigurationListener.java Mon Nov 7 05:35:34 2005
@@ -0,0 +1,25 @@
+/*
+ * 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;
+
+import java.util.Dictionary;
+
+public interface ConfigurationListener
+{
+ public void configurationChanged( Dictionary configuration );
+}
Propchange: directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/ConfigurationListener.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/impl/JndiConfigurationStore.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/impl/JndiConfigurationStore.java?rev=331269&view=auto
==============================================================================
--- directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/impl/JndiConfigurationStore.java (added)
+++ directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/impl/JndiConfigurationStore.java Mon Nov 7 05:35:34 2005
@@ -0,0 +1,336 @@
+/*
+ * 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.impl;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Dictionary;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import javax.naming.CompoundName;
+import javax.naming.Context;
+import javax.naming.Name;
+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.ConfigurationConfig;
+import org.apache.configuration.ConfigurationListener;
+import org.apache.configuration.ConfigurationStore;
+import org.apache.configuration.store.EventConfigurationStore;
+import org.apache.configuration.store.EventDirContextListener;
+import org.apache.configuration.store.JndiEventConfigurationStoreImpl;
+import org.osgi.framework.Constants;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.service.cm.Configuration;
+import org.osgi.service.cm.ConfigurationAdmin;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class JndiConfigurationStore implements ConfigurationStore, ConfigurationListener
+{
+ /** the log for this class */
+ private static final Logger log = LoggerFactory.getLogger( JndiConfigurationStore.class );
+
+ /** a handle on the provider context */
+ private EventDirContext ctx;
+
+ /** a handle on the factory */
+ private InitialContextFactory factory;
+
+ /** a handle on the listener */
+ private EventDirContextListener directoryListener;
+
+ /** a handle on the listener */
+ private ConfigurationListener storeListener;
+
+ /** a handle on the store */
+ private EventConfigurationStore commandStore;
+
+ /** a handle on the configs */
+ private Map configs;
+
+ /**
+ * The key of the property specifying where configuration is stored. If this
+ * property is not set the store defaults to performing a subtree search
+ * from the DN in the {@link Context#PROVIDER_URL}. If it is present a more
+ * efficient search is conducted on the more specific DN.
+ */
+ public static final String CM_ENTRY_BASEDN_KEY = "cm.entry.basedn";
+
+ /**
+ * Creates the action to be used against the embedded ApacheDS DIT. Note
+ * the searchBase is a relative name to the context and not a DN.
+ *
+ * @param factory the JNDI context to the store
+ */
+ public JndiConfigurationStore( InitialContextFactory factory )
+ {
+ this.factory = factory;
+
+ activate();
+ }
+
+ public void configurationChanged( Dictionary dictionary )
+ {
+ log.debug( "Got " + dictionary );
+
+ String servicePid = (String) dictionary.get( Constants.SERVICE_PID );
+ configs.put( servicePid, dictionary );
+
+ storeListener.configurationChanged( dictionary );
+ }
+
+ /**
+ * All required services have been bound, but our service(s) are not yet
+ * registered.
+ */
+ public void activate()
+ {
+ configs = new HashMap();
+
+ Hashtable env = new Hashtable( new ConfigurationConfig().toJndiEnvironment() );
+ loadEnvironment( env );
+
+ try
+ {
+ ctx = (EventDirContext) factory.getInitialContext( env );
+ }
+ catch ( NamingException ne )
+ {
+ log.error( ne.getMessage(), ne );
+ }
+
+ Name searchBaseDn = null;
+
+ try
+ {
+ if ( env.containsKey( CM_ENTRY_BASEDN_KEY ) )
+ {
+ String baseDn = (String) env.get( CM_ENTRY_BASEDN_KEY );
+ searchBaseDn = getRelativeName( ctx, baseDn );
+
+ log.debug( "Using searchBaseDn " + searchBaseDn );
+
+ String listenerName = "Listener-" + System.currentTimeMillis();
+ directoryListener = new EventDirContextListener( listenerName );
+ directoryListener.setConfigurationListener( this );
+
+ ctx.addNamingListener( searchBaseDn, EventContext.SUBTREE_SCOPE, directoryListener );
+ }
+ }
+ catch ( NamingException ne )
+ {
+ log.error( ne.getMessage(), ne );
+ }
+
+ commandStore = new JndiEventConfigurationStoreImpl( ctx, searchBaseDn );
+ }
+
+ /**
+ * Invalidation has started and our services have been unregistered, but
+ * any required services have not been unbound yet.
+ */
+ public void deactivate()
+ {
+ try
+ {
+ log.debug( "Removing listener " + directoryListener );
+ ctx.removeNamingListener( directoryListener );
+ ctx.close();
+ }
+ catch ( NamingException ne )
+ {
+ log.error( ne.getMessage(), ne );
+ }
+ }
+
+ private Name getRelativeName( DirContext ctx, String baseDn ) throws NamingException
+ {
+ Properties props = new Properties();
+ props.setProperty( "jndi.syntax.direction", "right_to_left" );
+ props.setProperty( "jndi.syntax.separator", "," );
+
+ Name searchBaseDn = null;
+
+ try
+ {
+ Name ctxRoot = new CompoundName( ctx.getNameInNamespace(), props );
+ searchBaseDn = new CompoundName( baseDn, props );
+
+ if ( !searchBaseDn.startsWith( ctxRoot ) )
+ {
+ throw new NamingException( "Invalid search base for configuration: " + baseDn );
+ }
+
+ for ( int ii = 0; ii < ctxRoot.size(); ii++ )
+ {
+ searchBaseDn.remove( 0 );
+ }
+ }
+ catch ( NamingException e )
+ {
+ throw new NamingException( "Failed to initialize search base " + baseDn + " for configuration." );
+ }
+
+ return searchBaseDn;
+ }
+
+ private void loadEnvironment( Hashtable env )
+ {
+ env.put( Context.PROVIDER_URL, "ou=configuration,ou=system" );
+ env.put( Context.INITIAL_CONTEXT_FACTORY, "org.apache.ldap.server.jndi.CoreContextFactory" );
+
+ env.put( CM_ENTRY_BASEDN_KEY, "ou=services,ou=configuration,ou=system" );
+ }
+
+ public ConfigurationDictionary delete( String pid ) throws IOException
+ {
+ log.debug( "Got request to delete configuration for pid " + pid );
+
+ // store must call the listener with the deleted dictionary
+ // storeListener.configurationChanged( dictionary );
+
+ return null;
+ }
+
+ public void deleteAll( String factoryPid ) throws IOException
+ {
+ log.debug( "Got request to delete all configurations for managed factory " + factoryPid );
+
+ // store must call the listener with the deleted dictionary
+ // storeListener.configurationChanged( dictionary );
+ }
+
+ public String generatePid( String factoryPid ) throws IOException
+ {
+ log.debug( "Got request to generate PID for managed factory " + factoryPid );
+
+ return null;
+ }
+
+ public Enumeration listPids()
+ {
+ log.debug( "Got request to list all PIDs" );
+
+ return Collections.enumeration( configs.keySet() );
+ }
+
+ public Configuration[] listConfigurations( String filterString ) throws IOException, InvalidSyntaxException
+ {
+ Enumeration configurationPids = listPids();
+
+ List results = new ArrayList();
+
+ while ( configurationPids.hasMoreElements() )
+ {
+ String pid = (String) configurationPids.nextElement();
+ ConfigurationDictionary config = load( pid );
+
+ if ( config == null )
+ {
+ continue;
+ }
+
+ if ( filterString == null )
+ {
+ results.add( new ConfigurationImpl( this, config ) );
+ }
+ else
+ {
+ if ( LDAPQuery.query( filterString, config ) )
+ {
+ results.add( new ConfigurationImpl( this, config ) );
+ }
+ }
+ }
+
+ return (Configuration[]) results.toArray( new Configuration[ results.size() ] );
+ }
+
+ public ConfigurationDictionary load( String pid ) throws IOException
+ {
+ log.debug( "Got request to load configuration for pid " + pid );
+
+ Hashtable config = (Hashtable) configs.get( pid );
+
+ log.debug( "Returning single configuration of size " + config.size() );
+
+ return new ConfigurationDictionary( config );
+ }
+
+ public ConfigurationDictionary[] loadAll( String factoryPid ) throws IOException
+ {
+ log.debug( "Got request to load all configurations for managed factory " + factoryPid );
+
+ List results = new ArrayList();
+
+ Enumeration candidates = Collections.enumeration( configs.values() );
+
+ while ( candidates.hasMoreElements() )
+ {
+ Hashtable candidate = (Hashtable) candidates.nextElement();
+ String factory = (String) candidate.get( ConfigurationAdmin.SERVICE_FACTORYPID );
+
+ if ( factory != null && factory.equals( factoryPid ) )
+ {
+ results.add( new ConfigurationDictionary( candidate ) );
+ }
+ }
+
+ ConfigurationDictionary[] dictionaries = new ConfigurationDictionary[ results.size() ];
+ ConfigurationDictionary[] returned = (ConfigurationDictionary[]) results.toArray( dictionaries );
+
+ log.debug( "Returning " + returned.length + " configuration(s)." );
+
+ return returned;
+ }
+
+ public void store( String pid, String factoryPid, Dictionary configuration ) throws IOException
+ {
+ log.debug( "Got request to store configuration for pid " + pid );
+
+ // store must call the listener with the stored dictionary
+ // storeListener.configurationChanged( dictionary );
+ }
+
+ public void setConfigurationListener( ConfigurationListener configurationListener )
+ {
+ this.storeListener = configurationListener;
+ log.debug( "Store received listener " + configurationListener );
+ }
+
+ public Configuration getNewConfiguration( String bundleLocation, String factoryPid, String servicePid,
+ ConfigurationDictionary properties )
+ {
+ return new ConfigurationImpl( this, bundleLocation, factoryPid, servicePid, properties );
+ }
+
+ public Configuration getNewConfiguration( String bundleLocation, String factoryPid, String servicePid )
+ {
+ return new ConfigurationImpl( this, bundleLocation, factoryPid, servicePid );
+ }
+}
Propchange: directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/impl/JndiConfigurationStore.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/store/EventConfigurationStore.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/store/EventConfigurationStore.java?rev=331269&view=auto
==============================================================================
--- directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/store/EventConfigurationStore.java (added)
+++ directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/store/EventConfigurationStore.java Mon Nov 7 05:35:34 2005
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.configuration.store;
+
+import org.apache.configuration.ConfigurationListener;
+import org.apache.protocol.common.store.ContextOperation;
+
+public interface EventConfigurationStore
+{
+ public Object execute( ContextOperation operation ) throws Exception;
+
+ public void setConfigurationListener( ConfigurationListener configurationListener );
+}
Propchange: directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/store/EventConfigurationStore.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/store/EventDirContextListener.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/store/EventDirContextListener.java?rev=331269&view=auto
==============================================================================
--- directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/store/EventDirContextListener.java (added)
+++ directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/store/EventDirContextListener.java Mon Nov 7 05:35:34 2005
@@ -0,0 +1,147 @@
+/*
+ * 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.store;
+
+import java.util.Dictionary;
+import java.util.Enumeration;
+import java.util.Hashtable;
+
+import javax.naming.Binding;
+import javax.naming.NamingException;
+import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
+import javax.naming.event.NamespaceChangeListener;
+import javax.naming.event.NamingEvent;
+import javax.naming.event.NamingExceptionEvent;
+import javax.naming.event.ObjectChangeListener;
+
+import org.apache.configuration.ConfigurationListener;
+import org.osgi.framework.Constants;
+import org.osgi.service.cm.ConfigurationAdmin;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class EventDirContextListener implements NamespaceChangeListener, ObjectChangeListener
+{
+ private static final String APACHE_SERVICE_PID = "apacheServicePid";
+ private static final String APACHE_FACTORY_PID = "apacheServiceFactoryPid";
+ private static final String CATALOG_BASEDN_KEY = "catalogBaseDn";
+
+ /** the log for this class */
+ private static final Logger log = LoggerFactory.getLogger( EventDirContextListener.class );
+
+ private String id;
+ private ConfigurationListener listener;
+
+ public EventDirContextListener( String id )
+ {
+ this.id = id;
+ }
+
+ public void setConfigurationListener( ConfigurationListener listener )
+ {
+ this.listener = listener;
+ }
+
+ public void objectAdded( NamingEvent evt )
+ {
+ log.debug( id + " >>> added: " + evt.getNewBinding() );
+ }
+
+ /**
+ * When an object has been added, getOldBinding() will always return null
+ * because it wasn't in the namespace prior to its being added.
+ */
+ public void objectRemoved( NamingEvent evt )
+ {
+ log.debug( id + " >>> removed: " + evt.getOldBinding() );
+ }
+
+ /**
+ * When an object has been removed, getNewBinding() will always be null
+ * because it won't be in the namespace after it has been removed.
+ */
+ public void objectRenamed( NamingEvent evt )
+ {
+ log.debug( id + " >>> renamed: " + evt.getNewBinding() + " from " + evt.getOldBinding() );
+ }
+
+ public void objectChanged( NamingEvent evt )
+ {
+ log.debug( id + " >>> object changed: " + evt.getNewBinding() + " from " + evt.getOldBinding() );
+
+ if ( listener != null )
+ {
+ try
+ {
+ Dictionary newConfig = getConfigFrom( evt.getNewBinding() );
+ listener.configurationChanged( newConfig );
+ }
+ catch ( NamingException ne )
+ {
+ log.error( ne.getMessage(), ne );
+ }
+ }
+ }
+
+ public void namingExceptionThrown( NamingExceptionEvent evt )
+ {
+ log.error( id + " >>> exception: ", evt.getException() );
+ }
+
+ /**
+ * Convert the binding to a Dictionary, while replacing certain attribute types
+ * with the OSGi standard constants. LDAP attribute types must not contain periods,
+ * but some of the OSGi constants do.
+ *
+ * @param binding
+ * @return Hashtable
+ * @throws NamingException
+ */
+ private Hashtable getConfigFrom( Binding binding ) throws NamingException
+ {
+ Attributes attrs = (Attributes) binding.getObject();
+
+ Hashtable config = new Hashtable();
+
+ config.put( CATALOG_BASEDN_KEY, binding.getName() );
+
+ Enumeration attributes = attrs.getAll();
+
+ while ( attributes.hasMoreElements() )
+ {
+ Attribute attr = (Attribute) attributes.nextElement();
+
+ if ( attr.getID().equals( APACHE_SERVICE_PID ) )
+ {
+ config.put( Constants.SERVICE_PID, attr.get() );
+ }
+ else
+ if ( attr.getID().equals( APACHE_FACTORY_PID ) )
+ {
+ config.put( ConfigurationAdmin.SERVICE_FACTORYPID, attr.get() );
+ }
+ else
+ {
+ config.put( attr.getID(), attr.get() );
+ }
+ }
+
+ return config;
+ }
+}
Propchange: directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/store/EventDirContextListener.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/store/JndiEventConfigurationStoreImpl.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/store/JndiEventConfigurationStoreImpl.java?rev=331269&view=auto
==============================================================================
--- directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/store/JndiEventConfigurationStoreImpl.java (added)
+++ directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/store/JndiEventConfigurationStoreImpl.java Mon Nov 7 05:35:34 2005
@@ -0,0 +1,65 @@
+/*
+ * 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.store;
+
+import javax.naming.Name;
+import javax.naming.event.EventDirContext;
+
+import org.apache.configuration.ConfigurationListener;
+import org.apache.protocol.common.store.ContextOperation;
+
+/**
+ * A simple implementation of the EventConfigurationStore interface using a JNDI
+ * based store.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class JndiEventConfigurationStoreImpl implements EventConfigurationStore
+{
+ /** a handle on the provider context */
+ private EventDirContext ctx;
+
+ /** the search searchBase relative to the DN of the context supplied */
+ private Name searchBase;
+
+ /** a handle on the listener */
+ private ConfigurationListener listener;
+
+ /**
+ * Creates the action to be used against the embedded ApacheDS DIT. Note
+ * the searchBase is a relative name to the context and not a DN.
+ *
+ * @param ctx the JNDI context to the store
+ * @param searchBase the name relative to the context to use as the search base
+ */
+ public JndiEventConfigurationStoreImpl( EventDirContext ctx, Name searchBase )
+ {
+ this.ctx = ctx;
+ this.searchBase = searchBase;
+ }
+
+ public Object execute( ContextOperation operation ) throws Exception
+ {
+ return operation.execute( ctx, searchBase );
+ }
+
+ public void setConfigurationListener( ConfigurationListener listener )
+ {
+ this.listener = listener;
+ }
+}
Propchange: directory/sandbox/erodriguez/osgi-spec/configuration/src/main/java/org/apache/configuration/store/JndiEventConfigurationStoreImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/ConfigurationTest.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/ConfigurationTest.java?rev=331269&view=auto
==============================================================================
--- directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/ConfigurationTest.java (added)
+++ directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/ConfigurationTest.java Mon Nov 7 05:35:34 2005
@@ -0,0 +1,29 @@
+/*
+ * 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;
+
+import junit.framework.TestCase;
+
+/**
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class ConfigurationTest extends TestCase
+{
+
+}
Propchange: directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/ConfigurationTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/DictionaryFactory.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/DictionaryFactory.java?rev=331269&view=auto
==============================================================================
--- directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/DictionaryFactory.java (added)
+++ directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/DictionaryFactory.java Mon Nov 7 05:35:34 2005
@@ -0,0 +1,32 @@
+/*
+ * 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;
+
+import java.util.Map;
+
+import javax.naming.directory.Attributes;
+
+import org.apache.protocol.common.store.ObjectFactory;
+
+public class DictionaryFactory implements ObjectFactory
+{
+ public Object getObject( Map defaults, Attributes attrs )
+ {
+ return null;
+ }
+}
Propchange: directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/DictionaryFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/JndiQueryBuilderTest.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/JndiQueryBuilderTest.java?rev=331269&view=auto
==============================================================================
--- directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/JndiQueryBuilderTest.java (added)
+++ directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/JndiQueryBuilderTest.java Mon Nov 7 05:35:34 2005
@@ -0,0 +1,115 @@
+/*
+ * 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;
+
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.apache.protocol.common.store.ObjectFactory;
+
+/**
+ * 1) Configured baseDn to get started.
+ * 2) Subtree search to find object 1 node name.
+ * 3) Subtree search to find targeted object 2 under object 1.
+ * 4) Convert attributes to object.
+ * 5) During 4 apply any defaults, possible based on rdn processing.
+ *
+ * config baseDN, apacheFactory, set of apacheService as Dictionary.
+ * apacheFactory as baseDN, set of catalogEntry as CatalogEntry in Map.
+ *
+ * children:
+ * a factory's children are services.
+ * a service's children are catalog entry's.
+ * a catalog entry's children are resourcerecords.
+ * a catalog entry's children are princpals.
+ *
+ */
+public class JndiQueryBuilderTest extends TestCase
+{
+ /**
+ * Get child configurations below a parent service factory
+ *
+ * make service configuration a Dictionary
+ */
+ public void testLookupServiceInstances()
+ {
+ String baseDn = "ou=services,ou=configuration,ou=system";
+
+ String filter = "(&(objectClass=apacheFactoryConfiguration)(servicePid=org.apache.dns.factory))";
+ String parentBaseDn = getName( baseDn, filter );
+
+ // Map servicePid, Dictionary
+ filter = "(objectClass=apacheServiceConfiguration)";
+ ObjectFactory objectFactory = new DictionaryFactory();
+ Map configs = getChildren( parentBaseDn, filter, objectFactory );
+ }
+
+ private String getName( String baseDn, String filter )
+ {
+
+
+ return null;
+ }
+
+ private Map getChildren( String baseDn, String filter, ObjectFactory objectFactory )
+ {
+
+ //objectFactory.getObject( new HashMap(), attrs );
+
+ return null;
+ }
+
+ /**
+ * Get from ConfigurationDictionary
+ * cn=org.apache.dns.1,cn=dns,ou=services,ou=configuration,ou=system
+ *
+ * apacheCatalogEntry
+ *
+ * make catalog entries into a Map (or Set of Catalog.Entry
+ */
+ public void testLookupCatalogEntries()
+ {
+
+ }
+
+ /**
+ * dc=apache,dc=org,ou=Zones,dc=apache,dc=org
+ *
+ * apacheAbstractResourceRecord
+ *
+ * make resource record set
+ */
+ public void testLookupZones()
+ {
+
+ }
+
+ /**
+ * ou=Users,dc=apache,dc=org
+ *
+ * krb5Principal
+ * krb5PrincipalName
+ *
+ * make PrincipalStoreEntry
+ */
+ public void testLookupRealms()
+ {
+
+ }
+}
Propchange: directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/JndiQueryBuilderTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/PrimeSearchActivator.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/PrimeSearchActivator.java?rev=331269&view=auto
==============================================================================
--- directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/PrimeSearchActivator.java (added)
+++ directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/PrimeSearchActivator.java Mon Nov 7 05:35:34 2005
@@ -0,0 +1,52 @@
+/*
+ * 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;
+
+public class PrimeSearchActivator
+{
+ PrimeSearch t;
+
+ public void start()
+ {
+ t = new PrimeSearch();
+ t.start();
+ }
+
+ public void stop()
+ {
+ t.terminate();
+ }
+}
+
+class PrimeSearch extends Thread
+{
+ private volatile boolean running = true;
+
+ public void run()
+ {
+ while ( running )
+ {
+ /* compute primes */
+ }
+ }
+
+ void terminate()
+ {
+ running = false;
+ }
+}
Propchange: directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/PrimeSearchActivator.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/ServiceConfigurationTest.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/ServiceConfigurationTest.java?rev=331269&view=auto
==============================================================================
--- directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/ServiceConfigurationTest.java (added)
+++ directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/ServiceConfigurationTest.java Mon Nov 7 05:35:34 2005
@@ -0,0 +1,224 @@
+/*
+ * 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;
+
+import java.util.Dictionary;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.naming.Context;
+import javax.naming.Name;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.SearchControls;
+import javax.naming.directory.SearchResult;
+
+import org.apache.protocol.common.AbstractBackingStoreTest;
+
+public class ServiceConfigurationTest extends AbstractBackingStoreTest
+{
+ private static final String BASE_DN = "ou=services,ou=configuration,ou=system";
+
+ private DirContext ctx;
+
+ /**
+ * Setup the backing store with test partitions.
+ */
+ public void setUp() throws Exception
+ {
+ super.setUp();
+
+ loadPartition( "ou=system", "configuration-dns.ldif" );
+ loadPartition( "ou=system", "configuration-ntp.ldif" );
+
+ env.put( Context.PROVIDER_URL, BASE_DN );
+ ctx = (DirContext) factory.getInitialContext( env );
+ }
+
+ public void testListAllConfigurations() throws Exception
+ {
+ String filter = "(objectClass=apacheServiceConfiguration)";
+ Set set = getSet( filter );
+
+ assertTrue( set.contains( "cn=org.apache.dns.1,cn=dns,ou=services,ou=configuration,ou=system" ) );
+ assertTrue( set.contains( "cn=org.apache.dns.2,cn=dns,ou=services,ou=configuration,ou=system" ) );
+ assertTrue( set.contains( "cn=org.apache.ntp.1,cn=ntp,ou=services,ou=configuration,ou=system" ) );
+ assertTrue( set.contains( "cn=org.apache.ntp.2,cn=ntp,ou=services,ou=configuration,ou=system" ) );
+ }
+
+ public void testListSubSetOfConfigurations() throws Exception
+ {
+ String filter = "(objectClass=apacheServiceConfiguration)";
+ Set set = getSubSet( filter, "cn=dns" );
+
+ assertTrue( set.contains( "cn=org.apache.dns.1,cn=dns,ou=services,ou=configuration,ou=system" ) );
+ assertTrue( set.contains( "cn=org.apache.dns.2,cn=dns,ou=services,ou=configuration,ou=system" ) );
+ assertFalse( set.contains( "cn=org.apache.ntp.1,cn=ntp,ou=services,ou=configuration,ou=system" ) );
+ assertFalse( set.contains( "cn=org.apache.ntp.2,cn=ntp,ou=services,ou=configuration,ou=system" ) );
+ }
+
+ public void testListFactoryServices() throws Exception
+ {
+ // find factory
+
+ String servicePid = "org.apache.dns.factory";
+
+ // getRelative
+ // get apacheServiceConfiguration's below that
+ // generate Dictionary for each
+ // add self as catalog location
+ String filter = "(&(objectClass=apacheFactoryConfiguration)(apacheServicePid=" + servicePid + "))";
+ System.out.println( filter );
+
+ Set set = getSet( filter );
+
+ assertTrue( set.contains( "cn=dns,ou=services,ou=configuration,ou=system" ) );
+ assertFalse( set.contains( "cn=ntp,ou=services,ou=configuration,ou=system" ) );
+
+ Name rdn = null;
+
+ Iterator it = set.iterator();
+ if ( it.hasNext() )
+ {
+ String name = (String) it.next();
+ rdn = getRelativeName( ctx.getNameInNamespace(), name );
+ }
+
+ filter = "(objectClass=apacheServiceConfiguration)";
+ System.out.println( filter );
+
+ set = getSubSet( filter, rdn.toString() );
+
+ assertTrue( set.contains( "cn=org.apache.dns.1,cn=dns,ou=services,ou=configuration,ou=system" ) );
+ assertTrue( set.contains( "cn=org.apache.dns.2,cn=dns,ou=services,ou=configuration,ou=system" ) );
+ assertFalse( set.contains( "cn=org.apache.ntp.1,cn=ntp,ou=services,ou=configuration,ou=system" ) );
+ assertFalse( set.contains( "cn=org.apache.ntp.2,cn=ntp,ou=services,ou=configuration,ou=system" ) );
+
+ it = set.iterator();
+ if ( it.hasNext() )
+ {
+ String name = (String) it.next();
+ rdn = getRelativeName( ctx.getNameInNamespace(), name );
+ }
+ }
+
+ private Dictionary getDictionary( Attributes attrs, String name ) throws NamingException
+ {
+ Dictionary dictionary = new Hashtable();
+
+ dictionary.put( "serviceBaseDn", name );
+
+ NamingEnumeration ids = attrs.getIDs();
+
+ while ( ids.hasMore() )
+ {
+ String key = (String) ids.next();
+
+ Attribute attr;
+ String value = ( attr = attrs.get( key ) ) != null ? (String) attr.get() : null;
+
+ dictionary.put( key, value );
+ }
+
+ return dictionary;
+ }
+
+ private Set getDictionarySubset( String filter, String name ) throws NamingException
+ {
+ SearchControls controls = new SearchControls();
+ controls.setSearchScope( SearchControls.SUBTREE_SCOPE );
+
+ NamingEnumeration list = ctx.search( name, filter, controls );
+
+ Set set = new HashSet();
+
+ while ( list.hasMore() )
+ {
+ SearchResult result = (SearchResult) list.next();
+ System.out.println( "Name: " + result.getName() );
+ System.out.println( "Namespace: " + result.getNameInNamespace() );
+ set.add( getDictionary( result.getAttributes(), result.getName() ) );
+ }
+
+ return set;
+ }
+
+ private Set getSet( String filter ) throws NamingException
+ {
+ return getSubSet( filter, "" );
+ }
+
+ private Set getSubSet( String filter, String name ) throws NamingException
+ {
+ SearchControls controls = new SearchControls();
+ controls.setSearchScope( SearchControls.SUBTREE_SCOPE );
+
+ NamingEnumeration list = ctx.search( name, filter, controls );
+
+ Set set = new HashSet();
+
+ while ( list.hasMore() )
+ {
+ SearchResult result = (SearchResult) list.next();
+ System.out.println( result.getAttributes() );
+ set.add( result.getName() );
+ }
+
+ return set;
+ }
+
+ // objectClass: apacheServiceConfiguration
+ // service.pid: org.apache.dns.1
+ // service.factoryPid: org.apache.dns.factory
+
+ // for service.pid dns1 get my zone catalog
+ // with catalog lookup a domain name
+
+ // factory comes online, get name with factory's service.pid
+ // below factory, get all serviceConfigurations || get all serviceConfig's with factoryPid
+
+ // service comes online, get one serviceConfiguration with service.pid service
+
+ /**
+ * When a factory comes online, get its service.pid and pass it Dictionary's for service.pid's
+ * below it.
+ * Use:
+ * objectClass=apacheServiceConfiguration
+ * In each Dictionary, put name of apacheServiceConfig node dn for catalog searches.
+ */
+
+ /**
+ * When a service comes online, get its service.pid and pass it a Dictionary.
+ * Use:
+ * objectClass=apacheServiceConfiguration
+ * In each Dictionary, put name of apacheServiceConfig node dn for catalog searches.
+ */
+
+ /**
+ * Detect a config being added.
+ */
+
+ /**
+ * Detect a config being deleted.
+ */
+}
Propchange: directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/ServiceConfigurationTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/configuration-changepw.ldif
URL: http://svn.apache.org/viewcvs/directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/configuration-changepw.ldif?rev=331269&view=auto
==============================================================================
--- directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/configuration-changepw.ldif (added)
+++ directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/configuration-changepw.ldif Mon Nov 7 05:35:34 2005
@@ -0,0 +1,80 @@
+#
+# 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.
+#
+# EXAMPLE.COM is reserved for testing according to this RFC:
+#
+# http://www.rfc-editor.org/rfc/rfc2606.txt
+#
+
+version: 1
+dn: ou=configuration,ou=system
+objectClass: top
+objectClass: organizationalUnit
+ou: configuration
+
+dn: ou=services,ou=configuration,ou=system
+objectClass: top
+objectClass: organizationalUnit
+ou: services
+
+dn: cn=changepw,ou=services,ou=configuration,ou=system
+objectClass: top
+objectClass: apacheFactoryConfiguration
+cn: changepw
+apacheServicePid: org.apache.changepw.factory
+
+dn: cn=org.apache.changepw.1,cn=changepw,ou=services,ou=configuration,ou=system
+objectClass: apacheServiceConfiguration
+objectClass: extensibleObject
+cn: org.apache.changepw.1
+ipAddress: 192.168.0.1
+ipPort: 464
+baseDn: dc=example,dc=com
+apacheServicePid: org.apache.changepw.1
+apacheServiceFactoryPid: org.apache.changepw.factory
+
+dn: ou=catalog,cn=org.apache.changepw.1,cn=changepw,ou=services,ou=configuration,ou=system
+objectClass: top
+objectClass: organizationalUnit
+ou: catalog
+
+dn: cn=example.com,ou=catalog,cn=org.apache.changepw.1,cn=changepw,ou=services,ou=configuration,ou=system
+objectClass: top
+objectClass: apacheCatalogEntry
+cn: example.com
+apacheCatalogEntryName: example.com
+apacheCatalogEntryBaseDn: ou=users,dc=example,dc=com
+
+dn: cn=org.apache.changepw.2,cn=changepw,ou=services,ou=configuration,ou=system
+objectClass: apacheServiceConfiguration
+objectClass: extensibleObject
+cn: org.apache.changepw.2
+ipAddress: 10.0.0.1
+ipPort: 10000
+baseDn: dc=apache,dc=org
+apacheServicePid: org.apache.changepw.2
+apacheServiceFactoryPid: org.apache.changepw.factory
+
+dn: ou=catalog,cn=org.apache.changepw.2,cn=changepw,ou=services,ou=configuration,ou=system
+objectClass: top
+objectClass: organizationalUnit
+ou: catalog
+
+dn: cn=apache.org,ou=catalog,cn=org.apache.changepw.2,cn=changepw,ou=services,ou=configuration,ou=system
+objectClass: top
+objectClass: apacheCatalogEntry
+cn: apache.org
+apacheCatalogEntryName: apache.org
+apacheCatalogEntryBaseDn: ou=users,dc=apache,dc=org
Added: directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/configuration-dns.ldif
URL: http://svn.apache.org/viewcvs/directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/configuration-dns.ldif?rev=331269&view=auto
==============================================================================
--- directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/configuration-dns.ldif (added)
+++ directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/configuration-dns.ldif Mon Nov 7 05:35:34 2005
@@ -0,0 +1,80 @@
+#
+# 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.
+#
+# EXAMPLE.COM is reserved for testing according to this RFC:
+#
+# http://www.rfc-editor.org/rfc/rfc2606.txt
+#
+
+version: 1
+dn: ou=configuration,ou=system
+objectClass: top
+objectClass: organizationalUnit
+ou: configuration
+
+dn: ou=services,ou=configuration,ou=system
+objectClass: top
+objectClass: organizationalUnit
+ou: services
+
+dn: cn=dns,ou=services,ou=configuration,ou=system
+objectClass: top
+objectClass: apacheFactoryConfiguration
+cn: dns
+apacheServicePid: org.apache.dns.factory
+
+dn: cn=org.apache.dns.1,cn=dns,ou=services,ou=configuration,ou=system
+objectClass: apacheServiceConfiguration
+objectClass: extensibleObject
+cn: org.apache.dns.1
+ipAddress: 192.168.0.1
+ipPort: 53
+baseDn: dc=example,dc=com
+apacheServicePid: org.apache.dns.1
+apacheServiceFactoryPid: org.apache.dns.factory
+
+dn: ou=catalog,cn=org.apache.dns.1,cn=dns,ou=services,ou=configuration,ou=system
+objectClass: top
+objectClass: organizationalUnit
+ou: catalog
+
+dn: cn=example.com,ou=catalog,cn=org.apache.dns.1,cn=dns,ou=services,ou=configuration,ou=system
+objectClass: top
+objectClass: apacheCatalogEntry
+cn: example.com
+apacheCatalogEntryName: example.com
+apacheCatalogEntryBaseDn: ou=zones,dc=example,dc=com
+
+dn: cn=org.apache.dns.2,cn=dns,ou=services,ou=configuration,ou=system
+objectClass: apacheServiceConfiguration
+objectClass: extensibleObject
+cn: org.apache.dns.2
+ipAddress: 10.0.0.1
+ipPort: 10000
+baseDn: dc=apache,dc=org
+apacheServicePid: org.apache.dns.2
+apacheServiceFactoryPid: org.apache.dns.factory
+
+dn: ou=catalog,cn=org.apache.dns.2,cn=dns,ou=services,ou=configuration,ou=system
+objectClass: top
+objectClass: organizationalUnit
+ou: catalog
+
+dn: cn=apache.org,ou=catalog,cn=org.apache.dns.2,cn=dns,ou=services,ou=configuration,ou=system
+objectClass: top
+objectClass: apacheCatalogEntry
+cn: apache.org
+apacheCatalogEntryName: apache.org
+apacheCatalogEntryBaseDn: ou=zones,dc=apache,dc=org
Added: directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/configuration-kerberos.ldif
URL: http://svn.apache.org/viewcvs/directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/configuration-kerberos.ldif?rev=331269&view=auto
==============================================================================
--- directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/configuration-kerberos.ldif (added)
+++ directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/configuration-kerberos.ldif Mon Nov 7 05:35:34 2005
@@ -0,0 +1,80 @@
+#
+# 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.
+#
+# EXAMPLE.COM is reserved for testing according to this RFC:
+#
+# http://www.rfc-editor.org/rfc/rfc2606.txt
+#
+
+version: 1
+dn: ou=configuration,ou=system
+objectClass: top
+objectClass: organizationalUnit
+ou: configuration
+
+dn: ou=services,ou=configuration,ou=system
+objectClass: top
+objectClass: organizationalUnit
+ou: services
+
+dn: cn=kerberos,ou=services,ou=configuration,ou=system
+objectClass: top
+objectClass: apacheFactoryConfiguration
+cn: kerberos
+apacheServicePid: org.apache.kerberos.factory
+
+dn: cn=org.apache.kerberos.1,cn=kerberos,ou=services,ou=configuration,ou=system
+objectClass: apacheServiceConfiguration
+objectClass: extensibleObject
+cn: org.apache.kerberos.1
+ipAddress: 192.168.0.1
+ipPort: 88
+baseDn: dc=example,dc=com
+apacheServicePid: org.apache.kerberos.1
+apacheServiceFactoryPid: org.apache.kerberos.factory
+
+dn: ou=catalog,cn=org.apache.kerberos.1,cn=kerberos,ou=services,ou=configuration,ou=system
+objectClass: top
+objectClass: organizationalUnit
+ou: catalog
+
+dn: cn=example.com,ou=catalog,cn=org.apache.kerberos.1,cn=kerberos,ou=services,ou=configuration,ou=system
+objectClass: top
+objectClass: apacheCatalogEntry
+cn: example.com
+apacheCatalogEntryName: example.com
+apacheCatalogEntryBaseDn: ou=users,dc=example,dc=com
+
+dn: cn=org.apache.kerberos.2,cn=kerberos,ou=services,ou=configuration,ou=system
+objectClass: apacheServiceConfiguration
+objectClass: extensibleObject
+cn: org.apache.kerberos.2
+ipAddress: 10.0.0.1
+ipPort: 10000
+baseDn: dc=apache,dc=org
+apacheServicePid: org.apache.kerberos.2
+apacheServiceFactoryPid: org.apache.kerberos.factory
+
+dn: ou=catalog,cn=org.apache.kerberos.2,cn=kerberos,ou=services,ou=configuration,ou=system
+objectClass: top
+objectClass: organizationalUnit
+ou: catalog
+
+dn: cn=apache.org,ou=catalog,cn=org.apache.kerberos.2,cn=kerberos,ou=services,ou=configuration,ou=system
+objectClass: top
+objectClass: apacheCatalogEntry
+cn: apache.org
+apacheCatalogEntryName: apache.org
+apacheCatalogEntryBaseDn: ou=users,dc=apache,dc=org
Added: directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/configuration-ntp.ldif
URL: http://svn.apache.org/viewcvs/directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/configuration-ntp.ldif?rev=331269&view=auto
==============================================================================
--- directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/configuration-ntp.ldif (added)
+++ directory/sandbox/erodriguez/osgi-spec/configuration/src/test/java/org/apache/configuration/configuration-ntp.ldif Mon Nov 7 05:35:34 2005
@@ -0,0 +1,55 @@
+#
+# 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.
+#
+# EXAMPLE.COM is reserved for testing according to this RFC:
+#
+# http://www.rfc-editor.org/rfc/rfc2606.txt
+#
+
+version: 1
+dn: ou=configuration,ou=system
+objectClass: top
+objectClass: organizationalUnit
+ou: configuration
+
+dn: ou=services,ou=configuration,ou=system
+objectClass: top
+objectClass: organizationalUnit
+ou: services
+
+dn: cn=ntp,ou=services,ou=configuration,ou=system
+objectClass: top
+objectClass: organizationalUnit
+objectClass: apacheFactoryConfiguration
+cn: ntp
+apacheServicePid: org.apache.ntp.factory
+
+dn: cn=org.apache.ntp.1,cn=ntp,ou=services,ou=configuration,ou=system
+objectClass: apacheServiceConfiguration
+objectClass: extensibleObject
+cn: org.apache.ntp.1
+ipAddress: 192.168.0.1
+ipPort: 123
+apacheServicePid: org.apache.ntp.1
+apacheServiceFactoryPid: org.apache.ntp.factory
+
+dn: cn=org.apache.ntp.2,cn=ntp,ou=services,ou=configuration,ou=system
+objectClass: apacheServiceConfiguration
+objectClass: extensibleObject
+cn: org.apache.ntp.2
+ipAddress: 192.168.0.1
+ipPort: 10000
+apacheServicePid: org.apache.ntp.2
+apacheServiceFactoryPid: org.apache.ntp.factory