You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by jc...@apache.org on 2006/12/08 23:36:14 UTC

svn commit: r484831 - in /directory/sandbox/jconlon/osgi-apacheds/core-felix-tui: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/directory/ src/main/java/org/apache/directory/osgi/ src/main/java/o...

Author: jconlon
Date: Fri Dec  8 14:36:13 2006
New Revision: 484831

URL: http://svn.apache.org/viewvc?view=rev&rev=484831
Log:
added a felix tui subproject to manage the OSGi ApacheDS core backend

Added:
    directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/
    directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/pom.xml
    directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/
    directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/
    directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/
    directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/
    directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/
    directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/
    directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/
    directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/
    directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/
    directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/BackendCommand.java
    directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/CommandHandler.java
    directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/HelpCommand.java
    directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/LoadCommand.java
    directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/LoaderConfiguration.java
    directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/NullCommand.java
    directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/SearchCommand.java
    directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/resources/
    directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/resources/META-INF/
    directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/resources/META-INF/spring/
    directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/resources/META-INF/spring/server-osgi.xml
    directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/resources/META-INF/spring/server.xml

Added: directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/pom.xml
URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/pom.xml?view=auto&rev=484831
==============================================================================
--- directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/pom.xml (added)
+++ directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/pom.xml Fri Dec  8 14:36:13 2006
@@ -0,0 +1,43 @@
+<?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.server</groupId>
+		<artifactId>build</artifactId>
+		<version>1.5.0-SNAPSHOT</version>
+	</parent>
+	<artifactId>apacheds-core-felix-tui</artifactId>
+	<packaging>bundle</packaging>
+	<name>ApacheDS Backend Store Felix Shell Interface</name>
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.felix</groupId>
+				<artifactId>maven-bundle-plugin</artifactId>
+				<extensions>true</extensions>
+				<configuration>
+					<instructions>
+						<Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
+						<Export-Package>org.apache.directory.osgi.backend.shell</Export-Package>
+					</instructions>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+	<dependencies>
+		<dependency>
+			<groupId>org.apache.directory.server</groupId>
+			<version>${pom.version}</version>
+			<artifactId>apacheds-protocol-shared</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	 
+		<dependency>
+			<groupId>org.apache.felix</groupId>
+			<artifactId>org.apache.felix.shell</artifactId>
+			<version>0.8.0-SNAPSHOT</version>
+			<scope>provided</scope>
+		</dependency>
+
+	</dependencies>
+</project>

Added: directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/BackendCommand.java
URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/BackendCommand.java?view=auto&rev=484831
==============================================================================
--- directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/BackendCommand.java (added)
+++ directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/BackendCommand.java Fri Dec  8 14:36:13 2006
@@ -0,0 +1,116 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ *
+ */
+package org.apache.directory.osgi.backend.shell;
+
+
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import javax.naming.spi.InitialContextFactory;
+
+import org.apache.felix.shell.Command;
+
+/**
+ * 
+ * BackendCommand is a felix shell command interface for interacting with 
+ * the Apache Directory Backend.
+ *
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class BackendCommand implements Command
+{
+    private CommandHandler commandHandler;
+
+
+    public String getName()
+    {
+        return "backend";
+    }
+
+
+    public String getUsage()
+    {
+        return "backend help";
+    }
+
+
+    public String getShortDescription()
+    {
+        return "ApacheDS Backend Service.";
+    }
+
+
+    public void execute( String s, PrintStream out, PrintStream err )
+    {
+        StringTokenizer st = new StringTokenizer( s, " " );
+        // Ignore the command name.
+        st.nextToken();
+        List<String> tokens = new ArrayList<String>();
+        while ( st.hasMoreTokens() )
+        {
+            tokens.add( st.nextToken().trim() );
+        }
+        commandHandler.handle( tokens, out, err );
+    }
+
+
+    /**
+     * 
+     * Called by the Spring-OSGi IOC container to set the InitialContextFactory
+     * service.
+     *
+     * @param factory
+     */
+    public void setInitialContextFactory( InitialContextFactory factory )
+    {
+        commandHandler = createCommandHandler( factory );
+    }
+
+    /**
+     * 
+     * Called by the Spring-OSGi IOC container to UNset the InitialContextFactory
+     * service.
+     *
+     * @param factory
+     */
+    public void unsetInitialContextFactory( InitialContextFactory factory )
+    {
+
+        this.commandHandler = null;
+    }
+
+
+    /**
+     * 
+     * Builds the CommandHandler using a chain of responsibility.
+     *
+     * @param factory
+     * @return
+     */
+    private CommandHandler createCommandHandler( InitialContextFactory factory )
+    {
+        return new HelpCommand( new LoadCommand( factory, new SearchCommand( factory, new NullCommand() ) ) );
+
+    }
+}

Added: directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/CommandHandler.java
URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/CommandHandler.java?view=auto&rev=484831
==============================================================================
--- directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/CommandHandler.java (added)
+++ directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/CommandHandler.java Fri Dec  8 14:36:13 2006
@@ -0,0 +1,58 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ *
+ */
+package org.apache.directory.osgi.backend.shell;
+
+
+import java.io.PrintStream;
+import java.util.List;
+
+/**
+ * 
+ * CommandHandler chain of responsibility interface for commands.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public interface CommandHandler
+{
+
+    /**
+     * Handle a specific command.
+     * @param commandLine
+     * @param out
+     * @param err
+     */
+    void handle( List<String> list, PrintStream out, PrintStream err );
+
+
+    /**
+     * Print out a specific provision command.
+     * @param out
+     */
+    void help( PrintStream out );
+
+
+    /**
+     * 
+     * @return list of command names to build the main help command.
+     */
+    List addCommandNames( List<String> names );
+
+}

Added: directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/HelpCommand.java
URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/HelpCommand.java?view=auto&rev=484831
==============================================================================
--- directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/HelpCommand.java (added)
+++ directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/HelpCommand.java Fri Dec  8 14:36:13 2006
@@ -0,0 +1,107 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ *
+ */
+package org.apache.directory.osgi.backend.shell;
+
+
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * 
+ * HelpCommand is a CommandHandler for printing out a help
+ * message for the various commands..
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class HelpCommand implements CommandHandler
+{
+
+    private final static String MYCOMMAND = "help";
+    private final CommandHandler commandHandler;
+
+
+    /**
+     * 
+     * Creates a new instance of HelpCommand.
+     *
+     * @param commandHandler
+     */
+    HelpCommand( CommandHandler commandHandler )
+    {
+        this.commandHandler = commandHandler;
+    }
+
+
+    public void handle( List<String> list, PrintStream out, PrintStream err )
+    {
+        if ( MYCOMMAND.equals( list.get( 0 ) ) )
+        {
+            createOutput( out, err );
+            commandHandler.help( out );
+        }
+        else
+        {
+            commandHandler.handle( list, out, err );
+        }
+
+    }
+
+
+    public void help( PrintStream out )
+    {
+        // Not used
+    }
+
+
+    public List addCommandNames( List<String> names )
+    {
+        // Not used
+        return null;
+    }
+
+
+    private void createOutput( PrintStream out, PrintStream err )
+    {
+        List<String> names = new ArrayList<String>();
+        commandHandler.addCommandNames( names );
+
+        out.print( "backend help " );
+        boolean bracket = true;
+        for ( Iterator iter = names.iterator(); iter.hasNext(); )
+        {
+            String name = ( String ) iter.next();
+            if ( bracket )
+            {
+                out.print( "[" );
+                bracket = false;
+            }
+            else
+            {
+                out.print( " | " );
+            }
+            out.print( name );
+        }
+        out.println( "]" );
+    }
+
+}

Added: directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/LoadCommand.java
URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/LoadCommand.java?view=auto&rev=484831
==============================================================================
--- directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/LoadCommand.java (added)
+++ directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/LoadCommand.java Fri Dec  8 14:36:13 2006
@@ -0,0 +1,198 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ *
+ */
+package org.apache.directory.osgi.backend.shell;
+
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.Hashtable;
+import java.util.List;
+
+import javax.naming.Context;
+import javax.naming.NamingException;
+import javax.naming.directory.DirContext;
+import javax.naming.spi.InitialContextFactory;
+
+import org.apache.directory.server.protocol.shared.store.LdifFileLoader;
+
+/**
+ * 
+ * LoadCommand is a CommandHandler for loading ldif files into the backend.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class LoadCommand implements CommandHandler
+{
+
+    private final static String MYCOMMAND = "load";
+
+    private final InitialContextFactory initialContextFactory;
+
+    private final CommandHandler commandHandler;
+
+
+    public LoadCommand( InitialContextFactory initialContextFactory, CommandHandler commandHandler )
+    {
+        this.initialContextFactory = initialContextFactory;
+        this.commandHandler = commandHandler;
+    }
+
+
+    public void handle( List<String> list, PrintStream out, PrintStream err )
+    {
+        if ( MYCOMMAND.equals( list.get( 0 ) ) )
+        {
+            execute( list, out, err );
+        }
+        else
+        {
+            commandHandler.handle( list, out, err );
+        }
+
+    }
+
+
+    public void help( PrintStream out )
+    {
+        out.println( "backend load <path/to/file> <context> " );
+        commandHandler.help( out );
+    }
+
+
+    public List addCommandNames( List<String> names )
+    {
+        names.add( MYCOMMAND );
+        return commandHandler.addCommandNames( names );
+    }
+
+
+    private void load( String pathToLdif, String initialContext, PrintStream out, PrintStream err ) throws IOException
+    {
+
+        Hashtable env = new Hashtable( new LoaderConfiguration().toJndiEnvironment() );
+        env.put( Context.INITIAL_CONTEXT_FACTORY, "org.apache.ldap.server.jndi.CoreContextFactory" );
+
+        DirContext ctx = null;
+        try
+        {
+            if ( initialContext == null )
+            {
+                out.println( "Loading " + pathToLdif + " into root context." );
+                env.put( Context.PROVIDER_URL, "" );
+            }
+            else
+            {
+                out.println( "Loading " + pathToLdif + " into context " + initialContext );
+                env.put( Context.PROVIDER_URL, initialContext );
+            }
+            ctx = ( DirContext ) initialContextFactory.getInitialContext( env );
+            LdifFileLoader loader = new LdifFileLoader( ctx, pathToLdif );
+            int loaded = loader.execute();
+            out.println( "Loaded " + loaded + " entries from " + pathToLdif + " into context " + initialContext );
+
+        }
+        catch ( NamingException ne )
+        {
+            err.println( "Error loading " + pathToLdif + " to initial context " + initialContext + " " + ne );
+            return;
+        }
+        finally
+        {
+            if ( ctx != null )
+            {
+                try
+                {
+                    ctx.close();
+                }
+                catch ( Exception ex )
+                {
+                    //ignore
+                }
+            }
+        }
+
+    }
+
+
+    private void execute( List<String> list, PrintStream out, PrintStream err )
+    {
+
+        if ( list.size() == 2 )
+        {
+            String ldif = ( list.get( 1 ) ).trim();
+            if ( ldif.length() == 0 )
+            {
+                return;
+            }
+            try
+            {
+
+                File ldifFile = new File( ldif );
+                if ( ldifFile.exists() )
+                {
+                    load( ldif, null, out, err );
+                }
+                else
+                {
+                    err.println( "LDIF file: " + ldifFile + " does not exist." );
+                }
+            }
+            catch ( Exception e )
+            {
+                err.println( e.toString() );
+            }
+        }
+        else if ( list.size() == 3 )
+        {
+            String ldif = ( list.get( 1 ) ).trim();
+            String root = ( list.get( 2 ) ).trim();
+
+            try
+            {
+                File ldifFile = new File( ldif );
+                if ( ldifFile.exists() )
+                {
+                    load( ldif, root, out, err );
+                }
+                else
+                {
+                    err.println( "LDIF file: " + ldifFile + " does not exist." );
+                }
+
+            }
+            catch ( IOException ex )
+            {
+                err.println( ex.toString() );
+            }
+            catch ( Exception ex )
+            {
+                err.println( ex.toString() );
+            }
+
+        }
+        else
+        {
+            err.println( "Incorrect number of arguments." );
+        }
+    }
+
+}

Added: directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/LoaderConfiguration.java
URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/LoaderConfiguration.java?view=auto&rev=484831
==============================================================================
--- directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/LoaderConfiguration.java (added)
+++ directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/LoaderConfiguration.java Fri Dec  8 14:36:13 2006
@@ -0,0 +1,56 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ *
+ */
+package org.apache.directory.osgi.backend.shell;
+
+
+import org.apache.directory.server.core.configuration.Configuration;
+
+/**
+ * 
+ * LoaderConfiguration a simple Apache Directory configuration for the 
+ * commands that require JNDI access to the backend.
+ * 
+ * @see LoadCommand
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class LoaderConfiguration extends Configuration
+{
+    
+    private static final long serialVersionUID = 2118505728064456450L;
+
+
+    /**
+     * Creates a new instance with default settings.
+     */
+    public LoaderConfiguration()
+    {
+    }
+
+
+    /**
+     * Creates a new instance with default settings that operates on the
+     * {@link DirectoryService} with the specified ID.
+     */
+    public LoaderConfiguration( String instanceId )
+    {
+        setInstanceId( instanceId );
+    }
+}
\ No newline at end of file

Added: directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/NullCommand.java
URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/NullCommand.java?view=auto&rev=484831
==============================================================================
--- directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/NullCommand.java (added)
+++ directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/NullCommand.java Fri Dec  8 14:36:13 2006
@@ -0,0 +1,59 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ *
+ */
+package org.apache.directory.osgi.backend.shell;
+
+
+import java.io.PrintStream;
+import java.util.List;
+
+
+/**
+ * 
+ * NullCommand is a CommandHandler that does nothing.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class NullCommand implements CommandHandler
+{
+
+    public NullCommand()
+    {
+    }
+
+
+    public void handle( List list, PrintStream out, PrintStream err )
+    {
+        err.println( "unsupported provision command: " + list.get( 0 ) );
+    }
+
+
+    public void help( PrintStream out )
+    {
+        // noop
+    }
+
+
+    public List addCommandNames( List names )
+    {
+        return names;
+    }
+
+}

Added: directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/SearchCommand.java
URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/SearchCommand.java?view=auto&rev=484831
==============================================================================
--- directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/SearchCommand.java (added)
+++ directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/java/org/apache/directory/osgi/backend/shell/SearchCommand.java Fri Dec  8 14:36:13 2006
@@ -0,0 +1,206 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ *
+ */
+package org.apache.directory.osgi.backend.shell;
+
+
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.Hashtable;
+import java.util.List;
+
+import javax.naming.Context;
+import javax.naming.NameNotFoundException;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.SearchControls;
+import javax.naming.directory.SearchResult;
+import javax.naming.spi.InitialContextFactory;
+
+
+/**
+ * 
+ * SearchCommand is a CommandHandler for searching the backend.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class SearchCommand implements CommandHandler
+{
+
+    private final static String MYCOMMAND = "search";
+
+    private final InitialContextFactory initialContextFactory;
+
+    private final CommandHandler commandHandler;
+
+
+    /**
+     * 
+     * Creates a new instance of SearchCommand.
+     *
+     * @param initialContextFactory
+     * @param commandHandler
+     */
+    public SearchCommand( InitialContextFactory initialContextFactory, CommandHandler commandHandler )
+    {
+        this.initialContextFactory = initialContextFactory;
+        this.commandHandler = commandHandler;
+    }
+
+
+    public void handle( List<String> list, PrintStream out, PrintStream err )
+    {
+        if ( MYCOMMAND.equals( list.get( 0 ) ) )
+        {
+            execute( list, out, err );
+        }
+        else
+        {
+            commandHandler.handle( list, out, err );
+        }
+
+    }
+
+
+    public void help( PrintStream out )
+    {
+        out.println( "backend search <name> <filter>" );
+        commandHandler.help( out );
+    }
+
+
+    public List addCommandNames( List<String> names )
+    {
+        names.add( MYCOMMAND );
+        return commandHandler.addCommandNames( names );
+    }
+
+
+    private void search( String name, String filter, PrintStream out, PrintStream err ) throws IOException
+    {
+
+        Hashtable env = new Hashtable( new LoaderConfiguration().toJndiEnvironment() );
+        env.put( Context.INITIAL_CONTEXT_FACTORY, "org.apache.ldap.server.jndi.CoreContextFactory" );
+        env.put( Context.PROVIDER_URL, "" );
+
+        DirContext dirContext = null;
+
+        NamingEnumeration namingEnumeration = null;
+        try
+        {
+            SearchControls searchControls = new SearchControls();
+            searchControls.setSearchScope( SearchControls.SUBTREE_SCOPE );
+
+            dirContext = ( DirContext ) initialContextFactory.getInitialContext( env );
+            out.println( "Searching backend for: " + name + " with filter: " + filter );
+            namingEnumeration = dirContext.search( name, filter, searchControls );
+
+            while ( namingEnumeration.hasMore() )
+            {
+                SearchResult result = ( SearchResult ) namingEnumeration.next();
+                out.println( result.toString() );
+            }
+        }
+        catch ( NameNotFoundException e )
+        {
+            err.println( e.getMessage() );
+
+        }
+        catch ( NamingException e )
+        {
+            e.printStackTrace( err );
+        }
+        finally
+        {
+            if ( namingEnumeration != null )
+            {
+                try
+                {
+                    namingEnumeration.close();
+                }
+                catch ( Exception e )
+                {
+                    //ignore
+                }
+            }
+            if ( dirContext != null )
+            {
+                try
+                {
+                    dirContext.close();
+                }
+                catch ( Exception e )
+                {
+                    //ignore
+                }
+            }
+        }
+
+    }
+
+
+    private void execute( List<String> list, PrintStream out, PrintStream err )
+    {
+        if ( list.size() == 2 )
+        {
+            String name = ( list.get( 1 ) ).trim();
+            try
+            {
+                if ( name.length() == 0 )
+                {
+                    return;
+                }
+                search( name, "(objectclass=*)", out, err );
+            }
+            catch ( Exception e )
+            {
+                err.println( e.toString() );
+            }
+        }
+        else if ( list.size() == 3 )
+        {
+            String name = ( list.get( 1 ) ).trim();
+            String filter = ( list.get( 2 ) ).trim();
+            if ( name.length() == 0 )
+            {
+                return;
+            }
+            if ( filter.length() == 0 )
+            {
+                filter = "(objectclass=*)";
+            }
+            try
+            {
+                search( name, filter, out, err );
+            }
+            catch ( Exception ex )
+            {
+                err.println( ex.toString() );
+            }
+
+        }
+        else
+        {
+            err.println( "Incorrect number of arguments." );
+        }
+    }
+
+}

Added: directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/resources/META-INF/spring/server-osgi.xml
URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/resources/META-INF/spring/server-osgi.xml?view=auto&rev=484831
==============================================================================
--- directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/resources/META-INF/spring/server-osgi.xml (added)
+++ directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/resources/META-INF/spring/server-osgi.xml Fri Dec  8 14:36:13 2006
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xmlns:osgi="http://www.springframework.org/schema/osgi"
+  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+                      http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd">
+
+  <!-- Requires a InitialContextFactory Service -->				
+  <osgi:reference
+  	id="initialContextFactoryService" 
+    interface="javax.naming.spi.InitialContextFactory">
+    <!--osgi:listener ref="backendShell"
+    				bind-method="setInitialContextFactory"
+    				unbind-method="unsetInitialContextFactory"/-->
+  </osgi:reference>
+  
+  <!-- Provides a Command Service -->                
+  <osgi:service id="felixCommand" ref="backendShell"
+    interface="org.apache.felix.shell.Command"  />
+
+</beans>
\ No newline at end of file

Added: directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/resources/META-INF/spring/server.xml
URL: http://svn.apache.org/viewvc/directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/resources/META-INF/spring/server.xml?view=auto&rev=484831
==============================================================================
--- directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/resources/META-INF/spring/server.xml (added)
+++ directory/sandbox/jconlon/osgi-apacheds/core-felix-tui/src/main/resources/META-INF/spring/server.xml Fri Dec  8 14:36:13 2006
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
+	
+	<!-- Requires a InitialContextFactory and offers a org.apache.felix.shell.Command -->
+	<bean id="backendShell" 
+		 class="org.apache.directory.osgi.backend.shell.BackendCommand">
+		<property name="initialContextFactory" ref="initialContextFactoryService"/>
+	</bean>
+	
+</beans>