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