Author: stefanegli
Date: Thu Sep 19 12:41:35 2013
New Revision: 1524716

URL: http://svn.apache.org/r1524716
Log:
SLING-3085 : support nt:resource/jcr:data patterns to be treated as a FILE (for 
serialization)

Modified:
    
sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationKindManager.java
    
sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportRepositoryContentAction.java
    
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/AddNodeCommand.java
    
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/GetNodeCommand.java
    
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/VltSerializationDataBuilder.java

Modified: 
sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationKindManager.java
URL: 
http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationKindManager.java?rev=1524716&r1=1524715&r2=1524716&view=diff
==============================================================================
--- 
sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationKindManager.java
 (original)
+++ 
sling/branches/tooling-ide-vlt/tooling/ide/api/src/org/apache/sling/ide/serialization/SerializationKindManager.java
 Thu Sep 19 12:41:35 2013
@@ -81,6 +81,10 @@ public class SerializationKindManager {
         if (Repository.NT_FILE.equals(nodeType)) {
             return SerializationKind.FILE;
         }
+        
+        if (Repository.NT_RESOURCE.equals(nodeType)) {
+               return SerializationKind.FILE;
+        }
 
         if (Repository.NT_FOLDER.equals(nodeType)) {
             return SerializationKind.FOLDER;

Modified: 
sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportRepositoryContentAction.java
URL: 
http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportRepositoryContentAction.java?rev=1524716&r1=1524715&r2=1524716&view=diff
==============================================================================
--- 
sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportRepositoryContentAction.java
 (original)
+++ 
sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportRepositoryContentAction.java
 Thu Sep 19 12:41:35 2013
@@ -21,6 +21,7 @@ import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.lang.reflect.InvocationTargetException;
+import java.util.Iterator;
 
 import org.apache.sling.ide.eclipse.core.ISlingLaunchpadServer;
 import org.apache.sling.ide.eclipse.core.ProjectUtil;
@@ -39,6 +40,7 @@ import org.apache.sling.ide.transport.Re
 import org.apache.sling.ide.transport.RepositoryException;
 import org.apache.sling.ide.transport.ResourceProxy;
 import org.apache.sling.ide.transport.Result;
+import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
@@ -200,57 +202,65 @@ public class ImportRepositoryContentActi
         System.out.println("For resource at path " + resource.getPath() + " 
got serialization data "
                 + serializationData);
 
-        if (serializationData == null) {
-            System.err.println("Skipping resource at " + resource.getPath() + 
" since we got no serialization data.");
-            return;
-        }
-
-        IPath fileOrFolderPath = 
projectRelativePath.append(serializationData.getFileOrFolderNameHint());
-
-        switch (serializationData.getSerializationKind()) {
-            case FILE: {
-                byte[] contents = 
executeCommand(repository.newGetNodeCommand(path));
-                importFile(project, fileOrFolderPath, contents);
-
-                if (serializationData.hasContents()) {
-                    // TODO - should we abstract out .dir serialization?
-                    IPath directoryPath = 
fileOrFolderPath.addFileExtension("dir");
-                    createFolder(project, directoryPath);
-                    createFile(project, 
directoryPath.append(serializationData.getNameHint()),
-                            serializationData.getContents());
-                }
-                break;
-            }
-            case FOLDER:
-            case METADATA_PARTIAL: {
-                createFolder(project, fileOrFolderPath);
-                if (serializationData.hasContents()) {
-                    createFile(project, 
fileOrFolderPath.append(serializationData.getNameHint()),
-                            serializationData.getContents());
-                }
-                break;
-            }
-
-            case METADATA_FULL: {
-                if (serializationData.hasContents()) {
-                    createFile(project, fileOrFolderPath, 
serializationData.getContents());
-                }
-                break;
-            }
-        }
-
-        System.out.println("Children: " + resource.getChildren());
-
-        if (serializationData.getSerializationKind() == 
SerializationKind.METADATA_FULL) {
-            return;
+        if (serializationData != null) {
+       
+               IPath fileOrFolderPath = 
projectRelativePath.append(serializationData.getFileOrFolderNameHint());
+       
+               switch (serializationData.getSerializationKind()) {
+                   case FILE: {
+                       byte[] contents = 
executeCommand(repository.newGetNodeCommand(path));
+                       importFile(project, fileOrFolderPath, contents);
+       
+                       if (serializationData.hasContents()) {
+                           // TODO - should we abstract out .dir serialization?
+                           IPath directoryPath = 
fileOrFolderPath.addFileExtension("dir");
+                           createFolder(project, directoryPath);
+                           createFile(project, 
directoryPath.append(serializationData.getNameHint()),
+                                   serializationData.getContents());
+                           
+                           // filter out the child of type 
Repository.NT_RESOURCE
+                           for (Iterator<ResourceProxy> it = 
resource.getChildren().iterator(); it
+                                                               .hasNext();) {
+                               ResourceProxy child = it.next();
+                               if 
(Repository.NT_RESOURCE.equals(child.getProperties().get(Repository.JCR_PRIMARY_TYPE)))
 {
+                                       it.remove();
+                                       break;
+                               }
+                                               }
+                       }
+                       break;
+                   }
+                   case FOLDER:
+                   case METADATA_PARTIAL: {
+                       createFolder(project, fileOrFolderPath);
+                       if (serializationData.hasContents()) {
+                           createFile(project, 
fileOrFolderPath.append(serializationData.getNameHint()),
+                                   serializationData.getContents());
+                       }
+                       break;
+                   }
+       
+                   case METADATA_FULL: {
+                       if (serializationData.hasContents()) {
+                           createFile(project, fileOrFolderPath, 
serializationData.getContents());
+                       }
+                       break;
+                   }
+               }
+       
+               System.out.println("Children: " + resource.getChildren());
+       
+               if (serializationData.getSerializationKind() == 
SerializationKind.METADATA_FULL) {
+                   return;
+               }
         }
 
         for (ResourceProxy child : resource.getChildren()) {
 
             // TODO - still needed?
-            if 
(Repository.NT_RESOURCE.equals(child.getProperties().get(Repository.JCR_PRIMARY_TYPE)))
 {
-                continue;
-            }
+//            if 
(Repository.NT_RESOURCE.equals(child.getProperties().get(Repository.JCR_PRIMARY_TYPE)))
 {
+//                continue;
+//            }
 
             if (filter != null) {
                 FilterResult filterResult = filter.filter(contentSyncRoot, 
child.getPath(),
@@ -296,7 +306,23 @@ public class ImportRepositoryContentActi
             destinationFile.setContents(new ByteArrayInputStream(node), 
IResource.KEEP_HISTORY, null);
         } else {
             /* TODO progress monitor */
-            destinationFile.create(new ByteArrayInputStream(node), true, null);
+               if (!destinationFile.getParent().exists()) {
+                       createParents(destinationFile.getParent());
+               }
+               destinationFile.create(new ByteArrayInputStream(node), true, 
null);
         }
     }
+    
+    private void createParents(IContainer container) throws CoreException {
+       if (container.exists()) {
+               return;
+       }
+       if (!(container instanceof IFolder)) {
+               return;
+       }
+       createParents(container.getParent());
+       IFolder parentFolder = (IFolder)container;
+       parentFolder.create(true, true, null);
+    }
+
 }
\ No newline at end of file

Modified: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/AddNodeCommand.java
URL: 
http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/AddNodeCommand.java?rev=1524716&r1=1524715&r2=1524716&view=diff
==============================================================================
--- 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/AddNodeCommand.java
 (original)
+++ 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/AddNodeCommand.java
 Thu Sep 19 12:41:35 2013
@@ -79,7 +79,11 @@ public class AddNodeCommand extends JcrC
             if ( node.hasNode(JCR_CONTENT)) {
                 contentNode = node.getNode(JCR_CONTENT);
             } else {
-                contentNode = node.addNode(JCR_CONTENT, NT_RESOURCE);
+               if 
(node.getProperty(JCR_PRIMARYTYPE).getString().equals(NT_RESOURCE)) {
+                       contentNode = node;
+               } else {
+                       contentNode = node.addNode(JCR_CONTENT, NT_RESOURCE);
+               }
             }
             
             Binary binary = session.getValueFactory().createBinary(new 
FileInputStream(file));

Modified: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/GetNodeCommand.java
URL: 
http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/GetNodeCommand.java?rev=1524716&r1=1524715&r2=1524716&view=diff
==============================================================================
--- 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/GetNodeCommand.java
 (original)
+++ 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/GetNodeCommand.java
 Thu Sep 19 12:41:35 2013
@@ -42,18 +42,23 @@ public class GetNodeCommand extends JcrC
 
         Node node = session.getNode(getPath());
 
-        if (!node.hasNode("jcr:content")) {
-            return null;
+        Property property;
+        if (node.hasProperty("jcr:data")) {
+               property = node.getProperty("jcr:data");
+        } else {
+               if (!node.hasNode("jcr:content")) {
+                   return null;
+               }
+       
+               Node contentNode = node.getNode("jcr:content");
+       
+               if (!contentNode.hasProperty("jcr:data")) {
+                   return null;
+               }
+       
+               property = contentNode.getProperty("jcr:data");
         }
 
-        Node contentNode = node.getNode("jcr:content");
-
-        if (!contentNode.hasProperty("jcr:data")) {
-            return null;
-        }
-
-        Property property = contentNode.getProperty("jcr:data");
-
         if (property.getType() == PropertyType.BINARY) {
             Binary binary = property.getBinary();
             ByteArrayOutputStream out = new ByteArrayOutputStream();

Modified: 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/VltSerializationDataBuilder.java
URL: 
http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/VltSerializationDataBuilder.java?rev=1524716&r1=1524715&r2=1524716&view=diff
==============================================================================
--- 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/VltSerializationDataBuilder.java
 (original)
+++ 
sling/branches/tooling-ide-vlt/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/VltSerializationDataBuilder.java
 Thu Sep 19 12:41:35 2013
@@ -139,8 +139,10 @@ public class VltSerializationDataBuilder
 
             Aggregate aggregate = vaultFile.getAggregate();
 
-            if (aggregate == null)
-                throw new IllegalArgumentException("No aggregate found for 
path " + resource.getPath());
+            if (aggregate == null) {
+               System.err.println("No aggregate found for path " + 
resource.getPath());
+               return null;
+            }
 
             NodeType[] mixinNodeTypes = 
aggregate.getNode().getMixinNodeTypes();
             List<String> mixinNodeTypeNames = new 
ArrayList<String>(mixinNodeTypes.length);


Reply via email to