From 6836fd134404cd4061262669ef13dd9863070d2a Mon Sep 17 00:00:00 2001 From: Steven Glover Date: Tue, 14 Sep 2010 09:01:06 +0000 Subject: [PATCH] ALF-4596: ensure that versioned working copies are not migrated (2.1.7 incorrectly versions working copies) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@22483 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../repo/version/VersionMigrator.java | 42 ++++++++++++++++++- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/source/java/org/alfresco/repo/version/VersionMigrator.java b/source/java/org/alfresco/repo/version/VersionMigrator.java index 2f70472f5b..45788d94f5 100644 --- a/source/java/org/alfresco/repo/version/VersionMigrator.java +++ b/source/java/org/alfresco/repo/version/VersionMigrator.java @@ -283,6 +283,37 @@ public class VersionMigrator implements ApplicationEventPublisherAware return newVersionRef; } + + /** + * Check whether the V1 history represented by oldVersionHistoryRef represents + * a versioned working copy node (Alfresco V2.1.7 can create these) + * + * @param oldVersionHistoryRef + * @return + */ + protected boolean v1CheckForVersionedWorkingCopy(NodeRef oldVersionHistoryRef) + { + boolean valid = true; + + // Get versioned nodeRef from one of the versions - note: assumes all versions refer to the same versioned nodeRef + Collection versions = dbNodeService.getChildAssocs(oldVersionHistoryRef); + if (versions.size() > 0) + { + Iterator itr = versions.iterator(); + ChildAssociationRef childAssocRef = itr.next(); + NodeRef versionRef = childAssocRef.getChildRef(); + + Version version = version1Service.getVersion(versionRef); + @SuppressWarnings("unchecked") + List frozenAspects = (List)dbNodeService.getProperty(versionRef, VersionModel.PROP_QNAME_FROZEN_ASPECTS); + if(frozenAspects.contains(ContentModel.ASPECT_WORKING_COPY) && frozenAspects.contains(ContentModel.ASPECT_VERSIONABLE)) + { + valid = false; + } + } + + return valid; + } protected NodeRef v1GetVersionedNodeRef(NodeRef oldVersionHistoryRef) { @@ -327,8 +358,15 @@ public class VersionMigrator implements ApplicationEventPublisherAware protected void migrateVersion(NodeRef oldVHNodeRef, boolean deleteImmediately) throws Throwable { - NodeRef versionedNodeRef = v1GetVersionedNodeRef(oldVHNodeRef); - migrateVersionHistory(oldVHNodeRef, versionedNodeRef); + if(v1CheckForVersionedWorkingCopy(oldVHNodeRef)) + { + NodeRef versionedNodeRef = v1GetVersionedNodeRef(oldVHNodeRef); + migrateVersionHistory(oldVHNodeRef, versionedNodeRef); + } + else + { + logger.warn("Have found a versioned working copy node " + oldVHNodeRef + ", skipping"); + } if (deleteImmediately) {