From 50de948d3910e63b196a45150fbc5d34e64681b0 Mon Sep 17 00:00:00 2001 From: Dave Ward Date: Tue, 16 Oct 2012 14:20:20 +0000 Subject: [PATCH] Merged V4.1-BUG-FIX to HEAD 42174: ALF-14721: Merged PATCHES/V4.0.2 to V4.1-BUG-FIX 41782: ALF-15751: Merged DEV to V4.0.2 (4.0.2.14) 41704: ALF-15751: CLONE - Version History presents versions in wrong order 'VersionHistoryImpl' now sorts versions by node DB id because version with greater version number can't have id which is lesser than id of version with lesser version number. Additionally, this approach should be quicker than sorting by 'Modification date' and 'Version number' label. << Did not merge unit test, which was doing things with version branches that we don't normally support >> 42179: ALF-16149: Merged PATCHES/V4.0.1 to V4.1-BUG-FIX 41995: 41911: ALF-14127 User search retrieves all users from the DB regardless of search criteria - PeopleServiceImpl.getPeople(...) now calls a new method nonCannedGetPeopleQuery(...) rather than using the canned query which is slow with large numbers of users. 42011: 41911: ALF-14127 User search retrieves all users from the DB regardless of search criteria - Avoid NPE on params 42059: 41911: ALF-14127 User search retrieves all users from the DB regardless of search criteria - Ignore case broke one of the unit tests (now excluded from nonCanned version) 42188: French installer corrections from Gloria 42192: ALF-15906 - Share UI does not show the 'edit online' button for Visio documents 42195: Refactor of imapSpacesTemplates.acp into imapSpacesTemplates.xml and exploded content. This work is a necessary precursor to the fix for ALF-15803, which will add new localisations. 42220: Fix for ALF-16138. AbstractLinksWebScript doesn't cope with Links from deleted users. 42233: Fix for ALF-16164 Cloud monitoring of SOLR is CPU intensive due to its repeated use of the SOLR stats page and related CLOUD-760 Cloud monitoring of SOLR is CPU intensive due to its repeated use of the SOLR stats page 42259: Fix to issue where multiple concurrent writes to same user preferences would cause exception to appear in Share when changing between old document library views and new views provided by a module. 42266: ALF-16154 - IE9: script error when click on workflow from document details page 42268: Fix for ALF-11152 - License Usage information always shows 0 users 42269: Fix for ALF-15211 - TinyMCE corrupting hyperlinks 42275: ALF-15993: alfresco log not removed if uninstalled on a different day - Fix from Bitrock - Also fixed for awe and share logs 42289: Merged DEV to V4.1-BUG-FIX 42276: ALF-1907: Check out rule is active for spaces - Unit test for checkout via action executer Fixed line endings and split asserts 42292: ALF-15937: updated the Javadoc of the checkin method to be in sync with what's in doc.alfresco.com 42307: Fix handling of syncmodeconfig=OFF when running 4.1.X locally without doing full enterprise build. 42308: Fix ALF-13968: Share DocLib sorting mixes files and folders - implicitly sort folders before files (~ pre 4.x) then selected sort option, such as name - also allow Alf-specific option with CMIS getChildren (eg. "orderBy=cmis:baseTypeId DESC,cmis:name ASC") 42310: Merged BRANCHES/DEV/BELARUS/V4.1-BUG-FIX-2012_09_24 to BRANCHES/DEV/V4.1-BUG-FIX: 42309: ALF-15707 (ALF-14691) - Any custom aspect or type (including ootb workflow) is not available for API calls like api/classes/ 42338: Merged BRANCHES/DEV/V3.4-BUG-FIX to BRANCHES/DEV/V4.1-BUG-FIX 42337: Fix for ALF-14764 - Moving a folder removes non-site Group permissions set, resets 'Inherit permissions flag' 42339: Fix for ALF-15151 - Selected group is illegible(black) in Admin console if High contrast theme is selected 42342: ALF-10362: Activities fail to log "name" changes with more than 1024 chars (eg. via Share "Create Content" form) - part I - fix Share config so that default "Create Content" form restricts to 255 chars as per other form config (eg. Edit Properties, inline rename, ...) 42353: Merged V3.4-BUG-FIX to V4.1-BUG-FIX (RECORD ONLY) 42281: Fix for ALF-9946 Need a supported solution for switching off content indexing (FTS) -> merge only to 4.1-BUG-FIX - remove references to isIndexed property which was removed in the back port 42360: ALF-16146: Fixed QName of the data list item type. 42361: ALF-10362: Activities fail to log "name" changes with more than 1024 chars (eg. via Share "Create Content" form) - part II - belts-and-braces (with unit test) 42362: Merged DEV to V4.1-BUG-FIX 42336: ALF-16160: office 2010 doesn't notify users of files being locked when using sharepoint protocol MS Office (if we enabled notification about document unlocking) periodically sends PROPFIND requests to get info about active locks. This code makes PROPFIND be able to send an info about locks for the MS Office 2010 client if a document was locked for edit offline. 42363: ALF-16213: renaming versioned file results in file being deleted. 42368: Record only merge V3.4-BUG-FIX (3.4.12) to V4.1-BUG-FIX (4.1.2) 42367: Merge V3.4 (3.4.11) to V3.4-BUG-FIX (3.4.12) 42366: ALF-16137: Merge V4.1 (4.1.1) to V3.4 (3.4.11) 42048: ALF-16005 Could not transform file size of 0 kb - Turns out that it was only doc ppt and xls zero byte files that had the problem. - Reverting part of revision 6473 (release 2.1 2007) AR-1251 (Version error when saving new content via CIFS) Dave W tells me that this is no longer an issue due to other changes 42381: Fixed ALF-16218: Solr GetNodes return status is 500 for Postgresql - Read-only webscript was calling through to "qnameDAO.getOrCreateQName", which could fail if the QName does not exist. Issue is not critical because it will start working once the QName gets created. 42384: ALF-15868 RepoTransferReceiverImplTest failing on MySQL Checked in a refactor of the transaction handling in the test to remove the suspicion that the current failure iis somehow a test error. (Still fails on MySQL) 42395: ALF-14353: Deploy pom files with dependencies to the Maven repo 42405: ALF-15986: Upgrade to Bitrock 8.5.0 in order to improve font scaling and adaptive layout with Gtk - Helps I18N 42407: Fixed 'state leak' from ActivityServiceImplTest 42408: Merged BRANCHES/DEV/FEATURES/CLOUD1_CLOUDSYNC to BRANCHES/DEV/V4.1-BUG-FIX: 42389: CLOUD-796: handle unknown custom content/folder type 42396: CLOUD-796: handle unknown custom content/folder type 42397: Merged BRANCHES/DEV/V4.1-BUG-FIX to BRANCHES/DEV/FEATURES/CLOUD1_CLOUDSYNC: 41858: ALF-14444 - CloudSync: Ensure unknown properties when synced to Cloud are ignored properly 42406: CLOUD-796: handle unknown custom content/folder type 42409: CloudSync: CLOUD-796 / ALF-16226 - hide sync props in forms (eg. edit props) for sync'ed custom content type 42419: Fixes: ALF-11096 - Ensures event edit button is disabled if the event came from Outlook (this is because VTI connector is one directional & changes can't be pushed back). 42420: Fix for ALF-16003 - Sync mode is incorrectly cached as off if repo hasn't started when the check is made. 42430: More refactoring of RepoTransferReceiverImplTest. 42441: Merged V4.1-BUG-FIX to HEAD 42440: ALF-16247: Thumbnails not rendering for PDFs with standard fonts - Because GS_LIB wasn't set on Linux and OSX 42452: Fix for ALF-15450 Share Lucene tool in admin console works incorrectly 42457: ALF-14347: Document workspace is incorrectly deleted - Check returned status code from delete method before continuing to delete components. 42458: ALF-15700: 'Imap Attachments' folder is not localized. - Added spaces.imap_attachments.childname property that allows the attachments folder to be localized 42459: ALF-16103: No easy way to specify a timeout for LDAP connections - Added ldap-authentication/ldap-ad-authentication property (ldap.authentication.java.naming.read.timeout) to configure the com.sun.jndi.ldap.read.timeout for the initialDirContextEnvironment. - ldap.authentication.java.naming.read.timeout property is configured in milliseconds. Defaults to zero (infinite) which is the current behavior. 42467: Fix for ALF-16275 SOLR include configuration to avoid indexing content - done and fixed all configuration to be treated as Java properties 42472: ALF-16175: Merged PATCHES/V4.0.1 to V4.1-BUG-FIX (Record Only) 42448: ALF-16096: Repo corruption in MT - clean-up assistance requested - Changed RepositoryAuthenticationDAO.getUserFolderLocation() to use getCurrentUserDomain() for its cache key. 42473: ALF-14838 ALF-14839 Deploy Maven artifacts containing the config and the test-resources, using these as classifiers 42475: ALF-14180 - CIFS - Cluster - doc and docx files are opened in read-only mode via MS Office 2003 and 2010 appropriately missed from check in 34544 42477: ALF-5051: Define ThumbnailDefinition Beans Outside of ThumbnailRegistry Bean - Reverted imgpreview to enterprise 4.1 size of 480 42504: Reverse Merge 42458 ALF-15700: 'Imap Attachments' folder is not localized. Causes unit test failures. 42517: ALF-15700: Restoring duff revision 42458 so that we can finish the job and fix it 42518: ALF-15700: Corrected internationalization of IMAP Attachments folder - RepositoryFolderConfigBean must look up paths by QName to be immune to localization and backward compatible - Must throw an error rather than using the store root if the path contains unresolved placeholders! - QName of attachments folder must remain "cm:Imap Attachments" because that's what it always was! 42528: ALF-16282: Hybrid Sync: folder unsync - sub-children still have sync indicators - fix typo fallout from ALF-15420 (r40782) + add unit/regress test 42529: ALF-16231: Corrected Imap Attachments English string 42530: ALF-14838 ALF-14839 Fix enterprise artifacts + deploy jars instead of zips 42531: ALF-14770 Cut / Paste triggers folder rules - Needed to disable rules on nodes being MOVED. - Added extra check to RuleTypeImpl when working out if a rule was disabled so that debug would not be misleading. No impact on logic, as RuleService does the same check later and discards the rules. 42546: ALF-15737 Audit trail does not show user login events - Also does not show any failed login events 42568: ALF-16077 CLONE: Incorrect activities if you try to add/edit/remove comment for document (if this document contains any title) The original activity feed comment code would include the title of a document, folder or blog rather than its name if it was available. - name is a mandatory field for a document and folder. - title is a mandatory field for a blog entry and its name may not be set via Share. Changing activity feed comment code so that the: - name is always used for documents and folders - title is always used for blogs 42571: ALF-14838 ALF-14839 Deploy config and test-resoruces artifacts in the same batch as the main artifact, otherwise they get different snapshot versions 42582: ALF-16255: CopiedFromAspectPatch fails on rules copied with a folder - Checked to make sure that cm:copiedfrom target is a cm:object before attempting a cm:original association. - Remove cm:copiedfrom aspect from source if cm:copiedfrom target is not a cm:object. 42593: ALF-16255: CopiedFromAspectPatch fails on rules copied with a folder - Corrections to log message and formatting. 42605: ALF-16231: Fixed broken IMAP unit tests 42612: Further fix for ALF-16164 Cloud monitoring of SOLR is CPU intensive due to its repeated use of the SOLR stats page - protect from dodgey JSON output 42624: ALF-14353: switch groupId to org.alfresco.enterprise, to be in sync with actual Maven deployment 42657: Fix for ALF-16359 Fix SOLR logging in production and other environments - configure in log4j-solr.properties anywhere on the solr web app classpath ... 42671: ALF-14353: fix facebook api dependency 42679: Merged V3.4-BUG-FIX to V4.1-BUG-FIX 42172: ALF-15262: Correct handling of linked rule deletion - When the last rule is removed from a folder and the ASPECT_RULES aspect is removed from its parent, we must cascade this removal to its secondary parents 42173: ALF-14400: Only site members can Edit Online (sharepoint) although the site is public and permissions allow editing for everybody - Rationalized the fix provided by Alex Malinovsky - Don't bother checking site memberships - let ACLs handle that and just check for permission to read the document 42182: Incremented version revision for 3.4.12 42243: ALF-15262: Further correction by Dmitry: use beforeRemoveAspect because beforeDeleteChildAssociation is not invoked on deletion of primary child associations 42278: ALF-12999: Correction by Alex M 42586: BDE-101: make .MD5 files suitable for easy check with md5sum -c 42627: Merged DEV to V3.4-BUG-FIX 42537: ALF-16139: Impossible to connect to CMIS via AtomPub and Web Services Activation libraries (including all Geronimo versions) have been removed because of a conflict with libraries in JBoss CXF WS installation. Also, 'javax.activation' is part of the JDK 1.6 (http://docs.oracle.com/javase/6/docs/api/javax/activation/DataHandler.html) 42677: Merged V3.4 to V3.4-BUG-FIX 42380: ALF-16220: Merged V4.1-BUG-FIX to V3.4 40590: ALF-15318: It was possible for a user with a disabled / expired account to log in via NTLM/SSO 40663: Merged DEV to V4.1-BUG-FIX 40661: ALF-15318 (part 2): It's possible to log in by disabled user (NTLM with SSO in a clustered env) The onValidateFailed() methods were moved to BaseSSOAuthenticationFilter to response with a 401 for a disabled user. 42556: ALF-15077: Site creation in Share is very very slow with over 15000 sites - Probably knock-on impact from us versioning secondary associations properly - Found old way of locating a leaf document to be ineffective as it would blow the caches (find all documents with the correct ID, then filter out the containers) - Effect was magnified when admin user was previously accessed via the explorer client and thus had an app:configurations child node, thus making admin a container and requiring its paths (e.g. zillions of nested group memberships) to be indexed - Instead, we have a new LEAFID field on leaves that we can use to efficiently locate a node to delete without hitting zillions of containers - Left backward compatible code to avoid requiring a full reindex 42557: ALF-16202: Merged V4.1-BUG-FIX to V3.4 40937: ALF-15702, ALF-15669: mmt-dependencies was messing up the SDK classpath 42566: ALF-15077: Correction to category-handling logic in container generation to fix failing unit tests 42608: Merged DEV to V3.4 42543: ALF-16248 : IE specific: It's impossible to create any event due to script error Correction for the fix for ALF-13623 to support IE8, also added clearing of 'allday' checkbox. 42622: ALF-16339: Group names incorrect in (non-site) "Manage Permissions" page - Site name was being used as the display name of all site groups! 42632: ALF-16354: Merged PATCHES/V3.4.6 to V3.4-BUG-FIX 42521: ALF-16231: Corrected LockUtils.isLockedOrReadOnly to properly handle the LOCK_EXPIRED status - Also fixed CheckOutCheckInService.checkout() to respect LOCK_EXPIRED but still disallow overwrite of unexpired WRITE_LOCKS 42522: ALF-16231: Further improvements - Renamed to isLockedAndReadOnly because that's what it means! 42644: ALF-16298: Cannot install RM amps on 4.1.1 - Passed command line arguments from shell script to mmt utility 42656: ALF-16298: Correction to DOS argument concatenation to allow multiple parameters separated by space 42664: ALF-16358: NPE detected during benchmark test. - Guarding against this in LeafScorer 42665: ALF-16360: Merged HEAD to V3.4 42440: ALF-16247: Thumbnails not rendering for PDFs with standard fonts - Because GS_LIB wasn't set on Linux and OSX 42447: ALF-16247: Thumbnails not rendering for PDFs with standard fonts - Fixes by Bitrock 42678: Merged V3.4 to V3.4-BUG-FIX (RECORD ONLY) 42244: Merged V3.4-BUG-FIX to V3.4 42172: ALF-15262: Correct handling of linked rule deletion - When the last rule is removed from a folder and the ASPECT_RULES aspect is removed from its parent, we must cascade this removal to its secondary parents 42243: ALF-15262: Further correction by Dmitry: use beforeRemoveAspect because beforeDeleteChildAssociation is not invoked on deletion of primary child associations 42279: Merged V3.4-BUG-FIX to V3.4 42278: ALF-12999: Correction by Alex M 42282: Merged V3.4-BUG-FIX to V3.4 42281: Fix for ALF-9946 Need a supported solution for switching off content indexing (FTS) -> merge only to 4.1-BUG-FIX - remove references to isIndexed property which was removed in the back port git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@42683 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../alfresco/repository/links/links.lib.ftl | 2 +- .../action/move-to.post.json.js | 2 +- .../web-scripts-application-context.xml | 2 +- pom.xml | 10 ++-- .../datalist/DataListDownloadWebScript.java | 2 +- .../dictionary/DictionaryWebServiceBase.java | 46 +++--------------- .../scripts/links/AbstractLinksWebScript.java | 22 +++++---- .../org/alfresco/repo/webdav/MoveMethod.java | 36 +++++++++----- .../alfresco/repo/webdav/WebDAVHelper.java | 2 +- source/sample/JavaCmisTest/.classpath | 2 - .../geronimo-activation_1.1_spec-1.0.2.jar | Bin 34126 -> 0 bytes 11 files changed, 55 insertions(+), 71 deletions(-) delete mode 100644 source/sample/JavaCmisTest/lib/geronimo-activation_1.1_spec-1.0.2.jar diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/links/links.lib.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/links/links.lib.ftl index 6a0ff560b2..70c3025720 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/links/links.lib.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/links/links.lib.ftl @@ -32,7 +32,7 @@ "iso8601": "${xmldate(item.createdOn)}", "legacyDate": "${xmldate(item.createdOn)}" }, - <#if item.creator??> + <#if item.creator?has_content> <@renderPerson person=item.creator fieldName="author" /> <#else> "author": diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/move-to.post.json.js b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/move-to.post.json.js index 8cb1f8b007..0bb89d8199 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/move-to.post.json.js +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary/action/move-to.post.json.js @@ -65,7 +65,7 @@ function runAction(p_params) if (result.success) { // If this was an inter-site move, we'll need to clean up the permissions on the node - if (fromSite != fileNode.siteShortName) + if (String(fromSite) !== String(fileNode.siteShortName)) { siteService.cleanSitePermissions(fileNode); } diff --git a/config/alfresco/web-scripts-application-context.xml b/config/alfresco/web-scripts-application-context.xml index 0f82ac8729..247fc007d9 100644 --- a/config/alfresco/web-scripts-application-context.xml +++ b/config/alfresco/web-scripts-application-context.xml @@ -811,7 +811,7 @@ - + diff --git a/pom.xml b/pom.xml index 979c28e2c5..825333938f 100644 --- a/pom.xml +++ b/pom.xml @@ -8,14 +8,14 @@ Alfresco Remote API alfresco-parent - org.alfresco + org.alfresco.enterprise 4.2-SNAPSHOT ../../pom-experimental.xml - org.alfresco + org.alfresco.enterprise alfresco-repository ${project.version} @@ -26,7 +26,7 @@ - org.alfresco + org.alfresco.enterprise alfresco-wdr-deployment ${project.version} @@ -146,14 +146,14 @@ test - org.alfresco + org.alfresco.enterprise alfresco-repository ${project.version} tests test - org.alfresco + org.alfresco.enterprise alfresco-deployment ${project.version} tests diff --git a/source/java/org/alfresco/repo/web/scripts/datalist/DataListDownloadWebScript.java b/source/java/org/alfresco/repo/web/scripts/datalist/DataListDownloadWebScript.java index a53fcbade7..12fe1fda8d 100644 --- a/source/java/org/alfresco/repo/web/scripts/datalist/DataListDownloadWebScript.java +++ b/source/java/org/alfresco/repo/web/scripts/datalist/DataListDownloadWebScript.java @@ -73,7 +73,7 @@ public class DataListDownloadWebScript extends DeclarativeSpreadsheetWebScript // Logger private static final Log logger = LogFactory.getLog(DataListDownloadWebScript.class); - private static final QName DATA_LIST_ITEM_TYPE = DataListModel.TYPE_DATALIST_ITEM; + private static final QName DATA_LIST_ITEM_TYPE = DataListModel.PROP_DATALIST_ITEM_TYPE; private NodeService nodeService; private SiteService siteService; diff --git a/source/java/org/alfresco/repo/web/scripts/dictionary/DictionaryWebServiceBase.java b/source/java/org/alfresco/repo/web/scripts/dictionary/DictionaryWebServiceBase.java index 5706541492..9a98e34125 100644 --- a/source/java/org/alfresco/repo/web/scripts/dictionary/DictionaryWebServiceBase.java +++ b/source/java/org/alfresco/repo/web/scripts/dictionary/DictionaryWebServiceBase.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2011 Alfresco Software Limited. + * Copyright (C) 2005-2012 Alfresco Software Limited. * * This file is part of Alfresco * @@ -19,8 +19,6 @@ package org.alfresco.repo.web.scripts.dictionary; import java.util.Collection; -import java.util.HashMap; -import java.util.Map; import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.namespace.InvalidQNameException; @@ -39,9 +37,6 @@ public abstract class DictionaryWebServiceBase extends DeclarativeWebScript { private static final String NAME_DELIMITER = "_"; - private Map prefixesAndUrlsMap; - private Map urlsAndPrefixesMap; - /** Namespace service */ protected NamespaceService namespaceService; @@ -77,22 +72,6 @@ public abstract class DictionaryWebServiceBase extends DeclarativeWebScript this.dictionaryservice = dictionaryService; } - /** - * Init method. - */ - public void init() - { - Collection prefixes = this.namespaceService.getPrefixes(); - this.prefixesAndUrlsMap = new HashMap(prefixes.size()); - this.urlsAndPrefixesMap = new HashMap(prefixes.size()); - for (String prefix : prefixes) - { - String url = this.namespaceService.getNamespaceURI(prefix); - this.prefixesAndUrlsMap.put(prefix, url); - this.urlsAndPrefixesMap.put(url, prefix); - } - } - protected QName createClassQName(String className) { QName result = null; @@ -136,7 +115,7 @@ public abstract class DictionaryWebServiceBase extends DeclarativeWebScript { String result = null; String prefix = this.getPrefix(classname); - String url = this.prefixesAndUrlsMap.get(prefix); + String url = this.namespaceService.getNamespaceURI(prefix); String name = this.getShortName(classname); result = "{" + url + "}"+ name; return result; @@ -177,7 +156,11 @@ public abstract class DictionaryWebServiceBase extends DeclarativeWebScript { if(qnameObj.getLocalName().equals(modelname)) { - namespaceprefix = this.getUrlsAndPrefixesMap().get(qnameObj.getNamespaceURI()); + Collection prefixes = this.namespaceService.getPrefixes(qnameObj.getNamespaceURI()); + if (!prefixes.isEmpty()) + { + namespaceprefix = prefixes.iterator().next(); + } break; } } @@ -286,19 +269,4 @@ public abstract class DictionaryWebServiceBase extends DeclarativeWebScript classfilter.equals(CLASS_FILTER_OPTION_TYPE3)); } - /** - * @return a string map or prefixes and urls - with prefix as the key - */ - public Map getPrefixesAndUrlsMap() - { - return prefixesAndUrlsMap; - } - - /** - * @return a string map of urls and prefixes - with url as the key - */ - public Map getUrlsAndPrefixesMap() - { - return urlsAndPrefixesMap; - } } diff --git a/source/java/org/alfresco/repo/web/scripts/links/AbstractLinksWebScript.java b/source/java/org/alfresco/repo/web/scripts/links/AbstractLinksWebScript.java index fa56c382f0..39e18b8149 100644 --- a/source/java/org/alfresco/repo/web/scripts/links/AbstractLinksWebScript.java +++ b/source/java/org/alfresco/repo/web/scripts/links/AbstractLinksWebScript.java @@ -32,6 +32,7 @@ import org.alfresco.service.cmr.links.LinkInfo; import org.alfresco.service.cmr.links.LinksService; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.security.NoSuchPersonException; import org.alfresco.service.cmr.security.PersonService; import org.alfresco.service.cmr.site.SiteInfo; import org.alfresco.service.cmr.site.SiteService; @@ -209,17 +210,20 @@ public abstract class AbstractLinksWebScript extends DeclarativeWebScript res.put("tags", link.getTags()); res.put("internal", link.isInternal()); - // FTL needs a script node of the person + // FTL needs a script node of the person, if available String creator = link.getCreator(); - Object creatorO; - if (creator == null) + Object creatorO = ""; + if (creator != null) { - creatorO = ""; - } - else - { - NodeRef person = personService.getPerson(creator); - creatorO = person; + try + { + NodeRef person = personService.getPerson(creator); + creatorO = person; + } + catch (NoSuchPersonException ignored) + { + // Intentionally empty - treat deleted users as no user. + } } res.put("creator", creatorO); diff --git a/source/java/org/alfresco/repo/webdav/MoveMethod.java b/source/java/org/alfresco/repo/webdav/MoveMethod.java index 45443d4910..284e7d52cd 100644 --- a/source/java/org/alfresco/repo/webdav/MoveMethod.java +++ b/source/java/org/alfresco/repo/webdav/MoveMethod.java @@ -90,7 +90,29 @@ public class MoveMethod extends AbstractMoveOrCopyMethod checkNode(sourceFileInfo); - if (destFileInfo != null && (isShuffleOperation(sourceFileInfo) || isVersioned(destFileInfo))) + if (sourceParentNodeRef.equals(destParentNodeRef)) + { + // It is rename method + try + { + fileFolderService.rename(sourceNodeRef, name); + } + catch (AccessDeniedException e) + { + XMLWriter xml = createXMLWriter(); + + Attributes nullAttr = getDAVHelper().getNullAttributes(); + + xml.startElement(WebDAV.DAV_NS, WebDAV.XML_ERROR, WebDAV.XML_NS_ERROR, nullAttr); + // Output error + xml.write(DocumentHelper.createElement(WebDAV.XML_NS_CANNOT_MODIFY_PROTECTED_PROPERTY)); + + xml.endElement(WebDAV.DAV_NS, WebDAV.XML_ERROR, WebDAV.XML_NS_ERROR); + m_response.setStatus(HttpServletResponse.SC_CONFLICT); + return; + } + } + else if (destFileInfo != null && (isShuffleOperation(sourceFileInfo) || isVersioned(destFileInfo))) { copyOnlyContent(sourceNodeRef, destFileInfo, fileFolderService); } @@ -110,16 +132,8 @@ public class MoveMethod extends AbstractMoveOrCopyMethod } else { - if (sourceParentNodeRef.equals(destParentNodeRef)) - { - // It is rename method - fileFolderService.rename(sourceNodeRef, name); - } - else - { - // It is move operation - fileFolderService.moveFrom(sourceNodeRef, sourceParentNodeRef, destParentNodeRef, name); - } + // It is a simple move operation + fileFolderService.moveFrom(sourceNodeRef, sourceParentNodeRef, destParentNodeRef, name); } } diff --git a/source/java/org/alfresco/repo/webdav/WebDAVHelper.java b/source/java/org/alfresco/repo/webdav/WebDAVHelper.java index 03633532d2..f4610f0d23 100644 --- a/source/java/org/alfresco/repo/webdav/WebDAVHelper.java +++ b/source/java/org/alfresco/repo/webdav/WebDAVHelper.java @@ -971,6 +971,6 @@ public class WebDAVHelper */ public boolean isLockedOrReadOnly(final NodeRef nodeRef) { - return LockUtils.isLockedOrReadOnly(nodeRef, m_serviceRegistry.getLockService()); + return LockUtils.isLockedAndReadOnly(nodeRef, m_serviceRegistry.getLockService()); } } diff --git a/source/sample/JavaCmisTest/.classpath b/source/sample/JavaCmisTest/.classpath index 497368e1f6..90c1c47706 100644 --- a/source/sample/JavaCmisTest/.classpath +++ b/source/sample/JavaCmisTest/.classpath @@ -5,8 +5,6 @@ - - diff --git a/source/sample/JavaCmisTest/lib/geronimo-activation_1.1_spec-1.0.2.jar b/source/sample/JavaCmisTest/lib/geronimo-activation_1.1_spec-1.0.2.jar deleted file mode 100644 index 3e75446e47d71ae9e43a416cff27c44db4b38724..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34126 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