mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged V3.3-BUG-FIX to HEAD
23054: Merged BRANCHES/DEV/BELARUS/V3.3-BUG-FIX-2010_10_04 to BRANCHES/DEV/V3.3-BUG-FIX: 23044: ALF-5112 : Bug fix for ALF-3962 is incomplete (can cause fix-up of version history to be incorrectly ordered - in case where versions have the same frozen modified date) - merged with some updates, eg. force unit test to exercise the fix 23058: ALF-4379: Don't mix up email recipients for different actions git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@23059 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -959,7 +959,22 @@ public class Version2ServiceImpl extends VersionServiceImpl implements VersionSe
|
|||||||
int result = v1.getFrozenModifiedDate().compareTo(v2.getFrozenModifiedDate());
|
int result = v1.getFrozenModifiedDate().compareTo(v2.getFrozenModifiedDate());
|
||||||
if (result == 0)
|
if (result == 0)
|
||||||
{
|
{
|
||||||
result = v1.getFrozenStateNodeRef().getId().compareTo(v2.getFrozenStateNodeRef().getId());
|
Long dbid1 = (Long)nodeService.getProperty(v1.getFrozenStateNodeRef(), ContentModel.PROP_NODE_DBID);
|
||||||
|
Long dbid2 = (Long)nodeService.getProperty(v2.getFrozenStateNodeRef(), ContentModel.PROP_NODE_DBID);
|
||||||
|
|
||||||
|
if (dbid1 != null && dbid2 != null)
|
||||||
|
{
|
||||||
|
result = dbid1.compareTo(dbid2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = 0;
|
||||||
|
|
||||||
|
if (logger.isWarnEnabled())
|
||||||
|
{
|
||||||
|
logger.warn("node-dbid property is missing for versions: " + v1.toString() + " or " + v2.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@@ -33,6 +33,7 @@ import org.alfresco.model.ContentModel;
|
|||||||
import org.alfresco.repo.security.authentication.AuthenticationComponent;
|
import org.alfresco.repo.security.authentication.AuthenticationComponent;
|
||||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||||
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
||||||
|
import org.alfresco.repo.version.common.VersionUtil;
|
||||||
import org.alfresco.service.ServiceRegistry;
|
import org.alfresco.service.ServiceRegistry;
|
||||||
import org.alfresco.service.cmr.model.FileFolderService;
|
import org.alfresco.service.cmr.model.FileFolderService;
|
||||||
import org.alfresco.service.cmr.model.FileInfo;
|
import org.alfresco.service.cmr.model.FileInfo;
|
||||||
@@ -1167,20 +1168,37 @@ public class VersionServiceImplTest extends BaseVersionStoreTest
|
|||||||
public void testALF_3962()
|
public void testALF_3962()
|
||||||
{
|
{
|
||||||
NodeRef versionableNode = createNode(true, QName.createQName("http://www.alfresco.org/model/action/1.0", "action"));
|
NodeRef versionableNode = createNode(true, QName.createQName("http://www.alfresco.org/model/action/1.0", "action"));
|
||||||
// crete some versions of content without version label policy
|
|
||||||
|
// create some versions of content without version label policy
|
||||||
createVersion(versionableNode);
|
createVersion(versionableNode);
|
||||||
createVersion(versionableNode);
|
createVersion(versionableNode);
|
||||||
createVersion(versionableNode);
|
createVersion(versionableNode);
|
||||||
|
|
||||||
|
// create some more versions and force them to have same frozen modified date
|
||||||
|
Version ver = createVersion(versionableNode);
|
||||||
|
Date frozenModifiedDate = ver.getFrozenModifiedDate();
|
||||||
|
|
||||||
|
ver = createVersion(versionableNode);
|
||||||
|
NodeRef versionNodeRef = VersionUtil.convertNodeRef(ver.getFrozenStateNodeRef());
|
||||||
|
this.dbNodeService.setProperty(versionNodeRef, Version2Model.PROP_QNAME_FROZEN_MODIFIED, frozenModifiedDate);
|
||||||
|
|
||||||
|
ver = createVersion(versionableNode);
|
||||||
|
versionNodeRef = VersionUtil.convertNodeRef(ver.getFrozenStateNodeRef());
|
||||||
|
this.dbNodeService.setProperty(versionNodeRef, Version2Model.PROP_QNAME_FROZEN_MODIFIED, frozenModifiedDate);
|
||||||
|
|
||||||
// corrupt versions
|
// corrupt versions
|
||||||
Collection<Version> versions = versionService.getVersionHistory(versionableNode).getAllVersions();
|
Collection<Version> versions = versionService.getVersionHistory(versionableNode).getAllVersions();
|
||||||
|
|
||||||
|
List<Version> oldVersions = new ArrayList<Version>(versions.size());
|
||||||
|
|
||||||
for (Version version : versions)
|
for (Version version : versions)
|
||||||
{
|
{
|
||||||
// update version with corrupted label
|
// update version with corrupted label
|
||||||
NodeRef versionNodeRef = new NodeRef(StoreRef.PROTOCOL_WORKSPACE, version.getFrozenStateNodeRef().getStoreRef().getIdentifier(), version.getFrozenStateNodeRef()
|
versionNodeRef = VersionUtil.convertNodeRef(version.getFrozenStateNodeRef());
|
||||||
.getId());
|
|
||||||
this.dbNodeService.setProperty(versionNodeRef, Version2Model.PROP_QNAME_VERSION_LABEL, "0");
|
this.dbNodeService.setProperty(versionNodeRef, Version2Model.PROP_QNAME_VERSION_LABEL, "0");
|
||||||
|
|
||||||
|
// cache results
|
||||||
|
oldVersions.add(version);
|
||||||
}
|
}
|
||||||
this.nodeService.setProperty(versionableNode, ContentModel.PROP_VERSION_LABEL, "0");
|
this.nodeService.setProperty(versionableNode, ContentModel.PROP_VERSION_LABEL, "0");
|
||||||
|
|
||||||
@@ -1188,15 +1206,31 @@ public class VersionServiceImplTest extends BaseVersionStoreTest
|
|||||||
versionService.createVersion(versionableNode, this.versionProperties);
|
versionService.createVersion(versionableNode, this.versionProperties);
|
||||||
|
|
||||||
versions = versionService.getVersionHistory(versionableNode).getAllVersions();
|
versions = versionService.getVersionHistory(versionableNode).getAllVersions();
|
||||||
|
List<Version> newVersions = new ArrayList<Version>(versions.size());
|
||||||
|
|
||||||
for (Version version : versions)
|
for (Version version : versions)
|
||||||
{
|
{
|
||||||
assertFalse(version.getVersionLabel().equals("0"));
|
assertFalse(version.getVersionLabel().equals("0"));
|
||||||
|
newVersions.add(version);
|
||||||
}
|
}
|
||||||
|
|
||||||
// check live node
|
// check live node
|
||||||
assertFalse(this.nodeService.getProperty(versionableNode, ContentModel.PROP_VERSION_LABEL).toString().equals("0"));
|
assertFalse(this.nodeService.getProperty(versionableNode, ContentModel.PROP_VERSION_LABEL).toString().equals("0"));
|
||||||
|
|
||||||
|
//check order
|
||||||
|
for (int i = 0; i < oldVersions.size(); i++)
|
||||||
|
{
|
||||||
|
Version oldVersion = oldVersions.get(i);
|
||||||
|
Version newVersion = newVersions.get(i + 1);
|
||||||
|
|
||||||
|
assertEquals(oldVersion.getFrozenModifiedDate(), newVersion.getFrozenModifiedDate());
|
||||||
|
|
||||||
|
assertEquals(oldVersion.getVersionLabel(), newVersion.getVersionLabel());
|
||||||
|
String nodeDbidKey = ContentModel.PROP_NODE_DBID.getLocalName();
|
||||||
|
assertEquals(oldVersion.getVersionProperty(nodeDbidKey), newVersion.getVersionProperty(nodeDbidKey));
|
||||||
|
String nodeUuidKey = ContentModel.PROP_NODE_UUID.getLocalName();
|
||||||
|
assertEquals(oldVersion.getVersionProperty(nodeUuidKey), newVersion.getVersionProperty(nodeUuidKey));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String ... args)
|
public static void main(String ... args)
|
||||||
|
Reference in New Issue
Block a user