From 14660ea397c83a4d4b79cbf62e167733e91bf82e Mon Sep 17 00:00:00 2001 From: David Caruana Date: Thu, 29 May 2008 11:37:42 +0000 Subject: [PATCH] Support for sub-types of folder in site.getContainer() - to allow for specialised types of component folder and backwards compatibility with existing models such as forum. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@9306 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../org/alfresco/repo/site/SiteService.java | 6 +++-- .../alfresco/repo/site/SiteServiceImpl.java | 4 +-- .../repo/site/SiteServiceImplTest.java | 26 ++++++++++++++++--- .../org/alfresco/repo/site/script/Site.java | 21 +++++++++++++-- .../repo/site/script/test_siteService.js | 9 ++++++- 5 files changed, 56 insertions(+), 10 deletions(-) diff --git a/source/java/org/alfresco/repo/site/SiteService.java b/source/java/org/alfresco/repo/site/SiteService.java index 818a7b91a7..774a7a5d23 100644 --- a/source/java/org/alfresco/repo/site/SiteService.java +++ b/source/java/org/alfresco/repo/site/SiteService.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.Map; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.namespace.QName; /** * Site service fundamental API. @@ -113,9 +114,10 @@ public interface SiteService * * @param shortName short name of site * @param componentId component id - * @return noderef of folder container + * @param folderType type of folder to create (if null, creates standard folder) + * @return noderef of container */ - NodeRef getContainer(String shortName, String componentId); + NodeRef getContainer(String shortName, String componentId, QName folderType); /** * Determines if a "container" folder for the specified component exists. diff --git a/source/java/org/alfresco/repo/site/SiteServiceImpl.java b/source/java/org/alfresco/repo/site/SiteServiceImpl.java index 1f73791585..25668a59d5 100644 --- a/source/java/org/alfresco/repo/site/SiteServiceImpl.java +++ b/source/java/org/alfresco/repo/site/SiteServiceImpl.java @@ -465,7 +465,7 @@ public class SiteServiceImpl extends AbstractLifecycleBean implements SiteServic /* (non-Javadoc) * @see org.alfresco.repo.site.SiteService#getContainer(java.lang.String) */ - public NodeRef getContainer(String shortName, String componentId) + public NodeRef getContainer(String shortName, String componentId, QName folderType) { if (componentId == null || componentId.length() ==0) { @@ -489,7 +489,7 @@ public class SiteServiceImpl extends AbstractLifecycleBean implements SiteServic catch(FileNotFoundException e) { // create component folder - FileInfo fileInfo = fileFolderService.create(siteNodeRef, componentId, ContentModel.TYPE_FOLDER); + FileInfo fileInfo = fileFolderService.create(siteNodeRef, componentId, folderType == null ? ContentModel.TYPE_FOLDER : folderType); containerNodeRef = fileInfo.getNodeRef(); } diff --git a/source/java/org/alfresco/repo/site/SiteServiceImplTest.java b/source/java/org/alfresco/repo/site/SiteServiceImplTest.java index 172dae6ab8..145261177f 100644 --- a/source/java/org/alfresco/repo/site/SiteServiceImplTest.java +++ b/source/java/org/alfresco/repo/site/SiteServiceImplTest.java @@ -29,9 +29,12 @@ import java.util.List; import java.util.Map; import org.alfresco.error.AlfrescoRuntimeException; +import org.alfresco.model.ApplicationModel; +import org.alfresco.model.ContentModel; import org.alfresco.repo.jscript.ClasspathScriptLocation; import org.alfresco.repo.security.authentication.AuthenticationComponent; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.ScriptLocation; import org.alfresco.service.cmr.repository.ScriptService; import org.alfresco.util.BaseAlfrescoSpringTest; @@ -55,6 +58,7 @@ public class SiteServiceImplTest extends BaseAlfrescoSpringTest private SiteService siteService; private ScriptService scriptService; + private NodeService nodeService; private AuthenticationComponent authenticationComponent; /** @@ -67,6 +71,7 @@ public class SiteServiceImplTest extends BaseAlfrescoSpringTest // Get the required services this.siteService = (SiteService)this.applicationContext.getBean("siteService"); this.scriptService = (ScriptService)this.applicationContext.getBean("ScriptService"); + this.nodeService = (NodeService)this.applicationContext.getBean("NodeService"); this.authenticationComponent = (AuthenticationComponent)this.applicationContext.getBean("authenticationComponent"); // Do the test's as userOne @@ -342,20 +347,35 @@ public class SiteServiceImplTest extends BaseAlfrescoSpringTest boolean hasContainer = this.siteService.hasContainer(siteInfo.getShortName(), "folder.component"); assertFalse(hasContainer); - NodeRef container1 = this.siteService.getContainer(siteInfo.getShortName(), "folder.component"); + NodeRef container1 = this.siteService.getContainer(siteInfo.getShortName(), "folder.component", null); assertNotNull(container1); - NodeRef container2 = this.siteService.getContainer(siteInfo.getShortName(), "folder.component"); + NodeRef container2 = this.siteService.getContainer(siteInfo.getShortName(), "folder.component", null); assertNotNull(container2); assertTrue(container1.equals(container2)); boolean hasContainer2 = this.siteService.hasContainer(siteInfo.getShortName(), "folder.component"); assertTrue(hasContainer2); boolean hasContainer3 = this.siteService.hasContainer(siteInfo.getShortName(), "folder.component2"); assertFalse(hasContainer3); - NodeRef container3 = this.siteService.getContainer(siteInfo.getShortName(), "folder.component2"); + NodeRef container3 = this.siteService.getContainer(siteInfo.getShortName(), "folder.component2", null); assertNotNull(container3); assertFalse(container1.equals(container3)); boolean hasContainer4 = this.siteService.hasContainer(siteInfo.getShortName(), "folder.component2"); assertTrue(hasContainer4); + boolean hasContainer5 = this.siteService.hasContainer(siteInfo.getShortName(), "folder.component3"); + assertFalse(hasContainer5); + NodeRef container5 = this.siteService.getContainer(siteInfo.getShortName(), "folder.component3", ContentModel.TYPE_FOLDER); + assertNotNull(container5); + NodeRef container6 = this.siteService.getContainer(siteInfo.getShortName(), "folder.component3", null); + assertNotNull(container6); + assertTrue(container5.equals(container6)); + assertEquals(ContentModel.TYPE_FOLDER, nodeService.getType(container6)); + NodeRef container7 = this.siteService.getContainer(siteInfo.getShortName(), "folder.component3", ApplicationModel.TYPE_PROJECTSPACE); + assertNotNull(container7); + assertTrue(container5.equals(container7)); + assertEquals(ContentModel.TYPE_FOLDER, nodeService.getType(container7)); + NodeRef container8 = this.siteService.getContainer(siteInfo.getShortName(), "folder.component4", ApplicationModel.TYPE_PROJECTSPACE); + assertNotNull(container8); + assertEquals(ApplicationModel.TYPE_PROJECTSPACE, nodeService.getType(container8)); } diff --git a/source/java/org/alfresco/repo/site/script/Site.java b/source/java/org/alfresco/repo/site/script/Site.java index 727b326b4d..a61f890679 100644 --- a/source/java/org/alfresco/repo/site/script/Site.java +++ b/source/java/org/alfresco/repo/site/script/Site.java @@ -34,6 +34,7 @@ import org.alfresco.repo.site.SiteInfo; import org.alfresco.repo.site.SiteService; import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.namespace.QName; import org.mozilla.javascript.Scriptable; /** @@ -261,15 +262,31 @@ public class Site implements Serializable /** * Gets (or creates) the "container" folder for the specified component id * + * NOTE: The container is of type cm:folder. + * * @param componentId * @return node representing the "container" folder */ public ScriptNode getContainer(String componentId) + { + return getContainer(componentId, null); + } + + /** + * Gets (or creates) the "container" folder for the specified component id + * + * @param componentId + * @param folderType type of folder to create (if null, creates a standard folder) + * @return node representing the "container" folder (or null, if for some reason + * the container can not be created) + */ + public ScriptNode getContainer(String componentId, String folderType) { ScriptNode container = null; try { - NodeRef containerNodeRef = this.siteService.getContainer(getShortName(), componentId); + QName folderQName = (folderType == null) ? null : QName.createQName(folderType, serviceRegistry.getNamespaceService()); + NodeRef containerNodeRef = this.siteService.getContainer(getShortName(), componentId, folderQName); container = new ScriptNode(containerNodeRef, this.serviceRegistry, this.scope); } catch(AlfrescoRuntimeException e) @@ -279,7 +296,7 @@ public class Site implements Serializable } return container; } - + /** * Determine if the "container" folder for the specified component exists * diff --git a/source/java/org/alfresco/repo/site/script/test_siteService.js b/source/java/org/alfresco/repo/site/script/test_siteService.js index 6ac9b4d05b..8e779f9d4e 100644 --- a/source/java/org/alfresco/repo/site/script/test_siteService.js +++ b/source/java/org/alfresco/repo/site/script/test_siteService.js @@ -92,7 +92,14 @@ function testContainer() test.assertTrue(hasContainer2); var container2 = site.getContainer("folder.component"); test.assertNotNull(container2); - test.assertEquals(container, container2); + test.assertEquals(container, container2); + + var container3 = site.getContainer("folder.component2", "cm:folder"); + test.assertNotNull(container3); + test.assertEquals("{http://www.alfresco.org/model/content/1.0}folder", container3.type); + var container4 = site.getContainer("folder.component3", "app:projectfolder"); + test.assertNotNull(container4); + test.assertEquals("{http://www.alfresco.org/model/application/1.0}projectfolder", container4.type); }