You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fm...@apache.org on 2011/01/13 15:47:40 UTC

svn commit: r1058588 [2/2] - in /incubator/chemistry/opencmis-cmis11/trunk: chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/impl/ chemistry-opencmis-client/chemistry-opencmis-clie...

Modified: incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/CmisAtomPubServlet.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/CmisAtomPubServlet.java?rev=1058588&r1=1058587&r2=1058588&view=diff
==============================================================================
--- incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/CmisAtomPubServlet.java (original)
+++ incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/CmisAtomPubServlet.java Thu Jan 13 14:47:39 2011
@@ -89,6 +89,12 @@ public class CmisAtomPubServlet extends 
                     "getTypeDescendants");
             dispatcher.addResource(AtomPubUtils.RESOURCE_TYPE, Dispatcher.METHOD_GET, RepositoryService.class,
                     "getTypeDefinition");
+            dispatcher.addResource(AtomPubUtils.RESOURCE_TYPES, Dispatcher.METHOD_POST, RepositoryService.class,
+                    "createTypeDefinition");
+            dispatcher.addResource(AtomPubUtils.RESOURCE_TYPE, Dispatcher.METHOD_PUT, RepositoryService.class,
+                    "updateTypeDefinition");
+            dispatcher.addResource(AtomPubUtils.RESOURCE_TYPE, Dispatcher.METHOD_DELETE, RepositoryService.class,
+                    "deleteTypeDefinition");
             dispatcher.addResource(AtomPubUtils.RESOURCE_CHILDREN, Dispatcher.METHOD_GET, NavigationService.class,
                     "getChildren");
             dispatcher.addResource(AtomPubUtils.RESOURCE_DESCENDANTS, Dispatcher.METHOD_GET, NavigationService.class,
@@ -158,8 +164,8 @@ public class CmisAtomPubServlet extends 
         // create a context object, dispatch and handle exceptions
         CallContext context = null;
         try {
-            context = HttpUtils.createContext(request, getServletContext(),
-                    CallContext.BINDING_ATOMPUB, callContextHandler);
+            context = HttpUtils.createContext(request, getServletContext(), CallContext.BINDING_ATOMPUB,
+                    callContextHandler);
             dispatch(context, request, response);
         } catch (Exception e) {
             if (e instanceof CmisPermissionDeniedException) {

Modified: incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/RepositoryService.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/RepositoryService.java?rev=1058588&r1=1058587&r2=1058588&view=diff
==============================================================================
--- incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/RepositoryService.java (original)
+++ incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/RepositoryService.java Thu Jan 13 14:47:39 2011
@@ -55,10 +55,12 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
 import org.apache.chemistry.opencmis.commons.enums.CapabilityChanges;
 import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
 import org.apache.chemistry.opencmis.commons.impl.Constants;
 import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
 import org.apache.chemistry.opencmis.commons.server.CallContext;
 import org.apache.chemistry.opencmis.commons.server.CmisService;
+import org.apache.chemistry.opencmis.commons.spi.Holder;
 import org.apache.chemistry.opencmis.server.impl.CallContextImpl;
 
 /**
@@ -416,4 +418,70 @@ public final class RepositoryService {
         writeTypeEntry(entry, type, null, repositoryId, compileBaseUrl(request, repositoryId), true);
         entry.endDocument();
     }
+
+    public static void createTypeDefinition(CallContext context, CmisService service, String repositoryId,
+            HttpServletRequest request, HttpServletResponse response) throws Exception {
+        // get parameters
+        String typeId = getStringParameter(request, Constants.PARAM_TYPE_ID);
+
+        AtomEntryParser parser = new AtomEntryParser(request.getInputStream());
+        TypeDefinition typeDefinition = parser.getTypeDefinition();
+        if ((typeDefinition == null) || !typeId.equals(typeDefinition.getParentTypeId())) {
+            throw new CmisInvalidArgumentException("No or invalid type defintion submitted!");
+        }
+
+        Holder<TypeDefinition> typeDefinitionHolder = new Holder<TypeDefinition>(typeDefinition);
+
+        // execute
+        service.createTypeDefinition(repositoryId, typeDefinitionHolder, null);
+
+        // write XML
+        response.setStatus(HttpServletResponse.SC_OK);
+        response.setContentType(Constants.MEDIATYPE_ENTRY);
+
+        AtomEntry entry = new AtomEntry();
+        entry.startDocument(response.getOutputStream());
+        writeTypeEntry(entry, typeDefinitionHolder.getValue(), null, repositoryId,
+                compileBaseUrl(request, repositoryId), true);
+        entry.endDocument();
+    }
+
+    public static void updateTypeDefinition(CallContext context, CmisService service, String repositoryId,
+            HttpServletRequest request, HttpServletResponse response) throws Exception {
+        // get parameters
+        String typeId = getStringParameter(request, Constants.PARAM_TYPE_ID);
+
+        AtomEntryParser parser = new AtomEntryParser(request.getInputStream());
+        TypeDefinition typeDefinition = parser.getTypeDefinition();
+        if ((typeDefinition == null) || !typeId.equals(typeDefinition.getId())) {
+            throw new CmisInvalidArgumentException("No or invalid type defintion submitted!");
+        }
+
+        Holder<TypeDefinition> typeDefinitionHolder = new Holder<TypeDefinition>(typeDefinition);
+
+        // execute
+        service.updateTypeDefinition(repositoryId, typeDefinitionHolder, null);
+
+        // write XML
+        response.setStatus(HttpServletResponse.SC_OK);
+        response.setContentType(Constants.MEDIATYPE_ENTRY);
+
+        AtomEntry entry = new AtomEntry();
+        entry.startDocument(response.getOutputStream());
+        writeTypeEntry(entry, typeDefinitionHolder.getValue(), null, repositoryId,
+                compileBaseUrl(request, repositoryId), true);
+        entry.endDocument();
+    }
+
+    public static void deleteTypeDefinition(CallContext context, CmisService service, String repositoryId,
+            HttpServletRequest request, HttpServletResponse response) throws Exception {
+        // get parameters
+        String typeId = getStringParameter(request, Constants.PARAM_ID);
+
+        // execute
+        service.deleteTypeDefinition(repositoryId, typeId, null);
+
+        // set headers
+        response.setStatus(HttpServletResponse.SC_NO_CONTENT);
+    }
 }

Modified: incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/RepositoryService.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/RepositoryService.java?rev=1058588&r1=1058587&r2=1058588&view=diff
==============================================================================
--- incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/RepositoryService.java (original)
+++ incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/webservices/RepositoryService.java Thu Jan 13 14:47:39 2011
@@ -19,7 +19,9 @@
 package org.apache.chemistry.opencmis.server.impl.webservices;
 
 import static org.apache.chemistry.opencmis.commons.impl.Converter.convert;
+import static org.apache.chemistry.opencmis.commons.impl.Converter.convertExtensionHolder;
 import static org.apache.chemistry.opencmis.commons.impl.Converter.convertTypeContainerList;
+import static org.apache.chemistry.opencmis.commons.impl.Converter.setExtensionValues;
 
 import java.math.BigInteger;
 import java.util.ArrayList;
@@ -27,9 +29,12 @@ import java.util.List;
 
 import javax.annotation.Resource;
 import javax.jws.WebService;
+import javax.xml.ws.Holder;
 import javax.xml.ws.WebServiceContext;
 
+import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
 import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
+import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
 import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisException;
 import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisExtensionType;
 import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisRepositoryEntryType;
@@ -137,4 +142,71 @@ public class RepositoryService extends A
             closeService(service);
         }
     }
+
+    public void createTypeDefinition(String repositoryId, Holder<CmisTypeDefinitionType> type,
+            CmisExtensionType extension) throws CmisException {
+        CmisService service = null;
+        try {
+            service = getService(wsContext, repositoryId);
+
+            org.apache.chemistry.opencmis.commons.spi.Holder<TypeDefinition> typeDefHolder = null;
+            if (type != null) {
+                typeDefHolder = new org.apache.chemistry.opencmis.commons.spi.Holder<TypeDefinition>(
+                        convert(type.value));
+            }
+
+            service.createTypeDefinition(repositoryId, typeDefHolder, convert(extension));
+
+            if (type != null) {
+                type.value = convert(typeDefHolder.getValue());
+            }
+        } catch (Exception e) {
+            throw convertException(e);
+        } finally {
+            closeService(service);
+        }
+    }
+
+    public void updateTypeDefinition(String repositoryId, Holder<CmisTypeDefinitionType> type,
+            CmisExtensionType extension) throws CmisException {
+        CmisService service = null;
+        try {
+            service = getService(wsContext, repositoryId);
+
+            org.apache.chemistry.opencmis.commons.spi.Holder<TypeDefinition> typeDefHolder = null;
+            if (type != null) {
+                typeDefHolder = new org.apache.chemistry.opencmis.commons.spi.Holder<TypeDefinition>(
+                        convert(type.value));
+            }
+
+            service.updateTypeDefinition(repositoryId, typeDefHolder, convert(extension));
+
+            if (type != null) {
+                type.value = convert(typeDefHolder.getValue());
+            }
+        } catch (Exception e) {
+            throw convertException(e);
+        } finally {
+            closeService(service);
+        }
+    }
+
+    public void deleteTypeDefinition(String repositoryId, String typeId, Holder<CmisExtensionType> extension)
+            throws CmisException {
+
+        CmisService service = null;
+        try {
+            service = getService(wsContext, repositoryId);
+
+            ExtensionsData extData = convertExtensionHolder(extension);
+
+            service.deleteTypeDefinition(repositoryId, typeId, extData);
+
+            setExtensionValues(extData, extension);
+        } catch (Exception e) {
+            throw convertException(e);
+        } finally {
+            closeService(service);
+        }
+    }
 }

Modified: incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/CmisServiceWrapper.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/CmisServiceWrapper.java?rev=1058588&r1=1058587&r2=1058588&view=diff
==============================================================================
--- incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/CmisServiceWrapper.java (original)
+++ incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/CmisServiceWrapper.java Thu Jan 13 14:47:39 2011
@@ -49,6 +49,7 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.commons.enums.VersioningState;
 import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
 import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
 import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
 import org.apache.chemistry.opencmis.commons.server.CmisService;
 import org.apache.chemistry.opencmis.commons.server.ObjectInfo;
@@ -529,6 +530,39 @@ public class CmisServiceWrapper<T extend
             throw createCmisException(e);
         }
     }
+    
+    public void createTypeDefinition(String repositoryId, Holder<TypeDefinition> type, ExtensionsData extension) {
+        checkRepositoryId(repositoryId);
+        // TODO: check type
+
+        try {
+             service.createTypeDefinition(repositoryId,  type, extension);
+        } catch (Exception e) {
+            throw createCmisException(e);
+        }
+    }
+
+    public void updateTypeDefinition(String repositoryId, Holder<TypeDefinition> type, ExtensionsData extension) {
+        checkRepositoryId(repositoryId);
+        // TODO: check type
+
+        try {
+             service.updateTypeDefinition(repositoryId,  type, extension);
+        } catch (Exception e) {
+            throw createCmisException(e);
+        }
+    }
+
+    public void deleteTypeDefinition(String repositoryId, String typeId, ExtensionsData extension) {
+        checkRepositoryId(repositoryId);
+        // TODO: check typeId
+
+        try {
+             service.deleteTypeDefinition(repositoryId,  typeId, extension);
+        } catch (Exception e) {
+            throw createCmisException(e);
+        }
+    }
 
     // --- navigation service ---