You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by md...@apache.org on 2012/08/30 12:43:35 UTC

svn commit: r1378879 - in /chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr: ./ impl/

Author: mduerig
Date: Thu Aug 30 10:43:34 2012
New Revision: 1378879

URL: http://svn.apache.org/viewvc?rev=1378879&view=rev
Log:
CMIS-562: DefaultDocumentTypeHandler.createDocument is not open for extensions
Applied slightly edited patch. Thanks Ivan Vasiliev for the patch.

Modified:
    chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrRepository.java
    chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrServiceFactory.java
    chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/DefaultDocumentTypeHandler.java
    chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/DefaultFolderTypeHandler.java

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrRepository.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrRepository.java?rev=1378879&r1=1378878&r2=1378879&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrRepository.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrRepository.java Thu Aug 30 10:43:34 2012
@@ -92,10 +92,10 @@ import org.slf4j.LoggerFactory;
 public class JcrRepository {
     private static final Logger log = LoggerFactory.getLogger(JcrRepository.class);
 
-    private final Repository repository;
-    private final JcrTypeManager typeManager;
-    private final PathManager pathManager;
-    private final JcrTypeHandlerManager typeHandlerManager;
+    protected final Repository repository;
+    protected final JcrTypeManager typeManager;
+    protected final PathManager pathManager;
+    protected final JcrTypeHandlerManager typeHandlerManager;
 
     /**
      * Create a new <code>JcrRepository</code> instance backed by a JCR repository.
@@ -1114,4 +1114,21 @@ public class JcrRepository {
 
         return result;
     }
+
+
+    public Repository getRepository() {
+        return repository;
+    }
+
+    public JcrTypeManager getTypeManager() {
+        return typeManager;
+    }
+
+    public PathManager getPathManager() {
+        return pathManager;
+    }
+
+    public JcrTypeHandlerManager getTypeHandlerManager() {
+        return typeHandlerManager;
+    }
 }

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrServiceFactory.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrServiceFactory.java?rev=1378879&r1=1378878&r2=1378879&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrServiceFactory.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/JcrServiceFactory.java Thu Aug 30 10:43:34 2012
@@ -19,6 +19,19 @@
  */
 package org.apache.chemistry.opencmis.jcr;
 
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.imageio.spi.ServiceRegistry;
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.RepositoryFactory;
+
 import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
 import org.apache.chemistry.opencmis.commons.impl.server.AbstractServiceFactory;
 import org.apache.chemistry.opencmis.commons.server.CallContext;
@@ -32,18 +45,6 @@ import org.apache.chemistry.opencmis.ser
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.imageio.spi.ServiceRegistry;
-import javax.jcr.Repository;
-import javax.jcr.RepositoryException;
-import javax.jcr.RepositoryFactory;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
 /**
  * A {@link CmisServiceFactory} implementation which returns {@link JcrService} instances.  
  */
@@ -58,10 +59,10 @@ public class JcrServiceFactory extends A
     public static final BigInteger DEFAULT_MAX_ITEMS_OBJECTS = BigInteger.valueOf(200);
     public static final BigInteger DEFAULT_DEPTH_OBJECTS = BigInteger.valueOf(10);
 
-    private JcrTypeManager typeManager;
-    private Map<String, String> jcrConfig;
-    private String mountPath;
-    private JcrRepository jcrRepository;
+    protected JcrTypeManager typeManager;
+    protected Map<String, String> jcrConfig;
+    protected String mountPath;
+    protected JcrRepository jcrRepository;
 
     @Override
     public void init(Map<String, String> parameters) {
@@ -211,4 +212,13 @@ public class JcrServiceFactory extends A
         return result.toString();
     }
 
+    public JcrTypeManager getTypeManager() {
+        return typeManager;
+    }
+
+
+    public JcrRepository getJcrRepository() {
+        return jcrRepository;
+    }
+
 }

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/DefaultDocumentTypeHandler.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/DefaultDocumentTypeHandler.java?rev=1378879&r1=1378878&r2=1378879&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/DefaultDocumentTypeHandler.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/DefaultDocumentTypeHandler.java Thu Aug 30 10:43:34 2012
@@ -18,6 +18,17 @@
  */
 package org.apache.chemistry.opencmis.jcr.impl;
 
+import java.io.BufferedInputStream;
+import java.io.IOException;
+
+import javax.jcr.Binary;
+import javax.jcr.Node;
+import javax.jcr.Property;
+import javax.jcr.RepositoryException;
+import javax.jcr.nodetype.NodeType;
+import javax.jcr.version.Version;
+import javax.jcr.version.VersionManager;
+
 import org.apache.chemistry.opencmis.commons.data.ContentStream;
 import org.apache.chemistry.opencmis.commons.data.Properties;
 import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
@@ -38,16 +49,6 @@ import org.apache.chemistry.opencmis.jcr
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.jcr.Binary;
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.RepositoryException;
-import javax.jcr.nodetype.NodeType;
-import javax.jcr.version.Version;
-import javax.jcr.version.VersionManager;
-import java.io.BufferedInputStream;
-import java.io.IOException;
-
 /**
  * Type handler that provides cmis:document.
  */
@@ -98,45 +99,20 @@ public class DefaultDocumentTypeHandler 
         return node.isNodeType(NodeType.NT_FILE) && node.isNodeType(NodeType.MIX_SIMPLE_VERSIONABLE);
     }
 
-    public JcrNode createDocument(JcrFolder parentFolder, String name, Properties properties, ContentStream contentStream, VersioningState versioningState) {
+    public JcrNode createDocument(JcrFolder parentFolder, String name, Properties properties,
+                                  ContentStream contentStream, VersioningState versioningState) {
         try {
             Node fileNode = parentFolder.getNode().addNode(name, NodeType.NT_FILE);
-            if (versioningState != VersioningState.NONE) {
-                fileNode.addMixin(NodeType.MIX_SIMPLE_VERSIONABLE);
-            }
-
+            addFileNodeMixins(fileNode,versioningState);
             Node contentNode = fileNode.addNode(Node.JCR_CONTENT, NodeType.NT_RESOURCE);
-            contentNode.addMixin(NodeType.MIX_CREATED);
-
+            addContentNodeMixins(contentNode);
             // compile the properties
-            JcrFolder.setProperties(contentNode, getTypeDefinition(), properties);
-
+            setContentNodeProperties(contentNode, properties);
             // write content, if available
-            Binary binary = contentStream == null || contentStream.getStream() == null
-                    ? JcrBinary.EMPTY
-                    : new JcrBinary(new BufferedInputStream(contentStream.getStream()));
-            try {
-                contentNode.setProperty(Property.JCR_DATA, binary);
-                if (contentStream != null && contentStream.getMimeType() != null) {
-                    contentNode.setProperty(Property.JCR_MIMETYPE, contentStream.getMimeType());
-                }
-            }
-            finally {
-                binary.dispose();
-            }
-
+            updateContentNode(contentStream, contentNode);
+            //save changes
             fileNode.getSession().save();
-            JcrNode jcrFileNode = getJcrNode(fileNode);
-            if (versioningState == VersioningState.NONE) {
-                return jcrFileNode;
-            }
-
-            JcrVersionBase jcrVersion = jcrFileNode.asVersion();
-            if (versioningState == VersioningState.MINOR || versioningState == VersioningState.MAJOR) {
-                return jcrVersion.checkin(null, null, "auto checkin");
-            } else {
-                return jcrVersion.getPwc();
-            }
+            return getJcrNode(fileNode, versioningState);
         }
         catch (RepositoryException e) {
             log.debug(e.getMessage(), e);
@@ -147,4 +123,51 @@ public class DefaultDocumentTypeHandler 
             throw new CmisStorageException(e.getMessage(), e);
         }
     }
+
+    protected JcrNode getJcrNode(Node fileNode, VersioningState versioningState)
+            throws RepositoryException {
+        JcrNode jcrFileNode = getJcrNode(fileNode);
+        if (versioningState == VersioningState.NONE) {
+            return jcrFileNode;
+        }
+
+        JcrVersionBase jcrVersion = jcrFileNode.asVersion();
+        if (versioningState == VersioningState.MINOR || versioningState == VersioningState.MAJOR) {
+            return jcrVersion.checkin(null, null, "auto checkin");
+        } else {
+            return jcrVersion.getPwc();
+        }
+    }
+
+    protected void updateContentNode(ContentStream contentStream, Node contentNode)
+            throws IOException, RepositoryException {
+        Binary binary = contentStream == null || contentStream.getStream() == null
+                ? JcrBinary.EMPTY
+                : new JcrBinary(new BufferedInputStream(contentStream.getStream()));
+        try {
+            contentNode.setProperty(Property.JCR_DATA, binary);
+            if (contentStream != null && contentStream.getMimeType() != null) {
+                contentNode.setProperty(Property.JCR_MIMETYPE, contentStream.getMimeType());
+            }
+        }
+        finally {
+            binary.dispose();
+        }
+    }
+
+    protected void setContentNodeProperties(Node contentNode, Properties properties) {
+        JcrFolder.setProperties(contentNode, getTypeDefinition(), properties);
+    }
+
+    protected void addContentNodeMixins(Node contentNode) throws RepositoryException {
+        contentNode.addMixin(NodeType.MIX_CREATED);
+    }
+
+    protected void addFileNodeMixins(Node fileNode, VersioningState versioningState)
+            throws RepositoryException {
+        if (versioningState != VersioningState.NONE) {
+            fileNode.addMixin(NodeType.MIX_SIMPLE_VERSIONABLE);
+        }
+    }
+
 }

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/DefaultFolderTypeHandler.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/DefaultFolderTypeHandler.java?rev=1378879&r1=1378878&r2=1378879&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/DefaultFolderTypeHandler.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-jcr/src/main/java/org/apache/chemistry/opencmis/jcr/impl/DefaultFolderTypeHandler.java Thu Aug 30 10:43:34 2012
@@ -18,6 +18,10 @@
  */
 package org.apache.chemistry.opencmis.jcr.impl;
 
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+import javax.jcr.nodetype.NodeType;
+
 import org.apache.chemistry.opencmis.commons.data.Properties;
 import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
 import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
@@ -30,10 +34,6 @@ import org.apache.chemistry.opencmis.jcr
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.nodetype.NodeType;
-
 /**
  * Type handler that provides cmis:folder.
  */
@@ -91,12 +91,10 @@ public class DefaultFolderTypeHandler ex
     public JcrFolder createFolder(JcrFolder parentFolder, String name, Properties properties) {
         try {
             Node node = parentFolder.getNode().addNode(name, NodeType.NT_FOLDER);
-            node.addMixin(NodeType.MIX_CREATED);
-            node.addMixin(NodeType.MIX_LAST_MODIFIED);
-
+            addMixins(node);
             // compile the properties
-            JcrFolder.setProperties(node, getTypeDefinition(), properties);
-
+            updateProperties(node, properties);
+            //save changes
             node.getSession().save();
             return getJcrNode(node);
         }
@@ -105,4 +103,13 @@ public class DefaultFolderTypeHandler ex
             throw new CmisStorageException(e.getMessage(), e);
         }
     }
+
+    protected void updateProperties(Node node, Properties properties) {
+        JcrFolder.setProperties(node, getTypeDefinition(), properties);
+    }
+
+    protected void addMixins(Node node) throws RepositoryException {
+        node.addMixin(NodeType.MIX_CREATED);
+        node.addMixin(NodeType.MIX_LAST_MODIFIED);
+    }
 }