From 575c51a6971063d27a34e0f830f03238eb546bd8 Mon Sep 17 00:00:00 2001 From: Derek Hulley Date: Tue, 2 Oct 2007 16:10:58 +0000 Subject: [PATCH] Merged V2.1 to HEAD 6846: used ] instead of } in ${ldap.synchronisation.userIdAttributeName] 6856: Fixed 2 NPEs, one reported by MIT and one found by Jan (WCM-835) 6859: Truncate an existing file when uploading via FTP. WCM-836. 6869: Removed temporary files and folders from deploy-installer project 6870: Updated ignore property 6875: Fix for AWC-1605 6878: Fix for AWC-1587 6880: Fix for French language pack - locked_user message 6883: Fix for AWC-1565 6884: Relax trhe permissions required to get the parent links from a child node 6891: Fix for AR-1781 and AR-1782 (requires CHK-1451) 6892: Fixed AR-1777: Node status not updated for addition and removal of secondary associations (affects index tracking) 6893: Sample for replicating content store sample 6896: Added JVM shutdown check into inner loop to get faster breakout in the event of shutdown. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@6899 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../ldap-synchronisation-context.xml.sample | 2 +- ...cating-content-services-context.xml.sample | 70 ++++--------------- .../public-services-security-context.xml | 4 +- .../alfresco/filesys/ftp/FTPSrvSession.java | 4 ++ .../org/alfresco/repo/jscript/ScriptNode.java | 3 +- .../repo/node/db/DbNodeServiceImpl.java | 13 ++++ .../HibernateNodeDaoServiceImpl.java | 2 +- .../index/IndexRemoteTransactionTracker.java | 5 ++ .../repo/template/BaseContentNode.java | 11 +-- .../alfresco/service/cmr/repository/Path.java | 18 ++--- 10 files changed, 49 insertions(+), 83 deletions(-) diff --git a/config/alfresco/extension/ldap-synchronisation-context.xml.sample b/config/alfresco/extension/ldap-synchronisation-context.xml.sample index d61cb0b408..5c2845ecb7 100644 --- a/config/alfresco/extension/ldap-synchronisation-context.xml.sample +++ b/config/alfresco/extension/ldap-synchronisation-context.xml.sample @@ -73,7 +73,7 @@ --> - ${ldap.synchronisation.userIdAttributeName] + ${ldap.synchronisation.userIdAttributeName} diff --git a/config/alfresco/extension/replicating-content-services-context.xml.sample b/config/alfresco/extension/replicating-content-services-context.xml.sample index 40a39b7d92..33a68cfa76 100644 --- a/config/alfresco/extension/replicating-content-services-context.xml.sample +++ b/config/alfresco/extension/replicating-content-services-context.xml.sample @@ -7,80 +7,34 @@ If you include this file, please ensure that you review the sample beans contained here. --> - - + + - ${dir.contentstore}/../backups/alfresco + /var/alfresco/content-store - - - - - - - - - - + + + /share/alfresco/content-store + - - - - - - org.alfresco.repo.content.replication.ContentStoreReplicator$ContentStoreReplicatorJob - - - - - - - - - - - - - - - - 0 0 03 * * ? - - - - - + - + - - - + - - false + true - - false + true - - - - - - diff --git a/config/alfresco/public-services-security-context.xml b/config/alfresco/public-services-security-context.xml index 6e0b4cc6d3..b4808de92f 100644 --- a/config/alfresco/public-services-security-context.xml +++ b/config/alfresco/public-services-security-context.xml @@ -349,10 +349,10 @@ org.alfresco.service.cmr.repository.NodeService.setProperties=ACL_NODE.0.sys:base.WriteProperties org.alfresco.service.cmr.repository.NodeService.setProperty=ACL_NODE.0.sys:base.WriteProperties org.alfresco.service.cmr.repository.NodeService.removeProperty=ACL_NODE.0.sys:base.WriteProperties - org.alfresco.service.cmr.repository.NodeService.getParentAssocs=ACL_NODE.0.sys:base.ReadProperties,AFTER_ACL_PARENT.sys:base.ReadProperties + org.alfresco.service.cmr.repository.NodeService.getParentAssocs=ACL_NODE.0.sys:base.ReadProperties org.alfresco.service.cmr.repository.NodeService.getChildAssocs=ACL_NODE.0.sys:base.ReadChildren,AFTER_ACL_NODE.sys:base.ReadProperties org.alfresco.service.cmr.repository.NodeService.getChildByName=ACL_NODE.0.sys:base.ReadChildren,AFTER_ACL_NODE.sys:base.ReadProperties - org.alfresco.service.cmr.repository.NodeService.getPrimaryParent=ACL_NODE.0.sys:base.ReadProperties,AFTER_ACL_PARENT.sys:base.ReadProperties + org.alfresco.service.cmr.repository.NodeService.getPrimaryParent=ACL_NODE.0.sys:base.ReadProperties org.alfresco.service.cmr.repository.NodeService.createAssociation=ROLE_AUTHENTICATED org.alfresco.service.cmr.repository.NodeService.removeAssociation=ROLE_AUTHENTICATED org.alfresco.service.cmr.repository.NodeService.getTargetAssocs=ROLE_AUTHENTICATED diff --git a/source/java/org/alfresco/filesys/ftp/FTPSrvSession.java b/source/java/org/alfresco/filesys/ftp/FTPSrvSession.java index d49062f6b6..437e62f97b 100644 --- a/source/java/org/alfresco/filesys/ftp/FTPSrvSession.java +++ b/source/java/org/alfresco/filesys/ftp/FTPSrvSession.java @@ -2339,6 +2339,10 @@ public class FTPSrvSession extends SrvSession implements Runnable // Overwrite the existing file netFile = disk.openFile(this, tree, params); + + // Truncate the existing file + + netFile.truncateFile( 0L); } else { diff --git a/source/java/org/alfresco/repo/jscript/ScriptNode.java b/source/java/org/alfresco/repo/jscript/ScriptNode.java index 13af1c1e35..767b644f4c 100644 --- a/source/java/org/alfresco/repo/jscript/ScriptNode.java +++ b/source/java/org/alfresco/repo/jscript/ScriptNode.java @@ -704,7 +704,8 @@ public class ScriptNode implements Serializable, Scopeable { if (displayPath == null) { - displayPath = this.nodeService.getPath(this.nodeRef).toDisplayPath(this.nodeService); + displayPath = this.nodeService.getPath(this.nodeRef).toDisplayPath( + this.nodeService, this.services.getPermissionService()); } return displayPath; diff --git a/source/java/org/alfresco/repo/node/db/DbNodeServiceImpl.java b/source/java/org/alfresco/repo/node/db/DbNodeServiceImpl.java index 95c10f5113..98a76f4969 100644 --- a/source/java/org/alfresco/repo/node/db/DbNodeServiceImpl.java +++ b/source/java/org/alfresco/repo/node/db/DbNodeServiceImpl.java @@ -832,6 +832,9 @@ public class DbNodeServiceImpl extends AbstractNodeServiceImpl // Invoke policy behaviours invokeOnCreateChildAssociation(assocRef, false); + + // update the node status + nodeDaoService.recordChangeId(childNodeRef); return assoc.getChildAssocRef(); } @@ -872,6 +875,12 @@ public class DbNodeServiceImpl extends AbstractNodeServiceImpl { deleteNode(primaryAssocRef.getChildRef()); } + else + { + // The cascade delete will update the node status, but just a plain assoc deletion will not + // Update the node status + nodeDaoService.recordChangeId(childRef); + } // done } @@ -888,6 +897,8 @@ public class DbNodeServiceImpl extends AbstractNodeServiceImpl if (deleted) { invokeOnDeleteChildAssociation(childAssocRef); + // Update the node status + nodeDaoService.recordChangeId(childNode.getNodeRef()); } // Done return deleted; @@ -914,6 +925,8 @@ public class DbNodeServiceImpl extends AbstractNodeServiceImpl // Delete the secondary association nodeDaoService.deleteChildAssoc(assoc, false); invokeOnDeleteChildAssociation(childAssocRef); + // Update the node status + nodeDaoService.recordChangeId(childNode.getNodeRef()); // Done return true; } diff --git a/source/java/org/alfresco/repo/node/db/hibernate/HibernateNodeDaoServiceImpl.java b/source/java/org/alfresco/repo/node/db/hibernate/HibernateNodeDaoServiceImpl.java index 31c943a4b6..071f6fa431 100644 --- a/source/java/org/alfresco/repo/node/db/hibernate/HibernateNodeDaoServiceImpl.java +++ b/source/java/org/alfresco/repo/node/db/hibernate/HibernateNodeDaoServiceImpl.java @@ -1069,7 +1069,7 @@ public class HibernateNodeDaoServiceImpl extends HibernateDaoSupport implements if (parentAssoc == null) { // The cache is out of date, so just repopulate it - parentAssoc = null; + parentAssocs = null; break; } else diff --git a/source/java/org/alfresco/repo/node/index/IndexRemoteTransactionTracker.java b/source/java/org/alfresco/repo/node/index/IndexRemoteTransactionTracker.java index a9a544f0af..dce5c94ea1 100644 --- a/source/java/org/alfresco/repo/node/index/IndexRemoteTransactionTracker.java +++ b/source/java/org/alfresco/repo/node/index/IndexRemoteTransactionTracker.java @@ -100,6 +100,11 @@ public class IndexRemoteTransactionTracker extends AbstractReindexComponent long txnId = txn.getId(); reindexTransaction(txnId); currentTxnId = txnId; + // break out if the VM is shutting down + if (isShuttingDown()) + { + break; + } } } } diff --git a/source/java/org/alfresco/repo/template/BaseContentNode.java b/source/java/org/alfresco/repo/template/BaseContentNode.java index a09e851459..3537ef3fe4 100644 --- a/source/java/org/alfresco/repo/template/BaseContentNode.java +++ b/source/java/org/alfresco/repo/template/BaseContentNode.java @@ -35,7 +35,6 @@ import java.util.Set; import org.alfresco.model.ApplicationModel; import org.alfresco.model.ContentModel; import org.alfresco.repo.content.MimetypeMap; -import org.alfresco.repo.security.permissions.AccessDeniedException; import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.repository.ChildAssociationRef; @@ -259,14 +258,8 @@ public abstract class BaseContentNode implements TemplateContent { if (displayPath == null) { - try - { - displayPath = this.services.getNodeService().getPath(getNodeRef()).toDisplayPath(this.services.getNodeService()); - } - catch (AccessDeniedException err) - { - displayPath = ""; - } + displayPath = this.services.getNodeService().getPath(getNodeRef()).toDisplayPath( + services.getNodeService(), services.getPermissionService()); } return displayPath; diff --git a/source/java/org/alfresco/service/cmr/repository/Path.java b/source/java/org/alfresco/service/cmr/repository/Path.java index ad887733e6..1076b2be43 100644 --- a/source/java/org/alfresco/service/cmr/repository/Path.java +++ b/source/java/org/alfresco/service/cmr/repository/Path.java @@ -30,6 +30,8 @@ import java.util.LinkedList; import org.alfresco.model.ContentModel; import org.alfresco.repo.security.permissions.AccessDeniedException; +import org.alfresco.service.cmr.security.AccessStatus; +import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.service.namespace.NamespacePrefixResolver; import org.alfresco.service.namespace.QName; import org.alfresco.util.ISO9075; @@ -193,7 +195,7 @@ public final class Path implements Iterable, Serializable * * @return human readable form of the Path excluding the final element */ - public String toDisplayPath(NodeService nodeService) + public String toDisplayPath(NodeService nodeService, PermissionService permissionService) { StringBuilder buf = new StringBuilder(64); @@ -207,22 +209,16 @@ public final class Path implements Iterable, Serializable if (elementRef.getParentRef() != null) { Serializable nameProp = null; - try + if (permissionService.hasPermission( + elementRef.getChildRef(), PermissionService.READ) == AccessStatus.ALLOWED) { nameProp = nodeService.getProperty(elementRef.getChildRef(), ContentModel.PROP_NAME); - } - catch (AccessDeniedException err) - { - // unable to access this property on the path - so we cannot display it's name - } - if (nameProp != null) - { - // use the name property if we find it + // use the name property if we are allowed access to it elementString = nameProp.toString(); } else { - // revert to using QName if not found + // revert to using QName if not elementString = elementRef.getQName().getLocalName(); } }