svn commit: r643240 - in /xml/xindice/trunk/java: src/org/apache/xindice/client/xmldb/ src/org/apache/xindice/client/xmldb/embed/ src/org/apache/xindice/client/xmldb/services/ src/org/apache/xindice/client/xmldb/xmlrpc/ src/org/apache/xindice/server/rp...

[email protected]
Newsgroups gmane.text.xml.xindice.devel
Message-ID <[email protected]>
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
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.