kstaken     2003/08/05 01:47:00

  Modified:    config   commands.xml
               java/src/org/apache/xindice/client/xmldb/xmlrpc
                        CollectionImpl.java
               java/src/org/apache/xindice/tools XMLTools.java
  Added:       java/src/org/apache/xindice/tools/command XUpdate.java
  Log:
  Adding an XUpdate command line tool. Supports running XUpdate against a full
  collection or a single file. The XUpdate commands are read from a file stored
  in the file system. The file is specified with -f and if a single document is
  being updated the name is specified with -n. Requires a collection context
  specified with -c.
  
  Revision  Changes    Path
  1.5       +6 -1      xml-xindice/config/commands.xml
  
  Index: commands.xml
  ===================================================================
  RCS file: /home/cvs/xml-xindice/config/commands.xml,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- commands.xml      2 Nov 2002 06:23:50 -0000       1.4
  +++ commands.xml      5 Aug 2003 08:47:00 -0000       1.5
  @@ -84,6 +84,11 @@
                  class="org.apache.xindice.tools.command.XPathQuery"
                  helpclass="document"
                  description="Queries a Collection using XPath" />
  +      <command switch="xupdate"    
  +               name="xupdate_query"
  +               class="org.apache.xindice.tools.command.XUpdate"
  +               helpclass="document"
  +               description="Updates a Collection using XUpdate" />
         <command switch="export"
                  name="export"
                  class="org.apache.xindice.tools.command.ExportTree"
  
  
  
  1.28      +2 -2      
xml-xindice/java/src/org/apache/xindice/client/xmldb/xmlrpc/CollectionImpl.java
  
  Index: CollectionImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xindice/java/src/org/apache/xindice/client/xmldb/xmlrpc/CollectionImpl.java,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -u -r1.27 -r1.28
  --- CollectionImpl.java       4 Aug 2003 03:01:57 -0000       1.27
  +++ CollectionImpl.java       5 Aug 2003 08:47:00 -0000       1.28
  @@ -636,7 +636,7 @@
                        return rs;
                }
                catch (Exception e) {
  -
  +e.printStackTrace();
                        throw 
FaultCodes.createXMLDBException(FaultCodes.QRY_PROCESSING_ERROR, "Query error", 
e);
                }
        }
  
  
  
  1.20      +3 -1      
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.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- XMLTools.java     4 Aug 2003 03:01:57 -0000       1.19
  +++ XMLTools.java     5 Aug 2003 08:47:00 -0000       1.20
  @@ -694,6 +694,8 @@
         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("    xindice xpath -c /db/test -s 
a=http://somedomain.com/schema.xsd -q /a:foo");
  +      System.out.println("    xindice xupdate -c /db/test -f 
/path/to/xupdate.xml");
  +      System.out.println("    xindice xupdate -c /db/test -n 
document-to-update.xml -f /path/to/xupdate.xml");
         System.out.println();
         System.out.println("For more information, please read the Xindice - 
Tools Reference Guide");
         System.out.println();
  
  
  
  1.1                  
xml-xindice/java/src/org/apache/xindice/tools/command/XUpdate.java
  
  Index: XUpdate.java
  ===================================================================
  package org.apache.xindice.tools.command;
  
  /*
   * 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: XUpdate.java,v 1.1 2003/08/05 08:47:00 kstaken Exp $
   */
  
  import org.apache.xindice.tools.XMLTools;
  
  import org.xmldb.api.DatabaseManager;
  import org.xmldb.api.base.Collection;
  import org.xmldb.api.base.ResourceIterator;
  import org.xmldb.api.base.ResourceSet;
  import org.xmldb.api.base.XMLDBException;
  import org.xmldb.api.modules.XMLResource;
  import org.xmldb.api.modules.XUpdateQueryService;
  
  import java.util.Hashtable;
  import java.util.StringTokenizer;
  import java.io.File;
  import java.io.BufferedReader;
  import java.io.FileInputStream;
  import java.io.InputStreamReader;
  
  
  /**
   * XUpdate runs an XUpdate query stored in a file against the specified 
collection or
   * document.
   *
   * @author Kimbro Staken <[EMAIL PROTECTED]>
   */
  public class XUpdate extends Command {
  
      public boolean execute(Hashtable table) throws Exception {
          Collection col = null;
  
          try {
  
              if ((String) table.get(XMLTools.COLLECTION) == null) {
                  System.out.println("ERROR : Collection name and switch 
required");
                  return false;
              }
  
              if ((String) table.get(XMLTools.FILE_PATH) == "") {
                  System.out.println("ERROR : Path to file containing XUpdate 
to execute required");
                  return false;
              }
  
              String name = (String) table.get(XMLTools.NAME_OF);
              
              // Nomalize the collection URI
              String colstring = normalizeCollectionURI((String) 
table.get(XMLTools.COLLECTION),
                                                        (String) 
table.get(XMLTools.LOCAL));
  
              // Read in the XUpdate commands from the file
              StringBuffer commands = new StringBuffer();
              File file = new File((String) table.get(XMLTools.FILE_PATH));
  
              BufferedReader reader = new BufferedReader(new 
InputStreamReader(new FileInputStream(file), "UTF-8"));
              String line;
              while ((line = reader.readLine()) != null) {
                  commands.append(line);
              }
  
              reader.close();
  
              // Get the collection reference for the requested collection
              col = DatabaseManager.getCollection(colstring);
              if (col == null) {
                  System.out.println("ERROR : Collection not found!");
                  return false;
              }
  
              // To run XUpdate commands we use the XUpdateQueryService
              XUpdateQueryService service = null;            
              service = (XUpdateQueryService) 
col.getService("XUpdateQueryService", "1.0");
  
              
              long result = 0;
  
              // See if we're updating one document or the whole collection.
              if (name == null) {
                  result = service.update(commands.toString());
              }
              else {
                  result = service.updateResource(name, commands.toString());
              }
                  
  
              System.out.println(result + " documents updated");
  
          } catch (Exception e) {
              System.out.println("ERROR : " + e.getMessage());
              if (table.get(XMLTools.VERBOSE).equals("true")) {
                  log.warn(e);
              }
              return false;
  
          } finally {
              if (col != null) {
                  col.close();
              }
          }
  
          return true;
      }
  }
  
  
  

Reply via email to