svn commit: r571022 - in /xml/xindice/trunk/java/src/org/apache/xindice/tools/command: AddIndexer.java Command.java

[email protected]
Newsgroups gmane.text.xml.xindice.devel
Message-ID <[email protected]>
Author: natalia
Date: Wed Aug 29 19:58:34 2007
New Revision: 571022

URL: http://svn.apache.org/viewvc?rev=571022&view=rev
Log:
Add LuceneIndexer to list of indexers managed by command-line tools
Indexers can be created by supplying file with index configuration

Modified:
    xml/xindice/trunk/java/src/org/apache/xindice/tools/command/AddIndexer.java
    xml/xindice/trunk/java/src/org/apache/xindice/tools/command/Command.java

Modified: xml/xindice/trunk/java/src/org/apache/xindice/tools/command/AddIndexer.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/tools/command/AddIndexer.java?rev=571022&r1=571021&r2=571022&view=diff
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/tools/command/AddIndexer.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/tools/command/AddIndexer.java Wed Aug 29 19:58:34 2007
@@ -23,6 +23,8 @@
 import org.apache.xindice.tools.XMLTools;
 import org.apache.xindice.xml.TextWriter;
 import org.apache.xindice.xml.dom.DocumentImpl;
+import org.apache.xindice.xml.dom.DOMParser;
+import org.apache.xindice.util.XindiceException;
 
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -30,6 +32,9 @@
 import org.xmldb.api.base.Collection;
 
 import java.util.Hashtable;
+import java.io.File;
+import java.io.InputStream;
+import java.io.FileInputStream;
 
 /**
  * AddIndexer.java is designed to let the user create an Indexer
@@ -41,78 +46,45 @@
 
     public boolean execute(Hashtable table) throws Exception {
 
-        Collection col = null;
-        try {
+        if (table.get(XMLTools.COLLECTION) == null) {
+            System.out.println("ERROR : Collection and switch required");
+            return false;
+        }
 
-            if (table.get(XMLTools.COLLECTION) != null) {
+        if ("".equals(table.get(XMLTools.FILE_PATH)) &&
+            (table.get(XMLTools.NAME_OF) == null || table.get(XMLTools.PATTERN) == null)) {
+            System.out.println("ERROR : Name and Pattern required or File path required");
+            return false;
+        }
 
-                // Get a Collection reference to the collection
-                String colstring = normalizeCollectionURI((String) table.get(XMLTools.COLLECTION),
-                                                          (String) table.get(XMLTools.LOCAL));
-                col = DatabaseManager.getCollection(colstring);
-                if (col == null) {
-                    System.out.println("ERROR : Collection not found!");
-                    return false;
-                }
-
-                // Create a collection manager instance for the collection
-                CollectionManager colman = (CollectionManager) col.getService("CollectionManager", XMLDBAPIVERSION);
-
-                if (table.get(XMLTools.NAME_OF) != null && table.get(XMLTools.PATTERN) != null) {
-
-                    Document doc = new DocumentImpl();
-
-                    // Create the index element to hold attributes
-                    Element idxEle = doc.createElement("index");
-                    idxEle.setAttribute("class", XINDICE_VAL_INDEXER);
-                    idxEle.setAttribute("name", (String) table.get(XMLTools.NAME_OF));
-                    idxEle.setAttribute("pattern", (String) table.get(XMLTools.PATTERN));
-
-
-                    // Setup optional index attributes
-                    if (table.containsKey(XMLTools.TYPE)) {
-                        String t = (String) table.get(XMLTools.TYPE);
-                        if (t.equalsIgnoreCase("name")) {
-                            idxEle.setAttribute("class", XINDICE_NAME_INDEXER);
-                        } else {
-                            idxEle.setAttribute("type", (String) table.get(XMLTools.TYPE));
-                        }
-                    }
-
-                    if (table.containsKey(XMLTools.PAGE_SIZE)) {
-                        idxEle.setAttribute(XMLTools.PAGE_SIZE, (String) table.get(XMLTools.PAGE_SIZE));
-                    }
-                    if (table.containsKey(XMLTools.MAX_KEY_SIZE)) {
-                        idxEle.setAttribute(XMLTools.MAX_KEY_SIZE, (String) table.get(XMLTools.MAX_KEY_SIZE));
-                    }
-                    if (table.containsKey(XMLTools.PAGE_COUNT)) {
-                    	idxEle.setAttribute(XMLTools.PAGE_COUNT, (String) table.get(XMLTools.PAGE_COUNT));
-                    }
-
-
-                    // Add Element to the document
-                    doc.appendChild(idxEle);
-
-                    // If in verbose mode, show....
-                    if ("true".equals(table.get(XMLTools.VERBOSE))) {
-                        String indexstr = TextWriter.toString(doc);
-                        System.out.println("Index node element = ");
-                        System.out.println("\t" + indexstr + "\n");
-                    }
-
-
-                    // Create the indexer for this collection manager
-                    colman.createIndexer(doc);
-
-                    System.out.println("CREATED : " + table.get(XMLTools.NAME_OF));
-                } else {
-                    System.out.println("ERROR : Name and Pattern required");
-                }
+        Document config;
+        if (!"".equals(table.get(XMLTools.FILE_PATH))) {
+            // configuration was passed in a file
+            config = readConfig(table);
+        } else {
+            // build configuration from parameters
+            config = buildConfig(table);
+        }
 
-            } else {
-                System.out.println("ERROR : Collection and switch required");
+        Collection col = null;
+        try {
+            // Get a Collection reference to the collection
+            String colstring = normalizeCollectionURI((String) table.get(XMLTools.COLLECTION),
+                                                      (String) table.get(XMLTools.LOCAL));
+
+            col = DatabaseManager.getCollection(colstring);
+            if (col == null) {
+                System.out.println("ERROR : Collection not found!");
+                return false;
             }
 
+            // Create a collection manager instance for the collection
+            CollectionManager colman = (CollectionManager) col.getService("CollectionManager", XMLDBAPIVERSION);
+
+            // Create the indexer for this collection manager
+            colman.createIndexer(config);
+
+            System.out.println("CREATED : " + config.getDocumentElement().getAttributeNode("name").getNodeValue());
         } finally {
             if (col != null) {
                 col.close();
@@ -120,5 +92,88 @@
         }
 
         return true;
+    }
+
+    private Document readConfig(Hashtable table) throws Exception {
+        InputStream fis = null;
+        try {
+            File file = new File((String) table.get(XMLTools.FILE_PATH));
+            fis = new FileInputStream(file);
+
+            return DOMParser.toDocument(fis);
+        } catch (XindiceException e) {
+            throw new Exception("Indexer configuration could not be parsed", e);
+        } finally {
+            if (fis != null) {
+                fis.close();
+            }
+        }
+    }
+
+    private Document buildConfig(Hashtable table) throws Exception {
+        Document config = new DocumentImpl();
+
+        // Create the index element to hold attributes
+        Element idxEle = config.createElement("index");
+        idxEle.setAttribute("class", XINDICE_VAL_INDEXER);
+        idxEle.setAttribute("name", (String) table.get(XMLTools.NAME_OF));
+
+        // Setup optional index attributes
+        if (table.containsKey(XMLTools.TYPE)) {
+            String type = (String) table.get(XMLTools.TYPE);
+            if (type.equalsIgnoreCase("name")) {
+                idxEle.setAttribute("class", XINDICE_NAME_INDEXER);
+            } else if (type.equalsIgnoreCase("text")) {
+                idxEle.setAttribute("class", XINDICE_TEXT_INDEXER);
+            } else {
+                idxEle.setAttribute("type", type);
+            }
+        }
+
+        // LuceneIndexer configuration is different
+        if (idxEle.getAttribute("class").equals(XINDICE_TEXT_INDEXER)) {
+            addPatterns(config, idxEle, (String) table.get(XMLTools.PATTERN));
+        } else {
+            idxEle.setAttribute("pattern", (String) table.get(XMLTools.PATTERN));
+
+            if (table.containsKey(XMLTools.PAGE_SIZE)) {
+                idxEle.setAttribute(XMLTools.PAGE_SIZE, (String) table.get(XMLTools.PAGE_SIZE));
+            }
+            if (table.containsKey(XMLTools.MAX_KEY_SIZE)) {
+                idxEle.setAttribute(XMLTools.MAX_KEY_SIZE, (String) table.get(XMLTools.MAX_KEY_SIZE));
+            }
+            if (table.containsKey(XMLTools.PAGE_COUNT)) {
+                idxEle.setAttribute(XMLTools.PAGE_COUNT, (String) table.get(XMLTools.PAGE_COUNT));
+            }
+        }
+
+        // Add Element to the document
+        config.appendChild(idxEle);
+
+        // If in verbose mode, show....
+        if ("true".equals(table.get(XMLTools.VERBOSE))) {
+            String indexstr = TextWriter.toString(config);
+            System.out.println("Index node element = ");
+            System.out.println("\t" + indexstr + "\n");
+        }
+
+        return config;
+    }
+
+    private void addPatterns(Document doc, Element idxEle, String conf) {
+        String[] patterns = conf.split(";");
+
+        for (int i = 0; i < patterns.length; i++) {
+            String[] st = patterns[i].split("=");
+            if (st.length != 2) {
+                System.out.println("ERROR : mismatched patterns and aliases in " + conf);
+            }
+
+            Element pattern = doc.createElement("pattern");
+            pattern.setAttribute("pattern", st[0]);
+            pattern.setAttribute("alias", st[1]);
+
+            idxEle.appendChild(pattern);
+        }
     }
 }

Modified: xml/xindice/trunk/java/src/org/apache/xindice/tools/command/Command.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/tools/command/Command.java?rev=571022&r1=571021&r2=571022&view=diff
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/tools/command/Command.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/tools/command/Command.java Wed Aug 29 19:58:34 2007
@@ -39,6 +39,7 @@
     // Class name of the Standard Xindice Indexer
     public static final String XINDICE_VAL_INDEXER = "org.apache.xindice.core.indexer.ValueIndexer";
     public static final String XINDICE_NAME_INDEXER = "org.apache.xindice.core.indexer.NameIndexer";
+    public static final String XINDICE_TEXT_INDEXER = "org.apache.xindice.core.indexer.LuceneIndexer";
 
     //public boolean execute(Hashtable table, Database db)
     public abstract boolean execute(Hashtable table) throws Exception;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.