From 7164253241f481e50ccde7625e4328fd0bf426b1 Mon Sep 17 00:00:00 2001 From: Tom Page Date: Mon, 4 Dec 2017 14:15:40 +0000 Subject: [PATCH 01/14] Update Alfresco dependency to 5.0.4. --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 649a8bbc0b..8e53f4b5fa 100644 --- a/pom.xml +++ b/pom.xml @@ -65,7 +65,7 @@ org.alfresco alfresco-platform-distribution - 5.0.2 + 5.0.4 pom import @@ -89,7 +89,7 @@ - 5.0.2 + 5.0.4 org.postgresql.Driver From eb935954e9207bbb5e4601533f5b8a6443547cf2 Mon Sep 17 00:00:00 2001 From: Tom Page Date: Wed, 6 Dec 2017 09:33:02 +0000 Subject: [PATCH 02/14] Revert "Update Alfresco dependency to 5.0.4." This reverts commit 7164253241f481e50ccde7625e4328fd0bf426b1. --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 8e53f4b5fa..649a8bbc0b 100644 --- a/pom.xml +++ b/pom.xml @@ -65,7 +65,7 @@ org.alfresco alfresco-platform-distribution - 5.0.4 + 5.0.2 pom import @@ -89,7 +89,7 @@ - 5.0.4 + 5.0.2 org.postgresql.Driver From ce1e6fe7d295c0daf8eed0a84b005060afed17b4 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Wed, 6 Dec 2017 10:04:25 +0000 Subject: [PATCH 03/14] RM-5878: Replace ~/slingshot/search/live-search.lib.js in RM to exclude RM specific document types from live search results. --- .../slingshot/search/live-search.lib.js | 307 ++++++++++++++++++ 1 file changed, 307 insertions(+) create mode 100644 rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/search/live-search.lib.js diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/search/live-search.lib.js b/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/search/live-search.lib.js new file mode 100644 index 0000000000..f10d461d6e --- /dev/null +++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/search/live-search.lib.js @@ -0,0 +1,307 @@ +/* + * #%L + * Alfresco Records Management Module + * %% + * Copyright (C) 2005 - 2017 Alfresco Software Limited + * %% + * This file is part of the Alfresco software. + * - + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * - + * 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 . + * #L% + */ + +/** + * NOTE: This file is a copy of the ~/slingshot/search/live-search.lib.js from core repository code and replaces that + * file when built with RM, in order to exclude some RM specific files from live search results. Ideally, any changes + * to the core file should be replicated here. + */ + +/** + * Live Search Component + * + * Takes the following object as Input: + * params + * { + * type: search mode type - one of "documents|sites|people" + * term: search terms + * maxResults: maximum results to return + * }; + * + * Outputs: + * items - Array of objects containing the search results + */ + +const DEFAULT_MAX_RESULTS = 5; +const SITES_SPACE_QNAME_PATH = "/app:company_home/st:sites/"; +const SURF_CONFIG_QNAMEPATH = "/cm:surf-config/"; + +/** + * Returns site information data structure. + * { shortName: siteId, title: title } + * + * Caches the data to avoid repeatedly querying the repository. + */ +var siteDataCache = {}; + +function getSiteData(siteId) { + if (typeof siteDataCache[siteId] === "object") + { + return siteDataCache[siteId]; + } + var site = siteService.getSite(siteId); + var data = + { + shortName: siteId, + title: (site !== null ? site.title : "unknown") + }; + siteDataCache[siteId] = data; + return data; +} + +/** + * Return the fts-alfresco query template to use. + * The default searches name, title, descripton, calendar, link, full text and tag fields. + * It is configurable via the .config.xml attached to this webscript. + */ +function getQueryTemplate() { + var t = + [{ + field: "keywords", + template: "%(cm:name cm:title cm:description TEXT TAG)" + }], + qt = new XML(config.script)["default-query-template"]; + if (qt != null && qt.length() != 0) + { + t[0].template = qt.toString(); + } + return t; +} + +/** + * Process and return a document item node + */ +function getDocumentItem(container, node) { + // check whether this is a valid folder or a file + var item = null; + if (node.qnamePath.indexOf(SURF_CONFIG_QNAMEPATH) === -1) + { + if (node.isDocument) + { + item = + { + nodeRef: node.nodeRef.toString(), + name: node.name, + title: node.properties["cm:title"], + description: node.properties["cm:description"], + modifiedOn: node.properties["cm:modified"], + modifiedBy: node.properties["cm:modifier"], + createdOn: node.properties["cm:created"], + createdBy: node.properties["cm:creator"], + mimetype: node.mimetype, + size: node.size + }; + if (container.siteId !== null) + { + item.site = getSiteData(container.siteId); + item.container = container.containerId; + } + if (node.hasAspect("{http://www.alfresco.org/model/content/1.0}thumbnailModification")) + { + var dates = node.properties["lastThumbnailModification"]; + for (var i = 0; i < dates.length; i++) + { + if (dates[i].indexOf("doclib") !== -1) + { + item.lastThumbnailModification = dates[i]; + break; + } + } + } + } + } + + return item; +} + +/** + * Splits the qname path to a node. + * + * Returns container meta object containing the following properties: + * siteId + * containerId + */ +function splitQNamePath(node) { + var path = node.qnamePath, + container = { + siteId: null, + containerId: null + }; + + if (path.match("^" + SITES_SPACE_QNAME_PATH) == SITES_SPACE_QNAME_PATH) + { + var tmp = path.substring(SITES_SPACE_QNAME_PATH.length), + pos = tmp.indexOf('/'); + if (pos >= 1) + { + var siteQName = Packages.org.alfresco.util.ISO9075.decode(tmp.split("/")[0]); + siteId = siteQName.substring(siteQName.indexOf(":") + 1); + tmp = tmp.substring(pos + 1); + pos = tmp.indexOf('/'); + if (pos >= 1) + { + // strip container id from the path + var containerId = tmp.substring(0, pos); + containerId = containerId.substring(containerId.indexOf(":") + 1); + + container.siteId = siteId; + container.containerId = containerId; + } + } + } + + return container; +} + +/** + * Dispatch a live search to the appropriate search method for the requested result type. + */ +function liveSearch(params) { + switch (params.type) + { + case "documents": + return getDocResults(params); + break; + case "sites": + return getSiteResults(params); + break; + case "people": + return getPeopleResults(params); + break; + } +} + +/** + * Return Document Search results with the given search terms. + * + * "AND" is the default operator unless configured otherwise, OR, AND and NOT are also supported - + * as is any other valid fts-alfresco elements such as "quoted terms" and (bracket terms) and also + * propname:propvalue syntax. + * + * @param params Object containing search parameters - see API description above + */ +function getDocResults(params) { + // ensure a TYPE is specified + var ftsQuery = params.term + ' AND +TYPE:"cm:content"'; + + // root node - generally used for overridden Repository root in Share + if (params.rootNode !== null) + { + ftsQuery = 'PATH:"' + rootNode.qnamePath + '//*" AND (' + ftsQuery + ')'; + } + ftsQuery = '(' + ftsQuery + ') AND -TYPE:"cm:thumbnail" AND -TYPE:"cm:failedThumbnail" AND -TYPE:"cm:rating" AND -TYPE:"fm:post" AND -ASPECT:"sys:hidden" AND -ASPECT:"rma:savedSearch" AND -cm:creator:system'; + + if (logger.isLoggingEnabled()) + logger.log("LiveQuery:\r\n" + ftsQuery); + + // get default fts operator from the config + // + // TODO: common search lib - for both live and standard e.g. to get values like this... + // + var operator = "AND"; + var cf = new XML(config.script)["default-operator"]; + if (cf != null && cf.length != 0) + { + operator = cf.toString(); + } + + // perform fts-alfresco language query + var queryDef = { + query: ftsQuery, + language: "fts-alfresco", + templates: getQueryTemplate(), + defaultField: "keywords", + defaultOperator: operator, + onerror: "no-results", + page: { + maxItems: params.maxResults, + skipCount: params.startIndex + } + }; + var rs = search.queryResultSet(queryDef); + nodes = rs.nodes, + results = []; + + if (logger.isLoggingEnabled()) + logger.log("Processing resultset of length: " + nodes.length); + + for (var i = 0, item; i < nodes.length && i < params.maxResults; i++) + { + // For each node we extract the site/container qname path and then + // let the per-container helper function decide what to do. + try + { + item = getDocumentItem(splitQNamePath(nodes[i]), nodes[i]); + if (item !== null) + { + results.push(item); + } + } + catch (e) + { + if (logger.isWarnLoggingEnabled() == true) + { + logger.warn("live-search.lib.js: Skipping node due to exception when processing query result: " + e); + logger.warn("..." + nodes[i].nodeRef); + } + } + } + + return buildResults(results, params, rs.meta.hasMore); +} + +/** + * Return Site Search results with the given search terms. + * + * @param params Object containing search parameters - see API description above + */ +function getSiteResults(params) { + // Get the list of sites - ensure we use the faster fts based search code path + var t = params.term; + var sites = siteService.findSites(t, params.maxResults); + return buildResults(sites, params); +} + +/** + * Return People Search results with the given search terms. + * + * @param params Object containing search parameters - see API description above + */ +function getPeopleResults(params) { + // Get the list of people + var persons = people.getPeople(params.term, params.maxResults); + return buildResults(persons, params); +} + +function buildResults(data, params, more) { + return { + totalRecords: data.length, + startIndex: params.startIndex, + hasMoreRecords: more, + items: data + }; +} From 56dc5edfa755c69c181a766259d174cb6bbbe92d Mon Sep 17 00:00:00 2001 From: Ross Gale Date: Wed, 6 Dec 2017 14:28:26 +0000 Subject: [PATCH 04/14] RM-5931 Adding transaction fix for integration test --- .../test/integration/hold/DeleteHoldTest.java | 151 ++++++++++-------- 1 file changed, 83 insertions(+), 68 deletions(-) diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/hold/DeleteHoldTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/hold/DeleteHoldTest.java index 9265531132..7c55b2b958 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/hold/DeleteHoldTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/hold/DeleteHoldTest.java @@ -82,101 +82,116 @@ public class DeleteHoldTest extends BaseRMTestCase public void testDeleteHoldBehaviourForRecordFolder() { + NodeRef hold1 = doTestInTransaction(new Test() + { + @Override + public NodeRef run() throws Exception + { + // create test holds + return createAndCheckHold(); + } + }); + //Splitting transaction to fix onCreateNodePolicy issue where there was a node not found exception doTestInTransaction(new Test() { - @Override - public Void run() throws Exception - { - // create test holds - NodeRef hold1 = createAndCheckHold(); + @Override + public Void run() throws Exception + { + // add the record folder to hold1 + holdService.addToHold(hold1, rmFolder); - // add the record folder to hold1 - holdService.addToHold(hold1, rmFolder); + // assert that the folder and records are frozen + assertTrue(freezeService.isFrozen(rmFolder)); + assertTrue(freezeService.isFrozen(recordOne)); + assertTrue(freezeService.isFrozen(recordDeclaredOne)); - // assert that the folder and records are frozen - assertTrue(freezeService.isFrozen(rmFolder)); - assertTrue(freezeService.isFrozen(recordOne)); - assertTrue(freezeService.isFrozen(recordDeclaredOne)); + // check the contents of the hold + List frozenNodes = holdService.getHeld(hold1); + assertNotNull(frozenNodes); + assertEquals(1, frozenNodes.size()); + assertEquals(rmFolder, frozenNodes.get(0)); - // check the contents of the hold - List frozenNodes = holdService.getHeld(hold1); - assertNotNull(frozenNodes); - assertEquals(1, frozenNodes.size()); - assertEquals(rmFolder, frozenNodes.get(0)); + // delete the hold + holdService.deleteHold(hold1); - // delete the hold - holdService.deleteHold(hold1); + // assert that the folder and records no longer frozen + assertFalse(freezeService.isFrozen(rmFolder)); + assertFalse(freezeService.isFrozen(recordOne)); + assertFalse(freezeService.isFrozen(recordDeclaredOne)); - // assert that the folder and records no longer frozen - assertFalse(freezeService.isFrozen(rmFolder)); - assertFalse(freezeService.isFrozen(recordOne)); - assertFalse(freezeService.isFrozen(recordDeclaredOne)); + // confirm the hold has been deleted + assertNull(holdService.getHold(filePlan, "hold one")); - // confirm the hold has been deleted - assertNull(holdService.getHold(filePlan, "hold one")); - - return null; - } + return null; + } }); } public void testDeleteHoldBehaviourForMultipleHolds() { + List holds = doTestInTransaction(new Test>() + { + @Override + public List run() throws Exception + { + // create test holds + return createAndCheckHolds(); + } + }); + //Splitting transaction to fix onCreateNodePolicy issue where there was a node not found exception doTestInTransaction(new Test() { - @Override - public Void run() throws Exception - { - // create test holds - List holds = createAndCheckHolds(); - NodeRef hold1 = holds.get(0); - NodeRef hold2 = holds.get(1); + @Override + public Void run() throws Exception + { + NodeRef hold1 = holds.get(0); + NodeRef hold2 = holds.get(1); - // add the record folder to hold1 - holdService.addToHold(hold1, rmFolder); + // add the record folder to hold1 + holdService.addToHold(hold1, rmFolder); - // assert that the folder and records are frozen - assertTrue(freezeService.isFrozen(rmFolder)); - assertTrue(freezeService.isFrozen(recordOne)); - assertTrue(freezeService.isFrozen(recordDeclaredOne)); + // assert that the folder and records are frozen + assertTrue(freezeService.isFrozen(rmFolder)); + assertTrue(freezeService.isFrozen(recordOne)); + assertTrue(freezeService.isFrozen(recordDeclaredOne)); - // check the contents of the hold - List frozenNodes = holdService.getHeld(hold1); - assertNotNull(frozenNodes); - assertEquals(1, frozenNodes.size()); - assertEquals(rmFolder, frozenNodes.get(0)); + // check the contents of the hold + List frozenNodes = holdService.getHeld(hold1); + assertNotNull(frozenNodes); + assertEquals(1, frozenNodes.size()); + assertEquals(rmFolder, frozenNodes.get(0)); - holdService.addToHold(hold2, recordOne); + holdService.addToHold(hold2, recordOne); - // assert that the folder and records are frozen - assertTrue(freezeService.isFrozen(rmFolder)); - assertTrue(freezeService.isFrozen(recordOne)); - assertTrue(freezeService.isFrozen(recordDeclaredOne)); + // assert that the folder and records are frozen + assertTrue(freezeService.isFrozen(rmFolder)); + assertTrue(freezeService.isFrozen(recordOne)); + assertTrue(freezeService.isFrozen(recordDeclaredOne)); - // delete the hold - holdService.deleteHold(hold1); + // delete the hold + holdService.deleteHold(hold1); - // assert that the folder and records no longer frozen - assertFalse(freezeService.isFrozen(rmFolder)); - assertTrue(freezeService.isFrozen(recordOne)); - assertFalse(freezeService.isFrozen(recordDeclaredOne)); + // assert that the folder and records no longer frozen + assertFalse(freezeService.isFrozen(rmFolder)); + assertTrue(freezeService.isFrozen(recordOne)); + assertFalse(freezeService.isFrozen(recordDeclaredOne)); - // confirm the hold has been deleted - assertNull(holdService.getHold(filePlan, "hold one")); + // confirm the hold has been deleted + assertNull(holdService.getHold(filePlan, "hold one")); - // delete the hold - holdService.deleteHold(hold2); + // delete the hold + holdService.deleteHold(hold2); - // assert that the folder and records no longer frozen - assertFalse(freezeService.isFrozen(rmFolder)); - assertFalse(freezeService.isFrozen(recordOne)); - assertFalse(freezeService.isFrozen(recordDeclaredOne)); + // assert that the folder and records no longer frozen + assertFalse(freezeService.isFrozen(rmFolder)); + assertFalse(freezeService.isFrozen(recordOne)); + assertFalse(freezeService.isFrozen(recordDeclaredOne)); - // confirm the hold has been deleted - assertNull(holdService.getHold(filePlan, "hold two")); + // confirm the hold has been deleted + assertNull(holdService.getHold(filePlan, "hold two")); - return null; - } + return null; + } }); } From bee7149e8bef4b259a7a6e4b6ddfa1a68041b7f5 Mon Sep 17 00:00:00 2001 From: Tom Page Date: Wed, 6 Dec 2017 14:40:00 +0000 Subject: [PATCH 05/14] Revert "Revert "Update Alfresco dependency to 5.0.4."" This reverts commit eb935954e9207bbb5e4601533f5b8a6443547cf2. --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 649a8bbc0b..8e53f4b5fa 100644 --- a/pom.xml +++ b/pom.xml @@ -65,7 +65,7 @@ org.alfresco alfresco-platform-distribution - 5.0.2 + 5.0.4 pom import @@ -89,7 +89,7 @@ - 5.0.2 + 5.0.4 org.postgresql.Driver From 826d6e761053d52ad1ba2520abf543551f6e1e3b Mon Sep 17 00:00:00 2001 From: Ross Gale Date: Wed, 6 Dec 2017 15:57:39 +0000 Subject: [PATCH 06/14] RM-5931 Adding transaction fix for integration test --- .../test/integration/issue/RM1914Test.java | 69 +++++++++---------- .../legacy/service/FreezeServiceImplTest.java | 66 +++++++++++++----- 2 files changed, 82 insertions(+), 53 deletions(-) diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM1914Test.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM1914Test.java index 3961fabe33..d7e4256f04 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM1914Test.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM1914Test.java @@ -42,30 +42,29 @@ import org.apache.commons.lang.StringUtils; */ public class RM1914Test extends BaseRMTestCase { - + + //Fields required across transactions + NodeRef record1, transferFolder; + public void testRM1914() throws Exception { doBehaviourDrivenTest(new BehaviourDrivenTest() { - - NodeRef record1; - NodeRef record2; public void given() { - // 1. Any Category1, Category2 are created + + // create test holds NodeRef category1 = filePlanService.createRecordCategory(filePlan, GUID.generate()); NodeRef category2 = filePlanService.createRecordCategory(filePlan, GUID.generate()); - - - // 2. Disposition schedule is created for the Category1: - // - applied on Record + Map dsProps = new HashMap(3); dsProps.put(PROP_DISPOSITION_AUTHORITY, CommonRMTestUtils.DEFAULT_DISPOSITION_AUTHORITY); dsProps.put(PROP_DISPOSITION_INSTRUCTIONS, GUID.generate()); dsProps.put(PROP_RECORD_LEVEL_DISPOSITION, true); - - DispositionSchedule dispositionSchedule1 = dispositionService.createDispositionSchedule(category1, dsProps); + DispositionSchedule dispositionSchedule1 = dispositionService.createDispositionSchedule(category1, + dsProps); + NodeRef folder1 = recordFolderService.createRecordFolder(category1, GUID.generate()); // - add cutoff after "Related Record Transferred To Inactive Storage" completion event Map dispositionAction1 = new HashMap(3); @@ -73,67 +72,67 @@ public class RM1914Test extends BaseRMTestCase dispositionAction1.put(PROP_DISPOSITION_DESCRIPTION, GUID.generate()); List events = new ArrayList(1); - events.add("related_record_trasfered_inactive_storage"); - dispositionAction1.put(PROP_DISPOSITION_EVENT, (Serializable)events); + events.add("related_record_trasfered_inactive_storage"); + dispositionAction1.put(PROP_DISPOSITION_EVENT, (Serializable) events); dispositionService.addDispositionActionDefinition(dispositionSchedule1, dispositionAction1); - - + // 3. Folder1 > Record1 is created inside Category1 - NodeRef folder1 = recordFolderService.createRecordFolder(category1, GUID.generate()); record1 = recordService.createRecordFromContent(folder1, GUID.generate(), TYPE_CONTENT, null, null); - - - // 4. Disposition schedule is created for the Category2: + + // 4. Disposition schedule is created for the Category2: // applied on Record - DispositionSchedule dispositionSchedule2 = dispositionService.createDispositionSchedule(category2, dsProps); - + DispositionSchedule dispositionSchedule2 = dispositionService.createDispositionSchedule(category2, + dsProps); + // - cutoff immediatelly Map dispositionAction2_1 = new HashMap(3); dispositionAction2_1.put(PROP_DISPOSITION_ACTION_NAME, CutOffAction.NAME); dispositionAction2_1.put(PROP_DISPOSITION_DESCRIPTION, GUID.generate()); - dispositionAction2_1.put(PROP_DISPOSITION_PERIOD, CommonRMTestUtils.PERIOD_IMMEDIATELY); + dispositionAction2_1.put(PROP_DISPOSITION_PERIOD, CommonRMTestUtils.PERIOD_IMMEDIATELY); dispositionService.addDispositionActionDefinition(dispositionSchedule2, dispositionAction2_1); - + // - Transfer Immediatelly Map dispositionAction2_2 = new HashMap(4); dispositionAction2_2.put(PROP_DISPOSITION_ACTION_NAME, TransferAction.NAME); dispositionAction2_2.put(PROP_DISPOSITION_DESCRIPTION, GUID.generate()); dispositionAction2_2.put(PROP_DISPOSITION_PERIOD, CommonRMTestUtils.PERIOD_IMMEDIATELY); dispositionAction2_2.put(PROP_DISPOSITION_LOCATION, StringUtils.EMPTY); - + dispositionService.addDispositionActionDefinition(dispositionSchedule2, dispositionAction2_2); - // 5. Folder2 > Record2 is created inside Category2 NodeRef folder2 = recordFolderService.createRecordFolder(category2, GUID.generate()); - record2 = recordService.createRecordFromContent(folder2, GUID.generate(), TYPE_CONTENT, null, null); - + NodeRef record2 = recordService.createRecordFromContent(folder2, GUID.generate(), TYPE_CONTENT, null, + null); + // 6. Record1 and Record2 are completed utils.completeRecord(record1); utils.completeRecord(record2); - // 7. Create Cross-Reference link from Record1 to Record2 relationshipService.addRelationship(CUSTOM_REF_CROSSREFERENCE.getLocalName(), record1, record2); + // 8. Cut off and transfer Record2 + rmActionService.executeRecordsManagementAction(record2, CutOffAction.NAME, null); + + transferFolder = (NodeRef) rmActionService.executeRecordsManagementAction(record2, TransferAction.NAME) + .getValue(); - } public void when() { - // 8. Cut off and transfer Record2 - rmActionService.executeRecordsManagementAction(record2, CutOffAction.NAME, null); - NodeRef transferFolder = (NodeRef) rmActionService.executeRecordsManagementAction(record2, TransferAction.NAME).getValue(); + rmActionService.executeRecordsManagementAction(transferFolder, TransferCompleteAction.NAME); - + } public void then() { - // 9. Verify Record1 + // 9. Verify Record1 assertTrue(dispositionService.isNextDispositionActionEligible(record1)); - + } }); + } } diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/FreezeServiceImplTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/FreezeServiceImplTest.java index 6a149b8232..6e14666087 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/FreezeServiceImplTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/FreezeServiceImplTest.java @@ -34,19 +34,22 @@ import org.alfresco.service.cmr.repository.NodeRef; */ public class FreezeServiceImplTest extends BaseRMTestCase { + private List holdAssocs; + @Override - protected boolean isRecordTest() - { - return true; - } + protected boolean isRecordTest() + { + return true; + } /** * Test freeze service methods. - * + * * @deprecated as of 2.2 */ public void testFreezeService() throws Exception { + doTestInTransaction(new Test() { @Override @@ -63,19 +66,25 @@ public class FreezeServiceImplTest extends BaseRMTestCase // Freeze a record NodeRef hold101 = holdService.createHold(filePlan, "freezename 101", "FreezeReason", null); + assertNotNull(hold101); holdService.addToHold(hold101, recordOne); + //assertTrue(freezeService.hasFrozenChildren(rmFolder)); // Check the hold exists - List holdAssocs = holdService.getHolds(filePlan); + holdAssocs = holdService.getHolds(filePlan); assertNotNull(holdAssocs); assertEquals(1, holdAssocs.size()); - NodeRef holdNodeRef = holdAssocs.iterator().next(); + + NodeRef holdNodeRef = holdAssocs.iterator() + .next(); + assertEquals(holdNodeRef, hold101); assertTrue(holdService.isHold(holdNodeRef)); assertEquals("FreezeReason", holdService.getHoldReason(holdNodeRef)); List frozenNodes = holdService.getHeld(holdNodeRef); + assertNotNull(frozenNodes); assertEquals(1, frozenNodes.size()); @@ -98,6 +107,7 @@ public class FreezeServiceImplTest extends BaseRMTestCase records.add(recordTwo); records.add(recordThree); NodeRef newHold = holdService.createHold(filePlan, "Hold 102", "Freeze a set of nodes", null); + holdService.addToHold(newHold, records); assertNotNull(newHold); assertTrue(holdService.isHold(newHold)); @@ -106,6 +116,7 @@ public class FreezeServiceImplTest extends BaseRMTestCase holdAssocs = holdService.getHolds(filePlan); assertNotNull(holdAssocs); assertEquals(2, holdAssocs.size()); + for (NodeRef hold : holdAssocs) { String reason = holdService.getHoldReason(hold); @@ -129,7 +140,7 @@ public class FreezeServiceImplTest extends BaseRMTestCase } // Check the nodes are frozen - final List testRecords = Arrays.asList(new NodeRef[]{recordOne, recordTwo, recordThree}); + final List testRecords = Arrays.asList(new NodeRef[] { recordOne, recordTwo, recordThree }); for (NodeRef nr : testRecords) { assertTrue(freezeService.isFrozen(nr)); @@ -139,7 +150,6 @@ public class FreezeServiceImplTest extends BaseRMTestCase // Unfreeze a node holdService.removeFromAllHolds(recordThree); - // Check the holds holdAssocs = holdService.getHolds(filePlan); assertNotNull(holdAssocs); @@ -174,9 +184,18 @@ public class FreezeServiceImplTest extends BaseRMTestCase assertNotNull(freezeService.getFreezeInitiator(recordTwo)); assertFalse(freezeService.isFrozen(recordThree)); assertFalse(freezeService.isFrozen(recordFour)); - + return null; + } + }); + //Splitting transaction to fix onCreateNodePolicy issue where there was a node not found exception + doTestInTransaction(new Test() + { + @Override + public Void run() throws Exception + { // Relinquish the first hold - holdNodeRef = holdAssocs.iterator().next(); + NodeRef holdNodeRef = holdAssocs.iterator() + .next(); holdService.deleteHold(holdNodeRef); // Check the existing hold @@ -185,15 +204,17 @@ public class FreezeServiceImplTest extends BaseRMTestCase assertEquals(1, holdAssocs.size()); // Relinquish the second hold - holdNodeRef = holdAssocs.iterator().next(); + holdNodeRef = holdAssocs.iterator() + .next(); holdService.removeFromAllHolds(holdService.getHeld(holdNodeRef)); // hold is not automatically removed holdAssocs = holdService.getHolds(filePlan); assertEquals(1, holdAssocs.size()); - + // delete hold holdService.deleteHold(holdNodeRef); + holdAssocs = holdService.getHolds(filePlan); assertEquals(0, holdAssocs.size()); @@ -212,25 +233,34 @@ public class FreezeServiceImplTest extends BaseRMTestCase nodes.add(recordTwo); nodes.add(recordThree); holdService.addToHold(hold, nodes); - //assertTrue(freezeService.hasFrozenChildren(rmFolder)); - + //assertTrue(freezeService.hasFrozenChildren(rmFolder)); // Check the hold holdAssocs = holdService.getHolds(filePlan); assertNotNull(holdAssocs); assertEquals(1, holdAssocs.size()); - + return null; + } + }); + //Splitting transaction to fix onCreateNodePolicy issue where there was a node not found exception + doTestInTransaction(new Test() + { + @Override + public Void run() throws Exception + { // Relinquish the first hold - holdService.deleteHold(holdAssocs.iterator().next()); + holdService.deleteHold(holdAssocs.iterator() + .next()); // Check the nodes are unfrozen assertFalse(freezeService.isFrozen(recordOne)); assertFalse(freezeService.isFrozen(recordTwo)); assertFalse(freezeService.isFrozen(recordThree)); assertFalse(freezeService.isFrozen(recordFour)); - // assertFalse(freezeService.hasFrozenChildren(rmFolder)); + // assertFalse(freezeService.hasFrozenChildren(rmFolder)); return null; } }); } + } From 18c954f4d45830b678573e303e8aa72e759cf5c5 Mon Sep 17 00:00:00 2001 From: Ross Gale Date: Wed, 6 Dec 2017 16:34:33 +0000 Subject: [PATCH 07/14] =?UTF-8?q?Revert=20"Merge=20branch=20'release/V2.3'?= =?UTF-8?q?=20of=E2=80=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit aed60aad031c3162a196a731f90f6f7a2a347a67 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 8e53f4b5fa..649a8bbc0b 100644 --- a/pom.xml +++ b/pom.xml @@ -65,7 +65,7 @@ org.alfresco alfresco-platform-distribution - 5.0.4 + 5.0.2 pom import @@ -89,7 +89,7 @@ - 5.0.4 + 5.0.2 org.postgresql.Driver From 5804a6285551b41e2ddad14559ae7d11f1331fe9 Mon Sep 17 00:00:00 2001 From: Ross Gale Date: Wed, 6 Dec 2017 16:34:49 +0000 Subject: [PATCH 08/14] Revert "RM-5931 Adding transaction fix for integration test" This reverts commit 826d6e761053d52ad1ba2520abf543551f6e1e3b --- .../test/integration/issue/RM1914Test.java | 69 ++++++++++--------- .../legacy/service/FreezeServiceImplTest.java | 66 +++++------------- 2 files changed, 53 insertions(+), 82 deletions(-) diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM1914Test.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM1914Test.java index d7e4256f04..3961fabe33 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM1914Test.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM1914Test.java @@ -42,29 +42,30 @@ import org.apache.commons.lang.StringUtils; */ public class RM1914Test extends BaseRMTestCase { - - //Fields required across transactions - NodeRef record1, transferFolder; - + public void testRM1914() throws Exception { doBehaviourDrivenTest(new BehaviourDrivenTest() { + + NodeRef record1; + NodeRef record2; public void given() { - - // create test holds + // 1. Any Category1, Category2 are created NodeRef category1 = filePlanService.createRecordCategory(filePlan, GUID.generate()); NodeRef category2 = filePlanService.createRecordCategory(filePlan, GUID.generate()); - + + + // 2. Disposition schedule is created for the Category1: + // - applied on Record Map dsProps = new HashMap(3); dsProps.put(PROP_DISPOSITION_AUTHORITY, CommonRMTestUtils.DEFAULT_DISPOSITION_AUTHORITY); dsProps.put(PROP_DISPOSITION_INSTRUCTIONS, GUID.generate()); dsProps.put(PROP_RECORD_LEVEL_DISPOSITION, true); - DispositionSchedule dispositionSchedule1 = dispositionService.createDispositionSchedule(category1, - dsProps); - NodeRef folder1 = recordFolderService.createRecordFolder(category1, GUID.generate()); + + DispositionSchedule dispositionSchedule1 = dispositionService.createDispositionSchedule(category1, dsProps); // - add cutoff after "Related Record Transferred To Inactive Storage" completion event Map dispositionAction1 = new HashMap(3); @@ -72,67 +73,67 @@ public class RM1914Test extends BaseRMTestCase dispositionAction1.put(PROP_DISPOSITION_DESCRIPTION, GUID.generate()); List events = new ArrayList(1); - events.add("related_record_trasfered_inactive_storage"); - dispositionAction1.put(PROP_DISPOSITION_EVENT, (Serializable) events); + events.add("related_record_trasfered_inactive_storage"); + dispositionAction1.put(PROP_DISPOSITION_EVENT, (Serializable)events); dispositionService.addDispositionActionDefinition(dispositionSchedule1, dispositionAction1); - + + // 3. Folder1 > Record1 is created inside Category1 + NodeRef folder1 = recordFolderService.createRecordFolder(category1, GUID.generate()); record1 = recordService.createRecordFromContent(folder1, GUID.generate(), TYPE_CONTENT, null, null); - - // 4. Disposition schedule is created for the Category2: + + + // 4. Disposition schedule is created for the Category2: // applied on Record - DispositionSchedule dispositionSchedule2 = dispositionService.createDispositionSchedule(category2, - dsProps); - + DispositionSchedule dispositionSchedule2 = dispositionService.createDispositionSchedule(category2, dsProps); + // - cutoff immediatelly Map dispositionAction2_1 = new HashMap(3); dispositionAction2_1.put(PROP_DISPOSITION_ACTION_NAME, CutOffAction.NAME); dispositionAction2_1.put(PROP_DISPOSITION_DESCRIPTION, GUID.generate()); - dispositionAction2_1.put(PROP_DISPOSITION_PERIOD, CommonRMTestUtils.PERIOD_IMMEDIATELY); + dispositionAction2_1.put(PROP_DISPOSITION_PERIOD, CommonRMTestUtils.PERIOD_IMMEDIATELY); dispositionService.addDispositionActionDefinition(dispositionSchedule2, dispositionAction2_1); - + // - Transfer Immediatelly Map dispositionAction2_2 = new HashMap(4); dispositionAction2_2.put(PROP_DISPOSITION_ACTION_NAME, TransferAction.NAME); dispositionAction2_2.put(PROP_DISPOSITION_DESCRIPTION, GUID.generate()); dispositionAction2_2.put(PROP_DISPOSITION_PERIOD, CommonRMTestUtils.PERIOD_IMMEDIATELY); dispositionAction2_2.put(PROP_DISPOSITION_LOCATION, StringUtils.EMPTY); - + dispositionService.addDispositionActionDefinition(dispositionSchedule2, dispositionAction2_2); + // 5. Folder2 > Record2 is created inside Category2 NodeRef folder2 = recordFolderService.createRecordFolder(category2, GUID.generate()); - NodeRef record2 = recordService.createRecordFromContent(folder2, GUID.generate(), TYPE_CONTENT, null, - null); - + record2 = recordService.createRecordFromContent(folder2, GUID.generate(), TYPE_CONTENT, null, null); + // 6. Record1 and Record2 are completed utils.completeRecord(record1); utils.completeRecord(record2); + // 7. Create Cross-Reference link from Record1 to Record2 relationshipService.addRelationship(CUSTOM_REF_CROSSREFERENCE.getLocalName(), record1, record2); - // 8. Cut off and transfer Record2 - rmActionService.executeRecordsManagementAction(record2, CutOffAction.NAME, null); - - transferFolder = (NodeRef) rmActionService.executeRecordsManagementAction(record2, TransferAction.NAME) - .getValue(); + } public void when() { - + // 8. Cut off and transfer Record2 + rmActionService.executeRecordsManagementAction(record2, CutOffAction.NAME, null); + NodeRef transferFolder = (NodeRef) rmActionService.executeRecordsManagementAction(record2, TransferAction.NAME).getValue(); rmActionService.executeRecordsManagementAction(transferFolder, TransferCompleteAction.NAME); - + } public void then() { - // 9. Verify Record1 + // 9. Verify Record1 assertTrue(dispositionService.isNextDispositionActionEligible(record1)); - + } }); - } } diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/FreezeServiceImplTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/FreezeServiceImplTest.java index 6e14666087..6a149b8232 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/FreezeServiceImplTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/FreezeServiceImplTest.java @@ -34,22 +34,19 @@ import org.alfresco.service.cmr.repository.NodeRef; */ public class FreezeServiceImplTest extends BaseRMTestCase { - private List holdAssocs; - @Override - protected boolean isRecordTest() - { - return true; - } + protected boolean isRecordTest() + { + return true; + } /** * Test freeze service methods. - * + * * @deprecated as of 2.2 */ public void testFreezeService() throws Exception { - doTestInTransaction(new Test() { @Override @@ -66,25 +63,19 @@ public class FreezeServiceImplTest extends BaseRMTestCase // Freeze a record NodeRef hold101 = holdService.createHold(filePlan, "freezename 101", "FreezeReason", null); - assertNotNull(hold101); holdService.addToHold(hold101, recordOne); - //assertTrue(freezeService.hasFrozenChildren(rmFolder)); // Check the hold exists - holdAssocs = holdService.getHolds(filePlan); + List holdAssocs = holdService.getHolds(filePlan); assertNotNull(holdAssocs); assertEquals(1, holdAssocs.size()); - - NodeRef holdNodeRef = holdAssocs.iterator() - .next(); - + NodeRef holdNodeRef = holdAssocs.iterator().next(); assertEquals(holdNodeRef, hold101); assertTrue(holdService.isHold(holdNodeRef)); assertEquals("FreezeReason", holdService.getHoldReason(holdNodeRef)); List frozenNodes = holdService.getHeld(holdNodeRef); - assertNotNull(frozenNodes); assertEquals(1, frozenNodes.size()); @@ -107,7 +98,6 @@ public class FreezeServiceImplTest extends BaseRMTestCase records.add(recordTwo); records.add(recordThree); NodeRef newHold = holdService.createHold(filePlan, "Hold 102", "Freeze a set of nodes", null); - holdService.addToHold(newHold, records); assertNotNull(newHold); assertTrue(holdService.isHold(newHold)); @@ -116,7 +106,6 @@ public class FreezeServiceImplTest extends BaseRMTestCase holdAssocs = holdService.getHolds(filePlan); assertNotNull(holdAssocs); assertEquals(2, holdAssocs.size()); - for (NodeRef hold : holdAssocs) { String reason = holdService.getHoldReason(hold); @@ -140,7 +129,7 @@ public class FreezeServiceImplTest extends BaseRMTestCase } // Check the nodes are frozen - final List testRecords = Arrays.asList(new NodeRef[] { recordOne, recordTwo, recordThree }); + final List testRecords = Arrays.asList(new NodeRef[]{recordOne, recordTwo, recordThree}); for (NodeRef nr : testRecords) { assertTrue(freezeService.isFrozen(nr)); @@ -150,6 +139,7 @@ public class FreezeServiceImplTest extends BaseRMTestCase // Unfreeze a node holdService.removeFromAllHolds(recordThree); + // Check the holds holdAssocs = holdService.getHolds(filePlan); assertNotNull(holdAssocs); @@ -184,18 +174,9 @@ public class FreezeServiceImplTest extends BaseRMTestCase assertNotNull(freezeService.getFreezeInitiator(recordTwo)); assertFalse(freezeService.isFrozen(recordThree)); assertFalse(freezeService.isFrozen(recordFour)); - return null; - } - }); - //Splitting transaction to fix onCreateNodePolicy issue where there was a node not found exception - doTestInTransaction(new Test() - { - @Override - public Void run() throws Exception - { + // Relinquish the first hold - NodeRef holdNodeRef = holdAssocs.iterator() - .next(); + holdNodeRef = holdAssocs.iterator().next(); holdService.deleteHold(holdNodeRef); // Check the existing hold @@ -204,17 +185,15 @@ public class FreezeServiceImplTest extends BaseRMTestCase assertEquals(1, holdAssocs.size()); // Relinquish the second hold - holdNodeRef = holdAssocs.iterator() - .next(); + holdNodeRef = holdAssocs.iterator().next(); holdService.removeFromAllHolds(holdService.getHeld(holdNodeRef)); // hold is not automatically removed holdAssocs = holdService.getHolds(filePlan); assertEquals(1, holdAssocs.size()); - + // delete hold holdService.deleteHold(holdNodeRef); - holdAssocs = holdService.getHolds(filePlan); assertEquals(0, holdAssocs.size()); @@ -233,34 +212,25 @@ public class FreezeServiceImplTest extends BaseRMTestCase nodes.add(recordTwo); nodes.add(recordThree); holdService.addToHold(hold, nodes); - //assertTrue(freezeService.hasFrozenChildren(rmFolder)); + //assertTrue(freezeService.hasFrozenChildren(rmFolder)); + // Check the hold holdAssocs = holdService.getHolds(filePlan); assertNotNull(holdAssocs); assertEquals(1, holdAssocs.size()); - return null; - } - }); - //Splitting transaction to fix onCreateNodePolicy issue where there was a node not found exception - doTestInTransaction(new Test() - { - @Override - public Void run() throws Exception - { + // Relinquish the first hold - holdService.deleteHold(holdAssocs.iterator() - .next()); + holdService.deleteHold(holdAssocs.iterator().next()); // Check the nodes are unfrozen assertFalse(freezeService.isFrozen(recordOne)); assertFalse(freezeService.isFrozen(recordTwo)); assertFalse(freezeService.isFrozen(recordThree)); assertFalse(freezeService.isFrozen(recordFour)); - // assertFalse(freezeService.hasFrozenChildren(rmFolder)); + // assertFalse(freezeService.hasFrozenChildren(rmFolder)); return null; } }); } - } From a4f55a4a4572d5fa0547190753a246812789a374 Mon Sep 17 00:00:00 2001 From: Ross Gale Date: Wed, 6 Dec 2017 16:35:06 +0000 Subject: [PATCH 09/14] Revert "RM-5931 Adding transaction fix for integration test" This reverts commit 56dc5edfa755c69c181a766259d174cb6bbbe92d --- .../test/integration/hold/DeleteHoldTest.java | 151 ++++++++---------- 1 file changed, 68 insertions(+), 83 deletions(-) diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/hold/DeleteHoldTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/hold/DeleteHoldTest.java index 7c55b2b958..9265531132 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/hold/DeleteHoldTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/hold/DeleteHoldTest.java @@ -82,116 +82,101 @@ public class DeleteHoldTest extends BaseRMTestCase public void testDeleteHoldBehaviourForRecordFolder() { - NodeRef hold1 = doTestInTransaction(new Test() - { - @Override - public NodeRef run() throws Exception - { - // create test holds - return createAndCheckHold(); - } - }); - //Splitting transaction to fix onCreateNodePolicy issue where there was a node not found exception doTestInTransaction(new Test() { - @Override - public Void run() throws Exception - { - // add the record folder to hold1 - holdService.addToHold(hold1, rmFolder); + @Override + public Void run() throws Exception + { + // create test holds + NodeRef hold1 = createAndCheckHold(); - // assert that the folder and records are frozen - assertTrue(freezeService.isFrozen(rmFolder)); - assertTrue(freezeService.isFrozen(recordOne)); - assertTrue(freezeService.isFrozen(recordDeclaredOne)); + // add the record folder to hold1 + holdService.addToHold(hold1, rmFolder); - // check the contents of the hold - List frozenNodes = holdService.getHeld(hold1); - assertNotNull(frozenNodes); - assertEquals(1, frozenNodes.size()); - assertEquals(rmFolder, frozenNodes.get(0)); + // assert that the folder and records are frozen + assertTrue(freezeService.isFrozen(rmFolder)); + assertTrue(freezeService.isFrozen(recordOne)); + assertTrue(freezeService.isFrozen(recordDeclaredOne)); - // delete the hold - holdService.deleteHold(hold1); + // check the contents of the hold + List frozenNodes = holdService.getHeld(hold1); + assertNotNull(frozenNodes); + assertEquals(1, frozenNodes.size()); + assertEquals(rmFolder, frozenNodes.get(0)); - // assert that the folder and records no longer frozen - assertFalse(freezeService.isFrozen(rmFolder)); - assertFalse(freezeService.isFrozen(recordOne)); - assertFalse(freezeService.isFrozen(recordDeclaredOne)); + // delete the hold + holdService.deleteHold(hold1); - // confirm the hold has been deleted - assertNull(holdService.getHold(filePlan, "hold one")); + // assert that the folder and records no longer frozen + assertFalse(freezeService.isFrozen(rmFolder)); + assertFalse(freezeService.isFrozen(recordOne)); + assertFalse(freezeService.isFrozen(recordDeclaredOne)); - return null; - } + // confirm the hold has been deleted + assertNull(holdService.getHold(filePlan, "hold one")); + + return null; + } }); } public void testDeleteHoldBehaviourForMultipleHolds() { - List holds = doTestInTransaction(new Test>() - { - @Override - public List run() throws Exception - { - // create test holds - return createAndCheckHolds(); - } - }); - //Splitting transaction to fix onCreateNodePolicy issue where there was a node not found exception doTestInTransaction(new Test() { - @Override - public Void run() throws Exception - { - NodeRef hold1 = holds.get(0); - NodeRef hold2 = holds.get(1); + @Override + public Void run() throws Exception + { + // create test holds + List holds = createAndCheckHolds(); + NodeRef hold1 = holds.get(0); + NodeRef hold2 = holds.get(1); - // add the record folder to hold1 - holdService.addToHold(hold1, rmFolder); + // add the record folder to hold1 + holdService.addToHold(hold1, rmFolder); - // assert that the folder and records are frozen - assertTrue(freezeService.isFrozen(rmFolder)); - assertTrue(freezeService.isFrozen(recordOne)); - assertTrue(freezeService.isFrozen(recordDeclaredOne)); + // assert that the folder and records are frozen + assertTrue(freezeService.isFrozen(rmFolder)); + assertTrue(freezeService.isFrozen(recordOne)); + assertTrue(freezeService.isFrozen(recordDeclaredOne)); - // check the contents of the hold - List frozenNodes = holdService.getHeld(hold1); - assertNotNull(frozenNodes); - assertEquals(1, frozenNodes.size()); - assertEquals(rmFolder, frozenNodes.get(0)); + // check the contents of the hold + List frozenNodes = holdService.getHeld(hold1); + assertNotNull(frozenNodes); + assertEquals(1, frozenNodes.size()); + assertEquals(rmFolder, frozenNodes.get(0)); - holdService.addToHold(hold2, recordOne); + holdService.addToHold(hold2, recordOne); - // assert that the folder and records are frozen - assertTrue(freezeService.isFrozen(rmFolder)); - assertTrue(freezeService.isFrozen(recordOne)); - assertTrue(freezeService.isFrozen(recordDeclaredOne)); + // assert that the folder and records are frozen + assertTrue(freezeService.isFrozen(rmFolder)); + assertTrue(freezeService.isFrozen(recordOne)); + assertTrue(freezeService.isFrozen(recordDeclaredOne)); - // delete the hold - holdService.deleteHold(hold1); + // delete the hold + holdService.deleteHold(hold1); - // assert that the folder and records no longer frozen - assertFalse(freezeService.isFrozen(rmFolder)); - assertTrue(freezeService.isFrozen(recordOne)); - assertFalse(freezeService.isFrozen(recordDeclaredOne)); + // assert that the folder and records no longer frozen + assertFalse(freezeService.isFrozen(rmFolder)); + assertTrue(freezeService.isFrozen(recordOne)); + assertFalse(freezeService.isFrozen(recordDeclaredOne)); - // confirm the hold has been deleted - assertNull(holdService.getHold(filePlan, "hold one")); + // confirm the hold has been deleted + assertNull(holdService.getHold(filePlan, "hold one")); - // delete the hold - holdService.deleteHold(hold2); + // delete the hold + holdService.deleteHold(hold2); - // assert that the folder and records no longer frozen - assertFalse(freezeService.isFrozen(rmFolder)); - assertFalse(freezeService.isFrozen(recordOne)); - assertFalse(freezeService.isFrozen(recordDeclaredOne)); + // assert that the folder and records no longer frozen + assertFalse(freezeService.isFrozen(rmFolder)); + assertFalse(freezeService.isFrozen(recordOne)); + assertFalse(freezeService.isFrozen(recordDeclaredOne)); - // confirm the hold has been deleted - assertNull(holdService.getHold(filePlan, "hold two")); + // confirm the hold has been deleted + assertNull(holdService.getHold(filePlan, "hold two")); - return null; - } + return null; + } }); } From b80b1647a35a3d87c7daec97dcbb441996f207d3 Mon Sep 17 00:00:00 2001 From: Tom Page Date: Thu, 7 Dec 2017 08:36:45 +0000 Subject: [PATCH 10/14] Update version to 2.3.2. --- pom.xml | 2 +- rm-automation/pom.xml | 2 +- rm-server/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 649a8bbc0b..6d0fb432a9 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.alfresco alfresco-rm-parent pom - 2.3.2-SNAPSHOT + 2.3.2 Alfresco Records Management http://www.alfresco.org/ diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index 0b8f2e9087..a13e582a0e 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -8,7 +8,7 @@ org.alfresco alfresco-rm-parent - 2.3.2-SNAPSHOT + 2.3.2 diff --git a/rm-server/pom.xml b/rm-server/pom.xml index 7837927177..2b36929cbe 100644 --- a/rm-server/pom.xml +++ b/rm-server/pom.xml @@ -5,7 +5,7 @@ org.alfresco alfresco-rm-parent - 2.3.2-SNAPSHOT + 2.3.2 4.0.0 alfresco-rm-server From 3ac76ed95eca730549741b43174aa15bedcea33b Mon Sep 17 00:00:00 2001 From: Tom Page Date: Thu, 7 Dec 2017 08:37:21 +0000 Subject: [PATCH 11/14] Update version to 2.3.3-SNAPSHOT. --- pom.xml | 2 +- rm-automation/pom.xml | 2 +- rm-server/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 6d0fb432a9..132634b9f1 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.alfresco alfresco-rm-parent pom - 2.3.2 + 2.3.3-SNAPSHOT Alfresco Records Management http://www.alfresco.org/ diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index a13e582a0e..dc977e2474 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -8,7 +8,7 @@ org.alfresco alfresco-rm-parent - 2.3.2 + 2.3.3-SNAPSHOT diff --git a/rm-server/pom.xml b/rm-server/pom.xml index 2b36929cbe..6d1b5f1c9b 100644 --- a/rm-server/pom.xml +++ b/rm-server/pom.xml @@ -5,7 +5,7 @@ org.alfresco alfresco-rm-parent - 2.3.2 + 2.3.3-SNAPSHOT 4.0.0 alfresco-rm-server From 7abcb683dd3d75461415dfdae39663942b259b8d Mon Sep 17 00:00:00 2001 From: Tom Page Date: Thu, 7 Dec 2017 09:16:05 +0000 Subject: [PATCH 12/14] Update version to 2.3.2.1-SNAPSHOT. --- pom.xml | 2 +- rm-automation/pom.xml | 2 +- rm-server/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 6d0fb432a9..75c135ad6e 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.alfresco alfresco-rm-parent pom - 2.3.2 + 2.3.2.1-SNAPSHOT Alfresco Records Management http://www.alfresco.org/ diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index a13e582a0e..2838ec91ea 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -8,7 +8,7 @@ org.alfresco alfresco-rm-parent - 2.3.2 + 2.3.2.1-SNAPSHOT diff --git a/rm-server/pom.xml b/rm-server/pom.xml index 2b36929cbe..2b80d909db 100644 --- a/rm-server/pom.xml +++ b/rm-server/pom.xml @@ -5,7 +5,7 @@ org.alfresco alfresco-rm-parent - 2.3.2 + 2.3.2.1-SNAPSHOT 4.0.0 alfresco-rm-server From 1707339d68f6655ac165a15992b4dd9daec6d1d7 Mon Sep 17 00:00:00 2001 From: Tom Page Date: Fri, 8 Dec 2017 16:29:53 +0000 Subject: [PATCH 13/14] Fix h2scripts version using same method as on master. Without this change we can no longer start RM using the maven command. --- rm-community/rm-community-repo/pom.xml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/rm-community/rm-community-repo/pom.xml b/rm-community/rm-community-repo/pom.xml index 0cb12aeee9..e491304c6a 100644 --- a/rm-community/rm-community-repo/pom.xml +++ b/rm-community/rm-community-repo/pom.xml @@ -25,6 +25,8 @@ alfresco-rm-community-repo true ${project.build.directory}/solr/home + + 5.1.1 @@ -324,7 +326,7 @@ ${alfresco.groupId} alfresco-repository - ${alfresco.version} + ${alfresco.h2scripts.version} h2scripts @@ -539,7 +541,7 @@ ${alfresco.groupId} alfresco-repository - ${alfresco.version} + ${alfresco.h2scripts.version} h2scripts From 768a002ca142537c76c5e6166f3a81faa469dc00 Mon Sep 17 00:00:00 2001 From: Tom Page Date: Mon, 11 Dec 2017 10:50:23 +0000 Subject: [PATCH 14/14] RM-5878 Update the live search lib file with the 5.2 version. Keep the changes to exclude RM saved searches. --- .../slingshot/search/live-search.lib.js | 105 ++++++++++-------- 1 file changed, 57 insertions(+), 48 deletions(-) diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/search/live-search.lib.js b/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/search/live-search.lib.js index f10d461d6e..930890813a 100644 --- a/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/search/live-search.lib.js +++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/search/live-search.lib.js @@ -33,7 +33,7 @@ /** * Live Search Component - * + * * Takes the following object as Input: * params * { @@ -41,7 +41,7 @@ * term: search terms * maxResults: maximum results to return * }; - * + * * Outputs: * items - Array of objects containing the search results */ @@ -53,7 +53,7 @@ const SURF_CONFIG_QNAMEPATH = "/cm:surf-config/"; /** * Returns site information data structure. * { shortName: siteId, title: title } - * + * * Caches the data to avoid repeatedly querying the repository. */ var siteDataCache = {}; @@ -65,10 +65,10 @@ function getSiteData(siteId) { } var site = siteService.getSite(siteId); var data = - { - shortName: siteId, - title: (site !== null ? site.title : "unknown") - }; + { + shortName : siteId, + title : (site !== null ? site.title : "unknown") + }; siteDataCache[siteId] = data; return data; } @@ -80,10 +80,10 @@ function getSiteData(siteId) { */ function getQueryTemplate() { var t = - [{ - field: "keywords", - template: "%(cm:name cm:title cm:description TEXT TAG)" - }], + [{ + field: "keywords", + template: "%(cm:name cm:title cm:description TEXT TAG)" + }], qt = new XML(config.script)["default-query-template"]; if (qt != null && qt.length() != 0) { @@ -103,18 +103,18 @@ function getDocumentItem(container, node) { if (node.isDocument) { item = - { - nodeRef: node.nodeRef.toString(), - name: node.name, - title: node.properties["cm:title"], - description: node.properties["cm:description"], - modifiedOn: node.properties["cm:modified"], - modifiedBy: node.properties["cm:modifier"], - createdOn: node.properties["cm:created"], - createdBy: node.properties["cm:creator"], - mimetype: node.mimetype, - size: node.size - }; + { + nodeRef: node.nodeRef.toString(), + name: node.name, + title: node.properties["cm:title"], + description: node.properties["cm:description"], + modifiedOn: node.properties["cm:modified"], + modifiedBy: node.properties["cm:modifier"], + createdOn: node.properties["cm:created"], + createdBy: node.properties["cm:creator"], + mimetype: node.mimetype, + size: node.size + }; if (container.siteId !== null) { item.site = getSiteData(container.siteId); @@ -123,7 +123,7 @@ function getDocumentItem(container, node) { if (node.hasAspect("{http://www.alfresco.org/model/content/1.0}thumbnailModification")) { var dates = node.properties["lastThumbnailModification"]; - for (var i = 0; i < dates.length; i++) + for (var i=0; i= 1) { var siteQName = Packages.org.alfresco.util.ISO9075.decode(tmp.split("/")[0]); - siteId = siteQName.substring(siteQName.indexOf(":") + 1); + siteId = siteQName.substring(siteQName.indexOf(":") + 1); tmp = tmp.substring(pos + 1); pos = tmp.indexOf('/'); if (pos >= 1) @@ -167,13 +167,13 @@ function splitQNamePath(node) { // strip container id from the path var containerId = tmp.substring(0, pos); containerId = containerId.substring(containerId.indexOf(":") + 1); - + container.siteId = siteId; container.containerId = containerId; } } } - + return container; } @@ -197,27 +197,36 @@ function liveSearch(params) { /** * Return Document Search results with the given search terms. - * + * * "AND" is the default operator unless configured otherwise, OR, AND and NOT are also supported - * as is any other valid fts-alfresco elements such as "quoted terms" and (bracket terms) and also * propname:propvalue syntax. - * + * * @param params Object containing search parameters - see API description above */ function getDocResults(params) { // ensure a TYPE is specified var ftsQuery = params.term + ' AND +TYPE:"cm:content"'; - + + // site constraint + if (params.siteId !== null) + { + // use SITE syntax to restrict to specific site + ftsQuery += ' AND SITE:"' + params.siteId + '"'; + } + // root node - generally used for overridden Repository root in Share if (params.rootNode !== null) { ftsQuery = 'PATH:"' + rootNode.qnamePath + '//*" AND (' + ftsQuery + ')'; } + + // main query construction ftsQuery = '(' + ftsQuery + ') AND -TYPE:"cm:thumbnail" AND -TYPE:"cm:failedThumbnail" AND -TYPE:"cm:rating" AND -TYPE:"fm:post" AND -ASPECT:"sys:hidden" AND -ASPECT:"rma:savedSearch" AND -cm:creator:system'; - + if (logger.isLoggingEnabled()) logger.log("LiveQuery:\r\n" + ftsQuery); - + // get default fts operator from the config // // TODO: common search lib - for both live and standard e.g. to get values like this... @@ -228,7 +237,7 @@ function getDocResults(params) { { operator = cf.toString(); } - + // perform fts-alfresco language query var queryDef = { query: ftsQuery, @@ -243,13 +252,13 @@ function getDocResults(params) { } }; var rs = search.queryResultSet(queryDef); - nodes = rs.nodes, - results = []; - + nodes = rs.nodes, + results = []; + if (logger.isLoggingEnabled()) logger.log("Processing resultset of length: " + nodes.length); - - for (var i = 0, item; i < nodes.length && i < params.maxResults; i++) + + for (var i=0, item; i