From deb5fc9c087e9076e8360e08c2d0e375d15a7fbf Mon Sep 17 00:00:00 2001 From: Jan Vonka Date: Mon, 15 Mar 2010 13:31:38 +0000 Subject: [PATCH] Merged V3.2 to HEAD 18021: AVM - fix AVMNodeService.getChildByName 18065: (record-only) 18254: WCM/AVM - ETHREEOH-2057 (Submitting WCM Content through WF JSF Error - due to AVM Sync issue) 18442: ETHREEOH-4004 - rework test 18467: ETHTREEOH-4004 - test fix (avoid conversion, replace UTF-16 with UTF-8) 18835: (record-only) Merged V3.1 to V3.2 (record-only) 18783: (record-only) MT: ensure group (EMAIL_CONTRIBUTORS) bootstraps tenant admin user (when creating tenant) - fixed by r14588 19146: (record-only) Undo previous/unwanted commit (version.properties) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@19288 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../org/alfresco/repo/avm/AVMNodeService.java | 3 +- .../repo/avm/AVMServiceLocalTest.java | 80 +++++++++++++++++++ .../alfresco/repo/avm/AVMServiceTestBase.java | 7 +- .../alfresco/repo/avm/AVMSyncServiceImpl.java | 11 +++ 4 files changed, 99 insertions(+), 2 deletions(-) diff --git a/source/java/org/alfresco/repo/avm/AVMNodeService.java b/source/java/org/alfresco/repo/avm/AVMNodeService.java index cb12a4662f..6cd0bb93b8 100644 --- a/source/java/org/alfresco/repo/avm/AVMNodeService.java +++ b/source/java/org/alfresco/repo/avm/AVMNodeService.java @@ -32,6 +32,7 @@ import java.util.SortedMap; import org.alfresco.model.ContentModel; import org.alfresco.model.WCMModel; +import org.alfresco.repo.avm.util.AVMUtil; import org.alfresco.repo.domain.PropertyValue; import org.alfresco.repo.node.AbstractNodeServiceImpl; import org.alfresco.service.cmr.avm.AVMException; @@ -1731,7 +1732,7 @@ public class AVMNodeService extends AbstractNodeServiceImpl implements NodeServi try { AVMNodeDescriptor child = fAVMService.lookup(avmVersionPath.getFirst(), - avmVersionPath.getSecond()); + AVMUtil.extendAVMPath(avmVersionPath.getSecond(), childName)); if (child == null) { return null; diff --git a/source/java/org/alfresco/repo/avm/AVMServiceLocalTest.java b/source/java/org/alfresco/repo/avm/AVMServiceLocalTest.java index e917100a42..fd9df8547e 100644 --- a/source/java/org/alfresco/repo/avm/AVMServiceLocalTest.java +++ b/source/java/org/alfresco/repo/avm/AVMServiceLocalTest.java @@ -576,6 +576,86 @@ public class AVMServiceLocalTest extends TestCase } } + public void testSimpleUpdateLD6() throws Exception + { + try + { + logger.debug("created 2 stores: main, layer"); + + fService.createDirectory("main:/", "a"); + fService.createDirectory("main:/a", "b"); + + logger.debug("created dirs: main:/a, main:/a/b"); + + fService.createLayeredDirectory("main:/", "layer:/", "layer"); + + logger.debug("created layered dir: layer:/layer -> main:/"); + + List diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); + assertEquals(0, diffs.size()); + + fService.createDirectory("layer:/layer/a", "xyz"); + fService.createFile("layer:/layer/a/xyz", "index.html").close(); + + logger.debug("created: layer:/layer/a/xyz, layer:/layer/a/xyz/index.html"); + + diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); + assertEquals(1, diffs.size()); + assertEquals("[layer:/layer/a/xyz[-1] > main:/a/xyz[-1]]", diffs.toString()); + + fService.createStore("main--workflow1"); + + logger.debug("created store: main--workflow1"); + + fService.createLayeredDirectory("main:/a", "main--workflow1:/", "a"); + + logger.debug("created layered dir: main--workflow1:/a -> main:/a"); + + diffs = fSyncService.compare(-1, "main--workflow1:/a", -1, "main:/a", null); + assertEquals(0, diffs.size()); + + diffs = new ArrayList(1); + diffs.add(new AVMDifference(-1, "layer:/layer/a/xyz/index.html", -1, "main--workflow1:/a/xyz/index.html", AVMDifference.NEWER)); + diffs.add(new AVMDifference(-1, "layer:/layer/a/xyz", -1, "main--workflow1:/a/xyz", AVMDifference.NEWER)); + + // ETHREEOH-2057 + fSyncService.update(diffs, null, false, false, false, false, "one", "one"); + + logger.debug("updated: added: main--workflow1:/a/xyz, main--workflow1:/a/xyz/index.html"); + + diffs = fSyncService.compare(-1, "layer:/layer/a", -1, "main:/a", null); + assertEquals(1, diffs.size()); + assertEquals("[layer:/layer/a/xyz[-1] > main:/a/xyz[-1]]", diffs.toString()); + + diffs = fSyncService.compare(-1, "main--workflow1:/a", -1, "main:/a", null); + assertEquals(1, diffs.size()); + assertEquals("[main--workflow1:/a/xyz[-1] > main:/a/xyz[-1]]", diffs.toString()); + + fSyncService.update(diffs, null, false, false, true, true, "two", "two"); + fSyncService.flatten("main--workflow1:/a", "main:/a"); + + logger.debug("updated & flattened"); + + diffs = fSyncService.compare(-1, "main--workflow1:/a", -1, "main:/a", null); + assertEquals(0, diffs.size()); + + diffs = fSyncService.compare(-1, "main--workflow1:/a", -1, "layer:/layer/a", null); + assertEquals(0, diffs.size()); + + recursiveList("main"); + recursiveList("layer"); + } + catch (Exception e) + { + e.printStackTrace(System.err); + throw e; + } + finally + { + if (fService.getStore("main--workflow1") != null) { fService.purgeStore("main--workflow1"); } + } + } + public void testDeleteLD1() throws Exception { try diff --git a/source/java/org/alfresco/repo/avm/AVMServiceTestBase.java b/source/java/org/alfresco/repo/avm/AVMServiceTestBase.java index 45508f843e..b5ff8c84da 100644 --- a/source/java/org/alfresco/repo/avm/AVMServiceTestBase.java +++ b/source/java/org/alfresco/repo/avm/AVMServiceTestBase.java @@ -267,11 +267,16 @@ public class AVMServiceTestBase extends TestCase fService.createFile("main:/a/b/c", "bar").close(); writer = fService.getContentWriter("main:/a/b/c/bar"); + /* // Force a conversion writer.setEncoding("UTF-16"); writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); + writer.putContent(new ByteArrayInputStream("I am main:/a/b/c/bar".getBytes("UTF-16"))); + */ + writer.setEncoding("UTF-8"); + writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); writer.putContent("I am main:/a/b/c/bar"); - + fService.createSnapshot("main", null, null); } diff --git a/source/java/org/alfresco/repo/avm/AVMSyncServiceImpl.java b/source/java/org/alfresco/repo/avm/AVMSyncServiceImpl.java index d7125ad50e..0b215df363 100644 --- a/source/java/org/alfresco/repo/avm/AVMSyncServiceImpl.java +++ b/source/java/org/alfresco/repo/avm/AVMSyncServiceImpl.java @@ -24,6 +24,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.TreeMap; import org.alfresco.repo.avm.util.AVMUtil; import org.alfresco.repo.domain.DbAccessControlList; @@ -410,6 +411,9 @@ public class AVMSyncServiceImpl implements AVMSyncService Map storeVersions = new HashMap(); Set destStores = new HashSet(); + + Map diffsToUpdate = new TreeMap(); + for (AVMDifference diff : diffList) { if (excluder != null && (excluder.matches(diff.getSourcePath()) || @@ -417,10 +421,17 @@ public class AVMSyncServiceImpl implements AVMSyncService { continue; } + if (!diff.isValid()) { throw new AVMSyncException("Malformed AVMDifference."); } + + diffsToUpdate.put(diff.getSourcePath(), diff); + } + + for (AVMDifference diff : diffsToUpdate.values()) + { if (logger.isDebugEnabled()) { logger.debug("update: " + diff);