You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ie...@apache.org on 2009/08/06 19:46:03 UTC

svn commit: r801743 - /sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/SlingFileUploadHandler.java

Author: ieb
Date: Thu Aug  6 17:46:03 2009
New Revision: 801743

URL: http://svn.apache.org/viewvc?rev=801743&view=rev
Log:
SLING-1073 Patch from Arthur Taylor
Fixes re-creation of node on upload loosing potential versioning information.
Thanks

Modified:
    sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/SlingFileUploadHandler.java

Modified: sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/SlingFileUploadHandler.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/SlingFileUploadHandler.java?rev=801743&r1=801742&r2=801743&view=diff
==============================================================================
--- sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/SlingFileUploadHandler.java (original)
+++ sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/SlingFileUploadHandler.java Thu Aug  6 17:46:03 2009
@@ -155,17 +155,11 @@
                 typeHint = createNtFile ? NT_FILE : NT_RESOURCE;
             }
 
-            // remove node
-            if (parent.hasNode(name)) {
-                parent.getNode(name).remove();
-            }
-
             // create nt:file node if needed
             Node resParent;
             if (createNtFile) {
                 // create nt:file
-                resParent = parent.addNode(name, typeHint);
-                changes.add(Modification.onCreated(resParent.getPath()));
+                resParent = getOrCreateChildNode(parent, name, typeHint, changes);
                 name = JCR_CONTENT;
                 typeHint = NT_RESOURCE;
             } else {
@@ -173,8 +167,7 @@
             }
 
             // create resource node
-            Node res = resParent.addNode(name, typeHint);
-            changes.add(Modification.onCreated(res.getPath()));
+            Node res = getOrCreateChildNode(resParent, name, typeHint, changes);
 
             // get content type
             String contentType = value.getContentType();
@@ -208,4 +201,29 @@
             }
 		}
     }
+
+    private Node getOrCreateChildNode(Node parent, String name, String typeHint,
+            List<Modification> changes) throws RepositoryException {
+        Node result;
+        if (parent.hasNode(name)) {
+            Node existing = parent.getNode(name);
+            if (!existing.isNodeType(typeHint)) {
+                existing.remove();
+                result = createWithChanges(parent, name, typeHint, changes);
+            } else {
+                result = existing;
+            }
+        } else {
+            result = createWithChanges(parent, name, typeHint, changes);
+        }
+        return result;
+    }
+
+    private Node createWithChanges(Node parent, String name, String typeHint, 
+            List<Modification> changes) throws RepositoryException {
+        Node result = parent.addNode(name, typeHint);
+        changes.add(Modification.onCreated(result.getPath()));
+        return result;
+    }
+
 }
\ No newline at end of file