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;