You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by mp...@apache.org on 2014/11/25 11:16:10 UTC

svn commit: r1641561 [2/3] - in /sling/trunk/contrib/extensions/distribution: api/src/main/java/org/apache/sling/distribution/agent/ api/src/main/java/org/apache/sling/distribution/component/ api/src/main/java/org/apache/sling/distribution/packaging/ a...

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/RemoteDistributionPackageExporterFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/RemoteDistributionPackageExporterFactory.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/RemoteDistributionPackageExporterFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/RemoteDistributionPackageExporterFactory.java Tue Nov 25 10:16:08 2014
@@ -19,8 +19,6 @@
 package org.apache.sling.distribution.packaging.impl.exporter;
 
 import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -31,19 +29,16 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.PropertyOption;
 import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferencePolicy;
 import org.apache.felix.scr.annotations.Service;
 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.DistributionComponent;
-import org.apache.sling.distribution.component.DistributionComponentProvider;
-import org.apache.sling.distribution.component.impl.DefaultDistributionComponentFactoryConstants;
+import org.apache.sling.distribution.component.impl.DistributionComponentUtils;
 import org.apache.sling.distribution.component.impl.DistributionComponentManager;
-import org.apache.sling.distribution.component.impl.SettingsUtils;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageExportException;
 import org.apache.sling.distribution.packaging.DistributionPackageExporter;
+import org.apache.sling.distribution.serialization.DistributionPackageBuilder;
 import org.apache.sling.distribution.transport.authentication.TransportAuthenticationProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -55,30 +50,30 @@ import org.slf4j.LoggerFactory;
         metatype = true,
         configurationFactory = true,
         specVersion = "1.1",
-        policy = ConfigurationPolicy.REQUIRE)
+        policy = ConfigurationPolicy.REQUIRE,
+        immediate = true
+)
 @Service(value = DistributionPackageExporter.class)
-public class RemoteDistributionPackageExporterFactory implements DistributionPackageExporter, DistributionComponentProvider {
-    private static final String TRANSPORT_AUTHENTICATION_PROVIDER_TARGET = DefaultDistributionComponentFactoryConstants.COMPONENT_TRANSPORT_AUTHENTICATION_PROVIDER + ".target";
+public class RemoteDistributionPackageExporterFactory implements DistributionPackageExporter {
 
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    @Property(value = DefaultDistributionComponentFactoryConstants.PACKAGE_EXPORTER_REMOTE, propertyPrivate = true)
-    private static final String TYPE = DefaultDistributionComponentFactoryConstants.COMPONENT_TYPE;
-
+    /**
+     * name of this component.
+     */
     @Property
-    private static final String NAME = DefaultDistributionComponentFactoryConstants.COMPONENT_NAME;
-
-    @Property(name = TRANSPORT_AUTHENTICATION_PROVIDER_TARGET)
-    @Reference(name = "TransportAuthenticationProvider", policy = ReferencePolicy.STATIC)
-    private volatile TransportAuthenticationProvider transportAuthenticationProvider;
-
-    @Property(cardinality = 100)
-    public static final String ENDPOINTS = DefaultDistributionComponentFactoryConstants.PACKAGE_EXPORTER_REMOTE_PROPERTY_ENDPOINTS;
-
-    @Property(name = "pull items", description = "number of subsequent pull requests to make", intValue = 1)
-    public static final String PULL_ITEMS = "pull.items";
+    public static final String NAME = DistributionComponentUtils.NAME;
 
+    /**
+     * endpoints property
+     */
+    @Property(cardinality = -1)
+    public static final String ENDPOINTS = "endpoints";
+
+    /**
+     * endpoint strategy property
+     */
     @Property(options = {
             @PropertyOption(name = "All",
                     value = "all endpoints"
@@ -88,11 +83,21 @@ public class RemoteDistributionPackageEx
             )},
             value = "One"
     )
-    private static final String ENDPOINT_STRATEGY = DefaultDistributionComponentFactoryConstants.PACKAGE_EXPORTER_REMOTE_PROPERTY_ENDPOINTS_STRATEGY;
+    public static final String ENDPOINTS_STRATEGY = "endpoints.strategy";
 
+    /**
+     * no. of items to poll property
+     */
+    @Property(name = "pull items", description = "number of subsequent pull requests to make", intValue = 1)
+    public static final String PULL_ITEMS = "pull.items";
 
-    @Property(label = "Package Builder Properties", cardinality = 100)
-    public static final String PACKAGE_BUILDER = DefaultDistributionComponentFactoryConstants.COMPONENT_PACKAGE_BUILDER;
+    @Property(name = "packageBuilder.target")
+    @Reference(name = "packageBuilder")
+    DistributionPackageBuilder packageBuilder;
+
+    @Property(name = "transportAuthenticationProvider.target")
+    @Reference(name = "transportAuthenticationProvider")
+    TransportAuthenticationProvider transportAuthenticationProvider;
 
     @Reference
     private DistributionComponentManager componentManager;
@@ -101,12 +106,13 @@ public class RemoteDistributionPackageEx
 
     @Activate
     protected void activate(Map<String, Object> config) throws Exception {
-        Map<String, Object> properties = new HashMap<String, Object>();
-        properties.putAll(config);
-        String[] packageBuilderProperties = PropertiesUtil.toStringArray(config.get(PACKAGE_BUILDER));
-        properties.put(PACKAGE_BUILDER, SettingsUtils.parseLines(packageBuilderProperties));
 
-        exporter = componentManager.createComponent(DistributionPackageExporter.class, properties, this);
+
+        String[] endpoints = PropertiesUtil.toStringArray(config.get(ENDPOINTS), new String[0]);
+        String endpointStrategyName = PropertiesUtil.toString(config.get(ENDPOINTS_STRATEGY), "One");
+        int pollItems = PropertiesUtil.toInteger(config.get(PULL_ITEMS), Integer.MAX_VALUE);
+
+        exporter = new RemoteDistributionPackageExporter(packageBuilder, transportAuthenticationProvider, endpoints, endpointStrategyName, pollItems);
     }
 
 
@@ -124,12 +130,5 @@ public class RemoteDistributionPackageEx
         return exporter.getPackage(resourceResolver, distributionPackageId);
     }
 
-    public <ComponentType extends DistributionComponent> ComponentType getComponent(@Nonnull Class<ComponentType> type,
-                                                                                   @Nullable String componentName) {
-        if (type.isAssignableFrom(TransportAuthenticationProvider.class)) {
-            return (ComponentType) transportAuthenticationProvider;
-        }
 
-        return null;
-    }
 }

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/AdvancedRemoteDistributionPackageImporter.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/AdvancedRemoteDistributionPackageImporter.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/AdvancedRemoteDistributionPackageImporter.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/AdvancedRemoteDistributionPackageImporter.java Tue Nov 25 10:16:08 2014
@@ -34,7 +34,6 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.commons.osgi.PropertiesUtil;
-import org.apache.sling.distribution.component.impl.DefaultDistributionComponentFactoryConstants;
 import org.apache.sling.distribution.event.impl.DistributionEventFactory;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageImportException;
@@ -58,13 +57,12 @@ import org.slf4j.LoggerFactory;
         policy = ConfigurationPolicy.REQUIRE)
 @Service(value = DistributionPackageImporter.class)
 public class AdvancedRemoteDistributionPackageImporter implements DistributionPackageImporter {
-    private static final String TRANSPORT_AUTHENTICATION_PROVIDER_TARGET = DefaultDistributionComponentFactoryConstants.COMPONENT_TRANSPORT_AUTHENTICATION_PROVIDER + ".target";
 
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    @Property(name = TRANSPORT_AUTHENTICATION_PROVIDER_TARGET)
-    @Reference(name = "TransportAuthenticationProvider", policy = ReferencePolicy.DYNAMIC)
+    @Property(name = "transportAuthenticationProvider.target")
+    @Reference(name = "transportAuthenticationProvider")
     private volatile TransportAuthenticationProvider transportAuthenticationProvider;
 
     @Property(cardinality = 100)

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterFactory.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterFactory.java Tue Nov 25 10:16:08 2014
@@ -20,7 +20,6 @@ package org.apache.sling.distribution.pa
 
 import javax.annotation.Nonnull;
 import java.io.InputStream;
-import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.felix.scr.annotations.Activate;
@@ -30,13 +29,12 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.resource.ResourceResolver;
-import org.apache.sling.commons.osgi.PropertiesUtil;
-import org.apache.sling.distribution.component.impl.DefaultDistributionComponentFactoryConstants;
-import org.apache.sling.distribution.component.impl.DistributionComponentManager;
-import org.apache.sling.distribution.component.impl.SettingsUtils;
+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.packaging.DistributionPackageImportException;
 import org.apache.sling.distribution.packaging.DistributionPackageImporter;
+import org.apache.sling.distribution.serialization.DistributionPackageBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -53,30 +51,26 @@ import org.slf4j.LoggerFactory;
 public class LocalDistributionPackageImporterFactory implements DistributionPackageImporter {
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    @Property(value = DefaultDistributionComponentFactoryConstants.PACKAGE_IMPORTER_LOCAL, propertyPrivate = true)
-    private static final String TYPE = DefaultDistributionComponentFactoryConstants.COMPONENT_TYPE;
-
+    /**
+     * name of this component.
+     */
     @Property
-    private static final String NAME = DefaultDistributionComponentFactoryConstants.COMPONENT_NAME;
-
+    public static final String NAME = DistributionComponentUtils.NAME;
 
-    @Property(label = "Package Builder Properties", cardinality = 100)
-    public static final String PACKAGE_BUILDER = DefaultDistributionComponentFactoryConstants.COMPONENT_PACKAGE_BUILDER;
+    @Property(name = "packageBuilder.target")
+    @Reference(name = "packageBuilder")
+    DistributionPackageBuilder packageBuilder;
 
     @Reference
-    private DistributionComponentManager componentManager;
+    DistributionEventFactory distributionEventFactory;
 
 
     private DistributionPackageImporter importer;
 
     @Activate
     public void activate(Map<String, Object> config) {
-        Map<String, Object> properties = new HashMap<String, Object>();
-        properties.putAll(config);
-        String[] packageBuilderProperties = PropertiesUtil.toStringArray(config.get(PACKAGE_BUILDER));
-        properties.put(PACKAGE_BUILDER, SettingsUtils.parseLines(packageBuilderProperties));
 
-        importer = componentManager.createComponent(DistributionPackageImporter.class, properties);
+        importer = new LocalDistributionPackageImporter(packageBuilder, distributionEventFactory);
     }
 
 

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RemoteDistributionPackageImporterFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RemoteDistributionPackageImporterFactory.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RemoteDistributionPackageImporterFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RemoteDistributionPackageImporterFactory.java Tue Nov 25 10:16:08 2014
@@ -19,9 +19,7 @@
 package org.apache.sling.distribution.packaging.impl.importer;
 
 import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
 import java.io.InputStream;
-import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.felix.scr.annotations.Activate;
@@ -30,12 +28,10 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.PropertyOption;
 import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferencePolicy;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.resource.ResourceResolver;
-import org.apache.sling.distribution.component.DistributionComponent;
-import org.apache.sling.distribution.component.DistributionComponentProvider;
-import org.apache.sling.distribution.component.impl.DefaultDistributionComponentFactoryConstants;
+import org.apache.sling.commons.osgi.PropertiesUtil;
+import org.apache.sling.distribution.component.impl.DistributionComponentUtils;
 import org.apache.sling.distribution.component.impl.DistributionComponentManager;
 import org.apache.sling.distribution.packaging.DistributionPackage;
 import org.apache.sling.distribution.packaging.DistributionPackageImportException;
@@ -53,25 +49,25 @@ import org.slf4j.LoggerFactory;
         specVersion = "1.1",
         policy = ConfigurationPolicy.REQUIRE)
 @Service(value = DistributionPackageImporter.class)
-public class RemoteDistributionPackageImporterFactory implements DistributionPackageImporter, DistributionComponentProvider {
-    private static final String TRANSPORT_AUTHENTICATION_PROVIDER_TARGET = DefaultDistributionComponentFactoryConstants.COMPONENT_TRANSPORT_AUTHENTICATION_PROVIDER + ".target";
-
+public class RemoteDistributionPackageImporterFactory implements DistributionPackageImporter {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    @Property(value = DefaultDistributionComponentFactoryConstants.PACKAGE_IMPORTER_REMOTE, propertyPrivate = true)
-    private static final String TYPE = DefaultDistributionComponentFactoryConstants.COMPONENT_TYPE;
-
+    /**
+     * name of this component.
+     */
     @Property
-    private static final String NAME = DefaultDistributionComponentFactoryConstants.COMPONENT_NAME;
-
-    @Property(name = TRANSPORT_AUTHENTICATION_PROVIDER_TARGET)
-    @Reference(name = "TransportAuthenticationProvider", policy = ReferencePolicy.STATIC)
-    private volatile TransportAuthenticationProvider transportAuthenticationProvider;
-
-    @Property(cardinality = 100)
-    public static final String ENDPOINTS = DefaultDistributionComponentFactoryConstants.PACKAGE_IMPORTER_REMOTE_PROPERTY_ENDPOINTS;
+    public static final String NAME = DistributionComponentUtils.NAME;
 
+    /**
+     * endpoints property
+     */
+    @Property(cardinality = -1)
+    public static final String ENDPOINTS = "endpoints";
+
+    /**
+     * endpoint strategy property
+     */
     @Property(options = {
             @PropertyOption(name = "All",
                     value = "all endpoints"
@@ -81,8 +77,12 @@ public class RemoteDistributionPackageIm
             )},
             value = "One"
     )
-    private static final String ENDPOINT_STRATEGY = DefaultDistributionComponentFactoryConstants.PACKAGE_IMPORTER_REMOTE_PROPERTY_ENDPOINTS_STRATEGY;
+    public static final String ENDPOINTS_STRATEGY = "endpoints.strategy";
+
 
+    @Property(name = "transportAuthenticationProvider.target")
+    @Reference(name = "transportAuthenticationProvider")
+    TransportAuthenticationProvider transportAuthenticationProvider;
     private DistributionPackageImporter importer;
 
     @Reference
@@ -92,10 +92,11 @@ public class RemoteDistributionPackageIm
     @Activate
     protected void activate(Map<String, Object> config) {
 
-        Map<String, Object> properties = new HashMap<String, Object>();
-        properties.putAll(config);
+        String[] endpoints = PropertiesUtil.toStringArray(config.get(ENDPOINTS), new String[0]);
+        String endpointStrategyName = PropertiesUtil.toString(config.get(ENDPOINTS_STRATEGY), "One");
 
-        importer = componentManager.createComponent(DistributionPackageImporter.class, properties, this);
+
+        importer =  new RemoteDistributionPackageImporter(transportAuthenticationProvider, endpoints, endpointStrategyName);
 
     }
 
@@ -106,13 +107,4 @@ public class RemoteDistributionPackageIm
     public DistributionPackage importStream(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream) throws DistributionPackageImportException {
         return importer.importStream(resourceResolver, stream);
     }
-
-    public <ComponentType extends DistributionComponent> ComponentType getComponent(@Nonnull Class<ComponentType> type,
-                                                                                   @Nullable String componentName) {
-        if (type.isAssignableFrom(TransportAuthenticationProvider.class)) {
-            return (ComponentType) transportAuthenticationProvider;
-        }
-
-        return null;
-    }
 }

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/resources/DistributionConstants.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/resources/DistributionConstants.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/resources/DistributionConstants.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/resources/DistributionConstants.java Tue Nov 25 10:16:08 2014
@@ -35,4 +35,6 @@ public class DistributionConstants {
     public static final String IMPORTER_RESOURCE_TYPE = "sling/distribution/service/importer";
     public static final String EXPORTER_RESOURCE_TYPE = "sling/distribution/service/exporter";
 
+    public static final String PN_IS_RESOURCE = "isResource";
+
 }

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/resources/impl/OsgiConfigurationResourceProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/resources/impl/OsgiConfigurationResourceProvider.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/resources/impl/OsgiConfigurationResourceProvider.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/resources/impl/OsgiConfigurationResourceProvider.java Tue Nov 25 10:16:08 2014
@@ -177,14 +177,9 @@ public class OsgiConfigurationResourcePr
     }
 
     String getFilter(String configName) {
-        if (configName != null) {
-            return "(&(" + ConfigurationAdmin.SERVICE_FACTORYPID + "=" + OsgiUtils.escape(configFactory) + ")("
-                    + friendlyNameProperty + "=" + OsgiUtils.escape(configName) + "))";
-        } else if (configFactory != null) {
-            return "(" + ConfigurationAdmin.SERVICE_FACTORYPID + "=" + OsgiUtils.escape(configFactory) + ")";
-        }
 
-        return null;
+        return OsgiUtils.getFilter(configFactory, friendlyNameProperty, configName);
+
     }
 
 
@@ -194,28 +189,11 @@ public class OsgiConfigurationResourcePr
 
 
     private static <K, V> Map<K, V> fromDictionary(Dictionary<K, V> dictionary) {
-        if (dictionary == null) {
-            return null;
-        }
-        Map<K, V> map = new HashMap<K, V>(dictionary.size());
-        Enumeration<K> keys = dictionary.keys();
-        while (keys.hasMoreElements()) {
-            K key = keys.nextElement();
-            map.put(key, dictionary.get(key));
-        }
-        return map;
+        return OsgiUtils.fromDictionary(dictionary);
     }
 
     private static <K, V> Dictionary<K, V> toDictionary(Map<K, V> map) {
-        if (map == null) {
-            return null;
-        }
-        Dictionary<K, V> dictionary = new Hashtable<K, V>(map.size());
-        for (Map.Entry<K, V> entry : map.entrySet()) {
-            dictionary.put(entry.getKey(), entry.getValue());
-        }
-
-        return dictionary;
+        return OsgiUtils.toDictionary(map);
     }
 
     private Map<String, Object> filterBeforeSave(Map<String, Object> properties) {

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/resources/impl/OsgiServicePropertiesResourceProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/resources/impl/OsgiServicePropertiesResourceProvider.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/resources/impl/OsgiServicePropertiesResourceProvider.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/resources/impl/OsgiServicePropertiesResourceProvider.java Tue Nov 25 10:16:08 2014
@@ -30,6 +30,7 @@ import java.util.concurrent.ConcurrentHa
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceProvider;
 import org.apache.sling.commons.osgi.PropertiesUtil;
+import org.apache.sling.distribution.resources.DistributionConstants;
 import org.apache.sling.distribution.resources.impl.common.AbstractReadableResourceProvider;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
@@ -93,7 +94,15 @@ public class OsgiServicePropertiesResour
     public Object addingService(ServiceReference serviceReference) {
         String serviceName = PropertiesUtil.toString(serviceReference.getProperty(friendlyNameProperty), null);
 
-        if (serviceName == null) return null;
+        if (serviceName == null)  {
+            return null;
+        }
+
+        boolean isResource = PropertiesUtil.toBoolean(serviceReference.getProperty(DistributionConstants.PN_IS_RESOURCE), false);
+
+        if (!isResource) {
+            return null;
+        }
 
         Map<String, Object> properties = new HashMap<String, Object>();
 
@@ -121,7 +130,15 @@ public class OsgiServicePropertiesResour
     public void removedService(ServiceReference serviceReference, Object o) {
         String serviceName = PropertiesUtil.toString(serviceReference.getProperty(friendlyNameProperty), null);
 
-        if (serviceName == null) return;
+        if (serviceName == null)  {
+            return;
+        }
+
+        boolean isResource = PropertiesUtil.toBoolean(serviceReference.getProperty(DistributionConstants.PN_IS_RESOURCE), false);
+
+        if (!isResource) {
+            return;
+        }
 
         services.remove(serviceName);
         serviceProperties.remove(serviceName);

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/resources/impl/OsgiUtils.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/resources/impl/OsgiUtils.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/resources/impl/OsgiUtils.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/resources/impl/OsgiUtils.java Tue Nov 25 10:16:08 2014
@@ -18,7 +18,9 @@
  */
 package org.apache.sling.distribution.resources.impl;
 
-import java.util.Map;
+import org.osgi.service.cm.ConfigurationAdmin;
+
+import java.util.*;
 
 public class OsgiUtils {
     /**
@@ -62,4 +64,75 @@ public class OsgiUtils {
     private static String safeString(Object obj) {
         return obj == null? "null" : obj.toString();
     }
+
+
+    public static String getFilter(String configFactory, String propertyName, String propertyValue) {
+        if (propertyName!= null && propertyValue != null) {
+            return "(&(" + ConfigurationAdmin.SERVICE_FACTORYPID + "=" + OsgiUtils.escape(configFactory) + ")("
+                    + OsgiUtils.escape(propertyName) + "=" + OsgiUtils.escape(propertyValue) + "))";
+        } else if (configFactory != null) {
+            return "(" + ConfigurationAdmin.SERVICE_FACTORYPID + "=" + OsgiUtils.escape(configFactory) + ")";
+        }
+
+        return null;
+    }
+
+
+    public static <K, V> Map<K, V> fromDictionary(Dictionary<K, V> dictionary) {
+        if (dictionary == null) {
+            return null;
+        }
+        Map<K, V> map = new HashMap<K, V>(dictionary.size());
+        Enumeration<K> keys = dictionary.keys();
+        while (keys.hasMoreElements()) {
+            K key = keys.nextElement();
+            map.put(key, dictionary.get(key));
+        }
+        return map;
+    }
+
+    public static <K, V> Dictionary<K, V> toDictionary(Map<K, V> map) {
+        if (map == null) {
+            return null;
+        }
+        Dictionary<K, V> dictionary = new Hashtable<K, V>(map.size());
+        for (Map.Entry<K, V> entry : map.entrySet()) {
+            dictionary.put(entry.getKey(), entry.getValue());
+        }
+
+        return dictionary;
+    }
+
+    public static Map<String, Object> sanitize(Map<String, Object> map) {
+        Map<String, Object> result = new HashMap<String, Object>();
+        if (map == null) {
+            return result;
+        }
+
+        for (Map.Entry<String, Object> entry : map.entrySet()) {
+            if (entry.getValue() == null) {
+                continue;
+            }
+
+            // skip jcr: stuff
+            if (entry.getKey().contains(":")) {
+                continue;
+            }
+
+            Class valueClass = entry.getValue().getClass();
+            if (valueClass.isArray()) {
+                valueClass = valueClass.getComponentType();
+            }
+
+            if (valueClass.isPrimitive()
+                    || valueClass.equals(String.class)
+                    || valueClass.equals(Boolean.class)
+                    || valueClass.equals(Integer.class)) {
+                result.put(entry.getKey(), entry.getValue());
+            }
+        }
+
+        return result;
+
+    }
 }

Added: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilderFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilderFactory.java?rev=1641561&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilderFactory.java (added)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilderFactory.java Tue Nov 25 10:16:08 2014
@@ -0,0 +1,88 @@
+package org.apache.sling.distribution.serialization.impl.vlt;
+
+import org.apache.felix.scr.annotations.*;
+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;
+import org.osgi.framework.BundleContext;
+
+import javax.annotation.Nonnull;
+import java.io.InputStream;
+import java.util.Map;
+
+@Component(metatype = true,
+        label = "Sling Distribution - File Vault Package Builder Factory",
+        description = "OSGi configuration for file vault package builders",
+        configurationFactory = true,
+        specVersion = "1.1",
+        policy = ConfigurationPolicy.REQUIRE
+)
+@Service(DistributionPackageBuilder.class)
+public class FileVaultDistributionPackageBuilderFactory implements DistributionPackageBuilder {
+
+
+    /**
+     * name of this component.
+     */
+    @Property
+    public static final String NAME = DistributionComponentUtils.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";
+
+    DistributionPackageBuilder packageBuilder;
+
+    @Reference
+    private DistributionEventFactory distributionEventFactory;
+
+    @Reference
+    private Packaging packaging;
+
+
+
+    @Activate
+    public void activate(BundleContext context, Map<String, Object> config) {
+
+        String importMode = PropertiesUtil.toString(config.get(PACKAGE_BUILDER_FILEVLT_IMPORT_MODE), null);
+        String aclHandling = PropertiesUtil.toString(config.get(PACKAGE_BUILDER_FILEVLT_ACLHANDLING), null);
+        if (importMode != null && aclHandling != null) {
+            packageBuilder = new ResourceSharedDistributionPackageBuilder(new FileVaultDistributionPackageBuilder(packaging, distributionEventFactory, importMode, aclHandling));
+        } else {
+            packageBuilder = new ResourceSharedDistributionPackageBuilder(new FileVaultDistributionPackageBuilder(packaging, distributionEventFactory));
+        }
+    }
+
+
+    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/transport/authentication/impl/UserCredentialsTransportAuthenticationProviderFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/authentication/impl/UserCredentialsTransportAuthenticationProviderFactory.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/authentication/impl/UserCredentialsTransportAuthenticationProviderFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/authentication/impl/UserCredentialsTransportAuthenticationProviderFactory.java Tue Nov 25 10:16:08 2014
@@ -20,13 +20,9 @@ package org.apache.sling.distribution.tr
 
 import java.util.Map;
 
-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.sling.distribution.component.impl.DefaultDistributionComponentFactoryConstants;
-import org.apache.sling.distribution.component.impl.DistributionComponentManager;
+import org.apache.felix.scr.annotations.*;
+import org.apache.sling.commons.osgi.PropertiesUtil;
+import org.apache.sling.distribution.component.impl.DistributionComponentUtils;
 import org.apache.sling.distribution.transport.authentication.TransportAuthenticationContext;
 import org.apache.sling.distribution.transport.authentication.TransportAuthenticationException;
 import org.apache.sling.distribution.transport.authentication.TransportAuthenticationProvider;
@@ -41,27 +37,30 @@ import org.slf4j.LoggerFactory;
 public class UserCredentialsTransportAuthenticationProviderFactory implements
         TransportAuthenticationProvider {
 
-    @Property(value = DefaultDistributionComponentFactoryConstants.TRANSPORT_AUTHENTICATION_PROVIDER_USER, propertyPrivate = true)
-    private static final String TYPE = DefaultDistributionComponentFactoryConstants.COMPONENT_TYPE;
 
+    /**
+     * name of this component.
+     */
     @Property
-    public final static String USERNAME = DefaultDistributionComponentFactoryConstants.TRANSPORT_AUTHENTICATION_PROVIDER_USER_PROPERTY_USERNAME;
+    public static final String NAME = DistributionComponentUtils.NAME;
 
     @Property
-    public final static String PASSWORD = DefaultDistributionComponentFactoryConstants.TRANSPORT_AUTHENTICATION_PROVIDER_USER_PROPERTY_PASSWORD;
-
-    private final Logger log = LoggerFactory.getLogger(getClass());
+    public final static String USERNAME = "username";
 
+    @Property
+    public final static String PASSWORD = "password";
 
-    @Reference
-    private DistributionComponentManager componentManager;
+    private final Logger log = LoggerFactory.getLogger(getClass());
 
 
     private TransportAuthenticationProvider transportAuthenticationProvider;
 
 
+    @Activate
     public void activate(Map<String, Object> config) {
-        transportAuthenticationProvider = componentManager.createComponent(TransportAuthenticationProvider.class, config, null);
+        String username = PropertiesUtil.toString(config.get(USERNAME), "").trim();
+        String password = PropertiesUtil.toString(config.get(PASSWORD), "").trim();
+        transportAuthenticationProvider = new UserCredentialsTransportAuthenticationProvider(username, password);
     }
 
     public Object authenticate(Object authenticable, TransportAuthenticationContext context)

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/AbstractJcrEventTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/AbstractJcrEventTrigger.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/AbstractJcrEventTrigger.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/AbstractJcrEventTrigger.java Tue Nov 25 10:16:08 2014
@@ -28,7 +28,6 @@ import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.sling.distribution.communication.DistributionRequest;
-import org.apache.sling.distribution.component.ManagedDistributionComponent;
 import org.apache.sling.distribution.trigger.DistributionRequestHandler;
 import org.apache.sling.distribution.trigger.DistributionTrigger;
 import org.apache.sling.distribution.trigger.DistributionTriggerException;
@@ -41,7 +40,7 @@ import org.slf4j.LoggerFactory;
  * Abstract implementation of a {@link org.apache.sling.distribution.trigger.DistributionTrigger} that listens for 'safe'
  * events and triggers a {@link org.apache.sling.distribution.communication.DistributionRequest} from that.
  */
-public abstract class AbstractJcrEventTrigger implements DistributionTrigger, ManagedDistributionComponent {
+public abstract class AbstractJcrEventTrigger implements DistributionTrigger {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ChainDistributeDistributionTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ChainDistributeDistributionTrigger.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ChainDistributeDistributionTrigger.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ChainDistributeDistributionTrigger.java Tue Nov 25 10:16:08 2014
@@ -26,7 +26,6 @@ import java.util.concurrent.ConcurrentHa
 
 import org.apache.sling.distribution.communication.DistributionRequestType;
 import org.apache.sling.distribution.communication.DistributionRequest;
-import org.apache.sling.distribution.component.ManagedDistributionComponent;
 import org.apache.sling.distribution.event.DistributionEventType;
 import org.apache.sling.distribution.trigger.DistributionRequestHandler;
 import org.apache.sling.distribution.trigger.DistributionTrigger;
@@ -42,7 +41,7 @@ import org.slf4j.LoggerFactory;
 /**
  * {@link org.apache.sling.distribution.trigger.DistributionTrigger} for chain distribution upon a certain {@link org.apache.sling.distribution.event.DistributionEventType}
  */
-public class ChainDistributeDistributionTrigger implements DistributionTrigger, ManagedDistributionComponent {
+public class ChainDistributeDistributionTrigger implements DistributionTrigger {
 
     public static final String PATH = "path";
 

Added: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/LocalDistributionTriggerFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/LocalDistributionTriggerFactory.java?rev=1641561&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/LocalDistributionTriggerFactory.java (added)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/LocalDistributionTriggerFactory.java Tue Nov 25 10:16:08 2014
@@ -0,0 +1,162 @@
+package org.apache.sling.distribution.trigger.impl;
+
+import org.apache.felix.scr.annotations.*;
+import org.apache.sling.commons.osgi.PropertiesUtil;
+import org.apache.sling.commons.scheduler.Scheduler;
+import org.apache.sling.distribution.communication.DistributionRequestType;
+import org.apache.sling.distribution.component.impl.DistributionComponentUtils;
+import org.apache.sling.distribution.trigger.DistributionRequestHandler;
+import org.apache.sling.distribution.trigger.DistributionTrigger;
+import org.apache.sling.distribution.trigger.DistributionTriggerException;
+import org.apache.sling.jcr.api.SlingRepository;
+import org.osgi.framework.BundleContext;
+
+import javax.annotation.Nonnull;
+import java.util.Map;
+
+@Component(metatype = true,
+        label = "Sling Distribution - Generic Local Triggers Factory",
+        configurationFactory = true,
+        specVersion = "1.1",
+        policy = ConfigurationPolicy.REQUIRE
+)
+@Service(DistributionTrigger.class)
+public class LocalDistributionTriggerFactory implements DistributionTrigger {
+
+
+    /**
+     * remote event trigger type
+     */
+    public static final String TRIGGER_REMOTE_EVENT = "remoteEvent";
+
+    /**
+     * remote event endpoint property
+     */
+    public static final String TRIGGER_REMOTE_EVENT_PROPERTY_ENDPOINT = "endpoint";
+
+    /**
+     * resource event trigger type
+     */
+    public static final String TRIGGER_RESOURCE_EVENT = "resourceEvent";
+
+    /**
+     * resource event path property
+     */
+    public static final String TRIGGER_RESOURCE_EVENT_PROPERTY_PATH = "path";
+
+    /**
+     * scheduled trigger type
+     */
+    public static final String TRIGGER_SCHEDULED_EVENT = "scheduledEvent";
+
+    /**
+     * scheduled trigger action property
+     */
+    public static final String TRIGGER_SCHEDULED_EVENT_PROPERTY_ACTION = "action";
+
+    /**
+     * scheduled trigger path property
+     */
+    public static final String TRIGGER_SCHEDULED_EVENT_PROPERTY_PATH = "path";
+
+    /**
+     * scheduled trigger seconds property
+     */
+    public static final String TRIGGER_SCHEDULED_EVENT_PROPERTY_SECONDS = "seconds";
+
+    /**
+     * chain distribution trigger type
+     */
+    public static final String TRIGGER_DISTRIBUTION_EVENT = "distributionEvent";
+
+    /**
+     * chain distribution path property
+     */
+    public static final String TRIGGER_DISTRIBUTION_EVENT_PROPERTY_PATH = "path";
+
+    /**
+     * jcr event trigger type
+     */
+    public static final String TRIGGER_JCR_EVENT = "jcrEvent";
+
+    /**
+     * jcr event trigger path property
+     */
+    public static final String TRIGGER_JCR_EVENT_PROPERTY_PATH = "path";
+
+    /**
+     * jcr event trigger service user property
+     */
+    public static final String TRIGGER_JCR_EVENT_PROPERTY_SERVICE_NAME = "servicename";
+
+    /**
+     * jcr persisting event trigger type
+     */
+    public static final String TRIGGER_PERSISTED_JCR_EVENT = "persistedJcrEvent";
+
+    /**
+     * jcr persisting event trigger path property
+     */
+    public static final String TRIGGER_PERSISTED_JCR_EVENT_PROPERTY_PATH = "path";
+
+    /**
+     * jcr persisting event trigger service user property
+     */
+    public static final String TRIGGER_PERSISTED_JCR_EVENT_PROPERTY_SERVICE_NAME = "servicename";
+
+    /**
+     * jcr persisting event trigger nuggets path property
+     */
+    public static final String TRIGGER_PERSISTED_JCR_EVENT_PROPERTY_NUGGETS_PATH = "nuggetsPath";
+
+
+
+    DistributionTrigger trigger;
+
+    @Reference
+    private SlingRepository repository;
+
+    @Reference
+    private Scheduler scheduler;
+
+
+    @Activate
+    public void activate(BundleContext bundleContext, Map<String, Object> config) {
+        String factory = PropertiesUtil.toString(config.get(DistributionComponentUtils.TYPE), null);
+
+        if (TRIGGER_RESOURCE_EVENT.equals(factory)) {
+            String path = PropertiesUtil.toString(config.get(TRIGGER_RESOURCE_EVENT_PROPERTY_PATH), null);
+
+            trigger = new ResourceEventDistributionTrigger(path, bundleContext);
+        } else if (TRIGGER_SCHEDULED_EVENT.equals(factory)) {
+            String action = PropertiesUtil.toString(config.get(TRIGGER_SCHEDULED_EVENT_PROPERTY_ACTION), DistributionRequestType.PULL.name());
+            String path = PropertiesUtil.toString(config.get(TRIGGER_SCHEDULED_EVENT_PROPERTY_PATH), "/");
+            int interval = PropertiesUtil.toInteger(config.get(TRIGGER_SCHEDULED_EVENT_PROPERTY_SECONDS), 30);
+
+            trigger =  new ScheduledDistributionTrigger(action, path, interval, scheduler);
+        } else if (TRIGGER_DISTRIBUTION_EVENT.equals(factory)) {
+            String path = PropertiesUtil.toString(config.get(TRIGGER_DISTRIBUTION_EVENT_PROPERTY_PATH), null);
+
+            trigger =  new ChainDistributeDistributionTrigger(path, bundleContext);
+        } else if (TRIGGER_JCR_EVENT.equals(factory)) {
+            String path = PropertiesUtil.toString(config.get(TRIGGER_JCR_EVENT_PROPERTY_PATH), null);
+            String serviceName = PropertiesUtil.toString(config.get(TRIGGER_JCR_EVENT_PROPERTY_SERVICE_NAME), null);
+
+            trigger =  new JcrEventDistributionTrigger(repository, path, serviceName);
+        } else if (TRIGGER_PERSISTED_JCR_EVENT.equals(factory)) {
+            String path = PropertiesUtil.toString(config.get(TRIGGER_PERSISTED_JCR_EVENT_PROPERTY_PATH), null);
+            String serviceName = PropertiesUtil.toString(config.get(TRIGGER_PERSISTED_JCR_EVENT_PROPERTY_SERVICE_NAME), null);
+            String nuggetsPath = PropertiesUtil.toString(config.get(TRIGGER_PERSISTED_JCR_EVENT_PROPERTY_NUGGETS_PATH), null);
+
+            trigger =  new PersistingJcrEventDistributionTrigger(repository, path, serviceName, nuggetsPath);
+        }
+    }
+
+    public void register(@Nonnull DistributionRequestHandler requestHandler) throws DistributionTriggerException {
+        trigger.register(requestHandler);
+    }
+
+    public void unregister(@Nonnull DistributionRequestHandler requestHandler) throws DistributionTriggerException {
+        trigger.unregister(requestHandler);
+    }
+}

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/PersistingJcrEventDistributionTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/PersistingJcrEventDistributionTrigger.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/PersistingJcrEventDistributionTrigger.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/PersistingJcrEventDistributionTrigger.java Tue Nov 25 10:16:08 2014
@@ -29,7 +29,6 @@ import java.util.Set;
 
 import org.apache.sling.distribution.communication.DistributionRequestType;
 import org.apache.sling.distribution.communication.DistributionRequest;
-import org.apache.sling.distribution.component.ManagedDistributionComponent;
 import org.apache.sling.distribution.trigger.DistributionTrigger;
 import org.apache.sling.jcr.api.SlingRepository;
 import org.slf4j.Logger;
@@ -39,7 +38,7 @@ import org.slf4j.LoggerFactory;
  * {@link org.apache.sling.distribution.trigger.DistributionTrigger} that listens for certain events and persists them
  * under a specific path in the repo
  */
-public class PersistingJcrEventDistributionTrigger extends AbstractJcrEventTrigger implements DistributionTrigger, ManagedDistributionComponent {
+public class PersistingJcrEventDistributionTrigger extends AbstractJcrEventTrigger implements DistributionTrigger {
 
     private static final String DEFAULT_NUGGETS_PATH = "/var/nuggets";
 

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ResourceEventDistributionTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ResourceEventDistributionTrigger.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ResourceEventDistributionTrigger.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ResourceEventDistributionTrigger.java Tue Nov 25 10:16:08 2014
@@ -27,7 +27,6 @@ import java.util.concurrent.ConcurrentHa
 import org.apache.sling.api.SlingConstants;
 import org.apache.sling.distribution.communication.DistributionRequestType;
 import org.apache.sling.distribution.communication.DistributionRequest;
-import org.apache.sling.distribution.component.ManagedDistributionComponent;
 import org.apache.sling.distribution.trigger.DistributionRequestHandler;
 import org.apache.sling.distribution.trigger.DistributionTrigger;
 import org.apache.sling.distribution.trigger.DistributionTriggerException;
@@ -43,7 +42,7 @@ import org.slf4j.LoggerFactory;
  * {@link org.apache.sling.distribution.trigger.DistributionTrigger} for triggering a specific handler (e.g. agent) upon
  * node / properties being changed under a certain path
  */
-public class ResourceEventDistributionTrigger implements DistributionTrigger, ManagedDistributionComponent {
+public class ResourceEventDistributionTrigger implements DistributionTrigger {
 
 
     private final Logger log = LoggerFactory.getLogger(getClass());

Added: sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/component/impl/DistributionComponentUtilsTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/component/impl/DistributionComponentUtilsTest.java?rev=1641561&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/component/impl/DistributionComponentUtilsTest.java (added)
+++ sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/component/impl/DistributionComponentUtilsTest.java Tue Nov 25 10:16:08 2014
@@ -0,0 +1,115 @@
+package org.apache.sling.distribution.component.impl;
+
+import org.apache.sling.distribution.agent.DistributionAgent;
+import org.junit.Test;
+
+import java.util.HashMap;
+import java.util.Map;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+
+public class DistributionComponentUtilsTest {
+
+    @Test
+    public void testEmptySettingsTransform() {
+        Map<String, Object> settings = new HashMap<String, Object>();
+
+        DistributionComponentUtils utils = new DistributionComponentUtils();
+        Map<String, Map<String, Object>> result = utils.transformToOsgi(settings);
+
+        assertEquals(0, result.size());
+    }
+
+    @Test
+    public void testFirstLevelTransform() {
+        Map<String, Object> settings = new HashMap<String, Object>();
+        settings.put("kind", "agent");
+        settings.put("name", "publish");
+        settings.put("type", "simple");
+
+        settings.put("packageExporter", new HashMap<String, Object>());
+
+        DistributionComponentUtils utils = new DistributionComponentUtils();
+        Map<String, Map<String, Object>> result = utils.transformToOsgi(settings);
+
+        assertEquals(1, result.size());
+        String resultKey = "agent|simple|publish";
+        assertTrue(result.containsKey(resultKey));
+        assertEquals(4, result.get(resultKey).size());
+        assertTrue(result.get(resultKey).containsKey("name"));
+        assertTrue(result.get(resultKey).containsKey("type"));
+        assertTrue(result.get(resultKey).containsKey("packageExporter.target"));
+        assertEquals("(parent.name=publish)", result.get(resultKey).get("packageExporter.target"));
+    }
+
+    @Test
+    public void testTwoLevelTransform() {
+        Map<String, Object> settings = new HashMap<String, Object>();
+        settings.put("kind", "agent");
+        settings.put("name", "publish");
+        settings.put("type", "simple");
+        settings.put("packageExporter", new HashMap<String, Object>());
+        ((Map) settings.get("packageExporter")).put("kind", "exporter");
+        ((Map) settings.get("packageExporter")).put("type", "remote");
+
+        DistributionComponentUtils utils = new DistributionComponentUtils();
+        Map<String, Map<String, Object>> result = utils.transformToOsgi(settings);
+
+        assertEquals(2, result.size());
+
+        {
+            String resultKey = "agent|simple|publish";
+            assertTrue(result.containsKey(resultKey));
+            assertEquals(4, result.get(resultKey).size());
+            assertTrue(result.get(resultKey).containsKey("kind"));
+            assertTrue(result.get(resultKey).containsKey("name"));
+            assertTrue(result.get(resultKey).containsKey("type"));
+            assertTrue(result.get(resultKey).containsKey("packageExporter.target"));
+            assertEquals("(parent.name=publish)", result.get(resultKey).get("packageExporter.target"));
+        }
+
+        {
+            String resultKey = "exporter|remote|publish/packageExporter";
+            assertTrue(result.containsKey(resultKey));
+            assertEquals(4, result.get(resultKey).size());
+        }
+    }
+
+    @Test
+    public void testMultipleTargetTransform() {
+        Map<String, Object> settings = new HashMap<String, Object>();
+        settings.put("kind", "agent");
+        settings.put("name", "publish");
+        settings.put("type", "simple");
+        settings.put("triggers", new HashMap<String, Object>());
+        ((Map) settings.get("triggers")).put("type", "list");
+        ((Map) settings.get("triggers")).put("kind", "trigger");
+
+
+        Map trigger1Properties = new HashMap<String, Object>();
+        trigger1Properties.put("type", "event");
+        ((Map) settings.get("triggers")).put("trigger1", trigger1Properties);
+
+
+        Map trigger2Properties = new HashMap<String, Object>();
+        trigger2Properties.put("type", "event");
+        ((Map) settings.get("triggers")).put("trigger2", trigger2Properties);
+
+
+
+        DistributionComponentUtils utils = new DistributionComponentUtils();
+        Map<String, Map<String, Object>> result = utils.transformToOsgi(settings);
+
+        assertEquals(3, result.size());
+        {
+            String resultKey = "agent|simple|publish";
+            assertTrue(result.containsKey(resultKey));
+            assertEquals(4, result.get(resultKey).size());
+            assertTrue(result.get(resultKey).containsKey("name"));
+            assertTrue(result.get(resultKey).containsKey("type"));
+            assertTrue(result.get(resultKey).containsKey("triggers.target"));
+            assertEquals("(parent.name=publish)", result.get(resultKey).get("triggers.target"));
+        }
+    }
+}

Modified: sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionAgentResourcesIntegrationTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionAgentResourcesIntegrationTest.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionAgentResourcesIntegrationTest.java (original)
+++ sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionAgentResourcesIntegrationTest.java Tue Nov 25 10:16:08 2014
@@ -20,16 +20,10 @@ package org.apache.sling.distribution.it
 
 import java.util.UUID;
 
+import org.junit.Ignore;
 import org.junit.Test;
 
-import static org.apache.sling.distribution.it.DistributionUtils.agentConfigUrl;
-import static org.apache.sling.distribution.it.DistributionUtils.agentRootUrl;
-import static org.apache.sling.distribution.it.DistributionUtils.agentUrl;
-import static org.apache.sling.distribution.it.DistributionUtils.assertExists;
-import static org.apache.sling.distribution.it.DistributionUtils.assertNotExists;
-import static org.apache.sling.distribution.it.DistributionUtils.assertResponseContains;
-import static org.apache.sling.distribution.it.DistributionUtils.deleteNode;
-import static org.apache.sling.distribution.it.DistributionUtils.queueUrl;
+import static org.apache.sling.distribution.it.DistributionUtils.*;
 
 /**
  * Integration test for {@link org.apache.sling.distribution.agent.DistributionAgent} resources
@@ -43,7 +37,7 @@ public class DistributionAgentResourcesI
                 "publish-reverse"
         };
         for (String agentName : defaultAgentNames) {
-            assertExists(authorClient, agentConfigUrl(agentName));
+            assertExists(authorClient, authorAgentConfigUrl(agentName));
         }
 
     }
@@ -53,10 +47,9 @@ public class DistributionAgentResourcesI
     public void testDefaultAgentConfigurationResourcesOnPublish() throws Exception {
         String[] defaultAgentNames = new String[]{
                 "reverse",
-                "cache-flush"
         };
         for (String agentName : defaultAgentNames) {
-            assertExists(publishClient, agentConfigUrl(agentName));
+            assertExists(publishClient, publishAgentConfigUrl(agentName));
         }
 
     }
@@ -65,9 +58,7 @@ public class DistributionAgentResourcesI
     public void testDefaultPublishAgentResources() throws Exception {
         // these agents do not exist as they are bundled to publish runMode
         String[] defaultPublishAgentNames = new String[]{
-                "reverse",
-                "cache-flush"
-        };
+                "reverse"        };
         for (String agentName : defaultPublishAgentNames) {
             assertNotExists(authorClient, agentUrl(agentName));
         }
@@ -89,9 +80,7 @@ public class DistributionAgentResourcesI
     public void testDefaultPublishAgentQueueResources() throws Exception {
         // these agent queues do not exist as they are bundled to publish runMode
         String[] defaultPublishAgentNames = new String[]{
-                "reverse",
-                "cache-flush"
-        };
+                "reverse"        };
         for (String agentName : defaultPublishAgentNames) {
             assertNotExists(authorClient, queueUrl(agentName));
         }
@@ -118,9 +107,10 @@ public class DistributionAgentResourcesI
     }
 
     @Test
+    @Ignore
     public void testAgentConfigurationResourceCreate() throws Exception {
         String agentName = "sample-create-config" + UUID.randomUUID();
-        String newConfigResource = agentConfigUrl(agentName);
+        String newConfigResource = authorAgentConfigUrl(agentName);
 
         authorClient.createNode(newConfigResource, "name", agentName);
         assertExists(authorClient, newConfigResource);
@@ -130,9 +120,10 @@ public class DistributionAgentResourcesI
     }
 
     @Test
+    @Ignore
     public void testAgentConfigurationResourceDelete() throws Exception {
         String agentName = "sample-delete-config" + UUID.randomUUID();
-        String newConfigResource = agentConfigUrl(agentName);
+        String newConfigResource = authorAgentConfigUrl(agentName);
         authorClient.createNode(newConfigResource, "name", agentName);
         assertExists(authorClient, newConfigResource);
 
@@ -142,9 +133,10 @@ public class DistributionAgentResourcesI
 
 
     @Test
+    @Ignore
     public void testAgentConfigurationResourceUpdate() throws Exception {
         String agentName = "sample-create-config" + UUID.randomUUID();
-        String newConfigResource = agentConfigUrl(agentName);
+        String newConfigResource = authorAgentConfigUrl(agentName);
 
         authorClient.createNode(newConfigResource, "name", agentName);
         assertExists(authorClient, newConfigResource);

Modified: sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java (original)
+++ sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java Tue Nov 25 10:16:08 2014
@@ -23,12 +23,9 @@ import org.apache.sling.testing.tools.sl
 import org.apache.sling.testing.tools.sling.SlingInstanceManager;
 import org.junit.BeforeClass;
 
-import static org.apache.sling.distribution.it.DistributionUtils.agentConfigUrl;
-import static org.apache.sling.distribution.it.DistributionUtils.agentUrl;
-import static org.apache.sling.distribution.it.DistributionUtils.assertExists;
-import static org.apache.sling.distribution.it.DistributionUtils.exporterUrl;
-import static org.apache.sling.distribution.it.DistributionUtils.importerUrl;
-import static org.apache.sling.distribution.it.DistributionUtils.setAgentProperties;
+import java.io.IOException;
+
+import static org.apache.sling.distribution.it.DistributionUtils.*;
 
 /**
  * Integration test base class for distribution
@@ -51,29 +48,26 @@ public abstract class DistributionIntegr
         publishClient = new SlingClient(publish.getServerBaseUrl(), publish.getServerUsername(), publish.getServerPassword());
 
         try {
-            assertExists(authorClient, agentConfigUrl("publish"));
-            assertExists(authorClient, agentConfigUrl("publish-reverse"));
+            assertExists(authorClient, authorAgentConfigUrl("publish"));
 
             // change the url for publish agent and wait for it to start
             String remoteImporterUrl = publish.getServerBaseUrl() + importerUrl("default");
 
-            setAgentProperties(author, "publish",
-                    "packageImporter", "type=remote",
-                    "packageImporter", "endpoints[0]=" + remoteImporterUrl,
-                    "packageImporter", "packageBuilder/type=vlt");
+
+            authorClient.setProperties(authorAgentConfigUrl("publish") + "/packageImporter",
+                    "endpoints", remoteImporterUrl);
+
 
             Thread.sleep(3000);
 
             assertExists(authorClient, agentUrl("publish"));
 
-            assertExists(authorClient, agentConfigUrl("publish-reverse"));
+            assertExists(authorClient, authorAgentConfigUrl("publish-reverse"));
 
             String remoteExporterUrl = publish.getServerBaseUrl() + exporterUrl("reverse");
-            setAgentProperties(author, "publish-reverse",
-                    "packageExporter", "type=remote",
-                    "packageExporter", "endpoints[0]=" + remoteExporterUrl,
 
-                    "packageExporter", "packageBuilder/type=vlt");
+            authorClient.setProperties(authorAgentConfigUrl("publish-reverse") + "/packageExporter",
+                    "endpoints", remoteExporterUrl);
 
             Thread.sleep(3000);
             assertExists(authorClient, agentUrl("publish-reverse"));
@@ -84,4 +78,9 @@ public abstract class DistributionIntegr
 
     }
 
+    public static void setAuthorAgentProperties(String agentName, String... properties) throws IOException {
+        assertPostResourceWithParameters(author, 200, authorAgentConfigUrl(agentName),
+                properties);
+    }
+
 }

Modified: sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionUtils.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionUtils.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionUtils.java (original)
+++ sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionUtils.java Tue Nov 25 10:16:08 2014
@@ -46,7 +46,7 @@ public class DistributionUtils {
     private static final String JSON_SELECTOR = ".json";
     private static final String DISTRIBUTION_ROOT_PATH = "/libs/sling/distribution";
 
-    private static String assertPostResourceWithParameters(SlingInstance slingInstance,
+    public static String assertPostResourceWithParameters(SlingInstance slingInstance,
                                                            int status, String path, String... parameters) throws IOException {
         Request request = slingInstance.getRequestBuilder().buildPostRequest(path);
 
@@ -82,11 +82,6 @@ public class DistributionUtils {
     }
 
 
-    public static void setAgentProperties(SlingInstance slingInstance, String agentName, String... properties) throws IOException {
-        assertPostResourceWithParameters(slingInstance, 200, agentConfigUrl(agentName),
-                properties);
-    }
-
 
     public static void assertResponseContains(SlingInstance slingInstance,
                                               String resource, String... parameters) throws IOException {
@@ -182,8 +177,12 @@ public class DistributionUtils {
         return agentUrl(agentName) + "/queue";
     }
 
-    public static String agentConfigUrl(String agentName) {
-        return DISTRIBUTION_ROOT_PATH + "/settings/agents/" + agentName;
+    public static String authorAgentConfigUrl(String agentName) {
+        return DISTRIBUTION_ROOT_PATH + "/settings.author/agents/" + agentName;
+    }
+
+    public static String publishAgentConfigUrl(String agentName) {
+        return DISTRIBUTION_ROOT_PATH + "/settings.publish/agents/" + agentName;
     }
 
 

Modified: sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/triggers/DistributionTriggerResourcesTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/triggers/DistributionTriggerResourcesTest.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/triggers/DistributionTriggerResourcesTest.java (original)
+++ sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/triggers/DistributionTriggerResourcesTest.java Tue Nov 25 10:16:08 2014
@@ -21,11 +21,13 @@ package org.apache.sling.distribution.it
 
 
 import org.apache.sling.distribution.it.DistributionIntegrationTestBase;
+import org.junit.Ignore;
 import org.junit.Test;
 
 import static org.apache.sling.distribution.it.DistributionUtils.assertExists;
 import static org.apache.sling.distribution.it.DistributionUtils.triggerUrl;
 
+@Ignore
 public class DistributionTriggerResourcesTest extends DistributionIntegrationTestBase {
 
     @Test

Modified: sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/triggers/ScheduledDistributionTriggerTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/triggers/ScheduledDistributionTriggerTest.java?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/triggers/ScheduledDistributionTriggerTest.java (original)
+++ sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/triggers/ScheduledDistributionTriggerTest.java Tue Nov 25 10:16:08 2014
@@ -20,11 +20,14 @@
 package org.apache.sling.distribution.it.triggers;
 
 import org.apache.sling.distribution.it.DistributionIntegrationTestBase;
+import org.junit.Ignore;
 import org.junit.Test;
 
 import static org.apache.sling.distribution.it.DistributionUtils.assertResponseContains;
 import static org.apache.sling.distribution.it.DistributionUtils.triggerEventUrl;
 
+@Ignore
+
 public class ScheduledDistributionTriggerTest extends DistributionIntegrationTestBase {
 
     @Test

Modified: sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.author/org.apache.sling.distribution.component.impl.ResourceBasedDistributionComponentFactory-agents.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.author/org.apache.sling.distribution.component.impl.ResourceBasedDistributionComponentFactory-agents.json?rev=1641561&r1=1641560&r2=1641561&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.author/org.apache.sling.distribution.component.impl.ResourceBasedDistributionComponentFactory-agents.json (original)
+++ sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.author/org.apache.sling.distribution.component.impl.ResourceBasedDistributionComponentFactory-agents.json Tue Nov 25 10:16:08 2014
@@ -3,6 +3,6 @@
     "name": "agents",
 
     "kind": "agent",
-    "path": "/libs/sling/distribution/jcrsettings/agents",
-    "defaults.path" : "/libs/sling/distribution/jcrsettings/defaults/agents/global"
+    "path": "/libs/sling/distribution/settings.author/agents",
+    "defaults.path" : "/libs/sling/distribution/settings.author/defaults/agents/global"
 }
\ No newline at end of file

Added: sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/org.apache.sling.distribution.transport.authentication.impl.UserCredentialsTransportAuthenticationProviderFactory-publishAdmin.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/org.apache.sling.distribution.transport.authentication.impl.UserCredentialsTransportAuthenticationProviderFactory-publishAdmin.json?rev=1641561&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/org.apache.sling.distribution.transport.authentication.impl.UserCredentialsTransportAuthenticationProviderFactory-publishAdmin.json (added)
+++ sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/org.apache.sling.distribution.transport.authentication.impl.UserCredentialsTransportAuthenticationProviderFactory-publishAdmin.json Tue Nov 25 10:16:08 2014
@@ -0,0 +1,6 @@
+{
+    "jcr:primaryType": "sling:OsgiConfig",
+    "name": "publishAdmin",
+    "username": "admin",
+    "password": "admin"
+}
\ No newline at end of file

Added: sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish-reverse/org.apache.sling.distribution.agent.impl.SimpleDistributionAgentFactory-publish-reverse.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish-reverse/org.apache.sling.distribution.agent.impl.SimpleDistributionAgentFactory-publish-reverse.json?rev=1641561&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish-reverse/org.apache.sling.distribution.agent.impl.SimpleDistributionAgentFactory-publish-reverse.json (added)
+++ sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish-reverse/org.apache.sling.distribution.agent.impl.SimpleDistributionAgentFactory-publish-reverse.json Tue Nov 25 10:16:08 2014
@@ -0,0 +1,16 @@
+{
+    "jcr:primaryType": "sling:OsgiConfig",
+    "name": "publish-reverse",
+
+    "enabled" : false,
+
+    "serviceName" : "distributionService",
+
+    "requestAuthorizationStrategy.target" : "(name=privilegeRead)",
+
+    "packageExporter.target": "(parent.name=publish-reverse)",
+
+    "packageImporter.target": "(parent.name=publish-reverse)",
+
+    "triggers.target": "(parent.name=publish-reverse)"
+}
\ No newline at end of file

Added: sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish-reverse/org.apache.sling.distribution.packaging.impl.exporter.RemoteDistributionPackageExporterFactory-publish-reverse.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish-reverse/org.apache.sling.distribution.packaging.impl.exporter.RemoteDistributionPackageExporterFactory-publish-reverse.json?rev=1641561&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish-reverse/org.apache.sling.distribution.packaging.impl.exporter.RemoteDistributionPackageExporterFactory-publish-reverse.json (added)
+++ sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish-reverse/org.apache.sling.distribution.packaging.impl.exporter.RemoteDistributionPackageExporterFactory-publish-reverse.json Tue Nov 25 10:16:08 2014
@@ -0,0 +1,12 @@
+{
+    "jcr:primaryType": "sling:OsgiConfig",
+    "name": "publish-reverse/exporter",
+    "parent.name": "publish-reverse",
+    "type": "remote",
+
+    "endpoints": [
+        "http://localhost:4503/libs/sling/distribution/services/exporters/reverse"
+    ],
+    "packageBuilder.target" : "(name=vlt)",
+    "transportAuthenticationProvider.target" : "(name=publishAdmin)"
+}
\ No newline at end of file

Added: sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish-reverse/org.apache.sling.distribution.packaging.impl.importer.LocalDistributionPackageImporterFactory-publish-reverse.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish-reverse/org.apache.sling.distribution.packaging.impl.importer.LocalDistributionPackageImporterFactory-publish-reverse.json?rev=1641561&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish-reverse/org.apache.sling.distribution.packaging.impl.importer.LocalDistributionPackageImporterFactory-publish-reverse.json (added)
+++ sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish-reverse/org.apache.sling.distribution.packaging.impl.importer.LocalDistributionPackageImporterFactory-publish-reverse.json Tue Nov 25 10:16:08 2014
@@ -0,0 +1,7 @@
+{
+    "jcr:primaryType": "sling:OsgiConfig",
+    "name": "publish-reverse/importer",
+    "parent.name": "publish-reverse",
+    "type": "local",
+    "packageBuilder.target" : "(name=vlt)"
+}
\ No newline at end of file

Added: sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish-reverse/org.apache.sling.distribution.trigger.impl.LocalDistributionTriggerFactory-publish-reverse-scheduled.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish-reverse/org.apache.sling.distribution.trigger.impl.LocalDistributionTriggerFactory-publish-reverse-scheduled.json?rev=1641561&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish-reverse/org.apache.sling.distribution.trigger.impl.LocalDistributionTriggerFactory-publish-reverse-scheduled.json (added)
+++ sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish-reverse/org.apache.sling.distribution.trigger.impl.LocalDistributionTriggerFactory-publish-reverse-scheduled.json Tue Nov 25 10:16:08 2014
@@ -0,0 +1,11 @@
+{
+    "jcr:primaryType": "sling:OsgiConfig",
+
+    "name": "publish-reverse/triggers/scheduled",
+    "parent.name": "publish-reverse",
+
+    "type": "scheduledEvent",
+    "action": "poll",
+    "seconds": "30"
+
+}
\ No newline at end of file

Added: sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish/org.apache.sling.distribution.agent.impl.SimpleDistributionAgentFactory-publish.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish/org.apache.sling.distribution.agent.impl.SimpleDistributionAgentFactory-publish.json?rev=1641561&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish/org.apache.sling.distribution.agent.impl.SimpleDistributionAgentFactory-publish.json (added)
+++ sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish/org.apache.sling.distribution.agent.impl.SimpleDistributionAgentFactory-publish.json Tue Nov 25 10:16:08 2014
@@ -0,0 +1,15 @@
+{
+    "jcr:primaryType": "sling:OsgiConfig",
+
+    "name": "publish",
+
+    "enabled" : false,
+
+    "serviceName" : "distributionService",
+
+    "requestAuthorizationStrategy.target" : "(name=privilegeRead)",
+
+    "packageExporter.target": "(parent.name=publish)",
+
+    "packageImporter.target": "(parent.name=publish)"
+}
\ No newline at end of file

Added: sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish/org.apache.sling.distribution.packaging.impl.exporter.LocalDistributionPackageExporterFactory-publish.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish/org.apache.sling.distribution.packaging.impl.exporter.LocalDistributionPackageExporterFactory-publish.json?rev=1641561&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish/org.apache.sling.distribution.packaging.impl.exporter.LocalDistributionPackageExporterFactory-publish.json (added)
+++ sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish/org.apache.sling.distribution.packaging.impl.exporter.LocalDistributionPackageExporterFactory-publish.json Tue Nov 25 10:16:08 2014
@@ -0,0 +1,7 @@
+{
+    "jcr:primaryType": "sling:OsgiConfig",
+    "name": "publish/exporter",
+    "parent.name": "publish",
+    "type": "local",
+    "packageBuilder.target" : "(name=vlt)"
+}
\ No newline at end of file

Added: sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish/org.apache.sling.distribution.packaging.impl.importer.RemoteDistributionPackageImporterFactory-publish.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish/org.apache.sling.distribution.packaging.impl.importer.RemoteDistributionPackageImporterFactory-publish.json?rev=1641561&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish/org.apache.sling.distribution.packaging.impl.importer.RemoteDistributionPackageImporterFactory-publish.json (added)
+++ sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/publish/org.apache.sling.distribution.packaging.impl.importer.RemoteDistributionPackageImporterFactory-publish.json Tue Nov 25 10:16:08 2014
@@ -0,0 +1,12 @@
+{
+    "jcr:primaryType": "sling:OsgiConfig",
+    "name": "publish/importer",
+    "parent.name": "publish",
+    "type": "remote",
+
+    "endpoints": [
+        "http://localhost:4503/libs/sling/distribution/services/importers/default"
+    ],
+    "packageBuilder.target" : "(name=vlt)",
+    "transportAuthenticationProvider.target" : "(name=publishAdmin)"
+}
\ No newline at end of file

Added: sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/pubsync/org.apache.sling.distribution.agent.impl.SimpleDistributionAgentFactory-pubsync.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/pubsync/org.apache.sling.distribution.agent.impl.SimpleDistributionAgentFactory-pubsync.json?rev=1641561&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/pubsync/org.apache.sling.distribution.agent.impl.SimpleDistributionAgentFactory-pubsync.json (added)
+++ sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/pubsync/org.apache.sling.distribution.agent.impl.SimpleDistributionAgentFactory-pubsync.json Tue Nov 25 10:16:08 2014
@@ -0,0 +1,14 @@
+{
+    "jcr:primaryType": "sling:OsgiConfig",
+    "name": "pubsync",
+
+    "enabled" : false,
+
+    "serviceName" : "distributionService",
+
+    "requestAuthorizationStrategy.target" : "(name=privilegeRead)",
+
+    "packageExporter.target": "(parent.name=pubsync)",
+
+    "packageImporter.target": "(parent.name=pubsync)"
+}
\ No newline at end of file

Added: sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/pubsync/org.apache.sling.distribution.packaging.impl.exporter.RemoteDistributionPackageExporterFactory-pubsync.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/pubsync/org.apache.sling.distribution.packaging.impl.exporter.RemoteDistributionPackageExporterFactory-pubsync.json?rev=1641561&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/pubsync/org.apache.sling.distribution.packaging.impl.exporter.RemoteDistributionPackageExporterFactory-pubsync.json (added)
+++ sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/pubsync/org.apache.sling.distribution.packaging.impl.exporter.RemoteDistributionPackageExporterFactory-pubsync.json Tue Nov 25 10:16:08 2014
@@ -0,0 +1,19 @@
+{
+    "jcr:primaryType": "sling:OsgiConfig",
+    "name": "pubsync/exporter",
+    "parent.name": "pubsync",
+    "type": "remote",
+
+    "endpoints": [
+        "http://localhost:4503/libs/sling/distribution/services/exporters/reverse-pubsync",
+        "http://localhost:4504/libs/sling/distribution/services/exporters/reverse-pubsync",
+        "http://localhost:4505/libs/sling/distribution/services/exporters/reverse-pubsync",
+    ],
+
+    "endpoints.strategy": "All",
+
+    "packageBuilder.target" : "(name=vlt)",
+    "transportAuthenticationProvider.target" : "(name=publishAdmin)"
+
+
+}
\ No newline at end of file

Added: sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/pubsync/org.apache.sling.distribution.packaging.impl.importer.RemoteDistributionPackageImporterFactory-pubsync.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/pubsync/org.apache.sling.distribution.packaging.impl.importer.RemoteDistributionPackageImporterFactory-pubsync.json?rev=1641561&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/pubsync/org.apache.sling.distribution.packaging.impl.importer.RemoteDistributionPackageImporterFactory-pubsync.json (added)
+++ sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.osgi.author/pubsync/org.apache.sling.distribution.packaging.impl.importer.RemoteDistributionPackageImporterFactory-pubsync.json Tue Nov 25 10:16:08 2014
@@ -0,0 +1,19 @@
+{
+    "jcr:primaryType": "sling:OsgiConfig",
+    "name": "pubsync/importer",
+    "parent.name": "pubsync",
+    "type": "remote",
+
+    "endpoints": [
+        "http://localhost:4503/libs/sling/distribution/services/importers/default",
+        "http://localhost:4504/libs/sling/distribution/services/importers/default",
+        "http://localhost:4505/libs/sling/distribution/services/importers/default"
+
+    ],
+
+    "endpoints.strategy": "All",
+
+
+    "packageBuilder.target" : "(name=vlt)",
+    "transportAuthenticationProvider.target" : "(name=publishAdmin)"
+}
\ No newline at end of file