You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2014/05/13 17:12:23 UTC

svn commit: r1594244 - in /sling/trunk/tooling/ide: eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/ eclipse-test/src/org/apache/sling/ide/test/impl/ impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/serialization/ impl-vlt-test/src...

Author: rombert
Date: Tue May 13 15:12:23 2014
New Revision: 1594244

URL: http://svn.apache.org/r1594244
Log:
SLING-3122 - Incorrect filtering for full coverage nodes

Properly take into account the real repository path when filtering
resources to be published into the Sling repository.

Added:
    sling/trunk/tooling/ide/eclipse-test/src/org/apache/sling/ide/test/impl/filter-only-content-test-root-en.xml   (with props)
    sling/trunk/tooling/ide/impl-vlt-test/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/file.xml   (with props)
Modified:
    sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadBehaviour.java
    sling/trunk/tooling/ide/eclipse-test/src/org/apache/sling/ide/test/impl/JcrFullCoverageAggregatesDeploymentTest.java
    sling/trunk/tooling/ide/impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManagerTest.java
    sling/trunk/tooling/ide/impl-vlt/META-INF/MANIFEST.MF
    sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManager.java

Modified: sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadBehaviour.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadBehaviour.java?rev=1594244&r1=1594243&r2=1594244&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadBehaviour.java (original)
+++ sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadBehaviour.java Tue May 13 15:12:23 2014
@@ -165,6 +165,10 @@ public class SlingLaunchpadBehaviour ext
 
         PluginLogger logger = Activator.getDefault().getPluginLogger();
         
+        if (serializationManager == null) {
+            serializationManager = Activator.getDefault().getSerializationManager();
+        }
+
         logger.trace(traceOperation(kind, deltaKind, module));
 
         if (deltaKind==ServerBehaviourDelegate.NO_CHANGE) {
@@ -542,14 +546,13 @@ public class SlingLaunchpadBehaviour ext
         File syncDirectoryAsFile = ProjectUtil.getSyncDirectoryFullPath(res.getProject()).toFile();
         IFolder syncDirectory = ProjectUtil.getSyncDirectory(res.getProject());
 
-        if (serializationManager(repository, syncDirectoryAsFile).isSerializationFile(info.getLocation())) {
+        if (serializationManager.isSerializationFile(info.getLocation())) {
             InputStream contents = null;
             try {
                 IFile file = (IFile) resource.getAdapter(IFile.class);
                 contents = file.getContents();
                 String resourceLocation = file.getFullPath().makeRelativeTo(syncDirectory.getFullPath()).toPortableString();
-                ResourceProxy resourceProxy = serializationManager(repository, syncDirectoryAsFile)
-                        .readSerializationData(resourceLocation, contents);
+                ResourceProxy resourceProxy = serializationManager.readSerializationData(resourceLocation, contents);
                 // TODO - not sure if this 100% correct, but we definitely should not refer to the FileInfo as the
                 // .serialization file, since for nt:file/nt:resource nodes this will overwrite the file contents
                 String primaryType = (String) resourceProxy.getProperties().get(Repository.JCR_PRIMARY_TYPE);
@@ -644,14 +647,12 @@ public class SlingLaunchpadBehaviour ext
 
         IProject project = file.getProject();
 
-        String syncDirectory = ProjectUtil.getSyncDirectoryValue(project);
-        File syncDirectoryAsFile = ProjectUtil.getSyncDirectoryFile(project);
-
-        Filter filter = loadFilter(project.getFolder(syncDirectory));
+        IFolder syncFolder = project.getFolder(ProjectUtil.getSyncDirectoryValue(project));
+        Filter filter = loadFilter(syncFolder);
 
         if (filter != null) {
-            FilterResult filterResult = getFilterResult(resource, filter, syncDirectoryAsFile,
-                    repository);
+            FilterResult filterResult = getFilterResult(resource, filter, ProjectUtil.getSyncDirectoryFile(project),
+                    syncFolder, repository);
             if (filterResult == FilterResult.DENY || filterResult == FilterResult.PREREQUISITE) {
                 return null;
             }
@@ -685,15 +686,14 @@ public class SlingLaunchpadBehaviour ext
     }
 
     private FilterResult getFilterResult(IModuleResource resource, Filter filter, File contentSyncRoot,
+            IFolder syncFolder,
             Repository repository) throws SerializationException {
 
-        String filePath = resource.getModuleRelativePath().toOSString();
-		String absFilePath = new File(contentSyncRoot, filePath).getAbsolutePath();
-        if (serializationManager(repository, contentSyncRoot).isSerializationFile(absFilePath)) {
-            filePath = serializationManager.getBaseResourcePath(filePath);
-        }
+        String absFilePath = new File(contentSyncRoot, resource.getModuleRelativePath().toOSString()).getAbsolutePath();
+        String filePath = serializationManager.getBaseResourcePath(absFilePath);
         
-        String repositoryPath = resource.getModuleRelativePath().toPortableString();
+        IPath osPath = Path.fromOSString(filePath);
+        String repositoryPath = osPath.makeRelativeTo(syncFolder.getLocation()).toPortableString();
 
         Activator.getDefault().getPluginLogger().trace("Filtering by {0} for {1}", repositoryPath, resource);
 
@@ -723,7 +723,8 @@ public class SlingLaunchpadBehaviour ext
         Filter filter = loadFilter(syncDirectory);
 
         if (filter != null) {
-            FilterResult filterResult = getFilterResult(resource, filter, syncDirectoryAsFile, repository);
+            FilterResult filterResult = getFilterResult(resource, filter, syncDirectoryAsFile, syncDirectory,
+                    repository);
             if (filterResult == FilterResult.DENY || filterResult == FilterResult.PREREQUISITE) {
                 return null;
             }
@@ -758,15 +759,4 @@ public class SlingLaunchpadBehaviour ext
         return filter;
     }
 
-    private SerializationManager serializationManager(Repository repository, File contentSyncRoot)
-            throws SerializationException {
-        if (serializationManager == null) {
-            serializationManager = Activator.getDefault().getSerializationManager();
-//            serializationManager.init(repository, contentSyncRoot);
-        }
-
-        return serializationManager;
-    }
-
-
 }

Modified: sling/trunk/tooling/ide/eclipse-test/src/org/apache/sling/ide/test/impl/JcrFullCoverageAggregatesDeploymentTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-test/src/org/apache/sling/ide/test/impl/JcrFullCoverageAggregatesDeploymentTest.java?rev=1594244&r1=1594243&r2=1594244&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-test/src/org/apache/sling/ide/test/impl/JcrFullCoverageAggregatesDeploymentTest.java (original)
+++ sling/trunk/tooling/ide/eclipse-test/src/org/apache/sling/ide/test/impl/JcrFullCoverageAggregatesDeploymentTest.java Tue May 13 15:12:23 2014
@@ -227,6 +227,57 @@ public class JcrFullCoverageAggregatesDe
 
     }
 
+    @Test
+    public void deployNestedFullCoverageAggregateAtFilterRoot() throws Exception {
+
+        wstServer.waitForServerToStart();
+
+        // create faceted project
+        IProject contentProject = projectRule.getProject();
+
+        ProjectAdapter project = new ProjectAdapter(contentProject);
+        project.addNatures("org.eclipse.wst.common.project.facet.core.nature");
+
+        // create filter.xml
+        InputStream filterXml = getClass().getResourceAsStream("filter-only-content-test-root-en.xml");
+        try {
+            project.createOrUpdateFile(Path.fromPortableString("META-INF/vault/filter.xml"), filterXml);
+        } finally {
+            IOUtils.closeQuietly(filterXml);
+        }
+
+        // create .content.xml structure
+        InputStream contentXml = getClass().getResourceAsStream("content-nested-structure.xml");
+        try {
+            project.createOrUpdateFile(Path.fromPortableString("jcr_root/content/test-root/en.xml"), contentXml);
+        } finally {
+            IOUtils.closeQuietly(contentXml);
+        }
+
+        // install content facet
+        project.installFacet("sling.content", "1.0");
+
+        // create prerequisite data
+        final RepositoryAccessor repo = new RepositoryAccessor(config);
+        repo.createNode("/content", "sling:Folder");
+        repo.createNode("/content/test-root", "sling:Folder");
+
+        ServerAdapter server = new ServerAdapter(wstServer.getServer());
+        server.installModule(contentProject);
+
+        Matcher<Node> postConditions = allOf(hasPath("/content/test-root/en"), hasPrimaryType("sling:Folder"),
+                hasMixinTypes("mix:language"), hasChildrenCount(3));
+
+        Poller poller = new Poller();
+        poller.pollUntil(new Callable<Node>() {
+            @Override
+            public Node call() throws RepositoryException {
+                return repo.getNode("/content/test-root/en");
+
+            }
+        }, postConditions);
+    }
+
     @After
     public void cleanup() throws Exception {
         new RepositoryAccessor(config).tryDeleteResource("/content/test-root");

Added: sling/trunk/tooling/ide/eclipse-test/src/org/apache/sling/ide/test/impl/filter-only-content-test-root-en.xml
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-test/src/org/apache/sling/ide/test/impl/filter-only-content-test-root-en.xml?rev=1594244&view=auto
==============================================================================
--- sling/trunk/tooling/ide/eclipse-test/src/org/apache/sling/ide/test/impl/filter-only-content-test-root-en.xml (added)
+++ sling/trunk/tooling/ide/eclipse-test/src/org/apache/sling/ide/test/impl/filter-only-content-test-root-en.xml Tue May 13 15:12:23 2014
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<workspaceFilter version="1.0">
+    <filter root="/content/test-root/en" />
+</workspaceFilter>
\ No newline at end of file

Propchange: sling/trunk/tooling/ide/eclipse-test/src/org/apache/sling/ide/test/impl/filter-only-content-test-root-en.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sling/trunk/tooling/ide/eclipse-test/src/org/apache/sling/ide/test/impl/filter-only-content-test-root-en.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Modified: sling/trunk/tooling/ide/impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManagerTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManagerTest.java?rev=1594244&r1=1594243&r2=1594244&view=diff
==============================================================================
--- sling/trunk/tooling/ide/impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManagerTest.java (original)
+++ sling/trunk/tooling/ide/impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManagerTest.java Tue May 13 15:12:23 2014
@@ -19,13 +19,24 @@ package org.apache.sling.ide.impl.vlt.se
 import static org.hamcrest.Matchers.is;
 import static org.junit.Assert.assertThat;
 
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.commons.io.IOUtils;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
 
 public class VltSerializationManagerTest {
 
     private VltSerializationManager serializationManager;
 
+    @Rule
+    public TemporaryFolder trash = new TemporaryFolder();
+
     @Before
     public void init() {
         serializationManager = new VltSerializationManager();
@@ -33,7 +44,7 @@ public class VltSerializationManagerTest
 
     @Test
     public void getSerializationFilePath_Root() {
-        assertThat(serializationManager.getBaseResourcePath(".content.xml"), is(""));
+        assertThat(serializationManager.getBaseResourcePath("/.content.xml"), is("/"));
     }
 
     @Test
@@ -41,4 +52,38 @@ public class VltSerializationManagerTest
         assertThat(serializationManager.getBaseResourcePath("/apps/sling/default/.content.xml"),
                 is("/apps/sling/default"));
     }
+
+    @Test
+    public void getSerializationFilePath_FullCoverageAggerate() throws IOException {
+
+        File contentFile = trash.newFile("default.xml");
+        InputStream in = getClass().getResourceAsStream("simple-content.xml");
+        FileOutputStream out = new FileOutputStream(contentFile);
+        try {
+            IOUtils.copy(in, out);
+        } finally {
+            IOUtils.closeQuietly(in);
+            IOUtils.closeQuietly(out);
+        }
+
+        assertThat(serializationManager.getBaseResourcePath(contentFile.getAbsolutePath()),
+                is(new File(contentFile.getParent(), "default").getAbsolutePath()));
+    }
+
+    @Test
+    public void getSerializationFilePath_XmlFile() throws IOException {
+
+        File contentFile = trash.newFile("file.xml");
+        InputStream in = getClass().getResourceAsStream("file.xml");
+        FileOutputStream out = new FileOutputStream(contentFile);
+        try {
+            IOUtils.copy(in, out);
+        } finally {
+            IOUtils.closeQuietly(in);
+            IOUtils.closeQuietly(out);
+        }
+
+        assertThat(serializationManager.getBaseResourcePath(contentFile.getAbsolutePath()),
+                is(contentFile.getAbsolutePath()));
+    }
 }

Added: sling/trunk/tooling/ide/impl-vlt-test/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/file.xml
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/impl-vlt-test/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/file.xml?rev=1594244&view=auto
==============================================================================
--- sling/trunk/tooling/ide/impl-vlt-test/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/file.xml (added)
+++ sling/trunk/tooling/ide/impl-vlt-test/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/file.xml Tue May 13 15:12:23 2014
@@ -0,0 +1,4 @@
+<root>
+    <child1></child1>
+    <child2/>
+</root>
\ No newline at end of file

Propchange: sling/trunk/tooling/ide/impl-vlt-test/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/file.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sling/trunk/tooling/ide/impl-vlt-test/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/file.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Modified: sling/trunk/tooling/ide/impl-vlt/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/impl-vlt/META-INF/MANIFEST.MF?rev=1594244&r1=1594243&r2=1594244&view=diff
==============================================================================
--- sling/trunk/tooling/ide/impl-vlt/META-INF/MANIFEST.MF (original)
+++ sling/trunk/tooling/ide/impl-vlt/META-INF/MANIFEST.MF Tue May 13 15:12:23 2014
@@ -8,6 +8,7 @@ Require-Bundle: org.eclipse.equinox.ds;b
  org.eclipse.osgi.services;bundle-version="3.2.100"
 Import-Package: javax.jcr,
  javax.jcr.nodetype,
+ org.apache.commons.io;version="2.0.1",
  org.apache.jackrabbit.util,
  org.apache.jackrabbit.vault.fs,
  org.apache.jackrabbit.vault.fs.api,

Modified: sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManager.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManager.java?rev=1594244&r1=1594243&r2=1594244&view=diff
==============================================================================
--- sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManager.java (original)
+++ sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/VltSerializationManager.java Tue May 13 15:12:23 2014
@@ -31,6 +31,7 @@ import javax.xml.parsers.ParserConfigura
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
 
+import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.vault.fs.Mounter;
 import org.apache.jackrabbit.vault.fs.api.RepositoryAddress;
 import org.apache.jackrabbit.vault.fs.api.SerializationType;
@@ -110,25 +111,39 @@ public class VltSerializationManager imp
         } catch (IOException e) {
             throw new RuntimeException(e);
         } finally {
-            if (in != null) {
-                try {
-                    in.close();
-                } catch (IOException e) {
-                    // don't care
-                }
-            }
+            IOUtils.closeQuietly(in);
         }
     }
 
     @Override
     public String getBaseResourcePath(String serializationFilePath) {
-        // TODO actually calculate the resource path, this fails for full coverage aggregates
-        if (Constants.DOT_CONTENT_XML.equals(serializationFilePath)) {
-            return "";
+
+        File file = new File(serializationFilePath);
+        String fileName = file.getName();
+        if (fileName.equals(Constants.DOT_CONTENT_XML)) {
+            return file.getParent();
+        }
+
+        if (!fileName.endsWith(EXTENSION_XML)) {
+            return file.getAbsolutePath();
         }
 
-        return serializationFilePath.substring(0, serializationFilePath.length()
-                - (Constants.DOT_CONTENT_XML.length() + 1));
+        // TODO - refrain from doing I/O here
+        // TODO - copied from TransactionImpl
+        InputStream in = null;
+        try {
+            in = new BufferedInputStream(new FileInputStream(file));
+            SerializationType serType = XmlAnalyzer.analyze(new InputSource(in));
+            if (serType == SerializationType.XML_DOCVIEW) {
+                return file.getAbsolutePath().substring(0, file.getAbsolutePath().length() - EXTENSION_XML.length());
+            }
+
+            return file.getAbsolutePath();
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        } finally {
+            IOUtils.closeQuietly(in);
+        }
     }
 
     @Override