vgritsenko 2004/03/30 06:01:07
Modified: . status.xml
java/src/org/apache/xindice/client/xmldb/embed
CollectionImpl.java DatabaseImpl.java
java/tests/src/org/apache/xindice/integration/client
XmlDbClient.java
java/tests/src/org/apache/xindice/integration/client/basic
CollectionTest.java
Log:
Fix getCanonicalName in embedded collection.
Fix getParentCollection test - Root collection now always has a name, name of
the database.
Revision Changes Path
1.41 +3 -0 xml-xindice/status.xml
Index: status.xml
===================================================================
RCS file: /home/cvs/xml-xindice/status.xml,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -r1.40 -r1.41
--- status.xml 20 Mar 2004 14:02:38 -0000 1.40
+++ status.xml 30 Mar 2004 14:01:07 -0000 1.41
@@ -74,6 +74,9 @@
<changes>
<release version="1.1b4-dev" date="March 4 2004">
+ <action dev="VG" type="fix">
+ Fixed embedded Collection's getCanonicalName.
+ </action>
<action dev="VG" type="update">
Implemented support for MetaData for Binary resources.
</action>
1.34 +19 -13
xml-xindice/java/src/org/apache/xindice/client/xmldb/embed/CollectionImpl.java
Index: CollectionImpl.java
===================================================================
RCS file:
/home/cvs/xml-xindice/java/src/org/apache/xindice/client/xmldb/embed/CollectionImpl.java,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -r1.33 -r1.34
--- CollectionImpl.java 24 Feb 2004 03:20:27 -0000 1.33
+++ CollectionImpl.java 30 Mar 2004 14:01:07 -0000 1.34
@@ -61,6 +61,8 @@
* Creates new <code>CollectionImpl</code> instance representing
connection
* to server collection.
*
+ * @param db Database this collection resides in
+ * @param collPath Canonical path of this collection (including database
name)
* @exception XMLDBException thrown if a connection could not be
established,
* because of URL syntax errors, or connection failure, or if
no
* collection with path <code>collPath</code> could be
located.
@@ -69,8 +71,18 @@
super(collPath);
this.db = db;
+ // Extract path of the collection within database
+ String collName = "/";
+ int colIndex = collPath.indexOf('/', 1);
+ if (colIndex != -1) {
+ collName = collPath.substring(colIndex);
+ if (collName.equals("")) {
+ collName = "/";
+ }
+ }
+
try {
- this.col = db.getCollection(collPath);
+ this.col = db.getCollection(collName);
} catch (Exception e) {
throw
FaultCodes.createXMLDBException(ErrorCodes.INVALID_COLLECTION,
"Collection not available:
" + collPath, e);
@@ -288,6 +300,7 @@
*/
public void close() throws XMLDBException {
col = null;
+ // FIXME Should not be necessary here:
db.flushConfig();
}
@@ -303,27 +316,20 @@
* method has been called on the <code>Collection</code><br />
*/
public org.xmldb.api.base.Collection getParentCollection() throws
XMLDBException {
+
// If there's only one slash then it's the root.
- // Not too sure about the robustness of this code.
- if (collPath.equals("/") || collPath.equals("")) {
+ if (collPath.lastIndexOf("/") == 0) {
return null;
}
- String parent = collPath.substring(0, collPath.lastIndexOf('/'));
- if ("".equals(parent)) {
- parent = "/";
- }
-
try {
- return new CollectionImpl(db, parent);
+ return new CollectionImpl(db, collPath.substring(0,
collPath.lastIndexOf('/')));
} catch (XMLDBException e) {
if (e.errorCode == ErrorCodes.NO_SUCH_COLLECTION) {
// per getParentCollection contract, return null if no parent
return null;
}
throw e;
- } catch (Exception e) {
- throw FaultCodes.createXMLDBException(e);
}
}
1.26 +6 -12
xml-xindice/java/src/org/apache/xindice/client/xmldb/embed/DatabaseImpl.java
Index: DatabaseImpl.java
===================================================================
RCS file:
/home/cvs/xml-xindice/java/src/org/apache/xindice/client/xmldb/embed/DatabaseImpl.java,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -r1.25 -r1.26
--- DatabaseImpl.java 12 Feb 2004 03:12:18 -0000 1.25
+++ DatabaseImpl.java 30 Mar 2004 14:01:07 -0000 1.26
@@ -371,22 +371,15 @@
"Invalid URL (collection name must
start with '/'): " + uri);
}
- // find the database name. We just skip the first slash
+ // Find the database name. We just skip the first slash
int colIndex = collPath.indexOf('/', 1);
// We assume there's no collection specified
String dbName = collPath.substring(1);
- String colName = "/";
- // if colIndex isn't -1 then we need to pick out the db and
collection
+ // If colIndex isn't -1 then we need to pick out the db name
if (colIndex != -1) {
dbName = collPath.substring(1, colIndex);
-
- // The rest of the name locates the collection
- colName = collPath.substring(colIndex);
- if (colName.equals("")) {
- colName = "/";
- }
}
Database database = getDatabase(dbName, uri);
@@ -394,8 +387,9 @@
throw new XMLDBException(ErrorCodes.NO_SUCH_DATABASE,
"Database '" + dbName + "' not found.
URL: " + uri);
}
+
try {
- return new CollectionImpl(database, colName);
+ return new CollectionImpl(database, collPath);
} catch (XMLDBException e) {
if (e.errorCode == ErrorCodes.NO_SUCH_COLLECTION) {
// Per getCollection contract, return null if not found
1.18 +2 -18
xml-xindice/java/tests/src/org/apache/xindice/integration/client/XmlDbClient.java
Index: XmlDbClient.java
===================================================================
RCS file:
/home/cvs/xml-xindice/java/tests/src/org/apache/xindice/integration/client/XmlDbClient.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- XmlDbClient.java 8 Feb 2004 03:57:02 -0000 1.17
+++ XmlDbClient.java 30 Mar 2004 14:01:07 -0000 1.18
@@ -87,22 +87,6 @@
}
}
- public String[] listCollections(String path) throws Exception {
- Collection col = DatabaseManager.getCollection(driver + "/" + path);
- if (col == null) {
- throw new XindiceException("DatabaseManager.getCollection(" +
driver + "/" + path + ") returned null");
- }
- return col.listChildCollections();
- }
-
- public int countCollections(String path) throws Exception {
- Collection col = DatabaseManager.getCollection(driver + "/" + path);
- if (col == null) {
- throw new XindiceException("DatabaseManager.getCollection(" +
driver + "/" + path + ") returned null");
- }
- return col.getChildCollectionCount();
- }
-
public void createIndexer(String path, String indexDoc) throws Exception
{
createIndexer(path, DOMParser.toDocument(indexDoc));
}
1.20 +39 -36
xml-xindice/java/tests/src/org/apache/xindice/integration/client/basic/CollectionTest.java
Index: CollectionTest.java
===================================================================
RCS file:
/home/cvs/xml-xindice/java/tests/src/org/apache/xindice/integration/client/basic/CollectionTest.java,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- CollectionTest.java 4 Mar 2004 13:15:22 -0000 1.19
+++ CollectionTest.java 30 Mar 2004 14:01:07 -0000 1.20
@@ -36,6 +36,11 @@
*/
public class CollectionTest extends AbstractXmlDbClientTest {
+ public void testGetDatabase() throws Exception {
+ Collection col =
this.client.getCollection(XmlDbClientSetup.INSTANCE_NAME);
+ assertNotNull(col);
+ }
+
public void testGetUnknownDatabase() throws Exception {
try {
Collection col = this.client.getCollection("doesnotexist");
@@ -46,37 +51,39 @@
}
}
- // This is just to make sure that the system is up and running.
public void testListInitialCollections() throws Exception {
- String[] collections =
this.client.listCollections(XmlDbClientSetup.INSTANCE_NAME);
- List col = new Vector(Arrays.asList(collections));
+ Collection db =
this.client.getCollection(XmlDbClientSetup.INSTANCE_NAME);
+ String[] collections = db.listChildCollections();
+ List collist = new Vector(Arrays.asList(collections));
if (collections.length == 2) {
- assertTrue(col.contains(XmlDbClientSetup.TEST_COLLECTION_NAME));
- assertTrue(col.contains("system"));
+
assertTrue(collist.contains(XmlDbClientSetup.TEST_COLLECTION_NAME));
+ assertTrue(collist.contains("system"));
} else if (collections.length == 3) {
- assertTrue(col.contains(XmlDbClientSetup.TEST_COLLECTION_NAME));
- assertTrue(col.contains("system"));
- assertTrue(col.contains("meta"));
+
assertTrue(collist.contains(XmlDbClientSetup.TEST_COLLECTION_NAME));
+ assertTrue(collist.contains("system"));
+ assertTrue(collist.contains("meta"));
} else {
fail("Initial number of collections should be 2, or 3 if meta
enabled");
}
}
public void testCreateNestedCollection() throws Exception {
- this.client.createCollection(TEST_COLLECTION_PATH, "nested");
- assertEquals(1, this.client.countCollections(TEST_COLLECTION_PATH));
+ Collection col = this.client.getCollection(TEST_COLLECTION_PATH);
+
+ Collection nested =
this.client.createCollection(TEST_COLLECTION_PATH, "nested");
+ assertEquals(1, col.getChildCollectionCount());
// Test create collection with path
this.client.createCollection(TEST_COLLECTION_PATH, "nested/child2",
"child2");
this.client.createCollection(TEST_COLLECTION_PATH + "/nested",
"child3");
- assertEquals(2, this.client.countCollections(TEST_COLLECTION_PATH +
"/nested"));
+ assertEquals(2, nested.getChildCollectionCount());
this.client.dropCollection(TEST_COLLECTION_PATH + "/nested",
"child2");
- assertEquals(1, this.client.countCollections(TEST_COLLECTION_PATH +
"/nested"));
+ assertEquals(1, nested.getChildCollectionCount());
this.client.dropCollection(TEST_COLLECTION_PATH + "/nested",
"child3");
- assertEquals(0, this.client.countCollections(TEST_COLLECTION_PATH +
"/nested"));
+ assertEquals(0, nested.getChildCollectionCount());
this.client.dropCollection(TEST_COLLECTION_PATH, "nested");
}
@@ -158,34 +165,38 @@
}
public void testGetCollectionCount() throws Exception {
+ Collection col = this.client.getCollection(TEST_COLLECTION_PATH);
+
this.client.createCollection(TEST_COLLECTION_PATH, "count");
- assertEquals(1, this.client.countCollections(TEST_COLLECTION_PATH));
+ assertEquals(1, col.getChildCollectionCount());
this.client.dropCollection(TEST_COLLECTION_PATH, "count");
- assertEquals(0, this.client.countCollections(TEST_COLLECTION_PATH));
+ assertEquals(0, col.getChildCollectionCount());
}
public void testListCollections() throws Exception {
- String[] collections =
this.client.listCollections(TEST_COLLECTION_PATH);
+ Collection col = this.client.getCollection(TEST_COLLECTION_PATH);
+
+ String[] collections = col.listChildCollections();
assertEquals(0, collections.length);
this.client.createCollection(TEST_COLLECTION_PATH, "child1");
this.client.createCollection(TEST_COLLECTION_PATH, "child2");
- collections = this.client.listCollections(TEST_COLLECTION_PATH);
+ collections = col.listChildCollections();
assertEquals(2, collections.length);
- List col = new Vector(Arrays.asList(collections));
- assertTrue(col.contains("child1"));
- assertTrue(col.contains("child2"));
+ List collist = new Vector(Arrays.asList(collections));
+ assertTrue(collist.contains("child1"));
+ assertTrue(collist.contains("child2"));
this.client.dropCollection(TEST_COLLECTION_PATH, "child1");
- collections = this.client.listCollections(TEST_COLLECTION_PATH);
+ collections = col.listChildCollections();
assertEquals(1, collections.length);
assertEquals("child2", collections[0]);
this.client.dropCollection(TEST_COLLECTION_PATH, "child2");
- collections = this.client.listCollections(TEST_COLLECTION_PATH);
+ collections = col.listChildCollections();
assertEquals(0, collections.length);
}
@@ -216,7 +227,10 @@
// Must return root database collection
assertNotNull(parent);
- assertEquals("", parent.getName());
+ assertEquals("db", parent.getName());
+
+ // Database (== root collection) has no parent
+ assertNull(parent.getParentCollection());
this.client.dropCollection(TEST_COLLECTION_PATH, "childcol");
}
@@ -233,17 +247,6 @@
} catch (XMLDBException e) {
assertEquals("ErrorCodes.INVALID_COLLECTION",
ErrorCodes.INVALID_COLLECTION, e.errorCode);
}
- }
-
- public void testChildCollectionCount() throws Exception {
- Collection col = this.client.createCollection(TEST_COLLECTION_PATH,
"childcol");
- assertEquals(0, col.getChildCollectionCount());
-
- this.client.createCollection(TEST_COLLECTION_PATH, "colcount");
- assertEquals(0, col.getChildCollectionCount());
-
- this.client.dropCollection(TEST_COLLECTION_PATH, "colcount");
- assertEquals(0, col.getChildCollectionCount());
}
public void testClose() throws Exception {