From ca4089d89595a91a532394aa23fcfc90291d1299 Mon Sep 17 00:00:00 2001 From: Dave Ward Date: Tue, 5 Mar 2013 12:14:18 +0000 Subject: [PATCH] Merged V4.1-BUG-FIX to HEAD 47526: ALF-13949: Copying folder which contains working copy doesn't work properly. - Correct recursive copy and FileFolderService copy to respect the working copy renaming behaviour from ETHREEOH-2762 - Fix researched by Alex Bykov 47563: Merged PATCHES/V4.1.4 to V4.1-BUG-FIX 47529: ALF-18207: Alfresco not starting with WQS module applied - Regression caused by change in surf constructor behaviour 47536: ALF-18249: Alfresco doesn't start with Kerberos or NTLM authentification - Authentication filters do not demarcate transactions - Precautionary fix to restore existing behaviour regressed by ALF-17979 - Don't try to use transactional caches if there is no transaction - Moving authentication filters to public PersonService would add necessary transaction demarcation, but may cause regressions due to permission evaluation 47565: Merged PATCHES/V4.1.4 to V4.1-BUG-FIX (RECORD ONLY) 47500: Merged V4.1-BUG-FIX to PATCHES/V4.1.4 47497: Fixed ALF-13679 "Cannot play a movie file in Preview, which has double byte characters in the file name" - Fix from previous commit where a typo sneaked in just before commit 47517: ALF-18243: Merged V4.1-BUG-FIX to PATCHES/V4.1.4 47508: Merged HEAD to BRANCHES/DEV/V4.1-BUG-FIX 47448: Optimize ApplicationScriptUtils.toJSON() - threadlocal cache for namespace resolution to avoid DD access, smarter retrieval of cm:person properties - 40% quicker or more in some cases Convert short qnames to long qnames in our templates to avoid DD access to resolve full qnames Optimize out N+1 queries from calling RatingService.getRating() unless the document has at least one Like (which is available in the rolled up property already present on the node) - up to 99% quicker when building "Likes" JSON structure...! Added new optimized method to FileFolderService to retrieve a cm:name based path 47484: Fix exception throw in FileFolderServiceImpl.getNameOnlyPath() to ensure only FileNotFoundException is thrown not RuntimeException to pass unit test. 47504: Performance improvements to retrieving lists of nodes and single nodes. - no longer perform N+1 queries to get thumbnails when retrieving nodes git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@47566 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../java/org/alfresco/repo/copy/CopyServiceImpl.java | 10 ++++++++-- .../repo/model/filefolder/FileFolderServiceImpl.java | 5 ++++- .../repo/security/authority/AuthorityDAOImpl.java | 2 +- .../repo/security/person/PersonServiceImpl.java | 2 +- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/source/java/org/alfresco/repo/copy/CopyServiceImpl.java b/source/java/org/alfresco/repo/copy/CopyServiceImpl.java index 91270e6731..80c1c4348d 100644 --- a/source/java/org/alfresco/repo/copy/CopyServiceImpl.java +++ b/source/java/org/alfresco/repo/copy/CopyServiceImpl.java @@ -548,8 +548,14 @@ public class CopyServiceImpl implements CopyService ChildAssociationDefinition childAssocDef = (ChildAssociationDefinition) assocDef; if (dropName && !childAssocDef.getDuplicateChildNamesAllowed()) { - // duplicate children are not allowed. - targetNodeProperties.remove(ContentModel.PROP_NAME); + // ALF-13949: A behaviour callback (e.g. WorkingCopyAspect) may already have generated a new name, so + // preserve the new name if it has changed + String newName = (String) targetNodeProperties.get(ContentModel.PROP_NAME); + if (newName != null && newName.equals(nodeService.getProperty(sourceNodeRef, ContentModel.PROP_NAME))) + { + // duplicate children are not allowed. + targetNodeProperties.remove(ContentModel.PROP_NAME); + } } } diff --git a/source/java/org/alfresco/repo/model/filefolder/FileFolderServiceImpl.java b/source/java/org/alfresco/repo/model/filefolder/FileFolderServiceImpl.java index f47ca76c4e..beef653df3 100644 --- a/source/java/org/alfresco/repo/model/filefolder/FileFolderServiceImpl.java +++ b/source/java/org/alfresco/repo/model/filefolder/FileFolderServiceImpl.java @@ -1139,7 +1139,10 @@ public class FileFolderServiceImpl implements FileFolderService // Only update the name if it has changed String currentName = (String)nodeService.getProperty(targetNodeRef, ContentModel.PROP_NAME); - if (currentName.equals(newName) == false) + + // ALF-13949: WorkingCopyAspect intentionally generates new names for all copies of working copies (which no + // longer have the working copy aspect) so leave these alone after copy + if (!currentName.equals(newName) && !nodeService.hasAspect(sourceNodeRef, ContentModel.ASPECT_WORKING_COPY)) { try { diff --git a/source/java/org/alfresco/repo/security/authority/AuthorityDAOImpl.java b/source/java/org/alfresco/repo/security/authority/AuthorityDAOImpl.java index 342af25dc7..db3f9483c9 100644 --- a/source/java/org/alfresco/repo/security/authority/AuthorityDAOImpl.java +++ b/source/java/org/alfresco/repo/security/authority/AuthorityDAOImpl.java @@ -797,7 +797,7 @@ public class AuthorityDAOImpl implements AuthorityDAO, NodeServicePolicies.Befor { listAuthorities(null, name, authorities, true, true); } - if(!TransactionalResourceHelper.getSet(DELETING_AUTHORITY_SET_RESOURCE).contains(name)) + if(AlfrescoTransactionSupport.getTransactionId() != null && !TransactionalResourceHelper.getSet(DELETING_AUTHORITY_SET_RESOURCE).contains(name)) { userAuthorityCache.put(name, Collections.unmodifiableSet(authorities)); } diff --git a/source/java/org/alfresco/repo/security/person/PersonServiceImpl.java b/source/java/org/alfresco/repo/security/person/PersonServiceImpl.java index 9ec216ee2a..4133b4bd82 100644 --- a/source/java/org/alfresco/repo/security/person/PersonServiceImpl.java +++ b/source/java/org/alfresco/repo/security/person/PersonServiceImpl.java @@ -1715,7 +1715,7 @@ public class PersonServiceImpl extends TransactionListenerAdapter implements Per private void putToCache(String userName, Set refs) { String key = userName.toLowerCase(); - if(!TransactionalResourceHelper.getSet(DELETING_PERSON_SET_RESOURCE).contains(key)) + if(AlfrescoTransactionSupport.getTransactionId() != null && TransactionalResourceHelper.getSet(DELETING_PERSON_SET_RESOURCE).contains(key)) { this.personCache.put(key, refs); }