Author: mpetria
Date: Fri Dec  5 14:40:03 2014
New Revision: 1643296

URL: http://svn.apache.org/r1643296
Log:
SLING-4054: adding package builder based on jcr packages

Added:
    
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackage.java
    
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackageBuilder.java
    
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java
Removed:
    
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilderFactory.java
Modified:
    
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentUtils.java
    
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/ResourceSharedDistributionPackageBuilder.java
    
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackage.java
    
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilder.java
    
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java
    
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/UserCredentialsDistributionTransportSecretProvider.java
    
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilderTest.java
    
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageTest.java
    sling/trunk/contrib/extensions/distribution/it/pom.xml
    
sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install/org.apache.sling.distribution.serialization.impl.vlt.FileVaultDistributionPackageBuilderFactory-vlt.json

Modified: 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentUtils.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentUtils.java?rev=1643296&r1=1643295&r2=1643296&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentUtils.java
 (original)
+++ 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/component/impl/DistributionComponentUtils.java
 Fri Dec  5 14:40:03 2014
@@ -37,7 +37,7 @@ import org.apache.sling.distribution.pac
 import 
org.apache.sling.distribution.packaging.impl.importer.LocalDistributionPackageImporterFactory;
 import 
org.apache.sling.distribution.packaging.impl.importer.RemoteDistributionPackageImporterFactory;
 import org.apache.sling.distribution.serialization.DistributionPackageBuilder;
-import 
org.apache.sling.distribution.serialization.impl.vlt.FileVaultDistributionPackageBuilderFactory;
+import 
org.apache.sling.distribution.serialization.impl.vlt.VaultDistributionPackageBuilderFactory;
 import 
org.apache.sling.distribution.transport.DistributionTransportSecretProvider;
 import 
org.apache.sling.distribution.transport.impl.UserCredentialsDistributionTransportSecretProvider;
 import org.apache.sling.distribution.trigger.DistributionTrigger;
@@ -113,7 +113,9 @@ public class DistributionComponentUtils
         registerFactory("importer", "local", 
LocalDistributionPackageImporterFactory.class);
         registerFactory("importer", "remote", 
RemoteDistributionPackageImporterFactory.class);
 
-        registerFactory("packageBuilder", "vlt", 
FileVaultDistributionPackageBuilderFactory.class);
+        registerFactory("packageBuilder", "filevlt", 
VaultDistributionPackageBuilderFactory.class);
+        registerFactory("packageBuilder", "jcrvlt", 
VaultDistributionPackageBuilderFactory.class);
+
 
         registerFactory("requestAuthorization", "privilege", 
PrivilegeDistributionRequestAuthorizationStrategy.class);
 

Modified: 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/ResourceSharedDistributionPackageBuilder.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/ResourceSharedDistributionPackageBuilder.java?rev=1643296&r1=1643295&r2=1643296&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/ResourceSharedDistributionPackageBuilder.java
 (original)
+++ 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/ResourceSharedDistributionPackageBuilder.java
 Fri Dec  5 14:40:03 2014
@@ -123,8 +123,15 @@ public class ResourceSharedDistributionP
 
         Map<String, Object> properties = new HashMap<String, Object>();
         properties.put(PN_ORIGINAL_ID, distributionPackage.getId());
-        properties.put(PN_ORIGINAL_REQUEST_TYPE, 
distributionPackage.getInfo().getRequestType());
-        properties.put(PN_ORIGINAL_PATHS, 
distributionPackage.getInfo().getPaths());
+
+        // save the info just for debugging purposes
+        if (distributionPackage.getInfo().getRequestType() != null) {
+            properties.put(PN_ORIGINAL_REQUEST_TYPE, 
distributionPackage.getInfo().getRequestType());
+
+        }
+        if (distributionPackage.getInfo().getPaths() != null) {
+            properties.put(PN_ORIGINAL_PATHS, 
distributionPackage.getInfo().getPaths());
+        }
 
         Resource resource = ResourceUtil.getOrCreateResource(resourceResolver, 
packagePath, "sling:Folder", "sling:Folder", false);
 

Modified: 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackage.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackage.java?rev=1643296&r1=1643295&r2=1643296&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackage.java
 (original)
+++ 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackage.java
 Fri Dec  5 14:40:03 2014
@@ -47,20 +47,9 @@ public class FileVaultDistributionPackag
 
     public FileVaultDistributionPackage(VaultPackage pkg) {
         this.pkg = pkg;
-        MetaInf metaInf = pkg.getMetaInf();
-        if (metaInf != null) {
-            WorkspaceFilter filter = metaInf.getFilter();
-            if (filter == null) {
-                filter = new DefaultWorkspaceFilter();
-            }
-            List<PathFilterSet> filterSets = filter.getFilterSets();
-            String[] paths = new String[filterSets.size()];
-            for (int i = 0; i < paths.length; i++) {
-                paths[i] = filterSets.get(i).getRoot();
-            }
-            this.getInfo().setPaths(paths);
-            this.getInfo().setRequestType(DistributionRequestType.ADD);
-        }
+        String[] paths = VltUtils.getPaths(pkg.getMetaInf());
+        this.getInfo().setPaths(paths);
+        this.getInfo().setRequestType(DistributionRequestType.ADD);
         this.id = pkg.getFile().getAbsolutePath();
     }
 

Modified: 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilder.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilder.java?rev=1643296&r1=1643295&r2=1643296&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilder.java
 (original)
+++ 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilder.java
 Fri Dec  5 14:40:03 2014
@@ -58,7 +58,7 @@ public class FileVaultDistributionPackag
 
     private static final String VERSION = "0.0.1";
 
-    public static final String PACKAGING_TYPE = "vlt";
+    public static final String PACKAGING_TYPE = "filevlt";
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
@@ -68,16 +68,11 @@ public class FileVaultDistributionPackag
 
     private AccessControlHandling aclHandling;
 
-    public FileVaultDistributionPackageBuilder(Packaging packaging) {
+    public FileVaultDistributionPackageBuilder(Packaging packaging, ImportMode 
importMode, AccessControlHandling aclHandling) {
         super(PACKAGING_TYPE);
         this.packaging = packaging;
-    }
-
-    public FileVaultDistributionPackageBuilder(Packaging packaging, String 
importMode, String aclHandling) {
-        super(PACKAGING_TYPE);
-        this.packaging = packaging;
-        this.importMode = ImportMode.valueOf(importMode);
-        this.aclHandling = AccessControlHandling.valueOf(aclHandling);
+        this.importMode = importMode;
+        this.aclHandling = aclHandling;
     }
 
     @Override

Added: 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackage.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackage.java?rev=1643296&view=auto
==============================================================================
--- 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackage.java
 (added)
+++ 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackage.java
 Fri Dec  5 14:40:03 2014
@@ -0,0 +1,79 @@
+package org.apache.sling.distribution.serialization.impl.vlt;
+
+import org.apache.jackrabbit.vault.packaging.JcrPackage;
+import org.apache.sling.distribution.communication.DistributionRequestType;
+import org.apache.sling.distribution.packaging.DistributionPackage;
+import 
org.apache.sling.distribution.serialization.impl.AbstractDistributionPackage;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.annotation.Nonnull;
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import java.io.IOException;
+import java.io.InputStream;
+/**
+ * a JcrPackage based {@link 
org.apache.sling.distribution.packaging.DistributionPackage}
+ */
+public class JcrVaultDistributionPackage extends AbstractDistributionPackage 
implements DistributionPackage {
+    private final Logger log = LoggerFactory.getLogger(getClass());
+
+
+    private final String type;
+    private final JcrPackage jcrPackage;
+    private final Session session;
+
+    public JcrVaultDistributionPackage(String type, JcrPackage jcrPackage, 
Session session) {
+        this.type = type;
+        this.jcrPackage = jcrPackage;
+        this.session = session;
+        String[] paths = new String[0];
+        try {
+            paths = VltUtils.getPaths(jcrPackage.getDefinition().getMetaInf());
+        } catch (Throwable e) {
+            log.error("cannot read paths", e);
+        }
+        this.getInfo().setPaths(paths);
+        this.getInfo().setRequestType(DistributionRequestType.ADD);
+
+    }
+
+    @Nonnull
+    public String getId() {
+        try {
+            return jcrPackage.getPackage().getId().getName();
+        } catch (RepositoryException e) {
+            e.printStackTrace();  //To change body of catch statement use File 
| Settings | File Templates.
+        } catch (IOException e) {
+            e.printStackTrace();  //To change body of catch statement use File 
| Settings | File Templates.
+        }
+
+        return null;
+    }
+
+    @Nonnull
+    public String getType() {
+        return type;
+    }
+
+    @Nonnull
+    public InputStream createInputStream() throws IOException {
+        try {
+            return jcrPackage.getData().getBinary().getStream();
+        } catch (RepositoryException e) {
+            e.printStackTrace();  //To change body of catch statement use File 
| Settings | File Templates.
+        }
+        return null;
+    }
+
+    public void delete() {
+        Node node = jcrPackage.getNode();
+        try {
+            node.remove();
+            session.save();
+        } catch (RepositoryException e) {
+            e.printStackTrace();  //To change body of catch statement use File 
| Settings | File Templates.
+        }
+    }
+}

Added: 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackageBuilder.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackageBuilder.java?rev=1643296&view=auto
==============================================================================
--- 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackageBuilder.java
 (added)
+++ 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackageBuilder.java
 Fri Dec  5 14:40:03 2014
@@ -0,0 +1,148 @@
+package org.apache.sling.distribution.serialization.impl.vlt;
+
+
+import org.apache.jackrabbit.vault.fs.api.ImportMode;
+import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
+import org.apache.jackrabbit.vault.fs.io.AccessControlHandling;
+import org.apache.jackrabbit.vault.fs.io.ImportOptions;
+import org.apache.jackrabbit.vault.packaging.JcrPackage;
+import org.apache.jackrabbit.vault.packaging.JcrPackageDefinition;
+import org.apache.jackrabbit.vault.packaging.JcrPackageManager;
+import org.apache.jackrabbit.vault.packaging.PackageId;
+import org.apache.jackrabbit.vault.packaging.Packaging;
+import org.apache.jackrabbit.vault.util.DefaultProgressListener;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.distribution.communication.DistributionRequest;
+import org.apache.sling.distribution.event.impl.DistributionEventFactory;
+import org.apache.sling.distribution.packaging.DistributionPackage;
+import org.apache.sling.distribution.serialization.DistributionPackageBuilder;
+import 
org.apache.sling.distribution.serialization.DistributionPackageBuildingException;
+import 
org.apache.sling.distribution.serialization.DistributionPackageReadingException;
+import 
org.apache.sling.distribution.serialization.impl.AbstractDistributionPackageBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.jcr.Session;
+import java.io.InputStream;
+import java.util.UUID;
+/**
+ * a {@link 
org.apache.sling.distribution.serialization.DistributionPackageBuilder} based 
on Apache Jackrabbit FileVault.
+ * <p/>
+ * Each {@link org.apache.sling.distribution.packaging.DistributionPackage} 
created by {@link JcrVaultDistributionPackageBuilder} is
+ * backed by a {@link org.apache.jackrabbit.vault.packaging.JcrPackage}. 
+ */
+public class JcrVaultDistributionPackageBuilder  extends 
AbstractDistributionPackageBuilder implements
+        DistributionPackageBuilder {
+    private final Logger log = LoggerFactory.getLogger(getClass());
+
+
+    private static final String VERSION = "0.0.1";
+    private static final String PACKAGE_GROUP = "sling/distribution";
+
+    public static final String PACKAGING_TYPE = "jcrvlt";
+    private final Packaging packaging;
+    private ImportMode importMode;
+    private AccessControlHandling aclHandling;
+
+    public JcrVaultDistributionPackageBuilder(Packaging packaging, ImportMode 
importMode, AccessControlHandling aclHandling) {
+        super(PACKAGING_TYPE);
+
+        this.packaging = packaging;
+
+        this.importMode = importMode;
+        this.aclHandling = aclHandling;
+    }
+
+    @Override
+    protected DistributionPackage createPackageForAdd(ResourceResolver 
resourceResolver, DistributionRequest request) throws 
DistributionPackageBuildingException {
+        Session session = null;
+        try {
+            session = getSession(resourceResolver);
+            JcrPackageManager packageManager = 
packaging.getPackageManager(session);
+
+            final String[] paths = request.getPaths();
+            final boolean deep = request.isDeep();
+
+            String packageGroup = PACKAGE_GROUP;
+            String packageName = PACKAGING_TYPE + "_" + 
System.currentTimeMillis() + "_" +  UUID.randomUUID();
+
+
+            WorkspaceFilter filter = VltUtils.createFilter(paths, deep);
+
+            final JcrPackage jcrPackage = packageManager.create(packageGroup, 
packageName, VERSION);
+            final JcrPackageDefinition jcrPackageDefinition = 
jcrPackage.getDefinition();
+
+
+            jcrPackageDefinition.setFilter(filter, true);
+
+            log.debug("assembling package {}", packageGroup + '/' + 
packageName + "-" + VERSION);
+            packageManager.assemble(jcrPackage, null);
+            return new JcrVaultDistributionPackage(PACKAGING_TYPE, jcrPackage, 
session);
+        } catch (Exception e) {
+            throw new DistributionPackageBuildingException(e);
+        } finally {
+            ungetSession(session);
+        }
+    }
+
+    @Override
+    protected DistributionPackage readPackageInternal(ResourceResolver 
resourceResolver, InputStream stream) throws 
DistributionPackageReadingException {
+        Session session = null;
+        try {
+            session = getSession(resourceResolver);
+            JcrPackageManager packageManager = 
packaging.getPackageManager(session);
+
+            JcrPackage jcrPackage = packageManager.upload(stream, true);
+
+            return new JcrVaultDistributionPackage(PACKAGING_TYPE, jcrPackage, 
session);
+        } catch (Exception e) {
+            throw new DistributionPackageReadingException(e);
+        } finally {
+            ungetSession(session);
+        }
+    }
+
+    @Override
+    protected boolean installPackageInternal(ResourceResolver 
resourceResolver, DistributionPackage distributionPackage) throws 
DistributionPackageReadingException {
+        Session session = null;
+        try {
+            session = getSession(resourceResolver);
+            JcrPackageManager packageManager = 
packaging.getPackageManager(session);
+
+
+
+            String packageName = distributionPackage.getId();
+            JcrPackage jcrPackage = packageManager.open(new 
PackageId(PACKAGE_GROUP, packageName, VERSION));
+
+            ImportOptions importOptions = 
VltUtils.getImportOptions(aclHandling, importMode);
+            jcrPackage.extract(importOptions);
+
+            return true;
+        } catch (Exception e) {
+            throw new DistributionPackageReadingException(e);
+        } finally {
+            ungetSession(session);
+        }
+    }
+
+    @Override
+    protected DistributionPackage getPackageInternal(ResourceResolver 
resourceResolver, String id) {
+        Session session = null;
+        try {
+            session = getSession(resourceResolver);
+            JcrPackageManager packageManager = 
packaging.getPackageManager(session);
+
+            String packageName = id;
+            JcrPackage jcrPackage = packageManager.open(new 
PackageId(PACKAGE_GROUP, packageName, VERSION));
+
+            if (jcrPackage == null) {
+                return null;
+            }
+            return new JcrVaultDistributionPackage(PACKAGING_TYPE, jcrPackage, 
session);
+        } catch (Exception e) {
+            return null;
+        } finally {
+            ungetSession(session);
+        }
+    }
+}

Added: 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java?rev=1643296&view=auto
==============================================================================
--- 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java
 (added)
+++ 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java
 Fri Dec  5 14:40:03 2014
@@ -0,0 +1,125 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.distribution.serialization.impl.vlt;
+
+import javax.annotation.Nonnull;
+import java.io.InputStream;
+import java.util.Map;
+
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.ConfigurationPolicy;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.jackrabbit.vault.fs.api.ImportMode;
+import org.apache.jackrabbit.vault.fs.io.AccessControlHandling;
+import org.apache.jackrabbit.vault.packaging.Packaging;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.commons.osgi.PropertiesUtil;
+import org.apache.sling.distribution.communication.DistributionRequest;
+import org.apache.sling.distribution.component.impl.DistributionComponentUtils;
+import org.apache.sling.distribution.event.impl.DistributionEventFactory;
+import org.apache.sling.distribution.packaging.DistributionPackage;
+import org.apache.sling.distribution.serialization.DistributionPackageBuilder;
+import 
org.apache.sling.distribution.serialization.DistributionPackageBuildingException;
+import 
org.apache.sling.distribution.serialization.DistributionPackageReadingException;
+import 
org.apache.sling.distribution.serialization.impl.ResourceSharedDistributionPackageBuilder;
+
+@Component(metatype = true,
+        label = "Sling Distribution - Vault Package Builder Factory",
+        description = "OSGi configuration for vault package builders",
+        configurationFactory = true,
+        specVersion = "1.1",
+        policy = ConfigurationPolicy.REQUIRE
+)
+@Service(DistributionPackageBuilder.class)
+public class VaultDistributionPackageBuilderFactory implements 
DistributionPackageBuilder {
+
+
+    /**
+     * type of this component.
+     */
+    @Property
+    public static final String TYPE = DistributionComponentUtils.PN_TYPE;
+
+    /**
+     * name of this component.
+     */
+    @Property
+    public static final String NAME = DistributionComponentUtils.PN_NAME;
+
+    /**
+     * import mode property for file vault package builder
+     */
+    @Property
+    public static final String PACKAGE_BUILDER_FILEVLT_IMPORT_MODE = 
"importMode";
+
+    /**
+     * ACL handling property for file vault package builder
+     */
+    @Property
+    public static final String PACKAGE_BUILDER_FILEVLT_ACLHANDLING = 
"aclHandling";
+
+    @Reference
+    private Packaging packaging;
+
+    private DistributionPackageBuilder packageBuilder;
+
+
+    @Activate
+    public void activate(Map<String, Object> config) {
+
+        String type = PropertiesUtil.toString(config.get(TYPE), null);
+        String importModeString = 
PropertiesUtil.toString(config.get(PACKAGE_BUILDER_FILEVLT_IMPORT_MODE), null);
+        String aclHandlingString = 
PropertiesUtil.toString(config.get(PACKAGE_BUILDER_FILEVLT_ACLHANDLING), null);
+
+        ImportMode importMode = null;
+        if (importMode != null) {
+            importMode = ImportMode.valueOf(importModeString);
+        }
+
+        AccessControlHandling aclHandling = null;
+        if (aclHandlingString != null) {
+            aclHandling= AccessControlHandling.valueOf(aclHandlingString);
+        }
+        if (FileVaultDistributionPackageBuilder.PACKAGING_TYPE.equals(type)) {
+            packageBuilder = new ResourceSharedDistributionPackageBuilder(new 
FileVaultDistributionPackageBuilder(packaging, importMode, aclHandling));
+        } else  {
+            packageBuilder = new ResourceSharedDistributionPackageBuilder(new 
JcrVaultDistributionPackageBuilder(packaging, importMode, aclHandling));
+        }
+    }
+
+
+    public DistributionPackage createPackage(@Nonnull ResourceResolver 
resourceResolver, @Nonnull DistributionRequest request) throws 
DistributionPackageBuildingException {
+        return packageBuilder.createPackage(resourceResolver, request);
+    }
+
+    public DistributionPackage readPackage(@Nonnull ResourceResolver 
resourceResolver, @Nonnull InputStream stream) throws 
DistributionPackageReadingException {
+        return packageBuilder.readPackage(resourceResolver, stream);
+    }
+
+    public DistributionPackage getPackage(@Nonnull ResourceResolver 
resourceResolver, @Nonnull String id) {
+        return packageBuilder.getPackage(resourceResolver, id);
+    }
+
+    public boolean installPackage(@Nonnull ResourceResolver resourceResolver, 
@Nonnull DistributionPackage distributionPackage) throws 
DistributionPackageReadingException {
+        return packageBuilder.installPackage(resourceResolver, 
distributionPackage);
+    }
+}

Modified: 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java?rev=1643296&r1=1643295&r2=1643296&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java
 (original)
+++ 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java
 Fri Dec  5 14:40:03 2014
@@ -26,12 +26,14 @@ import org.apache.jackrabbit.vault.fs.ap
 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.fs.config.MetaInf;
 import org.apache.jackrabbit.vault.fs.filter.DefaultPathFilter;
 import org.apache.jackrabbit.vault.fs.io.AccessControlHandling;
 import org.apache.jackrabbit.vault.fs.io.ImportOptions;
 import org.apache.jackrabbit.vault.packaging.ExportOptions;
 import org.apache.jackrabbit.vault.packaging.VaultPackage;
 
+import java.util.List;
 import java.util.Properties;
 
 /**
@@ -50,6 +52,24 @@ public class VltUtils {
         return filter;
     }
 
+    public static String[] getPaths(MetaInf metaInf) {
+        if (metaInf == null) {
+            return null;
+        }
+
+        WorkspaceFilter filter = metaInf.getFilter();
+        if (filter == null) {
+            filter = new DefaultWorkspaceFilter();
+        }
+        List<PathFilterSet> filterSets = filter.getFilterSets();
+        String[] paths = new String[filterSets.size()];
+        for (int i = 0; i < paths.length; i++) {
+            paths[i] = filterSets.get(i).getRoot();
+        }
+
+        return paths;
+    }
+
     private static PathFilterSet createFilterSet(String path, boolean deep) {
         PathFilterSet filterSet = new PathFilterSet(path);
 

Modified: 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/UserCredentialsDistributionTransportSecretProvider.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/UserCredentialsDistributionTransportSecretProvider.java?rev=1643296&r1=1643295&r2=1643296&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/UserCredentialsDistributionTransportSecretProvider.java
 (original)
+++ 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/UserCredentialsDistributionTransportSecretProvider.java
 Fri Dec  5 14:40:03 2014
@@ -35,7 +35,8 @@ import org.apache.sling.distribution.tra
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@Component(label = "User Credentials based 
DistributionTransportSecretProvider",
+@Component(metatype = true,
+        label = "Sling Distribution - User Credentials based 
DistributionTransportSecretProvider",
         configurationFactory = true,
         specVersion = "1.1",
         policy = ConfigurationPolicy.REQUIRE)

Modified: 
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilderTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilderTest.java?rev=1643296&r1=1643295&r2=1643296&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilderTest.java
 (original)
+++ 
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilderTest.java
 Fri Dec  5 14:40:03 2014
@@ -75,8 +75,7 @@ public class FileVaultDistributionPackag
         when(resourceResolver.adaptTo(Session.class)).thenReturn(session);
 
 
-        FileVaultDistributionPackageBuilder 
fileVaultdistributionPackageBuilder = new FileVaultDistributionPackageBuilder(
-                packaging);
+        FileVaultDistributionPackageBuilder 
fileVaultdistributionPackageBuilder = new 
FileVaultDistributionPackageBuilder(packaging, null, null);
         DistributionRequest request = new 
DistributionRequest(DistributionRequestType.ADD, new String[]{"/"});
         DistributionPackage distributionPackage = 
fileVaultdistributionPackageBuilder.createPackageForAdd(resourceResolver, 
request);
         assertNotNull(distributionPackage);
@@ -88,8 +87,7 @@ public class FileVaultDistributionPackag
         PackageManager packageManager = mock(PackageManager.class);
         when(packaging.getPackageManager()).thenReturn(packageManager);
 
-        FileVaultDistributionPackageBuilder 
fileVaultdistributionPackageBuilder = new FileVaultDistributionPackageBuilder(
-                packaging);
+        FileVaultDistributionPackageBuilder 
fileVaultdistributionPackageBuilder = new 
FileVaultDistributionPackageBuilder(packaging, null, null);
 
         ResourceResolver resourceResolver = mock(ResourceResolver.class);
         InputStream stream = new ByteArrayInputStream("some 
binary".getBytes("UTF-8"));
@@ -103,8 +101,7 @@ public class FileVaultDistributionPackag
         PackageManager packageManager = mock(PackageManager.class);
         when(packaging.getPackageManager()).thenReturn(packageManager);
 
-        FileVaultDistributionPackageBuilder 
fileVaultdistributionPackageBuilder = new FileVaultDistributionPackageBuilder(
-                packaging);
+        FileVaultDistributionPackageBuilder 
fileVaultdistributionPackageBuilder = new 
FileVaultDistributionPackageBuilder(packaging, null, null);
 
         ResourceResolver resourceResolver = mock(ResourceResolver.class);
         String id = "some-id";
@@ -121,8 +118,7 @@ public class FileVaultDistributionPackag
         when(packageManager.open(tempFile)).thenReturn(vaultPackage);
         when(packaging.getPackageManager()).thenReturn(packageManager);
 
-        FileVaultDistributionPackageBuilder 
fileVaultdistributionPackageBuilder = new FileVaultDistributionPackageBuilder(
-                packaging);
+        FileVaultDistributionPackageBuilder 
fileVaultdistributionPackageBuilder = new 
FileVaultDistributionPackageBuilder(packaging, null, null);
 
         ResourceResolver resourceResolver = mock(ResourceResolver.class);
         Session session = mock(Session.class);
@@ -151,8 +147,8 @@ public class FileVaultDistributionPackag
         when(packageManager.open(tempFile)).thenReturn(vaultPackage);
         when(packaging.getPackageManager()).thenReturn(packageManager);
 
-        FileVaultDistributionPackageBuilder 
fileVaultdistributionPackageBuilder = new FileVaultDistributionPackageBuilder(
-                packaging, ImportMode.MERGE.name(), 
AccessControlHandling.MERGE.name());
+        FileVaultDistributionPackageBuilder 
fileVaultdistributionPackageBuilder = new 
FileVaultDistributionPackageBuilder(packaging,
+                ImportMode.MERGE, AccessControlHandling.MERGE);
 
         ResourceResolver resourceResolver = mock(ResourceResolver.class);
         Session session = mock(Session.class);

Modified: 
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageTest.java?rev=1643296&r1=1643295&r2=1643296&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageTest.java
 (original)
+++ 
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageTest.java
 Fri Dec  5 14:40:03 2014
@@ -79,7 +79,7 @@ public class FileVaultDistributionPackag
         when(file.getAbsolutePath()).thenReturn("/path/to/file.txt");
         when(vaultPackage.getFile()).thenReturn(file);
         FileVaultDistributionPackage fileVaultdistributionPackage = new 
FileVaultDistributionPackage(vaultPackage);
-        assertNull(fileVaultdistributionPackage.getInfo().getRequestType());
+        assertNotNull(fileVaultdistributionPackage.getInfo().getRequestType());
     }
 
     @Test

Modified: sling/trunk/contrib/extensions/distribution/it/pom.xml
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/it/pom.xml?rev=1643296&r1=1643295&r2=1643296&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/it/pom.xml (original)
+++ sling/trunk/contrib/extensions/distribution/it/pom.xml Fri Dec  5 14:40:03 
2014
@@ -313,7 +313,7 @@
         <dependency>
             <groupId>org.apache.jackrabbit.vault</groupId>
             <artifactId>org.apache.jackrabbit.vault</artifactId>
-            <version>3.0.0</version>
+            <version>3.1.0</version>
             <scope>provided</scope>
         </dependency>
         <!-- HTTP -->

Modified: 
sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install/org.apache.sling.distribution.serialization.impl.vlt.FileVaultDistributionPackageBuilderFactory-vlt.json
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install/org.apache.sling.distribution.serialization.impl.vlt.FileVaultDistributionPackageBuilderFactory-vlt.json?rev=1643296&r1=1643295&r2=1643296&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install/org.apache.sling.distribution.serialization.impl.vlt.FileVaultDistributionPackageBuilderFactory-vlt.json
 (original)
+++ 
sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install/org.apache.sling.distribution.serialization.impl.vlt.FileVaultDistributionPackageBuilderFactory-vlt.json
 Fri Dec  5 14:40:03 2014
@@ -1,4 +1,5 @@
 {
     "jcr:primaryType": "sling:OsgiConfig",
-    "name": "vlt"
+    "name": "vlt",
+    "type": "jcrvlt"
 }
\ No newline at end of file


Reply via email to