diff --git a/config/alfresco/application-context-highlevel.xml b/config/alfresco/application-context-highlevel.xml index 17779fc04c..0fef0c1e92 100644 --- a/config/alfresco/application-context-highlevel.xml +++ b/config/alfresco/application-context-highlevel.xml @@ -21,7 +21,6 @@ - diff --git a/config/alfresco/public-services-security-context.xml b/config/alfresco/public-services-security-context.xml index 9e5f958d45..223489130e 100644 --- a/config/alfresco/public-services-security-context.xml +++ b/config/alfresco/public-services-security-context.xml @@ -1110,34 +1110,6 @@ - - - - - - - - - - - - - - - - - org.alfresco.service.cmr.wiki.WikiService.listWikiPages=ACL_ALLOW,AFTER_ACL_NODE.sys:base.ReadProperties - - - - - - - - - - - diff --git a/config/alfresco/wiki-services-context.xml b/config/alfresco/wiki-services-context.xml deleted file mode 100644 index 8e398a941e..0000000000 --- a/config/alfresco/wiki-services-context.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - org.alfresco.service.cmr.wiki.WikiService - - - - - - - - - - - - - - - - - - - - - - - - - ${server.transaction.mode.readOnly} - ${server.transaction.mode.readOnly} - ${server.transaction.mode.default} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/source/java/org/alfresco/repo/wiki/WikiPageInfoImpl.java b/source/java/org/alfresco/repo/wiki/WikiPageInfoImpl.java deleted file mode 100644 index 89b0de9cdc..0000000000 --- a/source/java/org/alfresco/repo/wiki/WikiPageInfoImpl.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * 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 . - */ -package org.alfresco.repo.wiki; - -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.wiki.WikiPageInfo; - -/** - * An implementation of {@link WikiPageInfo} - * - * @author Nick Burch (based on existing webscript controllers in the REST API) - * @since 4.0 - */ -public class WikiPageInfoImpl implements WikiPageInfo -{ - private NodeRef nodeRef; - private NodeRef containerNodeRef; - private String systemName; - private String title; - private String contents; - private String creator; - private String modifier; - private Date createdAt; - private Date modifiedAt; - private List tags = new ArrayList(); - - /** - * Creates a new, empty WikiPageInfo - */ - public WikiPageInfoImpl() - { - } - - /** - * Create a WikiPageInfo object from an existing node - */ - public WikiPageInfoImpl(NodeRef nodeRef, NodeRef containerNodeRef, String systemName) - { - this.nodeRef = nodeRef; - this.containerNodeRef = containerNodeRef; - this.systemName = systemName; - } - - @Override - public NodeRef getContainerNodeRef() - { - return containerNodeRef; - } - - @Override - public NodeRef getNodeRef() - { - return nodeRef; - } - - @Override - public String getSystemName() - { - return systemName; - } - - @Override - public String getTitle() - { - return title; - } - - @Override - public String getContents() - { - return contents; - } - - @Override - public String getCreator() - { - return creator; - } - - @Override - public String getModifier() - { - return modifier; - } - - @Override - public Date getCreatedAt() - { - return createdAt; - } - - @Override - public Date getModifiedAt() - { - return modifiedAt; - } - - @Override - public List getTags() - { - return tags; - } - - @Override - public void setTitle(String title) - { - this.title = title; - } - - @Override - public void setContents(String contents) - { - this.contents = contents; - } - - public void setCreator(String creator) - { - this.creator = creator; - } - - public void setModifier(String modifier) - { - this.modifier = modifier; - } - - public void setCreatedAt(Date createdAt) - { - this.createdAt = createdAt; - } - - public void setModifiedAt(Date modifiedAt) - { - this.modifiedAt = modifiedAt; - } - - public void setTags(List tags) - { - this.tags = tags; - } -} diff --git a/source/java/org/alfresco/repo/wiki/WikiServiceImpl.java b/source/java/org/alfresco/repo/wiki/WikiServiceImpl.java deleted file mode 100644 index 11e3d14d36..0000000000 --- a/source/java/org/alfresco/repo/wiki/WikiServiceImpl.java +++ /dev/null @@ -1,408 +0,0 @@ -/* - * 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 . - */ -package org.alfresco.repo.wiki; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.alfresco.error.AlfrescoRuntimeException; -import org.alfresco.model.ContentModel; -import org.alfresco.query.CannedQueryFactory; -import org.alfresco.query.CannedQueryResults; -import org.alfresco.query.CannedQuerySortDetails; -import org.alfresco.query.EmptyPagingResults; -import org.alfresco.query.PagingRequest; -import org.alfresco.query.PagingResults; -import org.alfresco.repo.content.MimetypeMap; -import org.alfresco.repo.domain.node.NodeDAO; -import org.alfresco.repo.node.getchildren.GetChildrenAuditableCannedQuery; -import org.alfresco.repo.node.getchildren.GetChildrenAuditableCannedQueryFactory; -import org.alfresco.repo.query.NodeBackedEntity; -import org.alfresco.repo.site.SiteServiceImpl; -import org.alfresco.service.cmr.model.FileFolderService; -import org.alfresco.service.cmr.model.FileNotFoundException; -import org.alfresco.service.cmr.repository.ContentReader; -import org.alfresco.service.cmr.repository.ContentService; -import org.alfresco.service.cmr.repository.ContentWriter; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.service.cmr.site.SiteService; -import org.alfresco.service.cmr.tagging.TaggingService; -import org.alfresco.service.cmr.wiki.WikiPageInfo; -import org.alfresco.service.cmr.wiki.WikiService; -import org.alfresco.service.namespace.QName; -import org.alfresco.service.transaction.TransactionService; -import org.alfresco.util.Pair; -import org.alfresco.util.registry.NamedObjectRegistry; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * @author Nick Burch (based on existing webscript controllers in the REST API) - * @since 4.0 - */ -public class WikiServiceImpl implements WikiService -{ - public static final String WIKI_COMPONENT = "wiki"; - - protected static final String CANNED_QUERY_GET_CHILDREN = "wikiGetChildrenCannedQueryFactory"; - - /** - * The logger - */ - @SuppressWarnings("unused") - private static Log logger = LogFactory.getLog(WikiServiceImpl.class); - - private NodeDAO nodeDAO; - private NodeService nodeService; - private SiteService siteService; - private ContentService contentService; - private TaggingService taggingService; - private FileFolderService fileFolderService; - private TransactionService transactionService; - private NamedObjectRegistry> cannedQueryRegistry; - - public void setNodeDAO(NodeDAO nodeDAO) - { - this.nodeDAO = nodeDAO; - } - - public void setNodeService(NodeService nodeService) - { - this.nodeService = nodeService; - } - - public void setSiteService(SiteService siteService) - { - this.siteService = siteService; - } - - public void setContentService(ContentService contentService) - { - this.contentService = contentService; - } - - public void setTaggingService(TaggingService taggingService) - { - this.taggingService = taggingService; - } - - public void setFileFolderService(FileFolderService fileFolderService) - { - this.fileFolderService = fileFolderService; - } - - public void setTransactionService(TransactionService transactionService) - { - this.transactionService = transactionService; - } - - /** - * Set the registry of {@link CannedQueryFactory canned queries} - */ - public void setCannedQueryRegistry(NamedObjectRegistry> cannedQueryRegistry) - { - this.cannedQueryRegistry = cannedQueryRegistry; - } - - /** - * Fetches the Wiki Container on a site, creating as required if requested. - */ - protected NodeRef getSiteWikiContainer(final String siteShortName, boolean create) - { - return SiteServiceImpl.getSiteContainer( - siteShortName, WIKI_COMPONENT, create, - siteService, transactionService, taggingService); - } - - /** - * Turns a Title into a Page Name. - */ - private static String buildName(String title) - { - // The name is based on the title, but with underscores - String name = title.replace(' ', '_'); - name = name.replaceAll("\"", "%22"); - name = name.replaceAll("[*]", "%2a"); - name = name.replaceAll("<", "%3c"); - name = name.replaceAll(">", "%3e"); - name = name.replaceAll(":", "%3a"); - name = name.replaceAll("([.]?[.]+$)", "%2e"); - return name; - } - - private WikiPageInfo buildPage(NodeRef nodeRef, NodeRef container, String name, String preLoadedContents) - { - WikiPageInfoImpl page = new WikiPageInfoImpl(nodeRef, container, name); - - // Grab all the properties, we need the bulk of them anyway - Map props = nodeService.getProperties(nodeRef); - - // Start with the auditable properties - page.setCreator((String)props.get(ContentModel.PROP_CREATOR)); - page.setModifier((String)props.get(ContentModel.PROP_MODIFIER)); - page.setCreatedAt((Date)props.get(ContentModel.PROP_CREATED)); - page.setModifiedAt((Date)props.get(ContentModel.PROP_MODIFIED)); - - // Now the wiki ones - page.setTitle(((String)props.get(ContentModel.PROP_TITLE)).replaceAll(" ", "_")); - - // Finally, do the content - String contents = preLoadedContents; - if (contents == null) - { - ContentReader reader = contentService.getReader(nodeRef, ContentModel.PROP_CONTENT); - if (reader != null) - { - contents = reader.getContentString(); - } - } - page.setContents(contents); - - // Finally tags - page.setTags(taggingService.getTags(nodeRef)); - - // All done - return page; - } - - - @Override - public WikiPageInfo getWikiPage(String siteShortName, String pageTitle) - { - NodeRef container = getSiteWikiContainer(siteShortName, false); - if (container == null) - { - // No links - return null; - } - - String pageName = buildName(pageTitle); - NodeRef link = nodeService.getChildByName(container, ContentModel.ASSOC_CONTAINS, pageName); - if (link != null) - { - return buildPage(link, container, pageName, null); - } - return null; - } - - @Override - public WikiPageInfo createWikiPage(String siteShortName, String title, - String content) - { - // Grab the location to store in - NodeRef container = getSiteWikiContainer(siteShortName, true); - - // Build the name - String name = buildName(title); - - // Get the properties for the node - Map props = new HashMap(); - props.put(ContentModel.PROP_NAME, name); - props.put(ContentModel.PROP_TITLE, title); - - // Build the node - NodeRef nodeRef = nodeService.createNode( - container, - ContentModel.ASSOC_CONTAINS, - QName.createQName(name), - ContentModel.TYPE_CONTENT, - props - ).getChildRef(); - - // Store the content - ContentWriter writer = contentService.getWriter(nodeRef, ContentModel.PROP_CONTENT, true); - writer.setMimetype(MimetypeMap.MIMETYPE_HTML); - writer.setEncoding("UTF-8"); - writer.putContent(content); - - // Generate the wrapping object for it - // Build it that way, so creator and created date come through - return buildPage(nodeRef, container, name, content); - } - - @Override - public WikiPageInfo updateWikiPage(WikiPageInfo page) - { - // Sanity check what we were given - if (page.getNodeRef() == null) - { - throw new IllegalArgumentException("Can't update a page that was never persisted, call create instead"); - } - - NodeRef nodeRef = page.getNodeRef(); - String nodeName = buildName(page.getTitle()); - - // Handle the rename case - boolean renamed = false; - if (! nodeService.getProperty(nodeRef, ContentModel.PROP_TITLE).equals(page.getTitle())) - { - try - { - fileFolderService.rename(nodeRef, nodeName); - renamed = true; - } - catch (FileNotFoundException e) - { - throw new AlfrescoRuntimeException("Invalid node state - wiki page no longer found"); - } - nodeService.setProperty(nodeRef, ContentModel.PROP_NAME, nodeName); - nodeService.setProperty(nodeRef, ContentModel.PROP_TITLE, page.getTitle()); - } - - // Change the content - ContentWriter writer = contentService.getWriter(nodeRef, ContentModel.PROP_CONTENT, true); - writer.setMimetype(MimetypeMap.MIMETYPE_HTML); - writer.setEncoding("UTF-8"); - writer.putContent(page.getContents()); - - // Now do the tags - taggingService.setTags(nodeRef, page.getTags()); - - // If we re-named, re-create the object - if (renamed) - { - page = buildPage(nodeRef, page.getContainerNodeRef(), nodeName, page.getContents()); - } - - // All done - return page; - } - - @Override - public void deleteWikiPage(WikiPageInfo page) - { - if (page.getNodeRef() == null) - { - throw new IllegalArgumentException("Can't delete a wiki page that was never persisted"); - } - - nodeService.deleteNode(page.getNodeRef()); - } - - @Override - public PagingResults listWikiPages(String siteShortName, PagingRequest paging) - { - return listWikiPages(siteShortName, null, paging); - } - - @Override - public PagingResults listWikiPages(String siteShortName, String user, - PagingRequest paging) - { - return listWikiPages(siteShortName, user, null, null, null, null, paging); - } - - @Override - public PagingResults listWikiPagesByCreated(String siteShortName, - Date from, Date to, PagingRequest paging) - { - return listWikiPages(siteShortName, null, from, to, null, null, paging); - } - - @Override - public PagingResults listWikiPagesByModified(String siteShortName, - Date from, Date to, PagingRequest paging) - { - return listWikiPages(siteShortName, null, null, null, from, to, paging); - } - - public PagingResults listWikiPages(String siteShortName, String username, - Date createdFrom, Date createdTo, Date modifiedFrom, Date modifiedTo, PagingRequest paging) - { - NodeRef container = getSiteWikiContainer(siteShortName, false); - if (container == null) - { - // No events - return new EmptyPagingResults(); - } - - // Grab the factory - GetChildrenAuditableCannedQueryFactory getChildrenCannedQueryFactory = - (GetChildrenAuditableCannedQueryFactory)cannedQueryRegistry.getNamedObject(CANNED_QUERY_GET_CHILDREN); - - // Do the sorting, newest first by created date - CannedQuerySortDetails sorting = getChildrenCannedQueryFactory.createDateDescendingCQSortDetails(); - - // Run the canned query - GetChildrenAuditableCannedQuery cq = (GetChildrenAuditableCannedQuery)getChildrenCannedQueryFactory.getCannedQuery( - container, ContentModel.TYPE_CONTENT, username, createdFrom, createdTo, null, - modifiedFrom, modifiedTo, sorting, paging); - - // Execute the canned query - CannedQueryResults results = cq.execute(); - - // Convert to Link objects - return wrap(results, container); - } - - /** - * Our class to wrap up paged results of NodeBackedEntities as - * WikiPageInfo instances - */ - private PagingResults wrap(final PagingResults results, final NodeRef container) - { - // Pre-load the nodes before we create them - List ids = new ArrayList(); - for (NodeBackedEntity node : results.getPage()) - { - ids.add(node.getId()); - } - nodeDAO.cacheNodesById(ids); - - // Wrap - return new PagingResults() - { - @Override - public String getQueryExecutionId() - { - return results.getQueryExecutionId(); - } - - @Override - public List getPage() - { - List pages = new ArrayList(); - for (NodeBackedEntity node : results.getPage()) - { - NodeRef nodeRef = node.getNodeRef(); - String name = node.getName(); - pages.add(buildPage(nodeRef, container, name, null)); - } - return pages; - } - - @Override - public boolean hasMoreItems() - { - return results.hasMoreItems(); - } - - @Override - public Pair getTotalResultCount() - { - return results.getTotalResultCount(); - } - }; - } -} diff --git a/source/java/org/alfresco/service/cmr/wiki/WikiPageInfo.java b/source/java/org/alfresco/service/cmr/wiki/WikiPageInfo.java deleted file mode 100644 index c6fdc62275..0000000000 --- a/source/java/org/alfresco/service/cmr/wiki/WikiPageInfo.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * 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 . - */ -package org.alfresco.service.cmr.wiki; - -import java.io.Serializable; -import java.util.Date; -import java.util.List; - -import org.alfresco.repo.security.permissions.PermissionCheckValue; -import org.alfresco.service.cmr.repository.NodeRef; - -/** - * This class represents a Wiki Paeg in a site - * - * @author Nick Burch - * @since 4.0 - */ -public interface WikiPageInfo extends Serializable, PermissionCheckValue -{ - /** - * @return the NodeRef of the underlying wiki page - */ - NodeRef getNodeRef(); - - /** - * @return the NodeRef of the site container this belongs to - */ - NodeRef getContainerNodeRef(); - - /** - * @return the name of the wiki page - */ - String getSystemName(); - - /** - * @return the Title of the wiki page - */ - String getTitle(); - - /** - * Sets the Title of the wiki page - */ - void setTitle(String title); - - /** - * @return the HTML Content of the wiki page - */ - String getContents(); - - /** - * Sets the (HTML) Content of the wiki page - */ - void setContents(String contentHTML); - - /** - * @return the creator of the wiki page - */ - String getCreator(); - - /** - * @return the modifier of the wiki page - */ - String getModifier(); - - /** - * @return the creation date and time - */ - Date getCreatedAt(); - - /** - * @return the modification date and time - */ - Date getModifiedAt(); - - /** - * @return the Tags associated with the wiki page - */ - List getTags(); -} diff --git a/source/java/org/alfresco/service/cmr/wiki/WikiService.java b/source/java/org/alfresco/service/cmr/wiki/WikiService.java deleted file mode 100644 index c767779ac6..0000000000 --- a/source/java/org/alfresco/service/cmr/wiki/WikiService.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * 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 . - */ -package org.alfresco.service.cmr.wiki; - -import java.util.Date; - -import org.alfresco.query.PagingRequest; -import org.alfresco.query.PagingResults; -import org.alfresco.service.NotAuditable; - -/** - * The Wiki service. - * - * @author Nick Burch - * @since 4.0 - */ -public interface WikiService -{ - /** - * Creates a new {@link WikiPageInfo} in the given site, with the - * specified contents - * - * @return The newly created {@link WikiPageInfo} - */ - @NotAuditable - WikiPageInfo createWikiPage(String siteShortName, String title, String contents); - - /** - * Updates an existing {@link WikiPageInfo} in the repository. - * - * @return The updated {@link WikiPageInfo} - */ - @NotAuditable - WikiPageInfo updateWikiPage(WikiPageInfo wikiPage); - - /** - * Deletes an existing {@link WikiPageInfo} from the repository - */ - @NotAuditable - void deleteWikiPage(WikiPageInfo wikiPage); - - /** - * Retrieves an existing {@link WikiPageInfo} from the repository - */ - @NotAuditable - WikiPageInfo getWikiPage(String siteShortName, String pageName); - - /** - * Retrieves all {@link WikiPageInfo} instances in the repository - * for the given site. - */ - @NotAuditable - PagingResults listWikiPages(String siteShortName, PagingRequest paging); - - /** - * Retrieves all {@link WikiPageInfo} instances in the repository - * for the given site and the specified user. - */ - @NotAuditable - PagingResults listWikiPages(String siteShortName, String user, PagingRequest paging); - - /** - * Retrieves all {@link WikiPageInfo} instances in the repository - * for the given site, created in the specified date range - */ - @NotAuditable - PagingResults listWikiPagesByCreated(String siteShortName, Date from, Date to, PagingRequest paging); - - /** - * Retrieves all {@link WikiPageInfo} instances in the repository - * for the given site, modified in the specified date range - */ - @NotAuditable - PagingResults listWikiPagesByModified(String siteShortName, Date from, Date to, PagingRequest paging); -} diff --git a/source/java/org/alfresco/util/ApplicationContextHelper.java b/source/java/org/alfresco/util/ApplicationContextHelper.java index 74b59218ef..8e8ae3f6df 100644 --- a/source/java/org/alfresco/util/ApplicationContextHelper.java +++ b/source/java/org/alfresco/util/ApplicationContextHelper.java @@ -46,6 +46,20 @@ public class ApplicationContextHelper extends BaseApplicationContextHelper return BaseApplicationContextHelper.getApplicationContext(CONFIG_LOCATIONS); } + /** + * Provides a static, single instance of an application context represented by the given + * array of config locations. This method can be called repeatedly. + *

+ * If the configuration requested differs from one used previously, then the previously-created + * context is shut down. + * + * @return Returns an application context for the given config locations + */ + public synchronized static ApplicationContext getApplicationContext(String[] configLocations) + { + return BaseApplicationContextHelper.getApplicationContext(configLocations); + } + public static void main(String ... args) { ClassPathXmlApplicationContext ctx = (ClassPathXmlApplicationContext) getApplicationContext(); diff --git a/source/test-java/org/alfresco/Repository01TestSuite.java b/source/test-java/org/alfresco/Repository01TestSuite.java index c408f53ddb..08d0f18621 100644 --- a/source/test-java/org/alfresco/Repository01TestSuite.java +++ b/source/test-java/org/alfresco/Repository01TestSuite.java @@ -383,11 +383,6 @@ public class Repository01TestSuite extends TestSuite suite.addTest(org.alfresco.repo.version.VersionTestSuite.suite()); } - static void tests60(TestSuite suite) - { - suite.addTest(new JUnit4TestAdapter(org.alfresco.repo.wiki.WikiServiceImplTest.class)); - } - static void tests61(TestSuite suite) { suite.addTest(org.alfresco.repo.workflow.WorkflowTestSuite.suite()); diff --git a/source/test-java/org/alfresco/Repository60TestSuite.java b/source/test-java/org/alfresco/Repository60TestSuite.java deleted file mode 100644 index c954c234b2..0000000000 --- a/source/test-java/org/alfresco/Repository60TestSuite.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2005-2014 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 . - */ -package org.alfresco; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * See {@link Repository01TestSuite} - * - * @Author Alan Davis - */ -public class Repository60TestSuite extends TestSuite -{ - public static Test suite() - { - TestSuite suite = new TestSuite(); - Repository01TestSuite.tests60(suite); - return suite; - } -} diff --git a/source/test-java/org/alfresco/repo/wiki/WikiServiceImplTest.java b/source/test-java/org/alfresco/repo/wiki/WikiServiceImplTest.java deleted file mode 100644 index 40088e6d60..0000000000 --- a/source/test-java/org/alfresco/repo/wiki/WikiServiceImplTest.java +++ /dev/null @@ -1,875 +0,0 @@ -/* - * 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 . - */ -package org.alfresco.repo.wiki; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -import org.alfresco.model.ContentModel; -import org.alfresco.query.PagingRequest; -import org.alfresco.query.PagingResults; -import org.alfresco.repo.content.MimetypeMap; -import org.alfresco.repo.policy.BehaviourFilter; -import org.alfresco.repo.security.authentication.AuthenticationUtil; -import org.alfresco.repo.site.SiteModel; -import org.alfresco.repo.transaction.RetryingTransactionHelper; -import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; -import org.alfresco.service.cmr.dictionary.DictionaryService; -import org.alfresco.service.cmr.repository.ContentReader; -import org.alfresco.service.cmr.repository.ContentService; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.service.cmr.security.MutableAuthenticationService; -import org.alfresco.service.cmr.security.PermissionService; -import org.alfresco.service.cmr.security.PersonService; -import org.alfresco.service.cmr.site.SiteInfo; -import org.alfresco.service.cmr.site.SiteService; -import org.alfresco.service.cmr.site.SiteVisibility; -import org.alfresco.service.cmr.tagging.TaggingService; -import org.alfresco.service.cmr.wiki.WikiPageInfo; -import org.alfresco.service.cmr.wiki.WikiService; -import org.alfresco.service.transaction.TransactionService; -import org.alfresco.util.ApplicationContextHelper; -import org.alfresco.util.PropertyMap; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.springframework.context.ApplicationContext; - -/** - * Test cases for {@link WikiServiceImpl}. - * - * @author Nick Burch - * @since 4.0 - */ -public class WikiServiceImplTest -{ - private static final String TEST_SITE_PREFIX = "WikiSiteTest"; - private static final long ONE_DAY_MS = 24*60*60*1000; - - private static final ApplicationContext testContext = ApplicationContextHelper.getApplicationContext(); - - // injected services - private static MutableAuthenticationService AUTHENTICATION_SERVICE; - private static BehaviourFilter BEHAVIOUR_FILTER; - private static WikiService WIKI_SERVICE; - private static ContentService CONTENT_SERVICE; - @SuppressWarnings("unused") - private static DictionaryService DICTIONARY_SERVICE; - private static NodeService NODE_SERVICE; - private static NodeService PUBLIC_NODE_SERVICE; - private static PersonService PERSON_SERVICE; - private static RetryingTransactionHelper TRANSACTION_HELPER; - @SuppressWarnings("unused") - private static TransactionService TRANSACTION_SERVICE; - private static PermissionService PERMISSION_SERVICE; - private static SiteService SITE_SERVICE; - private static TaggingService TAGGING_SERVICE; - - private static final String TEST_USER = WikiServiceImplTest.class.getSimpleName() + "_testuser"; - private static final String ADMIN_USER = AuthenticationUtil.getAdminUserName(); - - private static SiteInfo WIKI_SITE; - private static SiteInfo ALTERNATE_WIKI_SITE; - - /** - * Temporary test nodes (created during a test method) that need deletion after the test method. - */ - private List testNodesToTidy = new ArrayList(); - /** - * Temporary test nodes (created BeforeClass) that need deletion after this test class. - */ - private static List CLASS_TEST_NODES_TO_TIDY = new ArrayList(); - - @BeforeClass public static void initTestsContext() throws Exception - { - AUTHENTICATION_SERVICE = (MutableAuthenticationService)testContext.getBean("authenticationService"); - BEHAVIOUR_FILTER = (BehaviourFilter)testContext.getBean("policyBehaviourFilter"); - WIKI_SERVICE = (WikiService)testContext.getBean("WikiService"); - CONTENT_SERVICE = (ContentService)testContext.getBean("ContentService"); - DICTIONARY_SERVICE = (DictionaryService)testContext.getBean("dictionaryService"); - NODE_SERVICE = (NodeService)testContext.getBean("nodeService"); - PUBLIC_NODE_SERVICE = (NodeService)testContext.getBean("NodeService"); - PERSON_SERVICE = (PersonService)testContext.getBean("personService"); - TRANSACTION_HELPER = (RetryingTransactionHelper)testContext.getBean("retryingTransactionHelper"); - TRANSACTION_SERVICE = (TransactionService)testContext.getBean("TransactionService"); - PERMISSION_SERVICE = (PermissionService)testContext.getBean("permissionService"); - SITE_SERVICE = (SiteService)testContext.getBean("siteService"); - TAGGING_SERVICE = (TaggingService)testContext.getBean("TaggingService"); - - // Do the setup as admin - AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER); - createUser(TEST_USER); - - // We need to create the test site as the test user so that they can contribute content to it in tests below. - AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER); - createTestSites(); - } - - @Test public void createNewEntry() throws Exception - { - WikiPageInfo page; - - // Nothing to start with - PagingResults results = - WIKI_SERVICE.listWikiPages(WIKI_SITE.getShortName(), new PagingRequest(10)); - assertEquals(0, results.getPage().size()); - - - // Get with an arbitrary name gives nothing - page = WIKI_SERVICE.getWikiPage(WIKI_SITE.getShortName(), "madeUp"); - assertEquals(null, page); - - page = WIKI_SERVICE.getWikiPage(WIKI_SITE.getShortName(), "madeUp2"); - assertEquals(null, page); - - // Create one - page = WIKI_SERVICE.createWikiPage( - WIKI_SITE.getShortName(), "Title", "This Is Some Content"); - - - // Ensure it got a noderef, and the correct site - assertNotNull(page.getNodeRef()); - assertNotNull(page.getSystemName()); - - NodeRef container = PUBLIC_NODE_SERVICE.getPrimaryParent(page.getNodeRef()).getParentRef(); - NodeRef site = PUBLIC_NODE_SERVICE.getPrimaryParent(container).getParentRef(); - assertEquals(WIKI_SITE.getNodeRef(), site); - - // Ensure the content was correctly set up - ContentReader reader = CONTENT_SERVICE.getReader(page.getNodeRef(), ContentModel.PROP_CONTENT); - assertEquals("This Is Some Content", reader.getContentString()); - assertEquals(MimetypeMap.MIMETYPE_HTML, reader.getMimetype()); - assertEquals("UTF-8", reader.getEncoding()); - - - - // Check the details on the object - assertEquals("Title", page.getTitle()); - assertEquals("This Is Some Content", page.getContents()); - assertEquals(ADMIN_USER, page.getCreator()); - assertEquals(0, page.getTags().size()); - - - // Fetch it, and check the details - page = WIKI_SERVICE.getWikiPage(WIKI_SITE.getShortName(), page.getSystemName()); - assertEquals("Title", page.getTitle()); - assertEquals("This Is Some Content", page.getContents()); - assertEquals(ADMIN_USER, page.getCreator()); - assertEquals(0, page.getTags().size()); - - - // Mark it as done with - testNodesToTidy.add(page.getNodeRef()); - } - - @Test public void createUpdateDeleteEntry() throws Exception - { - WikiPageInfo page; - - // Run as the test user instead - AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER); - - - // Create a page - page = WIKI_SERVICE.createWikiPage( - WIKI_SITE.getShortName(), "Title", "This Is Some Content"); - testNodesToTidy.add(page.getNodeRef()); - - - // Check it - assertEquals("Title", page.getSystemName()); - assertEquals("Title", page.getTitle()); - assertEquals("This Is Some Content", page.getContents()); - assertEquals(TEST_USER, page.getCreator()); - assertEquals(0, page.getTags().size()); - - - // Change it - page.setTitle("New Title"); - page.setContents("This is new content"); - - page = WIKI_SERVICE.updateWikiPage(page); - assertEquals("New_Title", page.getSystemName()); // Name has underscores - assertEquals("New_Title", page.getTitle()); - - - // Fetch, and check - page = WIKI_SERVICE.getWikiPage(WIKI_SITE.getShortName(), page.getSystemName()); - assertEquals("New_Title", page.getSystemName()); // Name has underscores - assertEquals("New_Title", page.getTitle()); - assertEquals("This is new content", page.getContents()); - assertEquals(TEST_USER, page.getCreator()); - assertEquals(0, page.getTags().size()); - - - // Delete it - WIKI_SERVICE.deleteWikiPage(page); - - // Check it went - assertEquals(null, WIKI_SERVICE.getWikiPage(WIKI_SITE.getShortName(), page.getSystemName())); - - - // Create a new node with spaces in title - page = WIKI_SERVICE.createWikiPage( - WIKI_SITE.getShortName(), "Title Space", "This Is Some Content"); - testNodesToTidy.add(page.getNodeRef()); - - // Check it - assertEquals("Title_Space", page.getSystemName()); - assertEquals("Title_Space", page.getTitle()); - assertEquals("This Is Some Content", page.getContents()); - assertEquals(TEST_USER, page.getCreator()); - assertEquals(0, page.getTags().size()); - - - // Edit it without renaming - page.setContents("Changed contents"); - page = WIKI_SERVICE.updateWikiPage(page); - - // Check - page = WIKI_SERVICE.getWikiPage(WIKI_SITE.getShortName(), page.getSystemName()); - assertEquals("Title_Space", page.getSystemName()); - assertEquals("Title_Space", page.getTitle()); - assertEquals("Changed contents", page.getContents()); - assertEquals(TEST_USER, page.getCreator()); - assertEquals(0, page.getTags().size()); - - - // Now edit with renaming - page.setTitle("Alternate Title"); - page = WIKI_SERVICE.updateWikiPage(page); - - // Check - page = WIKI_SERVICE.getWikiPage(WIKI_SITE.getShortName(), page.getSystemName()); - assertEquals("Alternate_Title", page.getSystemName()); - assertEquals("Alternate_Title", page.getTitle()); - assertEquals("Changed contents", page.getContents()); - assertEquals(TEST_USER, page.getCreator()); - assertEquals(0, page.getTags().size()); - } - - /** - * Ensures that when we try to write an entry to the - * container of a new site, it is correctly setup for us. - * This test does it's own transactions - */ - @Test public void newContainerSetup() throws Exception - { - final String TEST_SITE_NAME = "WikiTestNewTestSite"; - - TRANSACTION_HELPER.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback() - { - @Override - public Void execute() throws Throwable - { - if(SITE_SERVICE.getSite(TEST_SITE_NAME) != null) - { - SITE_SERVICE.deleteSite(TEST_SITE_NAME); - } - SITE_SERVICE.createSite( - TEST_SITE_PREFIX, TEST_SITE_NAME, "Test", "Test", SiteVisibility.PUBLIC); - - // Won't have the container to start with - assertFalse(SITE_SERVICE.hasContainer(TEST_SITE_NAME, WikiServiceImpl.WIKI_COMPONENT)); - - // Create a link - WIKI_SERVICE.createWikiPage( - TEST_SITE_NAME, "Title", "TextTextText"); - - // It will now exist - assertTrue(SITE_SERVICE.hasContainer(TEST_SITE_NAME, WikiServiceImpl.WIKI_COMPONENT)); - - // It'll be a tag scope too - NodeRef container = SITE_SERVICE.getContainer(TEST_SITE_NAME, WikiServiceImpl.WIKI_COMPONENT); - assertTrue(TAGGING_SERVICE.isTagScope(container)); - - // Tidy up - SITE_SERVICE.deleteSite(TEST_SITE_NAME); - return null; - } - }); - } - - @Test public void tagging() throws Exception - { - WikiPageInfo page; - final String TAG_1 = "link_tag_1"; - final String TAG_2 = "link_tag_2"; - final String TAG_3 = "link_tag_3"; - - // Create one without tagging - page = WIKI_SERVICE.createWikiPage( - WIKI_SITE.getShortName(), "Title", "This Is Some Content"); - testNodesToTidy.add(page.getNodeRef()); - - // Check - assertEquals(0, page.getTags().size()); - - page = WIKI_SERVICE.getWikiPage(WIKI_SITE.getShortName(), page.getSystemName()); - assertEquals(0, page.getTags().size()); - - - // Update it to have tags - page.getTags().add(TAG_1); - page.getTags().add(TAG_2); - page.getTags().add(TAG_1); - assertEquals(3, page.getTags().size()); - WIKI_SERVICE.updateWikiPage(page); - - // Check - page = WIKI_SERVICE.getWikiPage(WIKI_SITE.getShortName(), page.getSystemName()); - assertEquals(2, page.getTags().size()); - assertEquals(true, page.getTags().contains(TAG_1)); - assertEquals(true, page.getTags().contains(TAG_2)); - assertEquals(false, page.getTags().contains(TAG_3)); - - - // Update it to have different tags - page.getTags().remove(TAG_2); - page.getTags().add(TAG_3); - page.getTags().add(TAG_1); - WIKI_SERVICE.updateWikiPage(page); - - // Check it as-is - assertEquals(3, page.getTags().size()); // Includes duplicate tag until re-loaded - assertEquals(true, page.getTags().contains(TAG_1)); - assertEquals(false, page.getTags().contains(TAG_2)); - assertEquals(true, page.getTags().contains(TAG_3)); - - // Now load and re-check - page = WIKI_SERVICE.getWikiPage(WIKI_SITE.getShortName(), page.getSystemName()); - assertEquals(2, page.getTags().size()); // Duplicate now gone - assertEquals(true, page.getTags().contains(TAG_1)); - assertEquals(false, page.getTags().contains(TAG_2)); - assertEquals(true, page.getTags().contains(TAG_3)); - - - // Update it to have no tags - page.getTags().clear(); - WIKI_SERVICE.updateWikiPage(page); - - // Check - page = WIKI_SERVICE.getWikiPage(WIKI_SITE.getShortName(), page.getSystemName()); - assertEquals(0, page.getTags().size()); - - - // Update it to have tags again - page.getTags().add(TAG_1); - page.getTags().add(TAG_2); - page.getTags().add(TAG_3); - WIKI_SERVICE.updateWikiPage(page); - - // Check - page = WIKI_SERVICE.getWikiPage(WIKI_SITE.getShortName(), page.getSystemName()); - assertEquals(3, page.getTags().size()); - assertEquals(true, page.getTags().contains(TAG_1)); - assertEquals(true, page.getTags().contains(TAG_2)); - assertEquals(true, page.getTags().contains(TAG_3)); - - // Tidy - WIKI_SERVICE.deleteWikiPage(page); - } - - /** - * Tests for listing the wiki pages of a site, possibly by user or date range - */ - @Test public void pagesListing() throws Exception - { - PagingRequest paging = new PagingRequest(10); - AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER); - - // Nothing to start with - PagingResults results = - WIKI_SERVICE.listWikiPages(WIKI_SITE.getShortName(), paging); - assertEquals(0, results.getPage().size()); - - // Add a few - WikiPageInfo pageA = WIKI_SERVICE.createWikiPage( - WIKI_SITE.getShortName(), "TitleA", "ContentA"); - WikiPageInfo pageB = WIKI_SERVICE.createWikiPage( - WIKI_SITE.getShortName(), "TitleB", "ContentB"); - WikiPageInfo pageC = WIKI_SERVICE.createWikiPage( - WIKI_SITE.getShortName(), "TitleC", "ContentC"); - testNodesToTidy.add(pageA.getNodeRef()); - testNodesToTidy.add(pageB.getNodeRef()); - testNodesToTidy.add(pageC.getNodeRef()); - - // Check now, should be newest first - results = WIKI_SERVICE.listWikiPages(WIKI_SITE.getShortName(), paging); - assertEquals(3, results.getPage().size()); - assertEquals("TitleC", results.getPage().get(0).getTitle()); - assertEquals("TitleB", results.getPage().get(1).getTitle()); - assertEquals("TitleA", results.getPage().get(2).getTitle()); - - // Add one more, as a different user, and drop the page size - AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER); - WikiPageInfo pageD = WIKI_SERVICE.createWikiPage( - WIKI_SITE.getShortName(), "TitleD", "ContentD"); - testNodesToTidy.add(pageD.getNodeRef()); - AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER); - - paging = new PagingRequest(3); - results = WIKI_SERVICE.listWikiPages(WIKI_SITE.getShortName(), paging); - assertEquals(3, results.getPage().size()); - assertEquals("TitleD", results.getPage().get(0).getTitle()); - assertEquals("TitleC", results.getPage().get(1).getTitle()); - assertEquals("TitleB", results.getPage().get(2).getTitle()); - - paging = new PagingRequest(3, 3); - results = WIKI_SERVICE.listWikiPages(WIKI_SITE.getShortName(), paging); - assertEquals(1, results.getPage().size()); - assertEquals("TitleA", results.getPage().get(0).getTitle()); - - - // Now check filtering by user - paging = new PagingRequest(10); - - results = WIKI_SERVICE.listWikiPages(WIKI_SITE.getShortName(), TEST_USER, paging); - assertEquals(3, results.getPage().size()); - assertEquals("TitleC", results.getPage().get(0).getTitle()); - assertEquals("TitleB", results.getPage().get(1).getTitle()); - assertEquals("TitleA", results.getPage().get(2).getTitle()); - - results = WIKI_SERVICE.listWikiPages(WIKI_SITE.getShortName(), ADMIN_USER, paging); - assertEquals(1, results.getPage().size()); - assertEquals("TitleD", results.getPage().get(0).getTitle()); - - - // Now check filtering by date range - // Arrange it so that the orders are: - // Created -> C B A D - // Modified -> D C B A - pushAuditableDatesBack(pageB, 10, 0); - pushAuditableDatesBack(pageC, 100, 10); - pushAuditableDatesBack(pageD, 0, 100); - pageA.setContents("UpdatedContentsA"); - pageA = WIKI_SERVICE.updateWikiPage(pageA); - - - Date today = new Date(); - Date tomorrow = new Date(today.getTime()+ONE_DAY_MS); - Date yesterday = new Date(today.getTime()-ONE_DAY_MS); - Date twoWeeksAgo = new Date(today.getTime()-14*ONE_DAY_MS); - - - // Check by created date - - // Very recent ones - results = WIKI_SERVICE.listWikiPagesByCreated(WIKI_SITE.getShortName(), yesterday, tomorrow, paging); - assertEquals(2, results.getPage().size()); - assertEquals("TitleD", results.getPage().get(0).getTitle()); - assertEquals("TitleA", results.getPage().get(1).getTitle()); - - // Fairly old ones - results = WIKI_SERVICE.listWikiPagesByCreated(WIKI_SITE.getShortName(), twoWeeksAgo, yesterday, paging); - assertEquals(1, results.getPage().size()); - assertEquals("TitleB", results.getPage().get(0).getTitle()); - - // Fairly old to current - results = WIKI_SERVICE.listWikiPagesByCreated(WIKI_SITE.getShortName(), twoWeeksAgo, tomorrow, paging); - assertEquals(3, results.getPage().size()); - assertEquals("TitleD", results.getPage().get(0).getTitle()); - assertEquals("TitleA", results.getPage().get(1).getTitle()); - assertEquals("TitleB", results.getPage().get(2).getTitle()); - - - // Check by modified date - - // Very recent ones - results = WIKI_SERVICE.listWikiPagesByModified(WIKI_SITE.getShortName(), yesterday, tomorrow, paging); - assertEquals(2, results.getPage().size()); - assertEquals("TitleA", results.getPage().get(0).getTitle()); - assertEquals("TitleB", results.getPage().get(1).getTitle()); - - // Fairly old ones - results = WIKI_SERVICE.listWikiPagesByModified(WIKI_SITE.getShortName(), twoWeeksAgo, yesterday, paging); - assertEquals(1, results.getPage().size()); - assertEquals("TitleC", results.getPage().get(0).getTitle()); - - // Fairly old to current - results = WIKI_SERVICE.listWikiPagesByModified(WIKI_SITE.getShortName(), twoWeeksAgo, tomorrow, paging); - assertEquals(3, results.getPage().size()); - assertEquals("TitleA", results.getPage().get(0).getTitle()); - assertEquals("TitleB", results.getPage().get(1).getTitle()); - assertEquals("TitleC", results.getPage().get(2).getTitle()); - - - // Bring C back to current and re-check - pageC.setContents("Changed C"); - pageC = WIKI_SERVICE.updateWikiPage(pageC); - - // Order doesn't change, sorting is by created date not modified date - results = WIKI_SERVICE.listWikiPagesByModified(WIKI_SITE.getShortName(), twoWeeksAgo, tomorrow, paging); - assertEquals(3, results.getPage().size()); - assertEquals("TitleA", results.getPage().get(0).getTitle()); - assertEquals("TitleB", results.getPage().get(1).getTitle()); - assertEquals("TitleC", results.getPage().get(2).getTitle()); - - - // Tidy - paging = new PagingRequest(10); - AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER); - results = WIKI_SERVICE.listWikiPages(WIKI_SITE.getShortName(), paging); - for (WikiPageInfo link : results.getPage()) - { - PUBLIC_NODE_SERVICE.deleteNode(link.getNodeRef()); - } - results = WIKI_SERVICE.listWikiPages(ALTERNATE_WIKI_SITE.getShortName(), paging); - for (WikiPageInfo link : results.getPage()) - { - PUBLIC_NODE_SERVICE.deleteNode(link.getNodeRef()); - } - } - - /** - * Checks that the correct permission checking occurs on fetching - * links listings (which go through canned queries) - */ - @Test public void pagesListingPermissionsChecking() throws Exception - { - PagingRequest paging = new PagingRequest(10); - PagingResults results; - - // Nothing to start with in either site - results = WIKI_SERVICE.listWikiPages(WIKI_SITE.getShortName(), paging); - assertEquals(0, results.getPage().size()); - results = WIKI_SERVICE.listWikiPages(ALTERNATE_WIKI_SITE.getShortName(), paging); - assertEquals(0, results.getPage().size()); - - // Double check that we're only allowed to see the 1st site - TRANSACTION_HELPER.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback() - { - @Override public Void execute() throws Throwable - { - assertEquals(true, SITE_SERVICE.isMember(WIKI_SITE.getShortName(), TEST_USER)); - assertEquals(false, SITE_SERVICE.isMember(ALTERNATE_WIKI_SITE.getShortName(), TEST_USER)); - return null; - } - }); - - - // Now become the test user - AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER); - - - // Add two events to one site and three to the other - // Note - add the events as a different user for the site that the - // test user isn't a member of! - WikiPageInfo pageA = WIKI_SERVICE.createWikiPage( - WIKI_SITE.getShortName(), "TitleA", "ContentA"); - WikiPageInfo pageB = WIKI_SERVICE.createWikiPage( - WIKI_SITE.getShortName(), "TitleB", "ContentB"); - testNodesToTidy.add(pageA.getNodeRef()); - testNodesToTidy.add(pageB.getNodeRef()); - - AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER); - WikiPageInfo pagePrivA = WIKI_SERVICE.createWikiPage( - ALTERNATE_WIKI_SITE.getShortName(), "PrivTitleA", "Contents A"); - WikiPageInfo pagePrivB = WIKI_SERVICE.createWikiPage( - ALTERNATE_WIKI_SITE.getShortName(), "PrivTitleB", "Contents B"); - WikiPageInfo pagePrivC = WIKI_SERVICE.createWikiPage( - ALTERNATE_WIKI_SITE.getShortName(), "PrivTitleC", "Contents C"); - testNodesToTidy.add(pagePrivA.getNodeRef()); - testNodesToTidy.add(pagePrivB.getNodeRef()); - testNodesToTidy.add(pagePrivC.getNodeRef()); - AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER); - - - // Check again, as we're not in the 2nd site won't see any there - results = WIKI_SERVICE.listWikiPages(WIKI_SITE.getShortName(), paging); - assertEquals(2, results.getPage().size()); - results = WIKI_SERVICE.listWikiPages(ALTERNATE_WIKI_SITE.getShortName(), paging); - assertEquals(0, results.getPage().size()); - - - // Join the site, now we can see both - TRANSACTION_HELPER.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback() - { - @Override - public Void execute() throws Throwable - { - AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER); - SITE_SERVICE.setMembership(ALTERNATE_WIKI_SITE.getShortName(), TEST_USER, SiteModel.SITE_COLLABORATOR); - AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER); - return null; - } - }); - - results = WIKI_SERVICE.listWikiPages(WIKI_SITE.getShortName(), paging); - assertEquals(2, results.getPage().size()); - results = WIKI_SERVICE.listWikiPages(ALTERNATE_WIKI_SITE.getShortName(), paging); - assertEquals(3, results.getPage().size()); - - - // Explicitly remove their permissions from one node, check it vanishes from the list - PERMISSION_SERVICE.setInheritParentPermissions(pagePrivC.getNodeRef(), false); - PERMISSION_SERVICE.clearPermission(pagePrivC.getNodeRef(), TEST_USER); - - results = WIKI_SERVICE.listWikiPages(WIKI_SITE.getShortName(), paging); - assertEquals(2, results.getPage().size()); - results = WIKI_SERVICE.listWikiPages(ALTERNATE_WIKI_SITE.getShortName(), paging); - assertEquals(2, results.getPage().size()); - - - // Leave, they go away again - TRANSACTION_HELPER.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback() - { - @Override - public Void execute() throws Throwable - { - AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER); - SITE_SERVICE.removeMembership(ALTERNATE_WIKI_SITE.getShortName(), TEST_USER); - AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER); - return null; - } - }); - - results = WIKI_SERVICE.listWikiPages(WIKI_SITE.getShortName(), paging); - assertEquals(2, results.getPage().size()); - results = WIKI_SERVICE.listWikiPages(ALTERNATE_WIKI_SITE.getShortName(), paging); - assertEquals(0, results.getPage().size()); - - - // Tidy - paging = new PagingRequest(10); - AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER); - results = WIKI_SERVICE.listWikiPages(WIKI_SITE.getShortName(), paging); - for (WikiPageInfo link : results.getPage()) - { - PUBLIC_NODE_SERVICE.deleteNode(link.getNodeRef()); - } - results = WIKI_SERVICE.listWikiPages(ALTERNATE_WIKI_SITE.getShortName(), paging); - for (WikiPageInfo link : results.getPage()) - { - PUBLIC_NODE_SERVICE.deleteNode(link.getNodeRef()); - } - } - - - // -------------------------------------------------------------------------------- - - - /** - * Alters the created date on a wiki page for testing - */ - private void pushAuditableDatesBack(WikiPageInfo page, int createdDaysAgo, int modifiedDaysAgo) throws Exception - { - final NodeRef node = page.getNodeRef(); - - final Date created = page.getCreatedAt(); - final Date newCreated = new Date(created.getTime() - createdDaysAgo*ONE_DAY_MS); - final Date modified = page.getModifiedAt(); - final Date newModified = new Date(modified.getTime() - modifiedDaysAgo*ONE_DAY_MS); - - // Update the created date - TRANSACTION_HELPER.doInTransaction(new RetryingTransactionCallback() - { - @Override - public Void execute() throws Throwable - { - BEHAVIOUR_FILTER.disableBehaviour(ContentModel.ASPECT_AUDITABLE); - NODE_SERVICE.setProperty(node, ContentModel.PROP_CREATED, newCreated); - NODE_SERVICE.setProperty(node, ContentModel.PROP_MODIFIED, newModified); - return null; - } - }, false, true); - - // Change something else too in the public nodeservice, to force a re-index - TRANSACTION_HELPER.doInTransaction(new RetryingTransactionCallback() - { - @Override - public Void execute() throws Throwable - { - BEHAVIOUR_FILTER.disableBehaviour(ContentModel.ASPECT_AUDITABLE); - PUBLIC_NODE_SERVICE.setProperty(node, ContentModel.PROP_CREATED, newCreated); - PUBLIC_NODE_SERVICE.setProperty(node, ContentModel.PROP_MODIFIED, newModified); - PUBLIC_NODE_SERVICE.setProperty(node, ContentModel.PROP_DESCRIPTION, "Forced Change"); - return null; - } - }, false, true); - - // Check it was taken - TRANSACTION_HELPER.doInTransaction(new RetryingTransactionCallback() - { - @Override - public Void execute() throws Throwable - { - assertEquals(newCreated, NODE_SERVICE.getProperty(node, ContentModel.PROP_CREATED)); - assertEquals(newCreated, PUBLIC_NODE_SERVICE.getProperty(node, ContentModel.PROP_CREATED)); - assertEquals(newModified, NODE_SERVICE.getProperty(node, ContentModel.PROP_MODIFIED)); - assertEquals(newModified, PUBLIC_NODE_SERVICE.getProperty(node, ContentModel.PROP_MODIFIED)); - return null; - } - }, false, true); - - // Update the object itself - ((WikiPageInfoImpl)page).setCreatedAt(newCreated); - ((WikiPageInfoImpl)page).setModifiedAt(newModified); - } - - private static void createTestSites() throws Exception - { - final WikiServiceImpl privateWikiPageService = (WikiServiceImpl)testContext.getBean("wikiService"); - - WIKI_SITE = TRANSACTION_HELPER.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback() - { - @Override - public SiteInfo execute() throws Throwable - { - SiteInfo site = SITE_SERVICE.createSite( - TEST_SITE_PREFIX, - WikiServiceImplTest.class.getSimpleName() + "_testSite" + System.currentTimeMillis(), - "test site title", "test site description", - SiteVisibility.PUBLIC); - privateWikiPageService.getSiteWikiContainer(site.getShortName(), true); - CLASS_TEST_NODES_TO_TIDY.add(site.getNodeRef()); - return site; - } - }); - - // Create the alternate site as admin - AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER); - ALTERNATE_WIKI_SITE = TRANSACTION_HELPER.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback() - { - @Override - public SiteInfo execute() throws Throwable - { - SiteInfo site = SITE_SERVICE.createSite( - TEST_SITE_PREFIX, - WikiServiceImplTest.class.getSimpleName() + "_testAltSite" + System.currentTimeMillis(), - "alternate site title", "alternate site description", - SiteVisibility.PRIVATE); - privateWikiPageService.getSiteWikiContainer(site.getShortName(), true); - CLASS_TEST_NODES_TO_TIDY.add(site.getNodeRef()); - return site; - } - }); - AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER); - } - - /** - * By default, all tests are run as the admin user. - */ - @Before public void setAdminUser() - { - AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER); - } - - @After public void deleteTestNodes() throws Exception - { - performDeletionOfNodes(testNodesToTidy); - } - - @AfterClass public static void deleteClassTestNodesAndUsers() throws Exception - { - performDeletionOfNodes(CLASS_TEST_NODES_TO_TIDY); - deleteUser(TEST_USER); - } - - /** - * Deletes the specified NodeRefs, if they exist. - * @param nodesToDelete - */ - private static void performDeletionOfNodes(final List nodesToDelete) - { - TRANSACTION_HELPER.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback() - { - @Override - public Void execute() throws Throwable - { - AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER); - - for (NodeRef node : nodesToDelete) - { - if (NODE_SERVICE.exists(node)) - { - // st:site nodes can only be deleted via the SiteService - if (NODE_SERVICE.getType(node).equals(SiteModel.TYPE_SITE)) - { - - SiteInfo siteInfo = SITE_SERVICE.getSite(node); - SITE_SERVICE.deleteSite(siteInfo.getShortName()); - } - else - { - NODE_SERVICE.deleteNode(node); - } - } - } - - return null; - } - }); - } - - private static void createUser(final String userName) - { - TRANSACTION_HELPER.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback() - { - @Override - public Void execute() throws Throwable - { - if (!AUTHENTICATION_SERVICE.authenticationExists(userName)) - { - AUTHENTICATION_SERVICE.createAuthentication(userName, "PWD".toCharArray()); - } - - if (!PERSON_SERVICE.personExists(userName)) - { - PropertyMap ppOne = new PropertyMap(); - ppOne.put(ContentModel.PROP_USERNAME, userName); - ppOne.put(ContentModel.PROP_FIRSTNAME, "firstName"); - ppOne.put(ContentModel.PROP_LASTNAME, "lastName"); - ppOne.put(ContentModel.PROP_EMAIL, "email@email.com"); - ppOne.put(ContentModel.PROP_JOBTITLE, "jobTitle"); - - PERSON_SERVICE.createPerson(ppOne); - } - - return null; - } - }); - } - - private static void deleteUser(final String userName) - { - TRANSACTION_HELPER.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback() - { - @Override - public Void execute() throws Throwable - { - if (PERSON_SERVICE.personExists(userName)) - { - PERSON_SERVICE.deletePerson(userName); - } - - return null; - } - }); - } -}