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

svn commit: r1635795 - in /sling/trunk/contrib/extensions/replication/core/src: main/java/org/apache/sling/replication/component/ main/java/org/apache/sling/replication/component/impl/ main/java/org/apache/sling/replication/packaging/ main/java/org/apa...

Author: tommaso
Date: Fri Oct 31 15:30:19 2014
New Revision: 1635795

URL: http://svn.apache.org/r1635795
Log:
SLING-4084 - added options for import mode and acl handling

Modified:
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/component/ReplicationComponentFactory.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/component/impl/DefaultReplicationComponentFactory.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageImporter.java
    sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackageBuilder.java
    sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackageBuilderTest.java

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/component/ReplicationComponentFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/component/ReplicationComponentFactory.java?rev=1635795&r1=1635794&r2=1635795&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/component/ReplicationComponentFactory.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/component/ReplicationComponentFactory.java Fri Oct 31 15:30:19 2014
@@ -274,6 +274,16 @@ public interface ReplicationComponentFac
      */
     String PACKAGE_BUILDER_FILEVLT = "vlt";
 
+    /**
+     * import mode property for file vault package builder
+     */
+    String PACKAGE_BUILDER_FILEVLT_IMPORT_MODE = "importOptions";
+
+    /**
+     * ACL handling property for file vault package builder
+     */
+    String PACKAGE_BUILDER_FILEVLT_ACLHANDLING = "aclHandling";
+
 
     /**
      * create a {@link ReplicationComponent}

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/component/impl/DefaultReplicationComponentFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/component/impl/DefaultReplicationComponentFactory.java?rev=1635795&r1=1635794&r2=1635795&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/component/impl/DefaultReplicationComponentFactory.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/component/impl/DefaultReplicationComponentFactory.java Fri Oct 31 15:30:19 2014
@@ -112,7 +112,7 @@ public class DefaultReplicationComponent
 
     public <ComponentType extends ReplicationComponent> ComponentType createComponent(@Nonnull Class<ComponentType> type,
                                                                                       @Nonnull Map<String, Object> properties,
-                                                         @Nullable ReplicationComponentProvider componentProvider) {
+                                                                                      @Nullable ReplicationComponentProvider componentProvider) {
 
         if (componentProvider == null) {
             componentProvider = this;
@@ -129,8 +129,7 @@ public class DefaultReplicationComponent
             } else if (type.isAssignableFrom(ReplicationPackageExporter.class)) {
                 return (ComponentType) createExporter(properties, componentProvider);
             }
-        }
-        catch (IllegalArgumentException e) {
+        } catch (IllegalArgumentException e) {
             log.warn("Cannot create component of type {} with properties {}", new Object[]{type, properties}, e);
         }
 
@@ -186,8 +185,7 @@ public class DefaultReplicationComponent
             String name = PropertiesUtil.toString(properties.get(COMPONENT_NAME), null);
             return componentProvider.getComponent(ReplicationRequestAuthorizationStrategy.class, name);
 
-        }
-        else if (REQUEST_AUTHORIZATION_STRATEGY_PRIVILEGE.equals(factory)) {
+        } else if (REQUEST_AUTHORIZATION_STRATEGY_PRIVILEGE.equals(factory)) {
             String jcrPrivilege = PropertiesUtil.toString(properties.get(REQUEST_AUTHORIZATION_STRATEGY_PRIVILEGE_PROPERTY_JCR_PRIVILEGE), null);
             return new PrivilegeReplicationRequestAuthorizationStrategy(jcrPrivilege);
         }
@@ -220,7 +218,7 @@ public class DefaultReplicationComponent
             String endpointStrategyName = PropertiesUtil.toString(properties.get(PACKAGE_EXPORTER_REMOTE_PROPERTY_ENDPOINTS_STRATEGY), "One");
             int pollItems = PropertiesUtil.toInteger(properties.get(PACKAGE_EXPORTER_REMOTE_PROPERTY_POLL_ITEMS), Integer.MAX_VALUE);
 
-            return new  RemoteReplicationPackageExporter(packageBuilder, authenticationProvider, endpoints, endpointStrategyName, pollItems);
+            return new RemoteReplicationPackageExporter(packageBuilder, authenticationProvider, endpoints, endpointStrategyName, pollItems);
         } else if (PACKAGE_EXPORTER_AGENT.equals(factory)) {
             Map<String, Object> builderProperties = extractMap(COMPONENT_PACKAGE_BUILDER, properties);
             ReplicationPackageBuilder packageBuilder = createBuilder(builderProperties);
@@ -300,7 +298,13 @@ public class DefaultReplicationComponent
         String factory = PropertiesUtil.toString(properties.get(COMPONENT_TYPE), COMPONENT_TYPE_SERVICE);
 
         if (PACKAGE_BUILDER_FILEVLT.equals(factory)) {
-            return new ResourceSharedReplicationPackageBuilder(new FileVaultReplicationPackageBuilder(packaging, replicationEventFactory));
+            String importMode = PropertiesUtil.toString(properties.get(PACKAGE_BUILDER_FILEVLT_IMPORT_MODE), null);
+            String aclHandling = PropertiesUtil.toString(properties.get(PACKAGE_BUILDER_FILEVLT_ACLHANDLING), null);
+            if (importMode != null && aclHandling != null) {
+                return new ResourceSharedReplicationPackageBuilder(new FileVaultReplicationPackageBuilder(packaging, replicationEventFactory, importMode, aclHandling));
+            } else {
+                return new ResourceSharedReplicationPackageBuilder(new FileVaultReplicationPackageBuilder(packaging, replicationEventFactory));
+            }
         }
 
         return null;

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageImporter.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageImporter.java?rev=1635795&r1=1635794&r2=1635795&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageImporter.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/packaging/ReplicationPackageImporter.java Fri Oct 31 15:30:19 2014
@@ -46,7 +46,7 @@ public interface ReplicationPackageImpor
      *
      * @param resourceResolver - the resource resolver used to read the package
      * @param stream           the {@link InputStream} of the package to be converted and installed
-     * @return a {@link ReplicationPackage} if the stream can converted into it and installed
+     * @return a {@link ReplicationPackage} if the stream has been successfully converted and installed
      * @throws ReplicationPackageImportException when the stream cannot be read as a {@link ReplicationPackage} and installed
      */
     @CheckForNull

Modified: sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackageBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackageBuilder.java?rev=1635795&r1=1635794&r2=1635795&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackageBuilder.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/main/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackageBuilder.java Fri Oct 31 15:30:19 2014
@@ -25,6 +25,7 @@ import java.io.InputStream;
 import java.util.Properties;
 
 import org.apache.commons.io.IOUtils;
+import org.apache.jackrabbit.vault.fs.api.ImportMode;
 import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
 import org.apache.jackrabbit.vault.fs.config.DefaultMetaInf;
 import org.apache.jackrabbit.vault.fs.config.DefaultWorkspaceFilter;
@@ -61,10 +62,20 @@ public class FileVaultReplicationPackage
 
     private final Packaging packaging;
 
+    private ImportMode importMode;
+
+    private AccessControlHandling aclHandling;
+
     public FileVaultReplicationPackageBuilder(Packaging packaging, ReplicationEventFactory replicationEventFactory) {
         super(PACKAGING_TYPE, replicationEventFactory);
+        this.packaging = packaging;
+    }
 
+    public FileVaultReplicationPackageBuilder(Packaging packaging, ReplicationEventFactory replicationEventFactory, String importMode, String aclHandling) {
+        super(PACKAGING_TYPE, replicationEventFactory);
         this.packaging = packaging;
+        this.importMode = ImportMode.valueOf(importMode);
+        this.aclHandling = AccessControlHandling.valueOf(aclHandling);
     }
 
     @Override
@@ -159,8 +170,20 @@ public class FileVaultReplicationPackage
             if (file.exists()) {
                 VaultPackage pkg = packaging.getPackageManager().open(file);
                 ImportOptions opts = new ImportOptions();
-                // TODO : make it possible to expose the VLT ImportMode / ACLHandling in a generic way (from the ReplicationRequest?)
-                opts.setAccessControlHandling(AccessControlHandling.OVERWRITE);
+                if (aclHandling != null) {
+                    opts.setAccessControlHandling(aclHandling);
+                }
+                else {
+                    // default to overwrite
+                    opts.setAccessControlHandling(AccessControlHandling.OVERWRITE);
+                }
+                if (importMode != null) {
+                    opts.setImportMode(importMode);
+                }
+                else {
+                    // default to replace
+                    opts.setImportMode(ImportMode.REPLACE);
+                }
                 pkg.extract(session, opts);
                 return true;
             }

Modified: sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackageBuilderTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackageBuilderTest.java?rev=1635795&r1=1635794&r2=1635795&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackageBuilderTest.java (original)
+++ sling/trunk/contrib/extensions/replication/core/src/test/java/org/apache/sling/replication/serialization/impl/vlt/FileVaultReplicationPackageBuilderTest.java Fri Oct 31 15:30:19 2014
@@ -25,7 +25,9 @@ import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.InputStream;
 
+import org.apache.jackrabbit.vault.fs.api.ImportMode;
 import org.apache.jackrabbit.vault.fs.config.MetaInf;
+import org.apache.jackrabbit.vault.fs.io.AccessControlHandling;
 import org.apache.jackrabbit.vault.packaging.ExportOptions;
 import org.apache.jackrabbit.vault.packaging.PackageManager;
 import org.apache.jackrabbit.vault.packaging.Packaging;
@@ -37,9 +39,9 @@ import org.apache.sling.replication.even
 import org.apache.sling.replication.packaging.ReplicationPackage;
 import org.junit.Test;
 
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -115,8 +117,11 @@ public class FileVaultReplicationPackage
 
     @Test
     public void testInstallPackageInternal() throws Exception {
+        File tempFile = File.createTempFile("testInstallPackageInternal", "txt");
         Packaging packaging = mock(Packaging.class);
         PackageManager packageManager = mock(PackageManager.class);
+        VaultPackage vaultPackage = mock(VaultPackage.class);
+        when(packageManager.open(tempFile)).thenReturn(vaultPackage);
         when(packaging.getPackageManager()).thenReturn(packageManager);
         ReplicationEventFactory eventFactory = mock(ReplicationEventFactory.class);
 
@@ -131,8 +136,40 @@ public class FileVaultReplicationPackage
         when(session.getWorkspace()).thenReturn(workspace);
         when(resourceResolver.adaptTo(Session.class)).thenReturn(session);
         ReplicationPackage replicationPackage = mock(ReplicationPackage.class);
-        when(replicationPackage.getId()).thenReturn("/path/to/file");
+        when(replicationPackage.getId()).thenReturn(tempFile.getAbsolutePath());
+        when(replicationPackage.getAction()).thenReturn(ReplicationActionType.ADD.name());
+        when(replicationPackage.getPaths()).thenReturn(new String[]{"/something"});
+
+        boolean success = fileVaultReplicationPackageBuilder.installPackage(resourceResolver, replicationPackage);
+        assertTrue(success);
+    }
+
+    @Test
+    public void testInstallWithCustomImportModeAndACLHandling() throws Exception {
+        File tempFile = File.createTempFile("testInstallPackageInternal", "txt");
+        Packaging packaging = mock(Packaging.class);
+        PackageManager packageManager = mock(PackageManager.class);
+        VaultPackage vaultPackage = mock(VaultPackage.class);
+        when(packageManager.open(tempFile)).thenReturn(vaultPackage);
+        when(packaging.getPackageManager()).thenReturn(packageManager);
+        ReplicationEventFactory eventFactory = mock(ReplicationEventFactory.class);
+
+        FileVaultReplicationPackageBuilder fileVaultReplicationPackageBuilder = new FileVaultReplicationPackageBuilder(
+                packaging, eventFactory, ImportMode.MERGE.name(), AccessControlHandling.MERGE.name());
+
+        ResourceResolver resourceResolver = mock(ResourceResolver.class);
+        Session session = mock(Session.class);
+        Workspace workspace = mock(Workspace.class);
+        ObservationManager observationManager = mock(ObservationManager.class);
+        when(workspace.getObservationManager()).thenReturn(observationManager);
+        when(session.getWorkspace()).thenReturn(workspace);
+        when(resourceResolver.adaptTo(Session.class)).thenReturn(session);
+        ReplicationPackage replicationPackage = mock(ReplicationPackage.class);
+        when(replicationPackage.getId()).thenReturn(tempFile.getAbsolutePath());
+        when(replicationPackage.getAction()).thenReturn(ReplicationActionType.ADD.name());
+        when(replicationPackage.getPaths()).thenReturn(new String[]{"/something"});
+
         boolean success = fileVaultReplicationPackageBuilder.installPackage(resourceResolver, replicationPackage);
-        assertFalse(success);
+        assertTrue(success);
     }
 }
\ No newline at end of file