You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by tr...@apache.org on 2017/11/08 06:45:59 UTC
svn commit: r1814557 - in /jackrabbit/commons/filevault/trunk/vault-core/src:
main/java/org/apache/jackrabbit/vault/fs/api/
main/java/org/apache/jackrabbit/vault/fs/config/
main/java/org/apache/jackrabbit/vault/fs/io/
test/java/org/apache/jackrabbit/va...
Author: tripod
Date: Wed Nov 8 06:45:59 2017
New Revision: 1814557
URL: http://svn.apache.org/viewvc?rev=1814557&view=rev
Log:
JCRVLT-220 Include package type when assembling a package
Modified:
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/api/PathFilterSet.java
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/api/package-info.java
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/DefaultWorkspaceFilter.java
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/AbstractExporter.java
jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestManifestCreationExport.java
jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestPackageTypes.java
jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/fs/filter/workspacefilters/complex-expected.xml
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/api/PathFilterSet.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/api/PathFilterSet.java?rev=1814557&r1=1814556&r2=1814557&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/api/PathFilterSet.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/api/PathFilterSet.java Wed Nov 8 06:45:59 2017
@@ -19,6 +19,9 @@ package org.apache.jackrabbit.vault.fs.a
import java.util.List;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
/**
* The path filter set holds a set of path filters each attributes as include
* or exclude filter. The evaluation of the set allows included paths and
@@ -50,6 +53,11 @@ public class PathFilterSet extends Filte
private boolean onlyRelativePatterns;
/**
+ * specifies the filter type.
+ */
+ private String type;
+
+ /**
* Default constructor. initializes the root path to "/"
*/
public PathFilterSet() {
@@ -142,4 +150,24 @@ public class PathFilterSet extends Filte
seal();
return onlyRelativePatterns;
}
+
+ /**
+ * Returns the filter type or {@code null}
+ * @return the filter type.
+ */
+ @Nullable
+ public String getType() {
+ return type;
+ }
+
+ /**
+ * Sets the filter type
+ * @param type the type
+ * @return this.
+ */
+ @Nonnull
+ public PathFilterSet setType(@Nullable String type) {
+ this.type = type;
+ return this;
+ }
}
\ No newline at end of file
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/api/package-info.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/api/package-info.java?rev=1814557&r1=1814556&r2=1814557&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/api/package-info.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/api/package-info.java Wed Nov 8 06:45:59 2017
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-@Version("2.5.1")
+@Version("2.6.0")
package org.apache.jackrabbit.vault.fs.api;
import org.osgi.annotation.versioning.Version;
\ No newline at end of file
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/DefaultWorkspaceFilter.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/DefaultWorkspaceFilter.java?rev=1814557&r1=1814556&r2=1814557&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/DefaultWorkspaceFilter.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/DefaultWorkspaceFilter.java Wed Nov 8 06:45:59 2017
@@ -350,6 +350,12 @@ public class DefaultWorkspaceFilter impl
nodeFilters.setImportMode(importMode);
propFilters.setImportMode(importMode);
}
+ String type = elem.getAttribute("type");
+ if (type != null && type.length() > 0) {
+ nodeFilters.setType(type);
+ propFilters.setType(type);
+ }
+
// check for filters
NodeList n1 = elem.getChildNodes();
for (int i=0; i<n1.getLength(); i++) {
@@ -425,6 +431,9 @@ public class DefaultWorkspaceFilter impl
if (set.getImportMode() != ImportMode.REPLACE) {
attrs.addAttribute(null, null, "mode", "CDATA", set.getImportMode().name().toLowerCase());
}
+ if (set.getType() != null) {
+ attrs.addAttribute(null, null, "type", "CDATA", set.getType());
+ }
ser.startElement(null, null, "filter", attrs);
for (PathFilterSet.Entry<PathFilter> entry: set.getEntries()) {
// only handle path filters
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/AbstractExporter.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/AbstractExporter.java?rev=1814557&r1=1814556&r2=1814557&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/AbstractExporter.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/AbstractExporter.java Wed Nov 8 06:45:59 2017
@@ -49,6 +49,7 @@ import org.apache.jackrabbit.vault.fs.sp
import org.apache.jackrabbit.vault.fs.spi.ProgressTracker;
import org.apache.jackrabbit.vault.fs.spi.ServiceProviderFactory;
import org.apache.jackrabbit.vault.packaging.PackageId;
+import org.apache.jackrabbit.vault.packaging.PackageType;
import org.apache.jackrabbit.vault.util.Constants;
import org.apache.jackrabbit.vault.util.Text;
import org.slf4j.Logger;
@@ -58,6 +59,7 @@ import static org.apache.jackrabbit.vaul
import static org.apache.jackrabbit.vault.packaging.PackageProperties.NAME_DESCRIPTION;
import static org.apache.jackrabbit.vault.packaging.PackageProperties.NAME_GROUP;
import static org.apache.jackrabbit.vault.packaging.PackageProperties.NAME_NAME;
+import static org.apache.jackrabbit.vault.packaging.PackageProperties.NAME_PACKAGE_TYPE;
import static org.apache.jackrabbit.vault.packaging.PackageProperties.NAME_VERSION;
/**
@@ -91,6 +93,10 @@ public abstract class AbstractExporter {
*/
private static final String MF_PACKAGE_DESC = "Content-Package-Description";
+ /**
+ * name of the manifest property for the package type
+ */
+ private static final String MF_PACKAGE_TYPE = "Content-Package-Type";
private ProgressTracker tracker;
@@ -208,6 +214,11 @@ public abstract class AbstractExporter {
filter = filter.translate(new SimplePathMapping(mountPath, rootPath));
}
+ // check for package type
+ if (!properties.containsKey(NAME_PACKAGE_TYPE)) {
+ properties.setProperty(NAME_PACKAGE_TYPE, detectPackageType(filter).name().toLowerCase());
+ }
+
// write Manifest
Manifest mf = new Manifest();
mf.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
@@ -227,6 +238,7 @@ public abstract class AbstractExporter {
addManifestAttribute(mf, MF_PACKAGE_DESC, properties.getProperty(NAME_DESCRIPTION));
addManifestAttribute(mf, MF_PACKAGE_ROOTS, Text.implode(filterRoots, ","));
addManifestAttribute(mf, MF_PACKAGE_DEPENDENCIES, properties.getProperty(NAME_DEPENDENCIES));
+ addManifestAttribute(mf, MF_PACKAGE_TYPE, properties.getProperty(NAME_PACKAGE_TYPE));
ByteArrayOutputStream tmpOut = new ByteArrayOutputStream();
mf.write(tmpOut);
writeFile(new ByteArrayInputStream(tmpOut.toByteArray()), JarFile.MANIFEST_NAME);
@@ -352,7 +364,7 @@ public abstract class AbstractExporter {
* @param key attribute name
* @param value attribute value
*/
- private void addManifestAttribute(Manifest manifest, String key, String value) {
+ private static void addManifestAttribute(Manifest manifest, String key, String value) {
if (value != null && value.length() > 0) {
Attributes.Name name = new Attributes.Name(key);
manifest.getMainAttributes().put(name, value);
@@ -360,6 +372,33 @@ public abstract class AbstractExporter {
}
/**
+ * Detects the package type based on the workspace filter.
+ * @param filter the workspace filter
+ * @return the package type
+ */
+ private static PackageType detectPackageType(WorkspaceFilter filter) {
+ boolean hasApps = false;
+ boolean hasOther = false;
+ for (PathFilterSet p: filter.getFilterSets()) {
+ if ("cleanup".equals(p.getType())) {
+ continue;
+ }
+ String root = p.getRoot();
+ if ("/apps".equals(root) || root.startsWith("/apps/") || "/libs".equals(root) || root.startsWith("/libs/")) {
+ hasApps = true;
+ } else {
+ hasOther = true;
+ }
+ }
+ if (hasApps && !hasOther) {
+ return PackageType.APPLICATION;
+ } else if (hasOther && !hasApps) {
+ return PackageType.CONTENT;
+ }
+ return PackageType.MIXED;
+ }
+
+ /**
* Opens the exporter and initializes the undelying structures.
* @throws IOException if an I/O error occurs
* @throws RepositoryException if a repository error occurs
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestManifestCreationExport.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestManifestCreationExport.java?rev=1814557&r1=1814556&r2=1814557&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestManifestCreationExport.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestManifestCreationExport.java Wed Nov 8 06:45:59 2017
@@ -69,6 +69,7 @@ public class TestManifestCreationExport
"Content-Package-Description:This is a test package.\n" +
"Content-Package-Id:jackrabbit/test:test-package\n" +
"Content-Package-Roots:/tmp/foo/bar,/tmp/foo/zoo\n" +
+ "Content-Package-Type:content\n" +
"Manifest-Version:1.0";
verifyManifest(tmpFile, Collections.<String>emptySet(), expected);
tmpFile.delete();
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestPackageTypes.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestPackageTypes.java?rev=1814557&r1=1814556&r2=1814557&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestPackageTypes.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestPackageTypes.java Wed Nov 8 06:45:59 2017
@@ -17,12 +17,22 @@
package org.apache.jackrabbit.vault.packaging.integration;
+import java.io.File;
import java.io.IOException;
+import java.util.Properties;
+import javax.jcr.RepositoryException;
+
+import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
+import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
+import org.apache.jackrabbit.vault.fs.config.DefaultMetaInf;
+import org.apache.jackrabbit.vault.fs.config.DefaultWorkspaceFilter;
+import org.apache.jackrabbit.vault.packaging.ExportOptions;
import org.apache.jackrabbit.vault.packaging.PackageException;
import org.apache.jackrabbit.vault.packaging.PackageExistsException;
import org.apache.jackrabbit.vault.packaging.PackageId;
import org.apache.jackrabbit.vault.packaging.PackageType;
+import org.apache.jackrabbit.vault.packaging.VaultPackage;
import org.apache.jackrabbit.vault.packaging.registry.PackageRegistry;
import org.apache.jackrabbit.vault.packaging.registry.RegisteredPackage;
import org.apache.jackrabbit.vault.packaging.registry.impl.JcrPackageRegistry;
@@ -56,6 +66,28 @@ public class TestPackageTypes extends In
assertEquals("Package type", expected, result);
}
+ private void verifyPackageTypeViaPackageCreation(WorkspaceFilter filter, PackageType expected)
+ throws IOException, RepositoryException {
+
+ File tmpFile = File.createTempFile("vaulttest", "zip");
+
+ ExportOptions options = new ExportOptions();
+ DefaultMetaInf meta = new DefaultMetaInf();
+ meta.setFilter(filter);
+
+ Properties props = new Properties();
+ props.setProperty(VaultPackage.NAME_GROUP, "jackrabbit/test");
+ props.setProperty(VaultPackage.NAME_NAME, "package-types-export-package");
+ meta.setProperties(props);
+
+ options.setMetaInf(meta);
+ try (VaultPackage pkg = packMgr.assemble(admin, options, tmpFile)) {
+ PackageType result = pkg.getProperties().getPackageType();
+ assertEquals("Package type", expected, result);
+ }
+ }
+
+
/**
* checks if 'application' package type is correct read from package using the registry.
*/
@@ -96,4 +128,36 @@ public class TestPackageTypes extends In
verifyViaRegistry("notype");
}
+ /**
+ * checks if assembling an "application" package adds the correct package type to the properties.
+ */
+ @Test
+ public void test_export_application() throws IOException, RepositoryException {
+ DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
+ filter.add(new PathFilterSet("/libs/foo"));
+ filter.add(new PathFilterSet("/apps/foo"));
+ verifyPackageTypeViaPackageCreation(filter, PackageType.APPLICATION);
+ }
+
+ /**
+ * checks if assembling a "content" package adds the correct package type to the properties.
+ */
+ @Test
+ public void test_export_content() throws IOException, RepositoryException {
+ DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
+ filter.add(new PathFilterSet("/content/foo"));
+ filter.add(new PathFilterSet("/cont/foo"));
+ verifyPackageTypeViaPackageCreation(filter, PackageType.CONTENT);
+ }
+
+ /**
+ * checks if assembling a "mixed" package adds the correct package type to the properties.
+ */
+ @Test
+ public void test_export_mixed() throws IOException, RepositoryException {
+ DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
+ filter.add(new PathFilterSet("/content/foo"));
+ filter.add(new PathFilterSet("/libs/foo"));
+ verifyPackageTypeViaPackageCreation(filter, PackageType.MIXED);
+ }
}
\ No newline at end of file
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/fs/filter/workspacefilters/complex-expected.xml
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/fs/filter/workspacefilters/complex-expected.xml?rev=1814557&r1=1814556&r2=1814557&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/fs/filter/workspacefilters/complex-expected.xml (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/fs/filter/workspacefilters/complex-expected.xml Wed Nov 8 06:45:59 2017
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<workspaceFilter version="1.0">
- <filter root="/bar" mode="merge"/>
+ <filter root="/bar" mode="merge" type="cleanup"/>
<filter root="/tmp">
<include pattern="/a/b.*"/>
<include pattern="/a/c.*"/>