Author: natalia
Date: Mon Mar 31 18:53:39 2008
New Revision: 643240
URL: http://svn.apache.org/viewvc?rev=643240&view=rev
Log:
ResourceManagementService for insert/update operations
Added:
xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/services/ResourceManagementService.java
(with props)
xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/services/ResourceManagementServiceImpl.java
(with props)
xml/xindice/trunk/java/src/org/apache/xindice/server/rpc/messages/SetResource.java
(with props)
xml/xindice/trunk/java/src/org/apache/xindice/server/rpc/messages/UpdateResource.java
(with props)
xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/client/services/ResourceManagementTest.java
(with props)
Modified:
xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/XindiceCollection.java
xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/embed/CollectionImpl.java
xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/xmlrpc/CollectionImpl.java
xml/xindice/trunk/java/src/org/apache/xindice/server/rpc/messages/InsertDocument.java
xml/xindice/trunk/java/src/org/apache/xindice/server/rpc/messages/InsertResource.java
xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/IntegrationTests.java
Modified:
xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/XindiceCollection.java
URL:
http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/XindiceCollection.java?rev=643240&r1=643239&r2=643240&view=diff
==============================================================================
---
xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/XindiceCollection.java
(original)
+++
xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/XindiceCollection.java
Mon Mar 31 18:53:39 2008
@@ -26,6 +26,8 @@
import org.apache.xindice.client.xmldb.services.TextQueryServiceImpl;
import org.apache.xindice.client.xmldb.services.XPathQueryServiceImpl;
import org.apache.xindice.client.xmldb.services.XUpdateQueryServiceImpl;
+import org.apache.xindice.client.xmldb.services.ResourceManagementService;
+import org.apache.xindice.client.xmldb.services.ResourceManagementServiceImpl;
import org.apache.xindice.core.FaultCodes;
import org.apache.xindice.core.meta.MetaData;
import org.apache.xindice.xml.NodeSource;
@@ -95,6 +97,9 @@
final MetaService meta = new MetaService();
registerService(meta);
+ final ResourceManagementService rms = new
ResourceManagementServiceImpl();
+ registerService(rms);
+
try {
final CollectionManagementServiceImpl manager = new
CollectionManagementServiceImpl();
registerService(manager);
@@ -354,4 +359,8 @@
* @exception XMLDBException thrown if unable to obtain meta information
*/
public abstract void setMetaData(String name, MetaData meta) throws
XMLDBException;
+
+ public abstract void insertResource(Resource resource) throws
XMLDBException;
+
+ public abstract void updateResource(Resource resource) throws
XMLDBException;
}
Modified:
xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/embed/CollectionImpl.java
URL:
http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/embed/CollectionImpl.java?rev=643240&r1=643239&r2=643240&view=diff
==============================================================================
---
xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/embed/CollectionImpl.java
(original)
+++
xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/embed/CollectionImpl.java
Mon Mar 31 18:53:39 2008
@@ -24,6 +24,7 @@
import org.apache.xindice.client.xmldb.resources.BinaryResourceImpl;
import org.apache.xindice.client.xmldb.resources.XMLResourceImpl;
import org.apache.xindice.core.Collection;
+import org.apache.xindice.core.DBException;
import org.apache.xindice.core.Database;
import org.apache.xindice.core.FaultCodes;
import org.apache.xindice.core.data.Entry;
@@ -33,7 +34,6 @@
import org.apache.xindice.util.Configuration;
import org.apache.xindice.xml.TextWriter;
import org.apache.xindice.xml.dom.DocumentImpl;
-
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@@ -171,66 +171,169 @@
*
* @param res the resource to store in the database.
* @exception XMLDBException with expected error codes.<br />
- * <code>ErrorCodes.VENDOR_ERROR</code> for any vendor
- * specific errors that occur.<br />
- * <code>ErrorCodes.INVALID_RESOURCE</code> if the <code>Resource</code>
is
- * not valid.
- * <code>ErrorCodes.COLLECTION_CLOSED</code> if the <code>close</code>
- * method has been called on the <code>Collection</code><br />
+ * <code>ErrorCodes.VENDOR_ERROR</code> for any vendor
+ * specific errors that occur.<br />
+ * <code>ErrorCodes.INVALID_RESOURCE</code> if the <code>Resource</code> is
+ * not valid..<br />
+ * <code>ErrorCodes.COLLECTION_CLOSED</code> if the <code>close</code>
+ * method has been called on the <code>Collection</code><br />
*/
public void storeResource(Resource res) throws XMLDBException {
if (res.getContent() == null) {
- throw new XMLDBException(ErrorCodes.INVALID_RESOURCE,
- "No resource data");
+ throw new XMLDBException(ErrorCodes.INVALID_RESOURCE, "No resource
data");
}
checkOpen();
+
+ try {
+ if (res instanceof XMLResource) {
+ Node content = getXMLContent(res);
+ if (res.getId() != null) {
+ col.setDocument(res.getId(), (Document) content);
+ } else {
+ String name = col.insertDocument((Document)
content).toString();
+ ((XMLResourceImpl) res).setId(name);
+ }
+
+ } else if (res instanceof BinaryResource) {
+ byte[] bytes = getBinaryContent(res);
+ if (res.getId() != null) {
+ col.setBinary(res.getId(), bytes);
+ } else {
+ String name = col.insertBinary(bytes).toString();
+ ((BinaryResourceImpl) res).setId(name);
+ }
- if (res instanceof BinaryResource) {
- Object content = res.getContent();
- byte[] bytes;
- if (content instanceof byte[]) {
- bytes = (byte[]) content;
} else {
throw new XMLDBException(ErrorCodes.INVALID_RESOURCE,
- "The contents of a binary resource
must have type byte[].");
+ "Only XMLResource and BinaryResource
supported");
}
+ } catch (DBException e) {
+ throw FaultCodes.createXMLDBException(e.faultCode, e.getMessage(),
e);
+ } catch (XMLDBException e) {
+ throw e;
+ } catch (Exception e) {
+ throw FaultCodes.createXMLDBException(ErrorCodes.INVALID_RESOURCE,
+ "Invalid resource: " +
res.getId(), e);
+ }
+ }
+
+ /**
+ * Inserts the provided resource into the database.
+ *
+ * @param res the resource to insert.
+ * @exception XMLDBException with expected error codes.<br />
+ * <code>ErrorCodes.VENDOR_ERROR</code> for any vendor
+ * specific errors that occur.<br />
+ * <code>ErrorCodes.INVALID_RESOURCE</code> if the <code>Resource</code> is
+ * not valid..<br />
+ * <code>ErrorCodes.COLLECTION_CLOSED</code> if the <code>close</code>
+ * method has been called on the <code>Collection</code><br />
+ */
+ public void insertResource(Resource res) throws XMLDBException {
+ if (res.getContent() == null) {
+ throw new XMLDBException(ErrorCodes.INVALID_RESOURCE, "No resource
data");
+ }
+
+ checkOpen();
- try {
+ try {
+ if (res instanceof BinaryResource) {
+ byte[] bytes = getBinaryContent(res);
if (res.getId() != null) {
- col.setBinary(res.getId(), bytes);
+ col.insertBinary(res.getId(), bytes);
} else {
String name = col.insertBinary(bytes).toString();
((BinaryResourceImpl) res).setId(name);
}
- } catch (Exception e) {
- throw
FaultCodes.createXMLDBException(ErrorCodes.INVALID_RESOURCE,
- "Invalid resource:" +
res.getId(), e);
- }
-
- } else if (res instanceof XMLResource) {
- try {
- Node content = ((XMLResourceImpl) res).getContentAsDOM();
- if (content != null && content instanceof Document) {
- if (res.getId() != null) {
- col.setDocument(res.getId(), (Document) content);
- } else {
- String name = col.insertDocument((Document)
content).toString();
- ((XMLResourceImpl) res).setId(name);
- }
+ } else if (res instanceof XMLResource) {
+ Node content = getXMLContent(res);
+ if (res.getId() != null) {
+ col.insertDocument(res.getId(), (Document) content);
} else {
- throw new XMLDBException(ErrorCodes.INVALID_RESOURCE,
- "A resource must be a document in
order to be stored.");
+ String name = col.insertDocument((Document)
content).toString();
+ ((XMLResourceImpl) res).setId(name);
}
- } catch (Exception e) {
- throw
FaultCodes.createXMLDBException(ErrorCodes.INVALID_RESOURCE,
- "Invalid resource: " +
res.getId(), e);
+
+ } else {
+ throw new XMLDBException(ErrorCodes.INVALID_RESOURCE,
+ "Only XMLResource and BinaryResource
supported");
}
+ } catch (DBException e) {
+ throw FaultCodes.createXMLDBException(e.faultCode, e.getMessage(),
e);
+ } catch (XMLDBException e) {
+ throw e;
+ } catch (Exception e) {
+ throw FaultCodes.createXMLDBException(ErrorCodes.INVALID_RESOURCE,
+ "Invalid resource: " +
res.getId(), e);
+ }
+ }
+ /**
+ * Updates the provided resource in the database.
+ *
+ * @param res the resource to update.
+ * @exception XMLDBException with expected error codes.<br />
+ * <code>ErrorCodes.VENDOR_ERROR</code> for any vendor
+ * specific errors that occur.<br />
+ * <code>ErrorCodes.INVALID_RESOURCE</code> if the <code>Resource</code> is
+ * not valid.<br/>
+ * <code>ErrorCodes.COLLECTION_CLOSED</code> if the <code>close</code>
+ * method has been called on the <code>Collection</code><br />
+ */
+ public void updateResource(Resource res) throws XMLDBException {
+ if (res.getContent() == null) {
+ throw new XMLDBException(ErrorCodes.INVALID_RESOURCE, "No resource
data");
+ }
+
+ if (res.getId() == null) {
+ throw new XMLDBException(ErrorCodes.INVALID_RESOURCE, "Resource
must have valid ID.");
+ }
+
+ checkOpen();
+
+ try {
+ if (res instanceof BinaryResource) {
+ byte[] bytes = getBinaryContent(res);
+ col.updateBinary(res.getId(), bytes);
+
+ } else if (res instanceof XMLResource) {
+ Node content = getXMLContent(res);
+ col.updateDocument(res.getId(), (Document) content);
+
+ } else {
+ throw new XMLDBException(ErrorCodes.INVALID_RESOURCE,
+ "Only XMLResource and BinaryResource
supported");
+ }
+ } catch (DBException e) {
+ throw FaultCodes.createXMLDBException(e.faultCode, e.getMessage(),
e);
+ } catch (XMLDBException e) {
+ throw e;
+ } catch (Exception e) {
+ throw FaultCodes.createXMLDBException(ErrorCodes.INVALID_RESOURCE,
+ "Invalid resource: " +
res.getId(), e);
+ }
+ }
+
+ private byte[] getBinaryContent(Resource res) throws XMLDBException {
+ Object content = res.getContent();
+ byte[] bytes;
+ if (content instanceof byte[]) {
+ bytes = (byte[]) content;
} else {
throw new XMLDBException(ErrorCodes.INVALID_RESOURCE,
- "Only XMLResource and BinaryResource
supported");
+ "The contents of a binary resource must
have type byte[].");
+ }
+ return bytes;
+ }
+
+ private Node getXMLContent(Resource res) throws XMLDBException {
+ Node content = ((XMLResourceImpl) res).getContentAsDOM();
+ if (content == null || !(content instanceof Document)) {
+ throw new XMLDBException(ErrorCodes.INVALID_RESOURCE,
+ "A resource must be a document in order
to be stored.");
}
+ return content;
}
/* see superclass for documentation */
Added:
xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/services/ResourceManagementService.java
URL:
http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/services/ResourceManagementService.java?rev=643240&view=auto
==============================================================================
---
xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/services/ResourceManagementService.java
(added)
+++
xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/services/ResourceManagementService.java
Mon Mar 31 18:53:39 2008
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ *
+ * $Id$
+ */
+
+package org.apache.xindice.client.xmldb.services;
+
+import org.xmldb.api.base.Service;
+import org.xmldb.api.base.XMLDBException;
+import org.xmldb.api.base.Resource;
+
+/**
+ * Service for additional Xindice-specific resource operations.
+ *
+ * @version $Revision$, $Date$
+ */
+public interface ResourceManagementService extends Service {
+
+ /**
+ * Insert new resource into a collection. For this operation to succeed,
+ * collection must not contain a resource with the same key as resource
+ * being inserted. If a resource with that key already exists, method will
+ * throw XMLDBException.
+ * @param res Resource to be inserted
+ * @throws XMLDBException If there is a resource with the same key in the
+ * collection already.
+ */
+ public void insertResource(Resource res) throws XMLDBException;
+
+ /**
+ * Update existing resource. For this operation to succeed, collection
+ * must already contain a resource with the same key as resource passed
+ * as a parameter. Resource ID cannot be null. If there is no such
+ * resource, method will throw XMLDBException.
+ * @param res Resource to be updated
+ * @throws XMLDBException If there is no resource with the same key in the
+ * collection.
+ */
+ public void updateResource(Resource res) throws XMLDBException;
+
+ /**
+ * Store resource in a collection. If there is no resource with the same
key
+ * in the collection, new resource will be created, otherwise existing
+ * resource will be updated.
+ * @param res Resource to be stored
+ * @throws XMLDBException Collection failed
+ */
+ public void storeResource(Resource res) throws XMLDBException;
+}
Propchange:
xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/services/ResourceManagementService.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/services/ResourceManagementService.java
------------------------------------------------------------------------------
svn:keywords = Id Revision Author Date
Added:
xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/services/ResourceManagementServiceImpl.java
URL:
http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/services/ResourceManagementServiceImpl.java?rev=643240&view=auto
==============================================================================
---
xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/services/ResourceManagementServiceImpl.java
(added)
+++
xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/services/ResourceManagementServiceImpl.java
Mon Mar 31 18:53:39 2008
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ *
+ * $Id$
+ */
+
+package org.apache.xindice.client.xmldb.services;
+
+import org.apache.xindice.client.xmldb.CommonConfigurable;
+import org.apache.xindice.client.xmldb.XindiceCollection;
+import org.apache.xindice.util.XindiceRuntimeException;
+import org.xmldb.api.base.Collection;
+import org.xmldb.api.base.Resource;
+import org.xmldb.api.base.XMLDBException;
+
+/**
+ * Service for additional Xindice-specific resource operations.
+ *
+ * @version $Revision$, $Date$
+ */
+public class ResourceManagementServiceImpl extends CommonConfigurable
implements ResourceManagementService {
+
+ /**
+ * Collection that this service is going to use to store resources
+ */
+ private XindiceCollection collection;
+
+ public String getVersion() {
+ return "1.0";
+ }
+
+ public String getName() {
+ return "ResourceManagementService";
+ }
+
+ /**
+ * Sets collection that the service will use to store resources. The
+ * collection must be instance of XindiceCollection class because it
+ * uses Xindice-specific features.
+ * @param collection XindiceCollection object
+ * @throws XindiceRuntimeException If <code>collection</code> parameter is
+ * not instance of Xindice collection.
+ */
+ public void setCollection(Collection collection) {
+ if (collection instanceof XindiceCollection) {
+ this.collection = (XindiceCollection) collection;
+ } else {
+ throw new XindiceRuntimeException("ResourceMangementService
requires instance of XindiceCollection");
+ }
+ }
+
+ public void insertResource(Resource res) throws XMLDBException {
+ collection.insertResource(res);
+ }
+
+ public void updateResource(Resource res) throws XMLDBException {
+ collection.updateResource(res);
+ }
+
+ public void storeResource(Resource res) throws XMLDBException {
+ collection.storeResource(res);
+ }
+}
\ No newline at end of file
Propchange:
xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/services/ResourceManagementServiceImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/services/ResourceManagementServiceImpl.java
------------------------------------------------------------------------------
svn:keywords = Id Revision Author Date
Modified:
xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/xmlrpc/CollectionImpl.java
URL:
http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/xmlrpc/CollectionImpl.java?rev=643240&r1=643239&r2=643240&view=diff
==============================================================================
---
xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/xmlrpc/CollectionImpl.java
(original)
+++
xml/xindice/trunk/java/src/org/apache/xindice/client/xmldb/xmlrpc/CollectionImpl.java
Mon Mar 31 18:53:39 2008
@@ -243,24 +243,89 @@
checkOpen();
try {
- Map params = new HashMap();
- params.put(RPCDefaultMessage.COLLECTION, collPath);
- params.put(RPCDefaultMessage.NAME, res.getId());
- params.put(RPCDefaultMessage.DOCUMENT, res.getContent());
+ Map params = createParams(res);
+ String name = (String) runRemoteCommand("SetResource", params);
+ seResourcetId(res, name);
+ } catch (XMLDBException x) {
+ throw x; // propagate any xmldb exception.
+ } catch (Exception e) {
+ throw new XMLDBException(ErrorCodes.UNKNOWN_ERROR, e);
+ }
+ }
- String name = (String) runRemoteCommand("InsertResource", params);
- if (res instanceof XMLResource) {
- ((XMLResourceImpl) res).setId(name);
- } else {
- ((BinaryResourceImpl) res).setId(name);
- }
+ /**
+ * Inserts the provided resource into the database.
+ *
+ * @param res the resource to insert into the database.
+ * @exception XMLDBException with expected error codes.<br />
+ * <code>ErrorCodes.VENDOR_ERROR</code> for any vendor
+ * specific errors that occur.<br />
+ * <code>ErrorCodes.INVALID_RESOURCE</code> if the <code>Resource</code> is
+ * not valid.
+ * <code>ErrorCodes.COLLECTION_CLOSED</code> if the <code>close</code>
+ * method has been called on the <code>Collection</code><br />
+ */
+ public void insertResource(Resource res) throws XMLDBException {
- } catch (XMLDBException x) {
+ if (res.getContent() == null) {
+ throw new XMLDBException(ErrorCodes.INVALID_RESOURCE, "no resource
data");
+ }
+ checkOpen();
+ try {
+ Map params = createParams(res);
+ String name = (String) runRemoteCommand("InsertResource", params);
+ seResourcetId(res, name);
+ } catch (XMLDBException x) {
throw x; // propagate any xmldb exception.
} catch (Exception e) {
+ throw new XMLDBException(ErrorCodes.UNKNOWN_ERROR, e);
+ }
+ }
+
+ /**
+ * Updates the provided resource in the database.
+ *
+ * @param res the resource to update in the database.
+ * @exception XMLDBException with expected error codes.<br />
+ * <code>ErrorCodes.VENDOR_ERROR</code> for any vendor
+ * specific errors that occur.<br />
+ * <code>ErrorCodes.INVALID_RESOURCE</code> if the <code>Resource</code> is
+ * not valid.
+ * <code>ErrorCodes.COLLECTION_CLOSED</code> if the <code>close</code>
+ * method has been called on the <code>Collection</code><br />
+ */
+ public void updateResource(Resource res) throws XMLDBException {
+ if (res.getContent() == null) {
+ throw new XMLDBException(ErrorCodes.INVALID_RESOURCE, "no resource
data");
+ }
+
+ checkOpen();
+ try {
+ Map params = createParams(res);
+ String name = (String) runRemoteCommand("UpdateResource", params);
+ seResourcetId(res, name);
+ } catch (XMLDBException x) {
+ throw x; // propagate any xmldb exception.
+ } catch (Exception e) {
throw new XMLDBException(ErrorCodes.UNKNOWN_ERROR, e);
+ }
+ }
+
+ private Map createParams(Resource res) throws XMLDBException {
+ Map params = new HashMap();
+ params.put(RPCDefaultMessage.COLLECTION, collPath);
+ params.put(RPCDefaultMessage.NAME, res.getId());
+ params.put(RPCDefaultMessage.DOCUMENT, res.getContent());
+ return params;
+ }
+
+ private void seResourcetId(Resource res, String name) {
+ if (res instanceof XMLResource) {
+ ((XMLResourceImpl) res).setId(name);
+ } else {
+ ((BinaryResourceImpl) res).setId(name);
}
}
Modified:
xml/xindice/trunk/java/src/org/apache/xindice/server/rpc/messages/InsertDocument.java
URL:
http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/server/rpc/messages/InsertDocument.java?rev=643240&r1=643239&r2=643240&view=diff
==============================================================================
---
xml/xindice/trunk/java/src/org/apache/xindice/server/rpc/messages/InsertDocument.java
(original)
+++
xml/xindice/trunk/java/src/org/apache/xindice/server/rpc/messages/InsertDocument.java
Mon Mar 31 18:53:39 2008
@@ -33,7 +33,7 @@
private static final Log log = LogFactory.getLog(InsertDocument.class);
public Map execute(Map message) throws Exception {
- log.warn("Please use GetResource instead. GetResource supports same as
GetDocument, plus binary resources");
+ log.warn("Please use InsertResource instead. InsertResource supports
same as InsertDocument, plus binary resources");
return super.execute(message);
}
}
Modified:
xml/xindice/trunk/java/src/org/apache/xindice/server/rpc/messages/InsertResource.java
URL:
http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/server/rpc/messages/InsertResource.java?rev=643240&r1=643239&r2=643240&view=diff
==============================================================================
---
xml/xindice/trunk/java/src/org/apache/xindice/server/rpc/messages/InsertResource.java
(original)
+++
xml/xindice/trunk/java/src/org/apache/xindice/server/rpc/messages/InsertResource.java
Mon Mar 31 18:53:39 2008
@@ -29,6 +29,7 @@
import java.util.Map;
/**
+ * Inserts new resource.
*
* @version $Revision$, $Date$
*/
@@ -62,14 +63,14 @@
if (id == null) {
id = col.insertBinary((byte[])obj).toString();
} else {
- col.setBinary(id, (byte[])obj);
+ col.insertBinary(id, (byte[])obj);
}
} else {
Document doc = DOMParser.toDocument((String) obj);
if (id == null) {
id = col.insertDocument(doc).toString();
} else {
- col.setDocument(id, doc);
+ col.insertDocument(id, doc);
}
}
Added:
xml/xindice/trunk/java/src/org/apache/xindice/server/rpc/messages/SetResource.java
URL:
http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/server/rpc/messages/SetResource.java?rev=643240&view=auto
==============================================================================
---
xml/xindice/trunk/java/src/org/apache/xindice/server/rpc/messages/SetResource.java
(added)
+++
xml/xindice/trunk/java/src/org/apache/xindice/server/rpc/messages/SetResource.java
Mon Mar 31 18:53:39 2008
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ *
+ * $Id$
+ */
+
+package org.apache.xindice.server.rpc.messages;
+
+import org.apache.xindice.server.rpc.RPCDefaultMessage;
+import org.apache.xindice.core.Collection;
+import org.apache.xindice.xml.dom.DOMParser;
+import org.w3c.dom.Document;
+
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * Inserts new resource or updates existing one.
+ *
+ * @version $Revision$, $Date$
+ */
+public class SetResource extends RPCDefaultMessage {
+
+ public Map execute(Map message) throws Exception {
+ if (!message.containsKey(COLLECTION)) {
+ throw new Exception(MISSING_COLLECTION_PARAM);
+ }
+
+ if (!message.containsKey(NAME)) {
+ throw new Exception(MISSING_NAME_PARAM);
+ }
+
+ if (!message.containsKey(DOCUMENT)) {
+ throw new Exception(MISSING_DOCUMENT_PARAM);
+ }
+
+ Object obj = message.get(DOCUMENT);
+ if (obj == null) {
+ throw new Exception("Unable to parse Document");
+ }
+
+ String id = (String) message.get(NAME);
+ if ("".equals(id)) {
+ id = null;
+ }
+
+ Collection col = getCollection((String) message.get(COLLECTION));
+ if (obj instanceof byte[]) {
+ if (id == null) {
+ id = col.insertBinary((byte[])obj).toString();
+ } else {
+ col.setBinary(id, (byte[])obj);
+ }
+ } else {
+ Document doc = DOMParser.toDocument((String) obj);
+ if (id == null) {
+ id = col.insertDocument(doc).toString();
+ } else {
+ col.setDocument(id, doc);
+ }
+ }
+
+ Map result = new HashMap(3);
+ result.put(RESULT, id);
+ return result;
+ }
+}
Propchange:
xml/xindice/trunk/java/src/org/apache/xindice/server/rpc/messages/SetResource.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
xml/xindice/trunk/java/src/org/apache/xindice/server/rpc/messages/SetResource.java
------------------------------------------------------------------------------
svn:keywords = Id Revision Author Date
Added:
xml/xindice/trunk/java/src/org/apache/xindice/server/rpc/messages/UpdateResource.java
URL:
http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/server/rpc/messages/UpdateResource.java?rev=643240&view=auto
==============================================================================
---
xml/xindice/trunk/java/src/org/apache/xindice/server/rpc/messages/UpdateResource.java
(added)
+++
xml/xindice/trunk/java/src/org/apache/xindice/server/rpc/messages/UpdateResource.java
Mon Mar 31 18:53:39 2008
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ *
+ * $Id$
+ */
+
+package org.apache.xindice.server.rpc.messages;
+
+import org.apache.xindice.server.rpc.RPCDefaultMessage;
+import org.apache.xindice.core.Collection;
+import org.apache.xindice.xml.dom.DOMParser;
+import org.w3c.dom.Document;
+
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * Updates existing resource.
+ *
+ * @version $Revision$, $Date$
+ */
+public class UpdateResource extends RPCDefaultMessage {
+
+ public Map execute(Map message) throws Exception {
+ if (!message.containsKey(COLLECTION)) {
+ throw new Exception(MISSING_COLLECTION_PARAM);
+ }
+
+ if (!message.containsKey(NAME)) {
+ throw new Exception(MISSING_NAME_PARAM);
+ }
+
+ if (!message.containsKey(DOCUMENT)) {
+ throw new Exception(MISSING_DOCUMENT_PARAM);
+ }
+
+ Object obj = message.get(DOCUMENT);
+ if (obj == null) {
+ throw new Exception("Unable to parse Document");
+ }
+
+ String id = (String) message.get(NAME);
+ if ("".equals(id) || id == null) {
+ throw new Exception("Resource key is not set");
+ }
+
+ Collection col = getCollection((String) message.get(COLLECTION));
+ if (obj instanceof byte[]) {
+ col.updateBinary(id, (byte[])obj);
+ } else {
+ Document doc = DOMParser.toDocument((String) obj);
+ col.updateDocument(id, doc);
+ }
+
+ Map result = new HashMap(3);
+ result.put(RESULT, id);
+ return result;
+ }
+}
Propchange:
xml/xindice/trunk/java/src/org/apache/xindice/server/rpc/messages/UpdateResource.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
xml/xindice/trunk/java/src/org/apache/xindice/server/rpc/messages/UpdateResource.java
------------------------------------------------------------------------------
svn:keywords = Id Revision Author Date
Modified:
xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/IntegrationTests.java
URL:
http://svn.apache.org/viewvc/xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/IntegrationTests.java?rev=643240&r1=643239&r2=643240&view=diff
==============================================================================
---
xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/IntegrationTests.java
(original)
+++
xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/IntegrationTests.java
Mon Mar 31 18:53:39 2008
@@ -19,17 +19,17 @@
package org.apache.xindice.integration;
+import junit.framework.TestSuite;
import org.apache.xindice.integration.client.basic.CollectionTest;
import org.apache.xindice.integration.client.basic.DocumentTest;
import org.apache.xindice.integration.client.basic.IndexTest;
import org.apache.xindice.integration.client.resources.BinaryResourceTest;
import org.apache.xindice.integration.client.services.IndexedSearchTest;
import org.apache.xindice.integration.client.services.MetaTest;
+import org.apache.xindice.integration.client.services.ResourceManagementTest;
+import org.apache.xindice.integration.client.services.TextQueryTest;
import org.apache.xindice.integration.client.services.XPathQueryTest;
import org.apache.xindice.integration.client.services.XUpdateQueryTest;
-import org.apache.xindice.integration.client.services.TextQueryTest;
-
-import junit.framework.TestSuite;
/**
* @version $Revision$, $Date$
@@ -46,6 +46,7 @@
suite.addTestSuite(XPathQueryTest.class);
suite.addTestSuite(TextQueryTest.class);
suite.addTestSuite(MetaTest.class);
+ suite.addTestSuite(ResourceManagementTest.class);
suite.addTestSuite(IndexedSearchTest.class);
suite.addTestSuite(BinaryResourceTest.class);
return suite;
Added:
xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/client/services/ResourceManagementTest.java
URL:
http://svn.apache.org/viewvc/xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/client/services/ResourceManagementTest.java?rev=643240&view=auto
==============================================================================
---
xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/client/services/ResourceManagementTest.java
(added)
+++
xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/client/services/ResourceManagementTest.java
Mon Mar 31 18:53:39 2008
@@ -0,0 +1,123 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ *
+ * $Id$
+ */
+
+package org.apache.xindice.integration.client.services;
+
+import org.apache.xindice.client.xmldb.services.ResourceManagementService;
+import org.apache.xindice.integration.client.AbstractXmlDbClientTest;
+import org.xmldb.api.base.Collection;
+import org.xmldb.api.base.XMLDBException;
+import org.xmldb.api.modules.XMLResource;
+
+/**
+ * Test ResourceManagementService
+ *
+ * @version $Revision$, $Date$
+ */
+public class ResourceManagementTest extends AbstractXmlDbClientTest {
+
+ static final String DOCUMENT_ID1 = "doc1";
+ static final String DOCUMENT_ID2 = "doc2";
+
+ static final String DOCUMENT1 =
+ "<?xml version=\"1.0\"?>" +
+ "<person>" +
+ " <first>John</first>" +
+ " <last>Smith</last>" +
+ " <age>30</age>" +
+ " <phone type=\"work\">555-345-6789</phone>" +
+ "</person>";
+
+ static final String DOCUMENT2 =
+ "<?xml version=\"1.0\"?>" +
+ "<person>" +
+ " <first>John</first>" +
+ " <last>Smith</last>" +
+ " <age>31</age>" +
+ " <phone type=\"work\">555-345-6789</phone>" +
+ "</person>";
+
+ static final String ATTRIBUTE_ID = "MetaDataAttribute";
+
+ private ResourceManagementService service;
+ private Collection col;
+
+ public void setUp() throws Exception {
+ super.setUp();
+
+ col = this.client.getCollection(TEST_COLLECTION_PATH);
+ service = (ResourceManagementService)
col.getService("ResourceManagementService", "1.0");
+
+ this.client.insertDocument(TEST_COLLECTION_PATH, DOCUMENT_ID1,
DOCUMENT1);
+ }
+
+ public void tearDown() throws Exception {
+ this.client.removeDocument(TEST_COLLECTION_PATH, DOCUMENT_ID1);
+
+ super.tearDown();
+ }
+
+ public void testInsert() throws Exception {
+ XMLResource res = (XMLResource) col.createResource(DOCUMENT_ID2,
"XMLResource");
+ res.setContent(DOCUMENT2);
+ service.insertResource(res);
+ assertNotNull(col.getResource(DOCUMENT_ID2));
+ }
+
+ public void testInsertExistingKey() throws Exception {
+ XMLResource res = (XMLResource) col.createResource(DOCUMENT_ID1,
"XMLResource");
+ res.setContent(DOCUMENT1);
+ try {
+ service.insertResource(res);
+ assertTrue("Inserted document with existing key", false);
+ } catch (XMLDBException e) {
+ }
+ }
+
+ public void testUpdate() throws Exception {
+ XMLResource res = (XMLResource) col.createResource(DOCUMENT_ID2,
"XMLResource");
+ res.setContent(DOCUMENT2);
+ try {
+ service.updateResource(res);
+ assertTrue("Updated document with non-existing key", false);
+ } catch (XMLDBException e) {
+ }
+ }
+
+ public void testUpdateExistingKey() throws Exception {
+ XMLResource res = (XMLResource) col.createResource(DOCUMENT_ID1,
"XMLResource");
+ res.setContent(DOCUMENT1);
+ service.updateResource(res);
+ assertNotNull(col.getResource(DOCUMENT_ID1));
+ }
+
+ public void testStore() throws Exception {
+ XMLResource res = (XMLResource) col.createResource(DOCUMENT_ID2,
"XMLResource");
+ res.setContent(DOCUMENT2);
+ service.storeResource(res);
+ assertNotNull(col.getResource(DOCUMENT_ID2));
+ }
+
+ public void testStoreExistingKey() throws Exception {
+ XMLResource res = (XMLResource) col.createResource(DOCUMENT_ID1,
"XMLResource");
+ res.setContent(DOCUMENT2);
+ service.storeResource(res);
+ assertNotNull(col.getResource(DOCUMENT_ID1));
+ }
+}
\ No newline at end of file
Propchange:
xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/client/services/ResourceManagementTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
xml/xindice/trunk/java/tests/src/org/apache/xindice/integration/client/services/ResourceManagementTest.java
------------------------------------------------------------------------------
svn:keywords = Id Revision Author Date