Merged V3.2 to HEAD

16971: Merged V3.1 to V3.2
        14282: (RECORD ONLY) Updated version to 3.1.1
        14565: (RECORD ONLY) Updated version to include revision number (x.y.z)
        14848: (RECORD ONLY) Updated version number
        15029: (RECORD ONLY) ETHREEOH-441 and ETHREEOH-1862 Exceptions in server when certain PDFs are uploaded.
               - Probably done already without merge info
               - Renamed source zip to help tracking
        15985: ETHREEOH-2292: Deployment failure in case of IPv6 on Win 2k8
        16164: Fixed ETHREEOH-2690: JGroups TCP doesn't bind to specified address
        16240: (RECORD ONLY) Fix typos in installer
        16726: Fix ETHREEOH-2677 - user usages (when taking ownership)
        16745: Fix ETHREEOH-2991 - Deployment exception, unable to deploy - when deploying a manual snapshot with a stale file
        16771: (RECORD ONLY) Fix to ETHREEOH-441
               - Probably merged without merge info
        16822: Merged DEV/BELARUS/V3.1 to V3.1
           16753: ETHREEOH-1951: when versionable aspect is active, using the Microsoft Word option ...
        16825: Fixed ETHREEOH-803: Incorrect mimetype is displayed for .pps and .pot files
        16862: Fix for ETHREEOH-801 Fail to extract some kind of PDF file metadata
               - Resolved merge by prefering merged-in fix
        16880: Merged V2.2 to V3.1
           13966: (record only) Updated to use ALF-BINARIES version of installjammer
           14340: (record only) Fix so deployment installers build
           14719: (record only) Tweaks to AMP
           15153: (record only) Fix ETWOTWO-1264 - PHP integration
           15287: Fixed ETWOTWO-989: MS Sql server upgrade from 2.1.6 failed
           15351: ETWOTWO-1345 (script not matching patch ID)
        16928: Fixed shutdown: Task threads are now daemon threads
        
    16986: Merged V3.1 to V3.2
        16932: Moved Lucene ResultSet prefetch code to use NodeBulkLoader (backed by common code in Node DAO)
        16945: (RECORD ONLY) Merged V3.2 to V3.1
           16931: Fixed build unit test path for recent Chiba lib change
        16957: Removed Hibernate event listener after 3.2.3 CGLib fixes
        16959: Applied fix for ETHREEOH-2121: ContentUtils.getContentAsString does not pass JSESSIONID into the request
        16961: (RECORD ONLY) Updated db settings in configs
        16964: (RECORD ONLY) Merged V3.2 to V3.1
           16308: ETHREEOH-2833: The Content rule with 'Items with specific text value in property' condition can't be created.
        16968: Fixed ETHREEOH-2120: Recently Modified Documents Dashlet failed to load after a big upload
        16983: Build fix: avoid queries for parent assocs if no nodes were found during child node in caching
    
    16991: Merge V3.1 to V3.2
         15136: (RECORD ONLY)  : changes have already been merged.
             MERGE 2.2 to 3.1
                 14985 - ETWOTWO-1174 - Preview of protected PDFs results in an error
                 14305 - ETWOTWO-951 - contribution
                 14601 - ETWOTWO-1236 - Make FSR deployment case sensitive.
        
    17022: MT - fix fallout from r16924 - add inbound collection support to MT node service interceptor (caught by MultiTDemoTest.testCreateGroups)
    
    17023: Fixed parentAssocCache bug when adding assocs against an empty cache


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@17025 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Jan Vonka
2009-10-19 14:07:57 +00:00
parent 733d27742b
commit de87ed5ffa
21 changed files with 519 additions and 339 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
* Copyright (C) 2005-2009 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -25,6 +25,7 @@
package org.alfresco.repo.usage;
import java.io.Serializable;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -56,7 +57,8 @@ import org.apache.commons.logging.LogFactory;
*/
public class ContentUsageImpl implements ContentUsageService,
NodeServicePolicies.OnUpdatePropertiesPolicy,
NodeServicePolicies.BeforeDeleteNodePolicy
NodeServicePolicies.BeforeDeleteNodePolicy,
NodeServicePolicies.OnAddAspectPolicy
{
// Logger
private static Log logger = LogFactory.getLog(ContentUsageImpl.class);
@@ -127,7 +129,7 @@ public class ContentUsageImpl implements ContentUsageService,
}
/**
* The initialise method
* The initialise method
*/
public void init()
{
@@ -135,21 +137,28 @@ public class ContentUsageImpl implements ContentUsageService,
{
// Register interest in the onUpdateProperties policy - for content
policyComponent.bindClassBehaviour(
QName.createQName(NamespaceService.ALFRESCO_URI, "onUpdateProperties"),
ContentModel.TYPE_CONTENT,
QName.createQName(NamespaceService.ALFRESCO_URI, "onUpdateProperties"),
ContentModel.TYPE_CONTENT,
new JavaBehaviour(this, "onUpdateProperties"));
// Register interest in the beforeDeleteNode policy - for content
policyComponent.bindClassBehaviour(
QName.createQName(NamespaceService.ALFRESCO_URI, "beforeDeleteNode"),
QName.createQName(NamespaceService.ALFRESCO_URI, "beforeDeleteNode"),
ContentModel.TYPE_CONTENT,
new JavaBehaviour(this, "beforeDeleteNode"));
// Register interest in the beforeDeleteNode policy - for folder
policyComponent.bindClassBehaviour(
QName.createQName(NamespaceService.ALFRESCO_URI, "beforeDeleteNode"),
QName.createQName(NamespaceService.ALFRESCO_URI, "beforeDeleteNode"),
ContentModel.TYPE_FOLDER,
new JavaBehaviour(this, "beforeDeleteNode"));
// Register interest in the onAddAspect policy - for ownable
policyComponent.bindClassBehaviour(
QName.createQName(NamespaceService.ALFRESCO_URI, "onAddAspect"),
ContentModel.ASPECT_OWNABLE,
new JavaBehaviour(this, "onAddAspect"));
}
}
@@ -260,7 +269,7 @@ public class ContentUsageImpl implements ContentUsageService,
{
incrementUserUsage(ownerAfter, contentSizeAfter, nodeRef);
recordUpdate(nodeRef);
}
}
}
else
{
@@ -282,8 +291,8 @@ public class ContentUsageImpl implements ContentUsageService,
else if (ownerBefore != null && ownerAfter != null && ownerBefore.equals(ownerAfter) == false)
{
// owner has changed (size has not)
if (logger.isDebugEnabled()) logger.debug("onUpdateProperties: updateOwner ("+ownerBefore+" -> "+ownerAfter+"): nodeRef="+nodeRef+", contentSize="+contentSizeBefore);
if (logger.isDebugEnabled()) logger.debug("onUpdateProperties: updateOwner ("+ownerBefore+" -> "+ownerAfter+"): nodeRef="+nodeRef+", contentSize="+contentSizeBefore);
if (contentSizeBefore != 0)
{
decrementUserUsage(ownerBefore, contentSizeBefore, nodeRef);
@@ -333,7 +342,7 @@ public class ContentUsageImpl implements ContentUsageService,
decrementUserUsage(owner, contentSize, nodeRef);
recordDelete(nodeRef);
}
}
}
}
else if (type.equals(ContentModel.TYPE_FOLDER))
{
@@ -343,6 +352,38 @@ public class ContentUsageImpl implements ContentUsageService,
}
}
/**
* Called after an <b>cm:ownable</b> aspect has been added to a node
*
* @param nodeRef the node to which the aspect was added
* @param aspectTypeQName the type of the aspect
*/
public void onAddAspect(NodeRef nodeRef, QName aspectTypeQName)
{
if ((stores.contains(tenantService.getBaseName(nodeRef.getStoreRef()).toString())) &&
(aspectTypeQName.equals(ContentModel.ASPECT_OWNABLE)))
{
String newOwner = (String)nodeService.getProperty(nodeRef, ContentModel.PROP_OWNER);
String creator = (String)nodeService.getProperty(nodeRef, ContentModel.PROP_CREATOR);
if ((newOwner != null) && (! newOwner.equals(creator)))
{
ContentData content = (ContentData)nodeService.getProperty(nodeRef, ContentModel.PROP_CONTENT);
Map<QName, Serializable> before = new HashMap<QName, Serializable>(2);
Map<QName, Serializable> after = new HashMap<QName, Serializable>(2);
after.put(ContentModel.PROP_OWNER, newOwner);
after.put(ContentModel.PROP_CONTENT, content);
before.put(ContentModel.PROP_CREATOR, creator);
before.put(ContentModel.PROP_CONTENT, content);
onUpdateProperties(nodeRef, before, after);
}
}
}
private void incrementUserUsage(String userName, long contentSize, NodeRef contentNodeRef)
{
if (! authenticationContext.isSystemUserName(userName))
@@ -393,7 +434,7 @@ public class ContentUsageImpl implements ContentUsageService,
logger.debug("User (" + userName + ") has negative usage (" + newSize + ") - reset to 0");
}
}
NodeRef personNodeRef = getPerson(userName);
if (personNodeRef != null)
{
@@ -417,10 +458,10 @@ public class ContentUsageImpl implements ContentUsageService,
}
public long getUserStoredUsage(NodeRef personNodeRef)
{
{
Long currentUsage = null;
if (personNodeRef != null)
{
{
currentUsage = (Long)nodeService.getProperty(personNodeRef, ContentModel.PROP_SIZE_CURRENT);
}
@@ -435,7 +476,7 @@ public class ContentUsageImpl implements ContentUsageService,
NodeRef personNodeRef = getPerson(userName);
if (personNodeRef != null)
{
{
currentUsage = getUserStoredUsage(personNodeRef);
}
@@ -453,7 +494,7 @@ public class ContentUsageImpl implements ContentUsageService,
currentUsage = 0;
}
}
return currentUsage;
}
@@ -468,7 +509,7 @@ public class ContentUsageImpl implements ContentUsageService,
{
NodeRef personNodeRef = getPerson(userName);
if (personNodeRef != null)
{
{
nodeService.setProperty(personNodeRef, ContentModel.PROP_SIZE_QUOTA, new Long(currentQuota));
}
}
@@ -479,7 +520,7 @@ public class ContentUsageImpl implements ContentUsageService,
NodeRef personNodeRef = getPerson(userName);
if (personNodeRef != null)
{
{
currentQuota = (Long)nodeService.getProperty(personNodeRef, ContentModel.PROP_SIZE_QUOTA);
}