mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-07 18:25:23 +00:00
44796: Fix for ALF-16413 - Share asks for Basic-Auth while not needed trying to access RSS feeds (thus breaking SSO). - Share Feed Controller which correctly deals with SSO config for the "alfresco-feed" endpoint Configure the "alfresco-feed" endpoint to use SSO in the same way the "alfresco" endpoint is configured for it. Share will then detect this when serving feeds and ensure the SSO auth is used ahead of Basic HTTP auth. 44820: Merged V3.4-BUG-FIX (3.4.12) to V4.1-BUG-FIX (4.1.3) - A few extra 4.x changes were required 44818: ALF-17256 (3.4.12) Update Copyright notice to 2013 44831: ALF-17224 (All wiki pages are enumerated/built to display a single wiki page) 44841: ALF-17206 CIFS loses metadata when metadata edited from Windows 7 Explorer 44844: Incremented version revision to 4.1.4 44848: Fix for ALF-17178 SolrLuceneAnalyser.findAnalyser generating InavlidQNameExceptions wher they are easily protected. 44849: Fix for ALF-17162 Queries for content properties with a long search string causes huge amount of memory usage 44851: ALF-17224: Improvements for the wiki dashlet 44866: Merged PATCHES/V4.1.1 to V4.1-BUG-FIX 44663: ALF-17281 / MNT-231: Unable to cancel editing on certain docs in 4.1.1.10 - It's now impossible for WebDAV or anything else execpt CheckOutCheckInService to unlock a checked out node - It's also now possible to un check out / check in broken unlocked nodes, such as those on ts.alfresco.com! - Unit tests by Viachaslau Tikhanovich 44664: ALF-17281 / MNT-231: Unable to cancel editing on certain docs in 4.1.1.10 - File missed in previous checkin 44867: ALF-17285: Merged PATCHES/V4.0.1 to V4.1-BUG-FIX 44766: MNT-241: Severe performance issues with WebDAV / filesystem / IMAP rename operations - FileFolderServiceImpl.rename calls moveNode to do its renaming work - Unfortunately AbstractNodeDAOImpl.moveNode() was not optimized for the rename case and attempted to cascade-recompute ACLs on a simple folder rename - On a large hierarchy this could result in hanging transactions and delays of several minutes whilst all the node ACLs were repointed and all the node caches were invalidate 44787: MNT-241: Fixed merge issue. 44823: MNT-241: Severe performance issues with WebDAV / filesystem / IMAP rename operations - The last optimization revealed a caching problem - The childByName cache was retaining stale values because node renaming wasn't incrementing the node version key - We were previously relying on the unnecessary ACL re-evaluation on a move to 'bump' the version key and invalidate the childByName cache as a side effect - Now we explicitly invalidate childByNameCache when necessary and also update parent association rows individually rather than in bulk, hopefully avoiding unnecessary database lock contention 44830: MNT-241: Subtlety: On rename we only update and invalidate those associations for which name uniqueness checking is enforced. Such associations have a positive CRC 44868: Merged PATCHES/V4.1.3 to V4.1-BUG-FIX (RECORD ONLY) 44845: Incremented version revision to 4.1.3 44847: Merged PATCHES/V4.1.1 to PATCHES/V4.1.3 44863: ALF-17285: Merged PATCHES/V4.0.1 to PATCHES/V4.1.3 44864: ALF-15935: Merge V4.1-BUG-FIX to V4.1.3 44029 : MNT-180 - Clone for Hotfix: Word document on Windows via CIFS becomes locked (Read Only) when network drops temporarily 44865: Merged V4.1-BUG-FIX to PATCHES/V4.1.3 44872: Merged PATCHES/V4.1.3 to V4.1-BUG-FIX 44871: Fixed merge issue 44875: Merged V4.1-BUG-FIX (4.1.2) to V3.4-BUG-FIX (3.4.12) RECORD ONLY 44815: Merged V4.1-BUG-FIX to V3.4-BUG-FIX 44776: ALF-17164: Fix failing build in case build is not run in continuous mode - move generation of version.properties out of continuous mode 44874: ALF-17283: Merged V4.1-BUG-FIX (4.1.2) to V3.4-BUG-FIX (3.4.12) 41411: Fix possible FTP data session leak if client mixes PORT and PASV commands. ALF-15126 44876: Merged DEV to V4.1-BUG-FIX 44838: ALF-14468: Unable to authorize to Facebook Add 'www' to 'alfresco.com' urls. 44878: ALF-17208 - category.ftl does not allow to find multiple tags in Share advanced Search 44879: Fix for ALF-17150 - Edit Online action missing in Share for some mime types 44880: Fix to merge fail (rev 44866/44872) 44881: Fix for ALF-17186 - JBOSS specific: Google Docs v2 are not working 44904: Fix build - Merry Christmas! 44906: Merged V3.4-BUG-FIX to V4.1-BUG-FIX 44882: Fix for ALF-13805 - Authenticating Share RSS feed using cookies rather than basic auth 44884: Incremented version revision to 3.4.13 44903: Merged V3.4 to V3.4-BUG-FIX 44885: Fix unit test to cope with ALF-14421 version label behaviour (major unless specified). 44905: Merged V3.4 to V3.4-BUG-FIX (RECORD ONLY) 44883: Merged V3.4-BUG-FIX to V3.4 (3.4.12) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@44910 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
307 lines
12 KiB
Java
307 lines
12 KiB
Java
/*
|
|
* Copyright (C) 2005-2011 Alfresco Software Limited.
|
|
*
|
|
* This file is part of Alfresco
|
|
*
|
|
* Alfresco is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* Alfresco is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
package org.alfresco.service.cmr.lock;
|
|
|
|
import java.util.Collection;
|
|
import java.util.List;
|
|
|
|
import org.alfresco.service.Auditable;
|
|
import org.alfresco.service.cmr.repository.NodeRef;
|
|
import org.alfresco.service.cmr.repository.StoreRef;
|
|
|
|
|
|
/**
|
|
* Interface for public and internal lock operations.
|
|
*
|
|
* @author Roy Wetherall
|
|
*/
|
|
public interface LockService
|
|
{
|
|
/**
|
|
* Places a lock on a node.
|
|
* <p>
|
|
* The lock prevents any other user or process from comitting updates
|
|
* to the node until the lock is released.
|
|
* <p>
|
|
* The lock will be owned by the current user.
|
|
* <p>
|
|
* A lock made with this call will never expire.
|
|
*
|
|
* @param nodeRef a reference to a node
|
|
* @param userName a reference to the user that will own the lock
|
|
* @param lockType the lock type
|
|
* @throws UnableToAquireLockException
|
|
* thrown if the lock could not be obtained
|
|
*/
|
|
@Auditable(parameters = {"nodeRef", "lockType"})
|
|
public void lock(NodeRef nodeRef, LockType lockType)
|
|
throws UnableToAquireLockException;
|
|
|
|
/**
|
|
* Places a lock on a node.
|
|
* <p>
|
|
* The lock prevents any other user or process from comitting updates
|
|
* to the node until the lock is released.
|
|
* <p>
|
|
* The lock will be owned by the current user.
|
|
* <p>
|
|
* If the time to expire is 0 then the lock will never expire. Otherwise the
|
|
* timeToExpire indicates the number of seconds before the lock expires. When
|
|
* a lock expires the lock is considered to have been released.
|
|
* <p>
|
|
* If the node is already locked and the user is the lock owner then the lock will
|
|
* be renewed with the passed timeToExpire.
|
|
*
|
|
* @param nodeRef a reference to a node
|
|
* @param lockType the lock type
|
|
* @param timeToExpire the number of seconds before the locks expires.
|
|
* @throws UnableToAquireLockException
|
|
* thrown if the lock could not be obtained
|
|
*/
|
|
@Auditable(parameters = {"nodeRef", "lockType", "timeToExpire"})
|
|
public void lock(NodeRef nodeRef, LockType lockType, int timeToExpire)
|
|
throws UnableToAquireLockException;
|
|
|
|
/**
|
|
* Places a lock on a node and optionally on all its children.
|
|
* <p>
|
|
* The lock prevents any other user or process from comitting updates
|
|
* to the node until the lock is released.
|
|
* <p>
|
|
* The lock will be owned by the current user.
|
|
* <p>
|
|
* If any one of the child locks can not be taken then an exception will
|
|
* be raised and all locks canceled.
|
|
* <p>
|
|
* If the time to expire is 0 then the lock will never expire. Otherwise the
|
|
* timeToExpire indicates the number of seconds before the lock expires. When
|
|
* a lock expires the lock is considered to have been released.
|
|
* <p>
|
|
* If the node is already locked and the user is the lock owner then the lock will
|
|
* be renewed with the passed timeToExpire.
|
|
*
|
|
* @param nodeRef a reference to a node
|
|
* @param lockType the lock type
|
|
* @param timeToExpire the number of seconds before the locks expires.
|
|
* @param lockChildren if true indicates that all the children (and
|
|
* grandchildren, etc) of the node will also be locked,
|
|
* false otherwise
|
|
*
|
|
* @throws UnableToAquireLockException
|
|
* thrown if the lock could not be obtained
|
|
*/
|
|
@Auditable(parameters = {"nodeRef", "lockType", "timeToExpire", "lockChildren"})
|
|
public void lock(NodeRef nodeRef, LockType lockType, int timeToExpire, boolean lockChildren)
|
|
throws UnableToAquireLockException;
|
|
|
|
/**
|
|
* Places a lock on all the nodes referenced in the passed list.
|
|
* <p>
|
|
* The lock prevents any other user or process from comitting updates
|
|
* to the node until the lock is released.
|
|
* <p>
|
|
* The lock will be owned by the current user.
|
|
* <p>
|
|
* If the time to expire is 0 then the lock will never expire. Otherwise the
|
|
* timeToExpire indicates the number of seconds before the lock expires. When
|
|
* a lock expires the lock is considered to have been released.
|
|
* <p>
|
|
* If the node is already locked and the current user is the lock owner then the lock will
|
|
* be renewed with the passed timeToExpire.
|
|
*
|
|
* @param nodeRefs a list of node references
|
|
* @param lockType the type of lock being created
|
|
* @param timeToExpire the number of seconds before the locks expires.
|
|
* @throws UnableToAquireLockException
|
|
* thrown if the lock could not be obtained
|
|
*/
|
|
@Auditable(parameters = {"nodeRefs", "lockType", "timeToExpire"})
|
|
public void lock(Collection<NodeRef> nodeRefs, LockType lockType, int timeToExpire)
|
|
throws UnableToAquireLockException;
|
|
|
|
/**
|
|
* Removes the lock on a node; if there is no lock then nothing is done.
|
|
* <p>
|
|
* The user must have sufficient permissions to remove the lock (ie: be the
|
|
* owner of the lock or have admin rights) and the node must not be checked
|
|
* out. Otherwise an exception will be raised.
|
|
*
|
|
* @param nodeRef a reference to a node
|
|
* @throws UnableToReleaseLockException
|
|
* thrown if the lock could not be released
|
|
*/
|
|
@Auditable(parameters = {"nodeRef"})
|
|
public void unlock(NodeRef nodeRef)
|
|
throws UnableToReleaseLockException;
|
|
|
|
/**
|
|
* Removes the lock on a node and optional on its children.
|
|
* <p>
|
|
* The user must have sufficient permissions to remove the lock(s) (ie: be
|
|
* the owner of the lock(s) or have admin rights) and the node(s) must not be
|
|
* checked out. Otherwise an exception will be raised.
|
|
* <p>
|
|
* If one of the child nodes is not locked then it will be ignored and
|
|
* the process continue without error.
|
|
* <p>
|
|
* If the lock on any one of the child nodes cannot be released then an
|
|
* exception will be raised.
|
|
*
|
|
* @param nodeRef a node reference
|
|
* @param lockChildren if true then all the children (and grandchildren, etc)
|
|
* of the node will also be unlocked, false otherwise
|
|
* @throws UnableToReleaseLockException
|
|
* thrown if the lock could not be released
|
|
*/
|
|
@Auditable(parameters = {"nodeRef", "lockChildren"})
|
|
public void unlock(NodeRef nodeRef, boolean lockChildren)
|
|
throws UnableToReleaseLockException;
|
|
|
|
/**
|
|
* Removes the lock on a node and optional on its children.
|
|
* <p>
|
|
* The user must have sufficient permissions to remove the lock(s) (ie: be
|
|
* the owner of the lock(s) or have admin rights) otherwise an exception
|
|
* will be raised.
|
|
* <p>
|
|
* If one of the child nodes is not locked then it will be ignored and
|
|
* the process continue without error.
|
|
* <p>
|
|
* If the lock on any one of the child nodes cannot be released then an
|
|
* exception will be raised.
|
|
*
|
|
* @param nodeRef a node reference
|
|
* @param lockChildren if true then all the children (and grandchildren, etc)
|
|
* of the node will also be unlocked, false otherwise
|
|
* @param allowCheckedOut is it permissable for a node to be a checked out node?
|
|
* @throws UnableToReleaseLockException
|
|
* thrown if the lock could not be released
|
|
*/
|
|
@Auditable(parameters = {"nodeRef", "lockChildren", "allowCheckedOut"})
|
|
public void unlock(NodeRef nodeRef, boolean lockChildren, boolean allowCheckedOut)
|
|
throws UnableToReleaseLockException;
|
|
/**
|
|
* Removes a lock on the nodes provided.
|
|
* <p>
|
|
* The user must have sufficient permissions to remove the locks (ie: be
|
|
* the owner of the locks or have admin rights) otherwise an exception
|
|
* will be raised.
|
|
* <p>
|
|
* If one of the nodes is not locked then it will be ignored and the
|
|
* process will continue without an error.
|
|
* <p>
|
|
* If the lock on any one of the nodes cannot be released than an exception
|
|
* will be raised and the process rolled back.
|
|
*
|
|
* @param nodeRefs the node references
|
|
* @param userName the user reference
|
|
* @throws UnableToReleaseLockException
|
|
* thrown if the lock could not be released
|
|
*/
|
|
@Auditable(parameters = {"nodeRefs"})
|
|
public void unlock(Collection<NodeRef> nodeRefs)
|
|
throws UnableToReleaseLockException;
|
|
|
|
/**
|
|
* Gets the lock status for the node reference relative to the current user.
|
|
*
|
|
* @see LockService#getLockStatus(NodeRef, NodeRef)
|
|
*
|
|
* @param nodeRef the node reference
|
|
* @return the lock status
|
|
*/
|
|
@Auditable(parameters = {"nodeRef"})
|
|
public LockStatus getLockStatus(NodeRef nodeRef);
|
|
|
|
|
|
/**
|
|
* Gets the lock status for the node reference for the specified user.
|
|
*
|
|
* @see LockService#getLockStatus(NodeRef, NodeRef)
|
|
*
|
|
* @param nodeRef the node reference
|
|
* @param userName the user name
|
|
* @return the lock status
|
|
*/
|
|
@Auditable(parameters = {"nodeRef", "userName"})
|
|
public LockStatus getLockStatus(NodeRef nodeRef, String userName);
|
|
|
|
/**
|
|
* Gets the lock type for the node indicated.
|
|
* <p>
|
|
* Returns null if the node is not locked.
|
|
* <p>
|
|
* Throws an exception if the node does not have the lock aspect.
|
|
*
|
|
* @param nodeRef the node reference
|
|
* @return the lock type, null is returned if the object in question has no
|
|
* lock
|
|
*/
|
|
@Auditable(parameters = {"nodeRef"})
|
|
public LockType getLockType(NodeRef nodeRef);
|
|
|
|
/**
|
|
* Checks to see if the current user has access to the specified node.
|
|
* <p>
|
|
* If the node is locked by another user then a NodeLockedException is thrown.
|
|
* <p>
|
|
* Gets the user reference from the current session.
|
|
*
|
|
* @param nodeRef the node reference
|
|
*
|
|
* @throws NodeLockedException
|
|
* thrown if the node is locked by someone else. This is based on the lock status of the lock,
|
|
* the user ref and the lock type.
|
|
*/
|
|
@Auditable(parameters = {"nodeRef"})
|
|
public void checkForLock(NodeRef nodeRef);
|
|
|
|
/**
|
|
* Get all the node references that the current user has locked.
|
|
*
|
|
* @param storeRef the store reference
|
|
* @return a list of nodes that the current user has locked.
|
|
*/
|
|
@Auditable(parameters = {"storeRef"})
|
|
public List<NodeRef> getLocks(StoreRef storeRef);
|
|
|
|
/**
|
|
* Get all the node references that the current user has locked filtered by the provided lock type.
|
|
*
|
|
* @param storeRef the store reference
|
|
* @param lockType the lock type to filter the results by
|
|
*
|
|
* @return a list of nodes that the current user has locked filtered by the lock type provided
|
|
*/
|
|
@Auditable(parameters = {"storeRef", "lockType"})
|
|
public List<NodeRef> getLocks(StoreRef storeRef, LockType lockType);
|
|
|
|
/**
|
|
* Allow the current transaction to update a node despite any locks that may be on it.
|
|
* <p>
|
|
* Used for the system to be able to update locked nodes.
|
|
*/
|
|
public void suspendLocks();
|
|
|
|
/**
|
|
* After calling suspendLocks turn the locks back on.
|
|
*/
|
|
public void enableLocks();
|
|
}
|