Hi, Vadim,
I made the class to extract collection List. (see attached) The class contain 2 static methods,
public static ArrayList getCollectionList(Hashtable t) {...} and public static ArrayList getCollectionList(String s) {..}
The first one is to be used for commandline query and the second is to be used for programing query
I tested it, it seemed work just fine.
Also, is there a login control in the xindice?
Honglin
package xproposal.dm;
import java.util.Hashtable; import java.util.ArrayList; import java.util.StringTokenizer; import org.xmldb.api.base.*; import org.xmldb.api.modules.*; import org.xmldb.api.*; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.List; import java.util.ArrayList; import java.util.Hashtable; import java.util.StringTokenizer; import org.apache.xindice.tools.XMLTools; import org.apache.xindice.client.xmldb.embed.DatabaseImpl; import org.apache.xindice.client.xmldb.services.CollectionManager; //import org.apache.xindice.xml.dom.DocumentImpl; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.xmldb.api.DatabaseManager; import org.xmldb.api.base.Collection; import org.xmldb.api.base.Resource; import org.xmldb.api.base.XMLDBException; import org.xmldb.api.modules.CollectionManagementService; import org.xmldb.api.base.*; import org.xmldb.api.modules.*; import org.xmldb.api.*; import org.w3c.dom.*; //import org.jdom.*; //import org.jdom.input.*; //import org.jdom.output.*; import java.io.File; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.NodeList; import org.apache.xerces.parsers.*; import java.io.*; import org.xml.sax.*; import org.xml.sax.ContentHandler; import org.xmldb.api.base.*; import org.xmldb.api.modules.*; import org.xmldb.api.*; /** * <p>Title: NRAO Proposal Tool</p> * <p>Description: The proposal submission and handling tool for NRAO telescopes</p> * <p>Copyright: Copyright (c) 2003</p> * <p>Company: National Radio Astronomy Observatory</p> * @author Honglin Ye * @version 1.0 */ public class CollectionList { public static final String XINDICEURI = "xindice://"; public static final String XINDICELOCALURI = "xindice-embed://"; public static final String XMLDBURI = "xmldb:"; public static final String XMLDBAPIVERSION = "1.0"; public static final String LOCAL = "local"; private static String local = "false"; private static ArrayList workTable = new ArrayList(3); public static ArrayList getCollectionList(Hashtable table) { local = (String) table.get(XMLTools.LOCAL); workTable.clear(); String col = (String) table.get(XMLTools.COLLECTION); return getCollectionList(col); } public static ArrayList getCollectionList(String col) { local = "false"; workTable.clear(); StringTokenizer tok = new StringTokenizer(col, ";, "); for (int i = 0; tok.hasMoreTokens(); i++) { workTable.add(tok.nextToken()); } expandColStr(); return workTable; } private static void expandColStr() { for (int i = 0; i < workTable.size(); i++) { String argStr = (String)workTable.get(i); int starPos = argStr.indexOf("/*"); if (starPos > 0) { String head = argStr.substring(0, starPos); String tail = argStr.substring(starPos + 2); String[] children = getChildCollections(head); if (children != null && children.length > 0) { workTable.remove(i); for (int j = 0; j < children.length; j++) { workTable.add(head + "/" + children[j] + tail); } expandColStr(); } } } } private static String[] getChildCollections(String parent) { Collection coll = null; String[] colarray = null; String colstring = normalizeCollectionURI(parent, local); try { coll = DatabaseManager.getCollection(colstring); if (coll != null) { colarray = coll.listChildCollections(); } } catch (XMLDBException ex) { } finally { if (coll != null) { try { coll.close(); } catch (XMLDBException ex) { } } } return colarray; } private static String normalizeCollectionURI(String uri, String local) { // Check to see if this uri starts with "xmldb:" , if so treat as absolute if (uri.startsWith("xmldb:")) { // URI is absolute, leave alone return uri; } else if (uri.startsWith("xindice:") || uri.startsWith("xindice-embed:")) { return (XMLDBURI + uri); } else { if ((local != null) && local.equals("true")) { return (XMLDBURI + XINDICELOCALURI + uri); } else { // URI passed in is not absoulte, build the full URI return (XMLDBURI + XINDICEURI + uri); } } } }