You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by st...@apache.org on 2013/09/19 14:41:35 UTC

svn commit: r1524716 - in /sling/branches/tooling-ide-vlt/tooling/ide: api/src/org/apache/sling/ide/serialization/ eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ impl-vlt/src/org/apache/sling/ide/impl/vlt/ impl-vlt/src/org/apache/sling/ide/im...

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);