Forgot the files. :(
Todd
Todd Byrne wrote:
I fixed up some issues with the way the Help menu was being printed. I
found that when a command didn't run for some reason that the helpful
stuff would get shoved off screen. I also refactored the printHelp out
of the XMLTools.java and created a new class HelpClass to print the help
menu. The help refactored allowed me to get --help to print the help
menu also.
Included is:
XMLTools.java.patch
Some refactoring and and wrapping of a class variable in the table
Hashtable.
commands.xml.patch
Added two more commands to handle both the -h action and --help action.
HelpClass.java
New class that extends Command and implements it execute method. Just
takes a command NodeList from the Hashtable and prints out the same help
menu.
Todd Byrne
Index: ./java/src/org/apache/xindice/tools/XMLTools.java
===================================================================
RCS file: /home/cvspublic/xml-xindice/java/src/org/apache/xindice/tools/XMLTools.java,v
retrieving revision 1.29
diff -u -r1.29 XMLTools.java
--- ./java/src/org/apache/xindice/tools/XMLTools.java 21 Feb 2004 14:29:45 -0000 1.29
+++ ./java/src/org/apache/xindice/tools/XMLTools.java 6 Jun 2005 17:56:44 -0000
@@ -67,6 +67,7 @@
public static final String AUTO_KEY = "autoKey";
public static final String NAMESPACES = "namespaces";
public static final String IMPL_CLASS = "implClass";
+ public static final String COMMAND_LIST = "commandList";
private Hashtable table;
protected String location = null;
@@ -74,7 +75,6 @@
private static boolean verbose = false;
private Document commandsDocument = null;
- protected NodeList commandsList = null;
public static void main(String[] args) {
@@ -111,8 +111,10 @@
list = node.getElementsByTagName("command");
}
- // Return the list generated
- commandsList = list;
+ // to allow the commands access to the command list. Specifically
+ // the help command needs access to the entire command list.
+ table.put(COMMAND_LIST,list);
+
}
/** Return true if this class has admin access
@@ -155,7 +157,7 @@
* tool can execute.
**/
protected NodeList getCommands() {
- return commandsList;
+ return (NodeList)table.get(COMMAND_LIST);
}
/**
@@ -169,11 +171,13 @@
parseArguments(args);
if (!execute()) {
- printHelp();
+ // instead of printing out the whole help menu when
+ // something goes wrong just inform the user with
+ // a short menu.
+ System.out.println("Try -h for help with that command.");
}
} catch (IllegalArgumentException e) {
- printHelp();
- throw new XindiceException("ERROR : " + e.getMessage(), e);
+ throw new XindiceException(e.getMessage(), e);
} catch (NoSuchElementException e) {
throw new NoSuchElementException("ERROR : " + e + " Switch found. Parameter missing.");
} catch (NullPointerException e) {
@@ -197,7 +201,7 @@
ArgTokenizer at = new ArgTokenizer(args);
if (!at.hasMoreTokens()) {
- throw new IllegalArgumentException("No argument found");
+ throw new IllegalArgumentException("No arguments found: Try -h or --help for Help.");
}
// Action should always be the second token, if not there show help
@@ -579,83 +583,4 @@
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("Switches:");
- System.out.println(" -c Collection context (must always be specified),");
- System.out.println(" can be either canonical name of the collection");
- System.out.println(" or complete xmldb URL");
- System.out.println(" -e File extension for multiple documents");
- System.out.println(" -f File path for document retrieval and storage");
- System.out.println(" -n Name");
- System.out.println(" -p Index pattern");
- System.out.println(" -q Query string");
- System.out.println(" -s Semi-colon delimited list of namespaces for query in ");
- System.out.println(" the form prefix=namespace-uri");
- System.out.println(" -l Use a local database rather then going over the network.");
- System.out.println(" Should be combined with -d to specify the configuration to use.");
- System.out.println(" -d Path to the database configuration to use for the local ");
- System.out.println(" database. Only applies if -l is specified.");
- System.out.println(" -t Specify the data type in collection index");
- System.out.println(" -v Verbose");
- 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("Actions:");
-
- // 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();
- System.out.println("Examples:");
- 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(" 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();
- }
}
/*
* Copyright 1999-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.xindice.tools.command;
import java.util.*;
import org.apache.xindice.server.Xindice;
import org.apache.xindice.util.StringUtilities;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.apache.xindice.tools.XMLTools;
public class HelpClass extends Command {
/**
* HelpClass is designed to take a command list that gets setup in
* XMLTools.
*/
public HelpClass() {
super();
}
/**
* execute
*
* @param table Hashtable with XMLTools.COMMAND_LIST set.
* @return boolean
* @throws Exception
*/
public boolean execute(Hashtable table) throws Exception {
if(table.containsKey(XMLTools.COMMAND_LIST))
{
printHelp((NodeList)table.get(XMLTools.COMMAND_LIST));
return true;
}
else
{
System.out.println("Couldn't print the help" +
" menu because the key \"XMLTools.COMMAND_LIST\" wasn't found.");
return false;
}
}
public void printHelp(NodeList list) {
// 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("Switches:");
System.out.println(" -c Collection context (must always be specified),");
System.out.println(" can be either canonical name of the collection");
System.out.println(" or complete xmldb URL");
System.out.println(" -e File extension for multiple documents");
System.out.println(" -f File path for document retrieval and storage");
System.out.println(" -n Name");
System.out.println(" -p Index pattern");
System.out.println(" -q Query string");
System.out.println(" -s Semi-colon delimited list of namespaces for query in ");
System.out.println(" the form prefix=namespace-uri");
System.out.println(" -l Use a local database rather then going over the network.");
System.out.println(" Should be combined with -d to specify the configuration to use.");
System.out.println(" -d Path to the database configuration to use for the local ");
System.out.println(" database. Only applies if -l is specified.");
System.out.println(" -t Specify the data type in collection index");
System.out.println(" -v Verbose");
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("Actions:");
// 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();
System.out.println("Examples:");
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(" 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();
}
}
Index: config/commands.xml
===================================================================
RCS file: /home/cvspublic/xml-xindice/config/commands.xml,v
retrieving revision 1.7
diff -u -r1.7 commands.xml
--- config/commands.xml 8 Feb 2004 01:11:34 -0000 1.7
+++ config/commands.xml 6 Jun 2005 17:56:53 -0000
@@ -117,5 +117,15 @@
class="org.apache.xindice.tools.command.ExportTree"
helpclass="document"
description="Exports a collection/document from a directory tree" />
+ <command switch="-h"
+ name="help"
+ class="org.apache.xindice.tools.command.HelpClass"
+ helpclass=""
+ description="Prints the help menu." />
+ <command switch="--help"
+ name="help"
+ class="org.apache.xindice.tools.command.HelpClass"
+ helpclass=""
+ description="Prints the help menu." />
</user>
</commands>