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