You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2008/07/23 07:59:49 UTC

svn commit: r678998 - in /incubator/sling/trunk/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal: ContentLoader.java Loader.java

Author: cziegeler
Date: Tue Jul 22 22:59:48 2008
New Revision: 678998

URL: http://svn.apache.org/viewvc?rev=678998&view=rev
Log:
SLING-578 : Create intermediate nodes with type sling:Folder
SLING-579 : Allow additional content information for files.

Modified:
    incubator/sling/trunk/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/ContentLoader.java
    incubator/sling/trunk/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/Loader.java

Modified: incubator/sling/trunk/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/ContentLoader.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/ContentLoader.java?rev=678998&r1=678997&r2=678998&view=diff
==============================================================================
--- incubator/sling/trunk/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/ContentLoader.java (original)
+++ incubator/sling/trunk/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/ContentLoader.java Tue Jul 22 22:59:48 2008
@@ -60,6 +60,8 @@
 
     private boolean isRootNodeImport;
 
+    private boolean ignoreOverwriteFlag = false;
+
     // default content type for createFile()
     private static final String DEFAULT_CONTENT_TYPE = "application/octet-stream";
 
@@ -119,6 +121,10 @@
         this.versionables.clear();
     }
 
+    public void setIgnoreOverwriteFlag(boolean flag) {
+        this.ignoreOverwriteFlag = flag;
+    }
+
     /**
      * Get the created root node.
      */
@@ -172,7 +178,7 @@
         // if we are in root node import mode, we don't create the root top level node!
         if ( !isRootNodeImport || this.parentNodeStack.size() > 1 ) {
             // if node already exists but should be overwritten, delete it
-            if (this.configuration.isOverwrite() && parentNode.hasNode(name)) {
+            if (!this.ignoreOverwriteFlag && this.configuration.isOverwrite() && parentNode.hasNode(name)) {
                 parentNode.getNode(name).remove();
             }
 
@@ -185,7 +191,7 @@
 
             } else if (primaryNodeType == null) {
 
-                // node explicit node type, use repository default
+                // no explicit node type, use repository default
                 node = parentNode.addNode(name);
 
             } else {

Modified: incubator/sling/trunk/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/Loader.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/Loader.java?rev=678998&r1=678997&r2=678998&view=diff
==============================================================================
--- incubator/sling/trunk/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/Loader.java (original)
+++ incubator/sling/trunk/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/Loader.java Tue Jul 22 22:59:48 2008
@@ -313,8 +313,7 @@
             if (entry.endsWith("/")) {
 
                 // dir, check for node descriptor , else create dir
-                String base = entry.substring(0, entry.length() - 1);
-                String name = getName(base);
+                final String base = entry.substring(0, entry.length() - 1);
 
                 URL nodeDescriptor = null;
                 for (String ext : this.contentCreator.getImportProviders().keySet()) {
@@ -327,6 +326,7 @@
                 // if we have a descriptor, which has not been processed yet,
                 // otherwise call createFolder, which creates an nt:folder or
                 // returns an existing node (created by a descriptor)
+                final String name = getName(base);
                 Node node = null;
                 if (nodeDescriptor != null) {
                     node = processedEntries.get(nodeDescriptor);
@@ -347,28 +347,52 @@
             } else {
 
                 // file => create file
-                URL file = bundle.getEntry(entry);
+                final URL file = bundle.getEntry(entry);
                 if (processedEntries.containsKey(file)) {
                     // this is a consumed node descriptor
                     continue;
                 }
+                final String name = getName(entry);
+
+                // file, check for node descriptor , else create dir
+                URL nodeDescriptor = null;
+                for (String ext : this.contentCreator.getImportProviders().keySet()) {
+                    nodeDescriptor = bundle.getEntry(entry + ext);
+                    if (nodeDescriptor != null) {
+                        break;
+                    }
+                }
 
                 // install if it is a descriptor
                 boolean foundProvider = this.contentCreator.getImportProvider(entry) != null;
 
+                Node node = null;
                 if (foundProvider) {
-                    Node node = null;
-                    if ((node = createNode(parent, getName(entry), file, configuration)) != null) {
+                    if ((node = createNode(parent, name, file, configuration)) != null) {
                         processedEntries.put(file, node);
-                        continue;
                     }
                 }
 
                 // otherwise just place as file
-                try {
-                    createFile(configuration, parent, file);
-                } catch (IOException ioe) {
-                    log.warn("Cannot create file node for {}", file, ioe);
+                if ( node == null ) {
+                    try {
+                        createFile(configuration, parent, file);
+                        node = parent.getNode(name);
+                    } catch (IOException ioe) {
+                        log.warn("Cannot create file node for {}", file, ioe);
+                    }
+                }
+                // if we have a descriptor, which has not been processed yet,
+                // process it
+                if (nodeDescriptor != null && processedEntries.get(nodeDescriptor) == null ) {
+                    try {
+                        this.contentCreator.setIgnoreOverwriteFlag(true);
+                        node = createNode(parent, name, nodeDescriptor,
+                                          configuration);
+                        processedEntries.put(nodeDescriptor, node);
+                    } finally {
+                        this.contentCreator.setIgnoreOverwriteFlag(false);
+                    }
                 }
             }
         }
@@ -463,7 +487,7 @@
             }
         }
 
-        return parent.addNode(name, "nt:folder");
+        return parent.addNode(name, "sling:Folder");
     }
 
     /**