You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by kw...@apache.org on 2021/04/22 13:38:11 UTC

[jackrabbit-filevault] branch bugfix/JCRVLT-255-importmodes-for-docview created (now 9fa6708)

This is an automated email from the ASF dual-hosted git repository.

kwin pushed a change to branch bugfix/JCRVLT-255-importmodes-for-docview
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault.git.


      at 9fa6708  add new import modes, clarify existing ones.

This branch includes the following new commits:

     new dadbc46  JCRVLT-255 add failing test case for testing import modes
     new 9fa6708  add new import modes, clarify existing ones.

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[jackrabbit-filevault] 02/02: add new import modes, clarify existing ones.

Posted by kw...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

kwin pushed a commit to branch bugfix/JCRVLT-255-importmodes-for-docview
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault.git

commit 9fa67086802dce7e6adccd6271cfc8ae277d49d7
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Thu Apr 22 15:34:45 2021 +0200

    add new import modes, clarify existing ones.
---
 .../apache/jackrabbit/vault/fs/api/ImportMode.java | 29 ++++++++++++++++++++--
 1 file changed, 27 insertions(+), 2 deletions(-)

diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/api/ImportMode.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/api/ImportMode.java
index e19418b..bcfd0b9 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/api/ImportMode.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/api/ImportMode.java
@@ -20,6 +20,12 @@ package org.apache.jackrabbit.vault.fs.api;
 /**
  * {@code ImportMode} is used to define how importing content is applied
  * to the existing content in the repository.
+ * 
+ * TODO: add table
+ * 
+ * mode, node does not exist, new properties, existing updated properties, existing deleted properties
+ * 
+ * 
  */
 public enum ImportMode {
 
@@ -32,11 +38,30 @@ public enum ImportMode {
     /**
      * Existing content is not modified, i.e. only new content is added and
      * none is deleted or modified.
+     * TODO: clarify how this affects nodes and properties
+     * 
+     * Only considered for FileArtifactHandler (i.e. fullcoverage nodes or files), for .content.xml this is ignored
+     * 
+     * For authorizable nodes only rep:members of existing authorizables is updated. The user profile node is updated as regular nodes.
+     * @deprecated As this behaves inconsistenly for the different serialization formats, rather use {@link #MERGE_PROPERTIES}.
      */
+    @Deprecated()
     MERGE,
 
     /**
-     * Existing content is updated, new content is added and none is deleted.
+     * Existing content (i.e. properties) is updated, new content (i.e. properties and nodes) is added and no existing properties or nodes are deleted. Only affects authorizable nodes (not their child nodes). Other nodes are imported in mode {@link #REPLACE}.
+     * @deprecated rather use {@link #UPDATE_PROPERTIES}
      */
-    UPDATE
+    @Deprecated()
+    UPDATE,
+
+    /**
+     * Existing properties are not updated, new nodes/properties are added, no existing nodes/properties are deleted/
+     */
+    MERGE_PROPERTIES,
+
+    /**
+     * Existing properties are updated, new nodes/properties are added, no existing nodes/properties are deleted/
+     */
+    UPDATE_PROPERTIES
 }
\ No newline at end of file

[jackrabbit-filevault] 01/02: JCRVLT-255 add failing test case for testing import modes

Posted by kw...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

kwin pushed a commit to branch bugfix/JCRVLT-255-importmodes-for-docview
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault.git

commit dadbc465ae7815b0bdcab920df5f9c0efaf6bbf3
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Tue Jan 7 12:57:11 2020 +0100

    JCRVLT-255 add failing test case for testing import modes
---
 .../vault/packaging/integration/ImportModeIT.java  | 52 ++++++++++++++++++++++
 .../META-INF/vault/filter.xml                      |  6 +++
 .../META-INF/vault/nodetypes.cnd                   |  8 ++++
 .../META-INF/vault/properties.xml                  | 18 ++++++++
 .../import_modes_test_a.zip/jcr_root/.content.xml  | 17 +++++++
 .../jcr_root/testroot/.content.xml                 | 22 +++++++++
 6 files changed, 123 insertions(+)

diff --git a/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/ImportModeIT.java b/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/ImportModeIT.java
index 519ecc2..0a8f59f 100644
--- a/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/ImportModeIT.java
+++ b/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/ImportModeIT.java
@@ -97,4 +97,56 @@ public class ImportModeIT extends IntegrationTestBase {
         assertProperty("/tmp/foo/bar/testProperty", "new");
     }
 
+    @Test
+    public void testComplexImportModes() throws RepositoryException, IOException, PackageException {
+        // initial state
+        Node parent = admin.getRootNode().addNode("testroot");
+        setUpNode(parent, "replace");
+        setUpNode(parent, "merge");
+        setUpNode(parent, "update");
+        admin.save();
+        assertProperty("/testroot/merge/propertyold", "old");
+        assertProperty("/testroot/update/propertyold", "old");
+        
+        extractVaultPackage("/test-packages/import_modes_test_a.zip");
+        
+        // test update, creation and deletion of properties and nodes
+        
+        // Replace
+        assertProperty("/testroot/replace/propertyupdate", "new");
+        assertProperty("/testroot/replace/propertynew", "new");
+        assertPropertyMissing("/testroot/replace/propertyold");
+        assertProperty("/testroot/replace/update/propertynew", "new");
+        assertPropertyMissing("/testroot/replace/update/propertyold");
+        assertNodeExists("/testroot/replace/new");
+        assertNodeMissing("/testroot/replace/old");
+        
+        // Update (neither delete existing nodes nor properties)
+        assertProperty("/testroot/update/propertyupdate", "new");
+        assertProperty("/testroot/update/propertynew", "new");
+        assertProperty("/testroot/update/propertyold", "old");
+        assertProperty("/testroot/update/update/propertynew", "new");
+        assertProperty("/testroot/update/update/propertyold", "old");
+        assertNodeExists("/testroot/update/new");
+        assertNodeExists("/testroot/update/old");
+        
+        // Merge (don't touch existing nodes, except for adding new children)
+        assertProperty("/testroot/merge/propertyupdate", "old");
+        assertPropertyMissing("/testroot/merge/propertynew");
+        assertProperty("/testroot/merge/propertyold", "old");
+        assertPropertyMissing("/testroot/merge/update/propertynew");
+        assertProperty("/testroot/merge/update/propertyold", "old");
+        assertNodeMissing("/testroot/merge/new");
+        assertNodeExists("/testroot/merge/old");
+    }
+
+    private void setUpNode(Node parent, String name) throws RepositoryException {
+        Node node = parent.addNode(name);
+        node.setProperty("propertyold", "old");
+        node.setProperty("propertyupdate", "old");
+        node.addNode("old");
+        Node update = node.addNode("update");
+        update.setProperty("propertyold", "old");
+    }
+
 }
\ No newline at end of file
diff --git a/vault-core/src/test/resources/test-packages/import_modes_test_a.zip/META-INF/vault/filter.xml b/vault-core/src/test/resources/test-packages/import_modes_test_a.zip/META-INF/vault/filter.xml
new file mode 100644
index 0000000..bcd93e6
--- /dev/null
+++ b/vault-core/src/test/resources/test-packages/import_modes_test_a.zip/META-INF/vault/filter.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<workspaceFilter version="1.0">
+    <filter root="/testroot/replace" mode="replace"/>
+    <filter root="/testroot/merge" mode="merge"/>
+    <filter root="/testroot/update" mode="update"/>
+</workspaceFilter>
diff --git a/vault-core/src/test/resources/test-packages/import_modes_test_a.zip/META-INF/vault/nodetypes.cnd b/vault-core/src/test/resources/test-packages/import_modes_test_a.zip/META-INF/vault/nodetypes.cnd
new file mode 100644
index 0000000..5afdfb7
--- /dev/null
+++ b/vault-core/src/test/resources/test-packages/import_modes_test_a.zip/META-INF/vault/nodetypes.cnd
@@ -0,0 +1,8 @@
+<'sling'='http://sling.apache.org/jcr/sling/1.0'>
+<'nt'='http://www.jcp.org/jcr/nt/1.0'>
+
+[sling:Folder] > nt:folder
+  - * (undefined)
+  - * (undefined) multiple
+  + * (nt:base) = sling:Folder version
+
diff --git a/vault-core/src/test/resources/test-packages/import_modes_test_a.zip/META-INF/vault/properties.xml b/vault-core/src/test/resources/test-packages/import_modes_test_a.zip/META-INF/vault/properties.xml
new file mode 100644
index 0000000..c606e19
--- /dev/null
+++ b/vault-core/src/test/resources/test-packages/import_modes_test_a.zip/META-INF/vault/properties.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+<comment>FileVault Package Properties</comment>
+<entry key="createdBy">admin</entry>
+<entry key="name">import-modes-test</entry>
+<entry key="lastModified">2011-11-15T09:45:14.664+01:00</entry>
+<entry key="lastModifiedBy">admin</entry>
+<entry key="created">2011-11-15T09:45:14.685+01:00</entry>
+<entry key="buildCount">1</entry>
+<entry key="version"/>
+<entry key="dependencies"/>
+<entry key="packageFormatVersion">2</entry>
+<entry key="description"/>
+<entry key="lastWrapped">2011-11-15T09:45:14.664+01:00</entry>
+<entry key="group"/>
+<entry key="lastWrappedBy">admin</entry>
+</properties>
diff --git a/vault-core/src/test/resources/test-packages/import_modes_test_a.zip/jcr_root/.content.xml b/vault-core/src/test/resources/test-packages/import_modes_test_a.zip/jcr_root/.content.xml
new file mode 100644
index 0000000..e546f29
--- /dev/null
+++ b/vault-core/src/test/resources/test-packages/import_modes_test_a.zip/jcr_root/.content.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:rep="internal"
+    jcr:mixinTypes="[rep:AccessControllable]"
+    jcr:primaryType="rep:root"
+    sling:resourceType="sling:redirect"
+    sling:target="/index.html">
+    <rep:policy/>
+    <jcr:system/>
+    <var/>
+    <libs/>
+    <etc/>
+    <apps/>
+    <content/>
+    <tmp/>
+    <home/>
+    <testroot/>
+</jcr:root>
\ No newline at end of file
diff --git a/vault-core/src/test/resources/test-packages/import_modes_test_a.zip/jcr_root/testroot/.content.xml b/vault-core/src/test/resources/test-packages/import_modes_test_a.zip/jcr_root/testroot/.content.xml
new file mode 100644
index 0000000..aea4bc7
--- /dev/null
+++ b/vault-core/src/test/resources/test-packages/import_modes_test_a.zip/jcr_root/testroot/.content.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:rep="internal"
+    jcr:primaryType="sling:Folder">
+    <replace jcr:primaryType="sling:Folder"
+        propertyupdate="new"
+        propertynew="new">
+        <update jcr:primaryType="sling:Folder" propertynew="new" />
+        <new jcr:primaryType="sling:Folder" />
+    </replace>
+    <merge jcr:primaryType="sling:Folder"
+        propertyupdate="new"
+        propertynew="new">
+        <update jcr:primaryType="sling:Folder" propertynew="new" />
+        <new jcr:primaryType="sling:Folder" />
+    </merge>
+    <update jcr:primaryType="sling:Folder"
+        propertyupdate="new"
+        propertynew="new">
+        <update jcr:primaryType="sling:Folder" propertynew="new"/>
+        <new jcr:primaryType="sling:Folder" />
+    </update>
+</jcr:root>