jbates      02/05/03 09:35:11

  Modified:    java/src/org/apache/xindice/tools XMLTools.java
  Added:       java/scratchpad/src/org/apache/xindice/tools XMLTools.java
  Log:
  Moved modified XMLTools to scratchpad
  
  Revision  Changes    Path
  1.1                  
xml-xindice/java/scratchpad/src/org/apache/xindice/tools/XMLTools.java
  
  Index: XMLTools.java
  ===================================================================
  package org.apache.xindice.tools;
  
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 1999 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Xindice" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 1999-2001, The dbXML
   * Group, L.L.C., http://www.dbxmlgroup.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   * $Id: XMLTools.java,v 1.1 2002/05/03 16:35:11 jbates Exp $
   */
  
  import org.xmldb.api.base.*;
  import org.xmldb.api.DatabaseManager;
  import org.apache.xindice.client.xmldb.*;
  
  import org.apache.xindice.util.StringUtilities;
  import org.apache.xindice.util.XindiceException;
  import org.apache.xindice.server.Xindice;
  
  import org.apache.xindice.tools.command.Command;
  import org.apache.xindice.xml.dom.DOMParser;
  
  import org.w3c.dom.*;
  
  import java.util.Hashtable;
  import java.util.Properties;
  import java.util.NoSuchElementException;
  
  import java.io.File;
  import java.io.FileInputStream;
  import java.io.FileNotFoundException;
  
  import javax.xml.parsers.DocumentBuilderFactory;
  import javax.xml.parsers.DocumentBuilder;
  import javax.xml.parsers.ParserConfigurationException;
  
  
  /**
   * XMLAdmin is designed to take command line arguments and give
   * user Xindice management flexibility within the current Database.
   */
  
  abstract class XMLTools {
  
  
      public static final String COLLECTION = "collection";
      public static final String EXTENSION = "extension";
      public static final String FILE_PATH = "filePath";
      public static final String ACTION = "action";
      public static final String IMPL_CLASS = "implClass";
      public static final String NAME_OF = "nameOf";
      public static final String XML_OBJECT_URI = "xmlobjecturi";
      public static final String PATTERN = "pattern";
      public static final String QUERY = "query";
      public static final String URI = "uri";
      public static final String VERBOSE = "verbose";
      public static final String FORCE = "force";
      public static final String TYPE = "type";
      public static final String PAGE_SIZE = "pagesize";
      public static final String MAX_KEY_SIZE = "maxkeysize";
      public static final String DB_SERVER = "dbServ";
      public static final String PORT = "port";
      public static final String HOST = "host";
      public static final String USER = "user";
      public static final String PASSWORD = "password";
      public static final String AUTO_KEY = "autoKey";
  
  
  
     private Hashtable table;
     private static boolean verbose = false;
     protected String location = null;
  
  
     /** Constructor for XMLTools, includes default variables for the command 
line
       */
     public XMLTools() {
        table = new Hashtable();
        // defaults for command switches
        table.put( FILE_PATH, "" );
        table.put( EXTENSION, "" );
        table.put( QUERY, "" );
        table.put( AUTO_KEY, "" );
        table.put( FORCE, "" );
        table.put( VERBOSE, "false" );
     }
  
  
      private boolean initialized = false;
      /**
       * Carries out necessary initialization of this class.
       **/
      public void init() throws XindiceException, FileNotFoundException {
         if ( !initialized ) {
             initCommandsDocument();
             initCommandsList();
             initialized = true;
         }
      }
      /**
       * Carries out the initialization of the Commands Document.
       **/
      protected void initCommandsDocument() throws XindiceException, 
FileNotFoundException {
         // Absolute path to the commands.xml file, relative to $XINDICE_HOME
         File xindiceHome =  new File( System.getProperty( 
Xindice.PROP_XINDICE_HOME ) );
         File commandsFile = new File( xindiceHome, "config/commands.xml" );
  
         DOMParser parser = new DOMParser();
         commandsDocument = parser.toDocument( new FileInputStream( 
commandsFile ) );
      }
      /**
       * Carries out the initialization of the Commands List.
       **/
      protected abstract void initCommandsList();
  
  
      private Document commandsDocument = null;
      /**
       * Returns the Commands Document use for configuration.
       **/
      protected Document getCommandsDocument() {
         return commandsDocument;
      }
  
  
      protected NodeList commandsList = null;
      /**
       * Returns the <command> elements from the Commands Document this
       * tool can execute.
       **/
      protected NodeList getCommands() {
         return commandsList;
      }
  
  
      /**
       * Returns a boolean value stating if this class has admin access.
       **/
      public abstract boolean isAdmin();
  
  
     /**
      * The Process function is designed for the implementation of the
      * command line tools, as well as, making the command line easier
      * to use.
      **/
     public void process(String[] args) throws XindiceException, Exception {
        try {
           init();
           // parsing arguments for the command tools
           ArgTokenizer at = new ArgTokenizer(args);
  
           // Action should always be the second token, if not there show help
           if ( at.hasMoreTokens() ) {
              table.put( ACTION , at.nextToken() );
           } else {
              printHelp();
             return;
           }
  
           // Loop over remaining command line arguments, populating hashtable
           while ( at.hasMoreTokens() ) {
              String token = at.nextToken();
  
              if ( token.equalsIgnoreCase("-c") || 
token.equalsIgnoreCase("--collection") ) {
                  table.put( COLLECTION, at.nextSwitchToken() );
              } else if ( token.equalsIgnoreCase("-e") || 
token.equalsIgnoreCase("--extension") ) {
                 table.put( EXTENSION, at.nextSwitchToken());
              } else if ( token.equalsIgnoreCase("-f") || 
token.equalsIgnoreCase("--filepath") ) {
                 table.put( FILE_PATH, at.nextSwitchToken());
              } else if ( token.equalsIgnoreCase("-h") || 
token.equalsIgnoreCase("--help") ) {
                 table.put( ACTION, "help");
              } else if ( token.equalsIgnoreCase("-i") || 
token.equalsIgnoreCase("--implementclass") ) {
                 table.put( IMPL_CLASS, at.nextSwitchToken());
              } else if ( token.equalsIgnoreCase("-n") || 
token.equalsIgnoreCase("--nameOf") ) {
                 table.put( NAME_OF, at.nextSwitchToken());
              } else if ( token.equalsIgnoreCase("-o") || 
token.equalsIgnoreCase("--xmlobjecturi") ) {
                  table.put( XML_OBJECT_URI, at.nextSwitchToken());
              } else if ( token.equalsIgnoreCase("-p") || 
token.equalsIgnoreCase("--pattern") ) {
                 table.put( PATTERN, at.nextSwitchToken());
              } else if ( token.equalsIgnoreCase("-q") || 
token.equalsIgnoreCase("--query") ) {
                  table.put( QUERY, at.nextSwitchToken());
              } else if ( token.equalsIgnoreCase("-u") || 
token.equalsIgnoreCase("--uri") ) {
                  table.put( URI, at.nextSwitchToken());
              } else if ( token.equalsIgnoreCase("-v") || 
token.equalsIgnoreCase("--verbose") ) {
                 table.put( VERBOSE, "true");
              } else if ( token.equalsIgnoreCase("-y") || 
token.equalsIgnoreCase("--yes_force") ) {
                 table.put( FORCE, "yes");
                 // Index specific options
              } else if ( token.equalsIgnoreCase("-t") || 
token.equalsIgnoreCase("--type") ) {
                 table.put( TYPE, at.nextSwitchToken());
              } else if ( token.equalsIgnoreCase("+trim") ) {
                 if ( !table.containsKey( TYPE ) ) {
                     table.put( TYPE, "trimmed");
                 }
              } else if ( token.equalsIgnoreCase("-trim") ) {
                 if ( !table.containsKey( TYPE ) ) {
                     table.put( TYPE, "string");
                 }
              } else if ( token.equalsIgnoreCase("--pagesize") ) {
                  table.put( PAGE_SIZE, at.nextSwitchToken());
              } else if ( token.equalsIgnoreCase("--maxkeysize") ) {
                  table.put( MAX_KEY_SIZE, at.nextSwitchToken());
              }
           } // End of while loop
  
          if ( !execute() ) {
              printHelp();
              return;
           }
  
        } catch (org.omg.CORBA.BAD_PARAM bp) {
           throw new org.omg.CORBA.BAD_PARAM(
              "ERROR : "+bp+" One or more parameters not found");
  
        } catch (org.omg.CORBA.COMM_FAILURE cf) {
           throw new org.omg.CORBA.COMM_FAILURE(
              "ERROR : "+cf+" Verify the Xindice server is running");
  
        } catch (org.omg.CORBA.UNKNOWN un) {
           throw new org.omg.CORBA.UNKNOWN(
              "ERROR : "+un+" Parameters were not entered correctly");
  
        } catch (org.omg.CORBA.MARSHAL m) {
           throw new org.omg.CORBA.MARSHAL(
              "ERROR : "+m+" One or more parameters not found");
  
        } catch (NoSuchElementException ne) {
           throw new NoSuchElementException(
              "ERROR : "+ne+" Switch found. Parameter missing.");
  
        } catch (NullPointerException np) {
              np.printStackTrace(System.out);
           throw new NullPointerException("ERROR : " + np);
  
        } catch (Exception e) {
              e.printStackTrace(System.out);
              throw new XindiceException("ERROR : " + e);
        }
     }
  
  
      /**
       * This method is to carry out execution, after instance variables being 
setup by process( args )
       **/
      public boolean execute() throws ClassNotFoundException, 
InstantiationException, IllegalAccessException, Exception {
         init();
         String action = (String) table.get( ACTION );
  
         // get command class name
         String commandClass = null;
         if ( action != null ) {
             // search for the tool Class associated with the given action
             NodeList commands = getCommands();
             for ( int i = 0; i < commands.getLength(); i++ ) {
                 Element e = (Element) commands.item( i );
                 if ( action.equals( e.getAttribute( "switch" ) ) ||
                      action.equals( e.getAttribute( "name" ) ) ) {
                    commandClass = e.getAttribute( "class" );
                 }
             }
         }
         
         if ( commandClass != null ) {
             {
                 // register Xindice Database with xml:db
                 Database db = new DatabaseImpl();
                 
                 // If a naming service URI is specified setup the driver to use
                 // it.
                 if ( table.containsKey( URI ) ) {
                     String dbURI = (String) table.get( URI );
                     db.setProperty( "xindice.naming.ior", dbURI);
                 }
                 DatabaseManager.registerDatabase( db );
                 
                 // Also register XML-RPC driver so it is available to the
                 // cmd-line tools.
                 db = (Database) Class.forName(
                          
"org.apache.xindice.client.rpc.DatabaseImpl").newInstance();
                 DatabaseManager.registerDatabase( db );
             }
  
             {
                 // execute command class
                 Command command = (Command)Class.forName( commandClass 
).newInstance();
                 command.execute( table );
                 return true;
             }
         }
  
         return false;
      }
  
  
  
     public boolean handleOption(String option, ArgTokenizer at) {
        return false;
     }
  
     /**
      * setAction sets the action type that will be passed to the command line.
      *
      * @param actionType The action value
      */
     public void setAction(String actionType) {
        table.put("action", actionType);
     }
  
     /**
      * getAction returns the action type that will be passed to the command 
line
      * tool.
      *
      * @return The action value
      */
     public String getAction() {
        return (String)table.get("action");
     }
  
     /**
      * setCollectionName sets the collection name that will be passed
      * to the command line.
      *
      * @param collectionName The collection value
      */
     public void setCollectionName(String collectionName) {
        table.put("collection", collectionName);
     }
  
     /**
      * getCollectionName returns the collection name that will be passed
      * to the command line tool.
      *
      * @return The collection value
      */
     public String getCollectionName() {
        return (String)table.get("collection");
     }
  
     /**
      * setDocumentName sets the document that will be passed to the
      * command line tool.
      *
      * @param documentName The docName value
      */
     public void setDocumentName(String documentName) {
        table.put("nameOf", documentName);
     }
  
     /**
      * getDocumentName returns the document that will be passed to the
      * command line tool.
      *
      * @return The docName value
      */
     public String getDocumentName() {
        return (String)table.get("nameOf");
     }
  
     /**
      * setQuery sets the Query variable for Document Query from the command 
line.
      *
      * @param query - The query string
      */
     public void setQuery(String query ) {
        table.put("query", query);
     }
  
     /**
      * getQuery returns the Query for Document passed to the command line tool.
      */
     public String getQuery() {
        return (String)table.get("query");
     }
  
     /**
      * setName sets the name for XMLObjects passed to the command line tool.
      *
      * @param name The docName value
      */
     public void setName(String name) {
        table.put("nameOf", name);
     }
  
     /**
      * getName returns the name for XMLObjects that will be passed to the
      * command line tool.
      *
      * @return The nameOf value
      */
     public String getName() {
        return (String)table.get("nameOf");
     }
  
     /**
      * setDatabaseServer sets the Database server name that will be
      * passed to the command line tool.
      *
      * @param appName The dbServ value
      */
     public void setDatabaseServer(String appName) {
        table.put("dbServ", appName);
     }
  
     /**
      * getDatabaseServer returns the Database server that will be
      * passed to the command line tool.
      *
      * @return The dbServ value
      */
     public String getDatabaseServer() {
        return (String)table.get("dbServ");
     }
  
     /**
      * setPort sets the port that will passed to the command line tool.
      *
      * @param portName The port value
      */
     public void setPort(String portName) {
        table.put("port", portName);
     }
  
     /**
      * getPort returns the port that will be passed to the command line tool.
      *
      * @return The port value
      */
     public String getPort() {
        return (String)table.get("port");
     }
  
     /**
      * setHost sets the host that will passed to the command line tool.
      *
      * @param hostName The host value
      */
     public void setHost(String hostName) {
        table.put("host", hostName);
     }
  
     /**
      * getPort returns the host that will be passed to the command line tool.
      *
      * @return The host value
      */
     public String getHost() {
        return (String)table.get("host");
     }
  
     /**
      * setFilePath sets the file path that will passed to the command line 
tool.
      *
      * @param fPath The filePath value
      */
     public void setFilePath(String fPath) {
        table.put("filePath", fPath);
     }
  
     /**
      * getFilePath returns the file path that will be passed to the command
      *
      * @return The filePath value
      */
     public String getFilePath() {
        return (String)table.get("filePath");
     }
  
     /**
      * setURI sets the database URI (protocol://host:port/name) that
      * will be passed to the command line
      *
      * @param URI The URI for the database
      */
     public void setURI(String URI) {
        table.put("uri", URI);
     }
  
     /**
      * getURI gets returns the database URI (protocol://host:port/name)
      * that will be passed to the command line tool
      *
      * @return The URI for the database
      */
     public String getURI() {
        return (String)table.get("uri");
     }
  
     /**
      * setImplementClass sets the implemented class path that will be passed
      * to the command line tool.
      *
      * @param imClassName The implClass value
      */
     public void setImplementClass(String imClassName) {
        table.put("implClass", imClassName);
     }
  
     /**
      * getImplementClass returns the implmented class path that will be passed
      * to the command line tool.
      *
      * @return The implClass value
      */
     public String getImplementClass() {
        return (String)table.get("implClass");
     }
  
  
     /**
      * The following Security methods are simply a starting point. User names 
and
      * their related passwords will not be this simple. Until Encryption for
      * Passwords are developed, and KeyStorage is set-up, this will do for now.
      * In the future, these methods will change as needed to be more efficient
      * for Xindice.
      */
  
  
     /**
      * setUser sets the user that will be passed to the command line tool and
      * will be used in Security issues.
      *
      * @param userName The user value
      */
     public void setUser(String userName) {
        table.put("user", userName);
     }
  
     /**
      * getUser returns the user that will be passed to the command line tool 
and
      * will be used in Security issues.
      *
      * @return The user value
      */
     public String getUser() {
        return (String)table.get("user");
     }
  
     /**
      * setPassword sets the password that will be passed to the command line 
tool
      * and will be used in conjunction with the userName value.
      *
      * @param pswd The passwrd value
      */
     public void setPassword(String pswd) {
        table.put("password", pswd);
     }
  
     /**
      * getPassword returns the password that will be passed to the command line
      * tool and will be used in conjunction with the userName value.
      *
      * @return The password value
      */
     public String getPassword() {
        return (String)table.get("password");
     }
  
  
  
      public void printHelp() {
         NodeList list = getCommands();
  
          // This method relies on two things to format the output for help
          //    Method isAdmin() - Tells us if this is an admin instance, used 
to hide certain output
          //    XML file Commands.xml attribute "helpclass" - used to order 
output
  
          String helpClass;  // Holds the helpclass for the current <command> 
node
          String desc;       // Holds the description for the current <command> 
node
          String cmdswitch;  // Holds the switch for the current <command> node
  
  
  
          // Show the header and switch commands
        System.out.println();
        System.out.println("Xindice Command Tools v" + Xindice.Version);
        System.out.println();
        System.out.println("Format: xindice action [switch] [parameter]");
        System.out.println();
        System.out.println("Where:  [switch]  implements:");
        System.out.println("    -c           " + "Collection context (must 
always be specified)");
        System.out.println("    -e           " + "File extension for multiple 
documents");
        System.out.println("    -f           " + "File path for document 
retrieval and storage");
        System.out.println("    -i           " + "Implementing Class for 
XMLObjects");
        System.out.println("    -n           " + "Name");
        System.out.println("    -o           " + "URI String for invocation of 
XMLObject");
        System.out.println("    -p           " + "Index pattern");
        System.out.println("    -q           " + "Query string");
        System.out.println("    -u           " + "Database URI");
        System.out.println("    -y           " + "Force Deletion process");
        System.out.println("    -t           " + "Specify the data type in 
collection index");
        System.out.println("    --pagesize   " + "Page size for file pages 
(default: 4096)");
        System.out.println("    --maxkeysize " + "The maximum size for file 
keys (default: 0=none)");
        System.out.println();
  
        System.out.println("\nActions:\n");
        System.out.println("    xindice [parameter], etc...\n");
  
        // Show all elements with helpclass=document
  
        // Loop over the commands, printing test from description attribute
        for (int i=0; i < list.getLength(); i++) {
           helpClass = ((Element)list.item(i)).getAttribute("helpclass") ;
  
           if ( helpClass.equals("document") ) {
              desc = ((Element)list.item(i)).getAttribute("description");
              cmdswitch = ((Element)list.item(i)).getAttribute("switch");
              System.out.println("    " + 
StringUtilities.leftJustify(cmdswitch, 13) + desc );
           }
        }
  
        // Loop over the commands, printing text from description attribute
        for (int i=0; i < list.getLength(); i++) {
           helpClass = ((Element)list.item(i)).getAttribute("helpclass") ;
  
           if ( helpClass.equals("security") ) {
              desc = ((Element)list.item(i)).getAttribute("description");
              cmdswitch = ((Element)list.item(i)).getAttribute("switch");
              System.out.println("    " + 
StringUtilities.leftJustify(cmdswitch, 13) + desc );
           }
        }
  
        System.out.println("\nExamples:\n");
  
        System.out.println("    xindice ad -c /db/test -f /tmp/xmldocument -n 
myxmldocument");
        System.out.println("    xindice dd -c /db/test -n myxmldocument");
        System.out.println("    xindice rd -c /db/test/ocs -f a:\\file.xml -n 
file.xml");
        System.out.println("    xindice xpath -c /db/test/ocs -q test");
        System.out.println();
        System.out.println("For more information, please read the Xindice - 
Tools Reference Guide");
        System.out.println();
     }
  }
  
  
  
  1.3       +1 -7      
xml-xindice/java/src/org/apache/xindice/tools/XMLTools.java
  
  Index: XMLTools.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xindice/java/src/org/apache/xindice/tools/XMLTools.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- XMLTools.java     3 May 2002 16:29:03 -0000       1.2
  +++ XMLTools.java     3 May 2002 16:35:11 -0000       1.3
  @@ -56,7 +56,7 @@
    * information on the Apache Software Foundation, please see
    * <http://www.apache.org/>.
    *
  - * $Id: XMLTools.java,v 1.2 2002/05/03 16:29:03 jbates Exp $
  + * $Id: XMLTools.java,v 1.3 2002/05/03 16:35:11 jbates Exp $
    */
   
   import org.xmldb.api.base.*;
  @@ -322,12 +322,6 @@
                      String dbURI = (String) table.get( URI );
                      db.setProperty( "xindice.naming.ior", dbURI);
                  }
  -               DatabaseManager.registerDatabase( db );
  -               
  -               // Also register XML-RPC driver so it is available to the
  -               // cmd-line tools.
  -               db = (Database) Class.forName(
  -                        
"org.apache.xindice.client.rpc.DatabaseImpl").newInstance();
                  DatabaseManager.registerDatabase( db );
              }
   
  
  
  

Reply via email to