From 5dc16190ef7b8239efddd5434789e24bc9cc5c60 Mon Sep 17 00:00:00 2001 From: Britt Park Date: Mon, 18 Jun 2007 18:29:25 +0000 Subject: [PATCH] AVMLockingAwareService lazily creates web project entries. AVMLockingService should handle the content manager role correctly. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@6009 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/avm-services-context.xml | 6 +++ .../repo/avm/AVMLockingAwareService.java | 1 + .../org/alfresco/repo/avm/AVMServiceTest.java | 1 - .../avm/locking/AVMLockingServiceImpl.java | 47 ++++++++++++++++++- .../cmr/avm/locking/AVMLockingService.java | 2 +- 5 files changed, 54 insertions(+), 3 deletions(-) diff --git a/config/alfresco/avm-services-context.xml b/config/alfresco/avm-services-context.xml index 5adf5c14bb..c9507dbac1 100644 --- a/config/alfresco/avm-services-context.xml +++ b/config/alfresco/avm-services-context.xml @@ -332,6 +332,12 @@ + + + + + + diff --git a/source/java/org/alfresco/repo/avm/AVMLockingAwareService.java b/source/java/org/alfresco/repo/avm/AVMLockingAwareService.java index 4b6f278562..738f40319c 100644 --- a/source/java/org/alfresco/repo/avm/AVMLockingAwareService.java +++ b/source/java/org/alfresco/repo/avm/AVMLockingAwareService.java @@ -825,6 +825,7 @@ public class AVMLockingAwareService implements AVMService { throw new AVMLockingException(userName + " does not have access to " + path); } + fLockingService.addWebProject(webProject); if (fLockingService.getLock(webProject, storePath[1]) == null) { List owners = new ArrayList(); diff --git a/source/java/org/alfresco/repo/avm/AVMServiceTest.java b/source/java/org/alfresco/repo/avm/AVMServiceTest.java index bca5f81888..d70aff8b46 100644 --- a/source/java/org/alfresco/repo/avm/AVMServiceTest.java +++ b/source/java/org/alfresco/repo/avm/AVMServiceTest.java @@ -112,7 +112,6 @@ public class AVMServiceTest extends AVMServiceTestBase AuthenticationService authService = (AuthenticationService)fContext.getBean("AuthenticationService"); try { - lockingService.addWebProject("main"); fService.setStoreProperty("main", QName.createQName(null, ".dns.main"), new PropertyValue(QName.createQName(null, "silly"), "Nothing.")); fService.createStore("test"); diff --git a/source/java/org/alfresco/repo/avm/locking/AVMLockingServiceImpl.java b/source/java/org/alfresco/repo/avm/locking/AVMLockingServiceImpl.java index 49e6b1c843..e11d63e108 100644 --- a/source/java/org/alfresco/repo/avm/locking/AVMLockingServiceImpl.java +++ b/source/java/org/alfresco/repo/avm/locking/AVMLockingServiceImpl.java @@ -30,10 +30,12 @@ import java.util.Iterator; import java.util.List; import java.util.Set; +import org.alfresco.model.WCMAppModel; import org.alfresco.repo.attributes.Attribute; import org.alfresco.repo.attributes.ListAttributeValue; import org.alfresco.repo.attributes.MapAttributeValue; import org.alfresco.repo.attributes.StringAttributeValue; +import org.alfresco.repo.node.db.DbNodeServiceImpl; import org.alfresco.repo.transaction.RetryingTransactionHelper; import org.alfresco.service.cmr.attributes.AttrQueryEquals; import org.alfresco.service.cmr.attributes.AttributeService; @@ -42,6 +44,12 @@ import org.alfresco.service.cmr.avm.AVMExistsException; import org.alfresco.service.cmr.avm.AVMNotFoundException; import org.alfresco.service.cmr.avm.locking.AVMLock; import org.alfresco.service.cmr.avm.locking.AVMLockingService; +import org.alfresco.service.cmr.repository.ChildAssociationRef; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.repository.StoreRef; +import org.alfresco.service.cmr.search.ResultSet; +import org.alfresco.service.cmr.search.SearchService; import org.alfresco.service.cmr.security.AuthorityService; import org.alfresco.service.cmr.security.AuthorityType; import org.alfresco.service.cmr.security.PersonService; @@ -59,6 +67,11 @@ public class AVMLockingServiceImpl implements AVMLockingService public static final String USERS = "users"; public static final String STORES = "stores"; + /** + * SearchService for access to web project properties. + */ + private SearchService fSearchService; + /** * AttributeService reference. */ @@ -73,6 +86,11 @@ public class AVMLockingServiceImpl implements AVMLockingService * PersonService reference. */ private PersonService fPersonService; + + /** + * The NodeService. + */ + private NodeService fNodeService; /** * Transaction Helper reference. @@ -119,6 +137,16 @@ public class AVMLockingServiceImpl implements AVMLockingService fRetryingTransactionHelper = helper; } + public void setSearchService(SearchService service) + { + fSearchService = service; + } + + public void setNodeService(NodeService service) + { + fNodeService = service; + } + public void init() { RetryingTransactionHelper.RetryingTransactionCallback callback = @@ -327,7 +355,7 @@ public class AVMLockingServiceImpl implements AVMLockingService keys.add(webProject); if (fAttributeService.getAttribute(keys) != null) { - throw new AVMExistsException("Web Project Exists: " + webProject); + return; } keys.remove(2); fAttributeService.setAttribute(keys, webProject, new MapAttributeValue()); @@ -516,6 +544,23 @@ public class AVMLockingServiceImpl implements AVMLockingService { return true; } + StoreRef storeRef = new StoreRef(StoreRef.PROTOCOL_WORKSPACE, "SpacesStore"); + ResultSet results = fSearchService.query(storeRef, "lucene", "@wca\\:avmstore:\"" + webProject + "\" +TYPE:\"wca:webfolder\""); + System.out.println(results.getNodeRefs()); + if (results.getNodeRefs().size() == 1) + { + List children = fNodeService.getChildAssocs(results.getNodeRefs().get(0)); + for (ChildAssociationRef child : children) + { + NodeRef childRef = child.getChildRef(); + if (fNodeService.getType(childRef).equals(WCMAppModel.TYPE_WEBUSER) && + fNodeService.getProperty(childRef, WCMAppModel.PROP_WEBUSERNAME).equals(user) && + fNodeService.getProperty(childRef, WCMAppModel.PROP_WEBUSERROLE).equals("ContentManager")) + { + return true; + } + } + } String[] storePath = avmPath.split(":"); if (storePath.length != 2) { diff --git a/source/java/org/alfresco/service/cmr/avm/locking/AVMLockingService.java b/source/java/org/alfresco/service/cmr/avm/locking/AVMLockingService.java index 37c7ae2636..16b0801dce 100644 --- a/source/java/org/alfresco/service/cmr/avm/locking/AVMLockingService.java +++ b/source/java/org/alfresco/service/cmr/avm/locking/AVMLockingService.java @@ -89,7 +89,7 @@ public interface AVMLockingService public List getUsersLocks(String user); /** - * Add a web project to the locking tables. + * Add a web project to the locking tables if it doesn't already exist. * @param webProject The web project name. */ public void addWebProject(String webProject);