From 139d83bab501304baa687cdf617811ad3231f83a Mon Sep 17 00:00:00 2001 From: Samuel Langlois Date: Wed, 31 Oct 2012 10:51:54 +0000 Subject: [PATCH 01/28] Tagged RM 2.0.1 build 147 revision 42983 as TAGS/V2.0.1 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/TAGS/V2.0.1@43258 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 From 7513235f4e778cfe3e5198a9261e763366ff34c6 Mon Sep 17 00:00:00 2001 From: Tuna Aksoy Date: Wed, 17 Jul 2013 15:19:35 +0000 Subject: [PATCH 02/28] RM-769 (Impossible to add access for several values) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.0@52785 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../alfresco/extension/ehcache-custom.xml | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 rm-server/config/alfresco/extension/ehcache-custom.xml diff --git a/rm-server/config/alfresco/extension/ehcache-custom.xml b/rm-server/config/alfresco/extension/ehcache-custom.xml new file mode 100644 index 0000000000..d646f4885c --- /dev/null +++ b/rm-server/config/alfresco/extension/ehcache-custom.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + From 6aac0fce36e9c186db7221c6406b34f74d95c688 Mon Sep 17 00:00:00 2001 From: Roy Wetherall Date: Tue, 27 Aug 2013 06:13:20 +0000 Subject: [PATCH 03/28] RM-876: Wrong RM version(actual: 2.0.2, must be: 2.0.3). git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.0@54472 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- gradle.properties | 2 +- .../alfresco/module/org_alfresco_module_rm/module.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index f5756a2a5a..54b3170cb3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ groupid=alfresco packageName=rm -version=2.0.2 +version=2.0.3 build=dev alfrescoBaseVersion=4.1.4 diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/module.properties b/rm-server/config/alfresco/module/org_alfresco_module_rm/module.properties index ed5f7435ab..fcfa904742 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/module.properties +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/module.properties @@ -6,7 +6,7 @@ module.aliases=org_alfresco_module_dod5015 module.title=Records Management module.description=Alfresco Record Management Extension -module.version=2.0.2 +module.version=2.0.3 module.repo.version.min=4.1.4 module.repo.version.max=4.1.99 \ No newline at end of file From fe73bfa98aa96c69d143281872ea9f7ab7004b55 Mon Sep 17 00:00:00 2001 From: Samuel Langlois Date: Fri, 6 Sep 2013 11:25:25 +0000 Subject: [PATCH 04/28] RM-904 Create V2.0.1.x branch from V2.0.1 tag, to host hotfixes git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.0.1.x@55032 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 From e4fac727bb89ff478ed63a6fa809f01fedaee734 Mon Sep 17 00:00:00 2001 From: Samuel Langlois Date: Fri, 6 Sep 2013 12:19:09 +0000 Subject: [PATCH 05/28] Incremented version label (2.0.1.1) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.0.1.x@55047 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index e1167a1fd1..535b36b9d6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ groupid=alfresco packageName=rm -version=2.0.1 +version=2.0.1.1 build=dev alfrescoBaseVersion=4.0.2 From d755bbaf85a56bb151b61cf2c719c84834908d88 Mon Sep 17 00:00:00 2001 From: Jared Ottley Date: Mon, 16 Sep 2013 19:35:16 +0000 Subject: [PATCH 06/28] Merge recordsmanagement/DEV/DODRECERT to recordsmanagement/BRANCHES/V2.0.1.x for: RM-904: Actions are missing within Records Management Site for Record Series and its children: r51134: DOD Recert: Upgrade issues * added patch to fill in missing file plan root node reference * default site id set when retrieving saved searches git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.0.1.x@55365 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../org_alfresco_module_rm/log4j.properties | 1 + .../model/recordsModel.xml | 1 - .../rm-patch-context.xml | 16 +++ .../patch/RMv2FilePlanNodeRefPatch.java | 134 ++++++++++++++++++ .../patch/RMv2ModelPatch.java | 4 +- .../search/SavedSearchDetails.java | 10 +- 6 files changed, 159 insertions(+), 7 deletions(-) create mode 100644 rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/RMv2FilePlanNodeRefPatch.java diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/log4j.properties b/rm-server/config/alfresco/module/org_alfresco_module_rm/log4j.properties index 57c59d75ba..ec18e783e1 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/log4j.properties +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/log4j.properties @@ -1,2 +1,3 @@ log4j.logger.org.alfresco.module.org_alfresco_module_rm.caveat=warn log4j.logger.org.alfresco.module.org_alfresco_module_rm.security.RMMethodSecurityPostProcessor=warn +log4j.logger.org.alfresco.module.org_alfresco_module_rm.patch=debug diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/model/recordsModel.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/model/recordsModel.xml index 0be4c0dee8..94c3a75c1a 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/model/recordsModel.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/model/recordsModel.xml @@ -576,7 +576,6 @@ - File Plan Component false diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-patch-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-patch-context.xml index 8c0dd0e455..0a28801ddc 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-patch-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-patch-context.xml @@ -31,5 +31,21 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/RMv2FilePlanNodeRefPatch.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/RMv2FilePlanNodeRefPatch.java new file mode 100644 index 0000000000..526b4756cb --- /dev/null +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/RMv2FilePlanNodeRefPatch.java @@ -0,0 +1,134 @@ +/* + * 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.module.org_alfresco_module_rm.patch; + +import java.util.List; + +import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService; +import org.alfresco.module.org_alfresco_module_rm.dod5015.DOD5015Model; +import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; +import org.alfresco.repo.domain.node.NodeDAO; +import org.alfresco.repo.domain.patch.PatchDAO; +import org.alfresco.repo.domain.qname.QNameDAO; +import org.alfresco.repo.module.AbstractModuleComponent; +import org.alfresco.repo.policy.BehaviourFilter; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.namespace.QName; +import org.alfresco.util.Pair; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.BeanNameAware; + +/** + * RM v2.0 File Plan Node Ref Patch + * + * @author Roy Wetherall + */ +public class RMv2FilePlanNodeRefPatch extends AbstractModuleComponent + implements BeanNameAware, RecordsManagementModel, DOD5015Model +{ + /** Logger */ + private static Log logger = LogFactory.getLog(RMv2FilePlanNodeRefPatch.class); + + private NodeService nodeService; + private RecordsManagementService recordsManagementService; + private BehaviourFilter behaviourFilter; + private PatchDAO patchDAO; + private NodeDAO nodeDAO; + private QNameDAO qnameDAO; + + public void setNodeService(NodeService nodeService) + { + this.nodeService = nodeService; + } + + public void setRecordsManagementService(RecordsManagementService recordsManagementService) + { + this.recordsManagementService = recordsManagementService; + } + + public void setBehaviourFilter(BehaviourFilter behaviourFilter) + { + this.behaviourFilter = behaviourFilter; + } + + public void setPatchDAO(PatchDAO patchDAO) + { + this.patchDAO = patchDAO; + } + + public void setNodeDAO(NodeDAO nodeDAO) + { + this.nodeDAO = nodeDAO; + } + + public void setQnameDAO(QNameDAO qnameDAO) + { + this.qnameDAO = qnameDAO; + } + + /** + * @see org.alfresco.repo.module.AbstractModuleComponent#executeInternal() + */ + @Override + protected void executeInternal() throws Throwable + { + if (logger.isDebugEnabled() == true) + { + logger.debug("RM Module RMv2FilePlanNodeRef Patch ..."); + } + + Pair aspectPair = qnameDAO.getQName(ASPECT_FILE_PLAN_COMPONENT); + if (aspectPair != null) + { + List records = patchDAO.getNodesByAspectQNameId(aspectPair.getFirst(), 0L, patchDAO.getMaxAdmNodeID()); + + if (logger.isDebugEnabled() == true) + { + logger.debug(" ... updating " + records.size() + " items" ); + } + + behaviourFilter.disableBehaviour(); + try + { + for (Long record : records) + { + Pair recordPair = nodeDAO.getNodePair(record); + NodeRef recordNodeRef = recordPair.getSecond(); + + if (nodeService.getProperty(recordNodeRef, PROP_ROOT_NODEREF) == null) + { + nodeService.setProperty(recordNodeRef, PROP_ROOT_NODEREF, recordsManagementService.getFilePlan(recordNodeRef)); + } + } + } + finally + { + behaviourFilter.enableBehaviour(); + } + } + + if (logger.isDebugEnabled() == true) + { + logger.debug(" ... complete RM Module RMv2FilePlanNodeRef Patch"); + } + + } +} diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/RMv2ModelPatch.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/RMv2ModelPatch.java index 545d846d92..b4b1e5368b 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/RMv2ModelPatch.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/RMv2ModelPatch.java @@ -43,7 +43,7 @@ public class RMv2ModelPatch extends AbstractModuleComponent implements BeanNameAware, RecordsManagementModel, DOD5015Model { /** Logger */ - private static Log logger = LogFactory.getLog(NotificationTemplatePatch.class); + private static Log logger = LogFactory.getLog(RMv2ModelPatch.class); private static long BATCH_SIZE = 100000L; @@ -80,7 +80,7 @@ public class RMv2ModelPatch extends AbstractModuleComponent { if (logger.isDebugEnabled() == true) { - logger.debug("RM Module NotificationTemplatePatch ..."); + logger.debug("RM Module RMv2ModelPatch ..."); } updateQName(QName.createQName(DOD_URI, "filePlan"), TYPE_FILE_PLAN, "TYPE"); diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/search/SavedSearchDetails.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/search/SavedSearchDetails.java index 4c0dc935a1..53d6923a03 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/search/SavedSearchDetails.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/search/SavedSearchDetails.java @@ -89,6 +89,8 @@ public class SavedSearchDetails extends ReportDetails public static final String SORT = "sort"; public static final String PARAMS = "params"; + private static final String DEFAULT_SITE_ID = "rm"; + /** Site id */ private String siteId; @@ -117,11 +119,11 @@ public class SavedSearchDetails extends ReportDetails JSONObject search = new JSONObject(jsonString); // Get the site id - if (search.has(SITE_ID) == false) + String siteId = DEFAULT_SITE_ID; + if (search.has(SITE_ID) == true) { - throw new AlfrescoRuntimeException("Can not create saved search details from json, because required siteid is not present. " + jsonString); - } - String siteId = search.getString(SITE_ID); + siteId = search.getString(SITE_ID); + } // Get the name if (search.has(NAME) == false) From 65d6601ecd213d8165e2591b28e1303886f9ec5c Mon Sep 17 00:00:00 2001 From: Jared Ottley Date: Mon, 16 Sep 2013 19:54:13 +0000 Subject: [PATCH 07/28] Incremented version label (2.0.1.2) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.0.1.x@55368 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 535b36b9d6..964b9461a1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ groupid=alfresco packageName=rm -version=2.0.1.1 +version=2.0.1.2 build=dev alfrescoBaseVersion=4.0.2 From 8efc9da209d9cd059c60a62a2b79b64fefac42e9 Mon Sep 17 00:00:00 2001 From: Alan Davis Date: Tue, 17 Sep 2013 09:22:17 +0000 Subject: [PATCH 08/28] Reverse merged the version label increment as this had already been done. 55368: Incremented version label (2.0.1.2) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.0.1.x@55384 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 964b9461a1..535b36b9d6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ groupid=alfresco packageName=rm -version=2.0.1.2 +version=2.0.1.1 build=dev alfrescoBaseVersion=4.0.2 From c0f6b25140f18f57752567993cd7fd78d6f3a485 Mon Sep 17 00:00:00 2001 From: Jared Ottley Date: Tue, 17 Sep 2013 20:35:26 +0000 Subject: [PATCH 09/28] Merge recordsmanagement/BRANCHES/V2.0 to recordsmanagement/BRANCHES/V2.0.1.x: RM-904: Actions are missing within Records Management Site for Record Series and its children r52262: RM-757: Permission confusion after upgrade from 1.0 RM-753: Can't edit former seria untill it's vital git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.0.1.x@55428 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../model/recordsModel.xml | 1 - .../rm-patch-context.xml | 2 + .../RecordsManagementTypeFormFilter.java | 23 ++++++- .../patch/RMv2FilePlanNodeRefPatch.java | 68 +++++++++++++++++-- .../BroadcastVitalRecordDefinitionAction.java | 10 ++- .../vital/VitalRecordDefinitionImpl.java | 4 ++ 6 files changed, 97 insertions(+), 11 deletions(-) diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/model/recordsModel.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/model/recordsModel.xml index 94c3a75c1a..82097435aa 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/model/recordsModel.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/model/recordsModel.xml @@ -677,7 +677,6 @@ Review Period d:period - true none|0 diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-patch-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-patch-context.xml index 0a28801ddc..d030f80f98 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-patch-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-patch-context.xml @@ -46,6 +46,8 @@ + + \ No newline at end of file diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/forms/RecordsManagementTypeFormFilter.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/forms/RecordsManagementTypeFormFilter.java index 28aa892093..986e44810e 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/forms/RecordsManagementTypeFormFilter.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/forms/RecordsManagementTypeFormFilter.java @@ -26,6 +26,7 @@ import java.util.Set; import org.alfresco.module.org_alfresco_module_rm.identifier.IdentifierService; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.repo.forms.Field; +import org.alfresco.repo.forms.FieldDefinition; import org.alfresco.repo.forms.FieldGroup; import org.alfresco.repo.forms.Form; import org.alfresco.repo.forms.FormData; @@ -103,8 +104,26 @@ public class RecordsManagementTypeFormFilter extends RecordsManagementFormFilter } } - // Group fields - // groupFields(form); + // set the id + List fieldDefs = form.getFieldDefinitions(); + for (FieldDefinition fieldDef : fieldDefs) + { + String prefixName = fieldDef.getName(); + if (prefixName.equals("rma:identifier") == true) + { + String defaultId = identifierService.generateIdentifier(typeName, null); + fieldDef.setDefaultValue(defaultId); + } + // NOTE: we set these defaults in the form for backwards compatibility reasons (RM-753) + else if (prefixName.equals("rma:vitalRecordIndicator") == true) + { + fieldDef.setDefaultValue(Boolean.FALSE.toString()); + } + else if (prefixName.equals("rma:reviewPeriod") == true) + { + fieldDef.setDefaultValue("none|0"); + } + } } /** diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/RMv2FilePlanNodeRefPatch.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/RMv2FilePlanNodeRefPatch.java index 526b4756cb..bd8175f8dd 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/RMv2FilePlanNodeRefPatch.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/RMv2FilePlanNodeRefPatch.java @@ -18,11 +18,16 @@ */ package org.alfresco.module.org_alfresco_module_rm.patch; +import java.io.Serializable; import java.util.List; +import org.alfresco.module.org_alfresco_module_rm.FilePlanComponentKind; import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService; +import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel; import org.alfresco.module.org_alfresco_module_rm.dod5015.DOD5015Model; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; +import org.alfresco.module.org_alfresco_module_rm.security.RecordsManagementSecurityService; +import org.alfresco.module.org_alfresco_module_rm.security.Role; import org.alfresco.repo.domain.node.NodeDAO; import org.alfresco.repo.domain.patch.PatchDAO; import org.alfresco.repo.domain.qname.QNameDAO; @@ -30,6 +35,8 @@ import org.alfresco.repo.module.AbstractModuleComponent; import org.alfresco.repo.policy.BehaviourFilter; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.repository.Period; +import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.service.namespace.QName; import org.alfresco.util.Pair; import org.apache.commons.logging.Log; @@ -53,6 +60,8 @@ public class RMv2FilePlanNodeRefPatch extends AbstractModuleComponent private PatchDAO patchDAO; private NodeDAO nodeDAO; private QNameDAO qnameDAO; + private PermissionService permissionService; + private RecordsManagementSecurityService recordsManagementSecurityService; public void setNodeService(NodeService nodeService) { @@ -84,6 +93,22 @@ public class RMv2FilePlanNodeRefPatch extends AbstractModuleComponent this.qnameDAO = qnameDAO; } + /** + * @param recordsManagementSecurityService records management security service + */ + public void setRecordsManagementSecurityService(RecordsManagementSecurityService recordsManagementSecurityService) + { + this.recordsManagementSecurityService = recordsManagementSecurityService; + } + + /** + * @param permissionService permission service + */ + public void setPermissionService(PermissionService permissionService) + { + this.permissionService = permissionService; + } + /** * @see org.alfresco.repo.module.AbstractModuleComponent#executeInternal() */ @@ -98,24 +123,53 @@ public class RMv2FilePlanNodeRefPatch extends AbstractModuleComponent Pair aspectPair = qnameDAO.getQName(ASPECT_FILE_PLAN_COMPONENT); if (aspectPair != null) { - List records = patchDAO.getNodesByAspectQNameId(aspectPair.getFirst(), 0L, patchDAO.getMaxAdmNodeID()); + List filePlanComponents = patchDAO.getNodesByAspectQNameId(aspectPair.getFirst(), 0L, patchDAO.getMaxAdmNodeID()); if (logger.isDebugEnabled() == true) { - logger.debug(" ... updating " + records.size() + " items" ); + logger.debug(" ... updating " + filePlanComponents.size() + " items" ); } behaviourFilter.disableBehaviour(); try { - for (Long record : records) + for (Long filePlanComponent : filePlanComponents) { - Pair recordPair = nodeDAO.getNodePair(record); - NodeRef recordNodeRef = recordPair.getSecond(); + Pair recordPair = nodeDAO.getNodePair(filePlanComponent); + NodeRef filePlanComponentNodeRef = recordPair.getSecond(); - if (nodeService.getProperty(recordNodeRef, PROP_ROOT_NODEREF) == null) + NodeRef filePlan = recordsManagementService.getFilePlan(filePlanComponentNodeRef); + + // set the file plan node reference + if (nodeService.getProperty(filePlanComponentNodeRef, PROP_ROOT_NODEREF) == null) { - nodeService.setProperty(recordNodeRef, PROP_ROOT_NODEREF, recordsManagementService.getFilePlan(recordNodeRef)); + nodeService.setProperty(filePlanComponentNodeRef, PROP_ROOT_NODEREF, filePlan); + } + + // only set the rmadmin permissions on record categories, record folders and records + FilePlanComponentKind kind = recordsManagementService.getFilePlanComponentKind(filePlanComponentNodeRef); + if (FilePlanComponentKind.RECORD_CATEGORY.equals(kind) == true || + FilePlanComponentKind.RECORD_FOLDER.equals(kind) == true || + FilePlanComponentKind.RECORD.equals(kind) == true ) + { + // ensure the that the records management role has read and file on the node + Role adminRole = recordsManagementSecurityService.getRole(filePlan, "Administrator"); + if (adminRole != null) + { + permissionService.setPermission(filePlanComponentNodeRef, adminRole.getRoleGroupName(), RMPermissionModel.FILING, true); + } + + // ensure that the default vital record default values have been set (RM-753) + Serializable vitalRecordIndicator = nodeService.getProperty(filePlanComponentNodeRef, PROP_VITAL_RECORD_INDICATOR); + if (vitalRecordIndicator == null) + { + nodeService.setProperty(filePlanComponentNodeRef, PROP_VITAL_RECORD_INDICATOR, false); + } + Serializable reviewPeriod = nodeService.getProperty(filePlanComponentNodeRef, PROP_REVIEW_PERIOD); + if (reviewPeriod == null) + { + nodeService.setProperty(filePlanComponentNodeRef, PROP_REVIEW_PERIOD, new Period("none|0")); + } } } } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/vital/BroadcastVitalRecordDefinitionAction.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/vital/BroadcastVitalRecordDefinitionAction.java index e7adec62e7..faa03fa17b 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/vital/BroadcastVitalRecordDefinitionAction.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/vital/BroadcastVitalRecordDefinitionAction.java @@ -68,7 +68,15 @@ public class BroadcastVitalRecordDefinitionAction extends RMActionExecuterAbstra private void propagateChangeToChildrenOf(NodeRef actionedUponNodeRef) { Map parentProps = nodeService.getProperties(actionedUponNodeRef); - boolean parentVri = (Boolean) parentProps.get(PROP_VITAL_RECORD_INDICATOR); + + // parent vital record indicator, default to null if not set + boolean parentVri = false; + Boolean parentVriValue = (Boolean) parentProps.get(PROP_VITAL_RECORD_INDICATOR); + if (parentVriValue != null) + { + parentVri = parentVriValue.booleanValue(); + } + Period parentReviewPeriod = (Period) parentProps.get(PROP_REVIEW_PERIOD); List assocs = this.nodeService.getChildAssocs(actionedUponNodeRef, ContentModel.ASSOC_CONTAINS, RegexQNamePattern.MATCH_ALL); diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/vital/VitalRecordDefinitionImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/vital/VitalRecordDefinitionImpl.java index 571992b247..2315ddf2bf 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/vital/VitalRecordDefinitionImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/vital/VitalRecordDefinitionImpl.java @@ -63,6 +63,10 @@ public class VitalRecordDefinitionImpl implements VitalRecordDefinition, Records /* package */ static VitalRecordDefinition create(NodeService nodeService, NodeRef nodeRef) { Boolean enabled = (Boolean)nodeService.getProperty(nodeRef, PROP_VITAL_RECORD_INDICATOR); + if (enabled == null) + { + enabled = Boolean.FALSE; + } Period reviewPeriod = (Period)nodeService.getProperty(nodeRef, PROP_REVIEW_PERIOD); return new VitalRecordDefinitionImpl(enabled, reviewPeriod); } From b0a375221b5e7fc87ac2180997e2fc8de95d8e20 Mon Sep 17 00:00:00 2001 From: Roy Wetherall Date: Thu, 19 Sep 2013 00:44:57 +0000 Subject: [PATCH 10/28] RM-731: Impossible to add 'read and file' permissions for default categories * permissions set on the file where not being correct set down the file plan heirarchy git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.0@55508 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../security/RecordsManagementSecurityServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/security/RecordsManagementSecurityServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/security/RecordsManagementSecurityServiceImpl.java index d96b2b9330..4b5e233a93 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/security/RecordsManagementSecurityServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/security/RecordsManagementSecurityServiceImpl.java @@ -885,7 +885,8 @@ public class RecordsManagementSecurityServiceImpl implements RecordsManagementSe private void setPermissionDown(NodeRef nodeRef, String authority, String permission) { setPermissionImpl(nodeRef, authority, permission); - if (recordsManagementService.isRecordCategory(nodeRef) == true) + if (recordsManagementService.isFilePlan(nodeRef) == true || + recordsManagementService.isRecordCategory(nodeRef) == true) { List assocs = nodeService.getChildAssocs(nodeRef, ContentModel.ASSOC_CONTAINS, RegexQNamePattern.MATCH_ALL); for (ChildAssociationRef assoc : assocs) From 91c2a02b7cf32da840da37ffcce8ed900e7d7b47 Mon Sep 17 00:00:00 2001 From: Roy Wetherall Date: Thu, 19 Sep 2013 01:30:25 +0000 Subject: [PATCH 11/28] RM-731: Impossible to add 'read and file' permissions for default categories git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.0@55510 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../RecordsManagementSecurityServiceImpl.java | 42 +++++++++++-------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/security/RecordsManagementSecurityServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/security/RecordsManagementSecurityServiceImpl.java index 4b5e233a93..c4938c8d5e 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/security/RecordsManagementSecurityServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/security/RecordsManagementSecurityServiceImpl.java @@ -868,10 +868,13 @@ public class RecordsManagementSecurityServiceImpl implements RecordsManagementSe { NodeRef parent = nodeService.getPrimaryParent(nodeRef).getParentRef(); if (parent != null && - recordsManagementService.isFilePlan(parent) == false) + recordsManagementService.isFilePlanComponent(nodeRef) == true) { setPermissionImpl(parent, authority, RMPermissionModel.READ_RECORDS); - setReadPermissionUp(parent, authority); + if (recordsManagementService.isFilePlan(parent) == false) + { + setReadPermissionUp(parent, authority); + } } } @@ -910,7 +913,8 @@ public class RecordsManagementSecurityServiceImpl implements RecordsManagementSe */ private void setPermissionImpl(NodeRef nodeRef, String authority, String permission) { - if (RMPermissionModel.FILING.equals(permission) == true) + if (RMPermissionModel.FILING.equals(permission) == true && + permissionService.getInheritParentPermissions(nodeRef) == false) { // Remove record read permission before adding filing permission permissionService.deletePermission(nodeRef, authority, RMPermissionModel.READ_RECORDS); @@ -928,21 +932,25 @@ public class RecordsManagementSecurityServiceImpl implements RecordsManagementSe { public Boolean doWork() throws Exception { - // Delete permission on this node - permissionService.deletePermission(nodeRef, authority, permission); - - if (recordsManagementService.isRecordCategory(nodeRef) == true) + // can't delete permissions if inherited (eg hold and transfer containers) + if (permissionService.getInheritParentPermissions(nodeRef) == false) { - List assocs = nodeService.getChildAssocs(nodeRef, ContentModel.ASSOC_CONTAINS, RegexQNamePattern.MATCH_ALL); - for (ChildAssociationRef assoc : assocs) - { - NodeRef child = assoc.getChildRef(); - if (recordsManagementService.isRecordCategory(child) == true || - recordsManagementService.isRecordFolder(child) == true) - { - deletePermission(child, authority, permission); - } - } + // Delete permission on this node + permissionService.deletePermission(nodeRef, authority, permission); + + if (recordsManagementService.isRecordCategory(nodeRef) == true) + { + List assocs = nodeService.getChildAssocs(nodeRef, ContentModel.ASSOC_CONTAINS, RegexQNamePattern.MATCH_ALL); + for (ChildAssociationRef assoc : assocs) + { + NodeRef child = assoc.getChildRef(); + if (recordsManagementService.isRecordCategory(child) == true || + recordsManagementService.isRecordFolder(child) == true) + { + deletePermission(child, authority, permission); + } + } + } } return null; From add64005354cc0987e573399fce69052e59e385a Mon Sep 17 00:00:00 2001 From: Pavel Yurkevich Date: Thu, 19 Sep 2013 10:41:31 +0000 Subject: [PATCH 12/28] RM-976: CLONE: RM: Cache overrides break Alfresco clustering Any custom configuration in 'config/alfresco/extension' of RM module has precedence over the configuration in 'tomcat/shared/classes'. This may cause problems as described at MNT-9520 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.0@55528 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../alfresco/extension/ehcache-custom.xml | 28 ------------------- 1 file changed, 28 deletions(-) delete mode 100644 rm-server/config/alfresco/extension/ehcache-custom.xml diff --git a/rm-server/config/alfresco/extension/ehcache-custom.xml b/rm-server/config/alfresco/extension/ehcache-custom.xml deleted file mode 100644 index d646f4885c..0000000000 --- a/rm-server/config/alfresco/extension/ehcache-custom.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - From 7c9e0e7253af095b639f1d9c73f134667940cc8e Mon Sep 17 00:00:00 2001 From: Jared Ottley Date: Thu, 19 Sep 2013 21:26:43 +0000 Subject: [PATCH 13/28] [RM-904] Actions are missing within Records Management Site for Record Series and its children. Patches are implemented as components. Components are loaded in a single thread. The work of a patch should be wrapped in its own transaction to isolate it from the changes of other patches and allowing patches to commit work before working on the next patch. Moved all work of RMv2ModelPatch into the RetryingTransactionCallback. RetryingTransactionHelper set to create new thread. Add RetryingTransactionHelper to RMv2FilePlanNodeRefPatch. Move all of the work of the patch into the callback. Helper creates new thread. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.0.1.x@55708 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../rm-patch-context.xml | 1 + .../patch/RMv2FilePlanNodeRefPatch.java | 136 ++++++++++-------- .../patch/RMv2ModelPatch.java | 88 ++++++------ 3 files changed, 121 insertions(+), 104 deletions(-) diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-patch-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-patch-context.xml index d030f80f98..ff1e2e25ef 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-patch-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-patch-context.xml @@ -48,6 +48,7 @@ + \ No newline at end of file diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/RMv2FilePlanNodeRefPatch.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/RMv2FilePlanNodeRefPatch.java index bd8175f8dd..08bd90d7b2 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/RMv2FilePlanNodeRefPatch.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/RMv2FilePlanNodeRefPatch.java @@ -33,6 +33,7 @@ import org.alfresco.repo.domain.patch.PatchDAO; import org.alfresco.repo.domain.qname.QNameDAO; import org.alfresco.repo.module.AbstractModuleComponent; import org.alfresco.repo.policy.BehaviourFilter; +import org.alfresco.repo.transaction.RetryingTransactionHelper; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.Period; @@ -62,6 +63,7 @@ public class RMv2FilePlanNodeRefPatch extends AbstractModuleComponent private QNameDAO qnameDAO; private PermissionService permissionService; private RecordsManagementSecurityService recordsManagementSecurityService; + private RetryingTransactionHelper retryingTransactionHelper; public void setNodeService(NodeService nodeService) { @@ -109,6 +111,11 @@ public class RMv2FilePlanNodeRefPatch extends AbstractModuleComponent this.permissionService = permissionService; } + public void setRetryingTransactionHelper(RetryingTransactionHelper retryingTransactionHelper) + { + this.retryingTransactionHelper = retryingTransactionHelper; + } + /** * @see org.alfresco.repo.module.AbstractModuleComponent#executeInternal() */ @@ -120,69 +127,80 @@ public class RMv2FilePlanNodeRefPatch extends AbstractModuleComponent logger.debug("RM Module RMv2FilePlanNodeRef Patch ..."); } - Pair aspectPair = qnameDAO.getQName(ASPECT_FILE_PLAN_COMPONENT); - if (aspectPair != null) - { - List filePlanComponents = patchDAO.getNodesByAspectQNameId(aspectPair.getFirst(), 0L, patchDAO.getMaxAdmNodeID()); - - if (logger.isDebugEnabled() == true) - { - logger.debug(" ... updating " + filePlanComponents.size() + " items" ); - } - - behaviourFilter.disableBehaviour(); - try - { - for (Long filePlanComponent : filePlanComponents) - { - Pair recordPair = nodeDAO.getNodePair(filePlanComponent); - NodeRef filePlanComponentNodeRef = recordPair.getSecond(); - - NodeRef filePlan = recordsManagementService.getFilePlan(filePlanComponentNodeRef); - - // set the file plan node reference - if (nodeService.getProperty(filePlanComponentNodeRef, PROP_ROOT_NODEREF) == null) - { - nodeService.setProperty(filePlanComponentNodeRef, PROP_ROOT_NODEREF, filePlan); - } - - // only set the rmadmin permissions on record categories, record folders and records - FilePlanComponentKind kind = recordsManagementService.getFilePlanComponentKind(filePlanComponentNodeRef); - if (FilePlanComponentKind.RECORD_CATEGORY.equals(kind) == true || - FilePlanComponentKind.RECORD_FOLDER.equals(kind) == true || - FilePlanComponentKind.RECORD.equals(kind) == true ) - { - // ensure the that the records management role has read and file on the node - Role adminRole = recordsManagementSecurityService.getRole(filePlan, "Administrator"); - if (adminRole != null) - { - permissionService.setPermission(filePlanComponentNodeRef, adminRole.getRoleGroupName(), RMPermissionModel.FILING, true); - } - - // ensure that the default vital record default values have been set (RM-753) - Serializable vitalRecordIndicator = nodeService.getProperty(filePlanComponentNodeRef, PROP_VITAL_RECORD_INDICATOR); - if (vitalRecordIndicator == null) - { - nodeService.setProperty(filePlanComponentNodeRef, PROP_VITAL_RECORD_INDICATOR, false); - } - Serializable reviewPeriod = nodeService.getProperty(filePlanComponentNodeRef, PROP_REVIEW_PERIOD); - if (reviewPeriod == null) - { - nodeService.setProperty(filePlanComponentNodeRef, PROP_REVIEW_PERIOD, new Period("none|0")); - } - } - } - } - finally - { - behaviourFilter.enableBehaviour(); - } - } + retryingTransactionHelper.doInTransaction(new Work(), false, true); if (logger.isDebugEnabled() == true) { logger.debug(" ... complete RM Module RMv2FilePlanNodeRef Patch"); } - } + } + + private class Work implements RetryingTransactionHelper.RetryingTransactionCallback + { + @Override + public Integer execute() throws Throwable + { + Pair aspectPair = qnameDAO.getQName(RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT); + if (aspectPair != null) + { + List filePlanComponents = patchDAO.getNodesByAspectQNameId(aspectPair.getFirst(), 0L, patchDAO.getMaxAdmNodeID()); + + if (logger.isDebugEnabled() == true) + { + logger.debug(" ... updating " + filePlanComponents.size() + " items" ); + } + + behaviourFilter.disableBehaviour(); + try + { + for (Long filePlanComponent : filePlanComponents) + { + Pair recordPair = nodeDAO.getNodePair(filePlanComponent); + NodeRef filePlanComponentNodeRef = recordPair.getSecond(); + + NodeRef filePlan = recordsManagementService.getFilePlan(filePlanComponentNodeRef); + + // set the file plan node reference + if (nodeService.getProperty(filePlanComponentNodeRef, RecordsManagementModel.PROP_ROOT_NODEREF) == null) + { + nodeService.setProperty(filePlanComponentNodeRef, RecordsManagementModel.PROP_ROOT_NODEREF, filePlan); + } + + // only set the rmadmin permissions on record categories, record folders and records + FilePlanComponentKind kind = recordsManagementService.getFilePlanComponentKind(filePlanComponentNodeRef); + if (FilePlanComponentKind.RECORD_CATEGORY.equals(kind) == true || + FilePlanComponentKind.RECORD_FOLDER.equals(kind) == true || + FilePlanComponentKind.RECORD.equals(kind) == true ) + { + // ensure the that the records management role has read and file on the node + Role adminRole = recordsManagementSecurityService.getRole(filePlan, "Administrator"); + if (adminRole != null) + { + permissionService.setPermission(filePlanComponentNodeRef, adminRole.getRoleGroupName(), RMPermissionModel.FILING, true); + } + + // ensure that the default vital record default values have been set (RM-753) + Serializable vitalRecordIndicator = nodeService.getProperty(filePlanComponentNodeRef, RecordsManagementModel.PROP_VITAL_RECORD_INDICATOR); + if (vitalRecordIndicator == null) + { + nodeService.setProperty(filePlanComponentNodeRef, RecordsManagementModel.PROP_VITAL_RECORD_INDICATOR, false); + } + Serializable reviewPeriod = nodeService.getProperty(filePlanComponentNodeRef, RecordsManagementModel.PROP_REVIEW_PERIOD); + if (reviewPeriod == null) + { + nodeService.setProperty(filePlanComponentNodeRef, RecordsManagementModel.PROP_REVIEW_PERIOD, new Period("none|0")); + } + } + } + } + finally + { + behaviourFilter.enableBehaviour(); + } + } + // nothing to do + return 0; + } + } } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/RMv2ModelPatch.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/RMv2ModelPatch.java index b4b1e5368b..c1a0c0699e 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/RMv2ModelPatch.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/patch/RMv2ModelPatch.java @@ -52,6 +52,7 @@ public class RMv2ModelPatch extends AbstractModuleComponent private QNameDAO qnameDAO; private RetryingTransactionHelper retryingTransactionHelper; + public void setPatchDAO(PatchDAO patchDAO) { this.patchDAO = patchDAO; @@ -90,44 +91,22 @@ public class RMv2ModelPatch extends AbstractModuleComponent private void updateQName(QName qnameBefore, QName qnameAfter, String reindexClass) { - Long maxNodeId = patchDAO.getMaxAdmNodeID(); - Pair before = qnameDAO.getQName(qnameBefore); + Work work = new Work(qnameBefore, qnameAfter, reindexClass); + retryingTransactionHelper.doInTransaction(work, false, true); - if (before != null) - { - for (Long i = 0L; i < maxNodeId; i+=BATCH_SIZE) - { - Work work = new Work(before.getFirst(), i, reindexClass); - retryingTransactionHelper.doInTransaction(work, false, true); - } - - qnameDAO.updateQName(qnameBefore, qnameAfter); - - if (logger.isDebugEnabled() == true) - { - logger.debug(" ... updated qname " + qnameBefore.toString()); - } - } - else - { - if (logger.isDebugEnabled() == true) - { - logger.debug(" ... no need to update qname " + qnameBefore.toString()); - } - } } private class Work implements RetryingTransactionHelper.RetryingTransactionCallback { - private long qnameId; - private long lower; + private QName qnameBefore; + private QName qnameAfter; private String reindexClass; - Work(long qnameId, long lower, String reindexClass) + Work(QName qnameBefore, QName qnameAfter, String reindexClass) { - this.qnameId = qnameId; - this.lower = lower; + this.qnameBefore = qnameBefore; + this.qnameAfter = qnameAfter; this.reindexClass = reindexClass; } @@ -138,24 +117,43 @@ public class RMv2ModelPatch extends AbstractModuleComponent @Override public Integer execute() throws Throwable { - if ("TYPE".equals(reindexClass)) + Long maxNodeId = patchDAO.getMaxAdmNodeID(); + + Pair before = qnameDAO.getQName(qnameBefore); + + if (before != null) { - List nodeIds = patchDAO.getNodesByTypeQNameId(qnameId, lower, lower + BATCH_SIZE); - nodeDAO.touchNodes(nodeDAO.getCurrentTransactionId(true), nodeIds); - return nodeIds.size(); - } - else if ("ASPECT".equals(reindexClass)) - { - List nodeIds = patchDAO.getNodesByAspectQNameId(qnameId, lower, lower + BATCH_SIZE); - nodeDAO.touchNodes(nodeDAO.getCurrentTransactionId(true), nodeIds); - return nodeIds.size(); - } + for (Long i = 0L; i < maxNodeId; i+=BATCH_SIZE) + { + if ("TYPE".equals(reindexClass)) + { + List nodeIds = patchDAO.getNodesByTypeQNameId(before.getFirst(), i, i + BATCH_SIZE); + nodeDAO.touchNodes(nodeDAO.getCurrentTransactionId(true), nodeIds); + } + else if ("ASPECT".equals(reindexClass)) + { + List nodeIds = patchDAO.getNodesByAspectQNameId(before.getFirst(), i, i + BATCH_SIZE); + nodeDAO.touchNodes(nodeDAO.getCurrentTransactionId(true), nodeIds); + } + } + + qnameDAO.updateQName(qnameBefore, qnameAfter); + + if (logger.isDebugEnabled() == true) + { + logger.debug(" ... updated qname " + qnameBefore.toString()); + } + } else { - // nothing to do - return 0; + if (logger.isDebugEnabled() == true) + { + logger.debug(" ... no need to update qname " + qnameBefore.toString()); + } } - - } - } + + //nothing to do + return 0; + } + } } From 26223cb435238a683d354e5788ff7cf6911ea3a8 Mon Sep 17 00:00:00 2001 From: Jared Ottley Date: Wed, 25 Sep 2013 18:18:14 +0000 Subject: [PATCH 14/28] [RM-904][MNT-9589] Actions are missing within Records Management Site for Record Series and its children. Add DOD5015 constants for old style audit entries. Modify callback to look for and parse existing DOD5015 audit entries. Add query to look for DOD5015 audit entries. This call must be before the query for RM entries for the report to be ordered correctly. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.0.1.x@55998 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../audit/RecordsManagementAuditService.java | 27 ++++++++++ .../RecordsManagementAuditServiceImpl.java | 52 +++++++++++++++++++ 2 files changed, 79 insertions(+) diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditService.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditService.java index f493d4949c..5ec3681c0e 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditService.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditService.java @@ -67,6 +67,33 @@ public interface RecordsManagementAuditService public static final String RM_AUDIT_DATA_LOGIN_FULLNAME = "/RM/login/no-error/fullName"; public static final String RM_AUDIT_DATA_LOGIN_ERROR = "/RM/login/error/value"; + /* Provide Backward compatibility with DOD5015 Audit Events RM-904*/ + public static final String DOD5015_AUDIT_APPLICATION_NAME = "DOD5015"; + public static final String DOD5015_AUDIT_PATH_ROOT = "/DOD5015"; + public static final String DOD5015_AUDIT_SNIPPET_EVENT = "/event"; + public static final String DOD5015_AUDIT_SNIPPET_PERSON = "/person"; + public static final String DOD5015_AUDIT_SNIPPET_NAME = "/name"; + public static final String DOD5015_AUDIT_SNIPPET_NODE = "/node"; + public static final String DOD5015_AUDIT_SNIPPET_CHANGES = "/changes"; + public static final String DOD5015_AUDIT_SNIPPET_BEFORE = "/before"; + public static final String DOD5015_AUDIT_SNIPPET_AFTER = "/after"; + + public static final String DOD5015_AUDIT_DATA_PERSON_FULLNAME = "/DOD5015/event/person/fullName"; + public static final String DOD5015_AUDIT_DATA_PERSON_ROLES = "/DOD5015/event/person/roles"; + public static final String DOD5015_AUDIT_DATA_EVENT_NAME = "/DOD5015/event/name/value"; + public static final String DOD5015_AUDIT_DATA_NODE_NODEREF = "/DOD5015/event/node/noderef"; + public static final String DOD5015_AUDIT_DATA_NODE_NAME = "/DOD5015/event/node/name"; + public static final String DOD5015_AUDIT_DATA_NODE_TYPE = "/DOD5015/event/node/type"; + public static final String DOD5015_AUDIT_DATA_NODE_IDENTIFIER = "/DOD5015/event/node/identifier"; + public static final String DOD5015_AUDIT_DATA_NODE_NAMEPATH = "/DOD5015/event/node/namePath"; + public static final String DOD5015_AUDIT_DATA_NODE_CHANGES_BEFORE = "/DOD5015/event/node/changes/before/value"; + public static final String DOD5015_AUDIT_DATA_NODE_CHANGES_AFTER = "/DOD5015/event/node/changes/after/value"; + + public static final String DOD5015_AUDIT_DATA_LOGIN_USERNAME = "/DOD5015/login/args/userName/value"; + public static final String DOD5015_AUDIT_DATA_LOGIN_FULLNAME = "/DOD5015/login/no-error/fullName"; + public static final String DOD5015_AUDIT_DATA_LOGIN_ERROR = "/DOD5015/login/error/value"; + /* End Backward compatibility with DOD5015 Audit Events */ + /** * Starts RM auditing. */ diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditServiceImpl.java index ed279bd596..7bfb10c207 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditServiceImpl.java @@ -825,6 +825,30 @@ public class RecordsManagementAuditServiceImpl nodeType = (typeDef != null) ? typeDef.getTitle() : null; } } + else if (values.containsKey(RecordsManagementAuditService.DOD5015_AUDIT_DATA_EVENT_NAME)) + { + // This data is /RM/event/... + eventName = (String) values.get(RecordsManagementAuditService.DOD5015_AUDIT_DATA_EVENT_NAME); + fullName = (String) values.get(RecordsManagementAuditService.DOD5015_AUDIT_DATA_PERSON_FULLNAME); + userRoles = (String) values.get(RecordsManagementAuditService.DOD5015_AUDIT_DATA_PERSON_ROLES); + nodeRef = (NodeRef) values.get(RecordsManagementAuditService.DOD5015_AUDIT_DATA_NODE_NODEREF); + nodeName = (String) values.get(RecordsManagementAuditService.DOD5015_AUDIT_DATA_NODE_NAME); + QName nodeTypeQname = (QName) values.get(RecordsManagementAuditService.DOD5015_AUDIT_DATA_NODE_TYPE); + nodeIdentifier = (String) values.get(RecordsManagementAuditService.DOD5015_AUDIT_DATA_NODE_IDENTIFIER); + namePath = (String) values.get(RecordsManagementAuditService.DOD5015_AUDIT_DATA_NODE_NAMEPATH); + beforeProperties = (Map) values.get( + RecordsManagementAuditService.DOD5015_AUDIT_DATA_NODE_CHANGES_BEFORE); + afterProperties = (Map) values.get( + RecordsManagementAuditService.DOD5015_AUDIT_DATA_NODE_CHANGES_AFTER); + + // Convert some of the values to recognizable forms + nodeType = null; + if (nodeTypeQname != null) + { + TypeDefinition typeDef = dictionaryService.getType(nodeTypeQname); + nodeType = (typeDef != null) ? typeDef.getTitle() : null; + } + } else if (values.containsKey(RecordsManagementAuditService.RM_AUDIT_DATA_LOGIN_USERNAME)) { user = (String) values.get(RecordsManagementAuditService.RM_AUDIT_DATA_LOGIN_USERNAME); @@ -839,6 +863,20 @@ public class RecordsManagementAuditServiceImpl fullName = (String) values.get(RecordsManagementAuditService.RM_AUDIT_DATA_LOGIN_FULLNAME); } } + else if (values.containsKey(RecordsManagementAuditService.DOD5015_AUDIT_DATA_LOGIN_USERNAME)) + { + user = (String) values.get(RecordsManagementAuditService.DOD5015_AUDIT_DATA_LOGIN_USERNAME); + if (values.containsKey(RecordsManagementAuditService.DOD5015_AUDIT_DATA_LOGIN_ERROR)) + { + eventName = RecordsManagementAuditService.RM_AUDIT_EVENT_LOGIN_FAILURE; + fullName = user; // The user didn't log in + } + else + { + eventName = RecordsManagementAuditService.RM_AUDIT_EVENT_LOGIN_SUCCESS; + fullName = (String) values.get(RecordsManagementAuditService.DOD5015_AUDIT_DATA_LOGIN_FULLNAME); + } + } else { // This is not recognisable data @@ -939,6 +977,18 @@ public class RecordsManagementAuditServiceImpl } // Build audit query parameters + AuditQueryParameters dod5015AuditQueryParams = new AuditQueryParameters(); + dod5015AuditQueryParams.setForward(forward); + dod5015AuditQueryParams.setApplicationName(RecordsManagementAuditService.DOD5015_AUDIT_APPLICATION_NAME); + dod5015AuditQueryParams.setUser(user); + dod5015AuditQueryParams.setFromTime(fromTime); + dod5015AuditQueryParams.setToTime(toTime); + if (nodeRef != null) + { + dod5015AuditQueryParams.addSearchKey(RecordsManagementAuditService.DOD5015_AUDIT_DATA_NODE_NODEREF, nodeRef); + } + + // AuditQueryParameters auditQueryParams = new AuditQueryParameters(); auditQueryParams.setForward(forward); auditQueryParams.setApplicationName(RecordsManagementAuditService.RM_AUDIT_APPLICATION_NAME); @@ -949,7 +999,9 @@ public class RecordsManagementAuditServiceImpl { auditQueryParams.addSearchKey(RecordsManagementAuditService.RM_AUDIT_DATA_NODE_NODEREF, nodeRef); } + // Get audit entries + auditService.auditQuery(callback, dod5015AuditQueryParams, maxEntries); auditService.auditQuery(callback, auditQueryParams, maxEntries); // finish off the audit trail report From 93991e82656fdc0200df2c98bbe415051c75a60c Mon Sep 17 00:00:00 2001 From: Pavel Yurkevich Date: Wed, 2 Oct 2013 11:20:07 +0000 Subject: [PATCH 15/28] RM-1029: Trashcan page in admin console opened with Internal Server Error - permissionServiceImpl#hasPermission method was updated. Now we check a node for existence before nodeService.hasAspect method invocation that checks a node for ASPECT_FILE_PLAN_COMPONENT aspect. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.0@56244 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../org_alfresco_module_rm/permission/PermissionServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/permission/PermissionServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/permission/PermissionServiceImpl.java index 2dfd8206f4..cb7a0eae31 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/permission/PermissionServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/permission/PermissionServiceImpl.java @@ -1057,6 +1057,7 @@ public class PermissionServiceImpl extends AbstractLifecycleBean implements Perm { String result = perm; if ("Read".equals(perm) == true && + nodeService.exists(nodeRef) && nodeService.hasAspect(nodeRef, RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT) == true) { result = "ReadRecords"; From 0bb35b74e8726b454113feed6a5c9af684e159b2 Mon Sep 17 00:00:00 2001 From: Tuna Aksoy Date: Fri, 11 Oct 2013 14:45:02 +0000 Subject: [PATCH 16/28] RM-986 (Group added twice for default categories) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.0@56542 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../dod5015/DODExampleFilePlan.xml | 741 +++++++++--------- 1 file changed, 389 insertions(+), 352 deletions(-) diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/dod5015/DODExampleFilePlan.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/dod5015/DODExampleFilePlan.xml index 9b40dfe679..cfc6288333 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/dod5015/DODExampleFilePlan.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/dod5015/DODExampleFilePlan.xml @@ -1,44 +1,46 @@ - - + + Reports 0318 Reports Record series for reports - + - + - + + - - + + AIS Audit Records 0318-01 @@ -47,43 +49,44 @@ week|1 true - + - + - - + + N1-218-00-4 item 023 - Cut off monthly, hold 1 month, then destroy. + Cut off monthly, hold 1 month, then destroy. - + - - - + + + cutoff monthend|1 - - - + + + destroy month|1 {http://www.alfresco.org/model/recordsmanagement/1.0}cutOffDate - + - - + + - - - - - + + + + + + January AIS Audit Records January AIS Audit Records @@ -94,57 +97,59 @@ - + - + - + + - + Unit Manning Documents 0318-02 Unit Manning Documents Consisting of manpower document and monthly strength report forwarded to OSD and other activities which are maintained by personnel office as the official record copy. - - + + - + - - + + N1-218-89-1 item 002 Cut off every 3 months, hold 3 months, then destroy. - + - - - + + + cutoff quarterend|1 - - - + + + destroy month|3 {http://www.alfresco.org/model/recordsmanagement/1.0}cutOffDate - - + + - + - + + 1st Quarter Unit Manning Documents 0318-02-01 @@ -153,55 +158,57 @@ - + - + - + + - + Overtime Reports 0318-03 Overtime reports and related documents - Overtime reports and related documents which are maintained by JS/combatant controller as the official record copy. - - + Overtime reports and related documents which are maintained by JS/combatant controller as the official record copy. + + - + - - + + N1-218-00-7 item 28 - Cut off at end of FY, hold 3 years, then destroy. + Cut off at end of FY, hold 3 years, then destroy. - + - - + + cutoff - fyend|1 - - - + fyend|1 + + + destroy year|3 {http://www.alfresco.org/model/recordsmanagement/1.0}cutOffDate - - + + - - - + + + + FY08 Overtime Reports 0318-03-01 @@ -210,54 +217,56 @@ - + - + - + + - + Bi-Weekly Cost Reports 0318-04 Bi-Weekly Cost Reports Bi-wekly cost reports which are maintained by JS/combatant command controler as the official record copy. - - + + - + - - + + N1-218-00-7 item 2 - Cut off at end of CY, hold 2 years, then destroy. + Cut off at end of CY, hold 2 years, then destroy. - + - - + + cutoff yearend|1 - - - + + + destroy year|2 {http://www.alfresco.org/model/recordsmanagement/1.0}cutOffDate - - + + - + + CY08 Unit Manning Documents 0318-04-01 @@ -266,121 +275,124 @@ - + - + - - + + - + Military Files 0412 Military Files Record series for military files - + - + - + + - + Military Assignment Documents 0412-01 Military Assignment Documents - Policy matters pertaining to military assignments which are maintained by any JS/combatant command activity as the official record copy. + Policy matters pertaining to military assignments which are maintained by any JS/combatant command activity as the official record copy. - + - + - - + + N1-218-00-3 item 30 - Cut off when superseded, hold 5 years, then destroy. - true + Cut off when superseded, hold 5 years, then destroy. + true - + - - + + cutoff superseded - - - + + + destroy year|5 {http://www.alfresco.org/model/recordsmanagement/1.0}cutOffDate - - + + - + - + - + - + - + + - + Official Military Personnel Privilege Card Applications 0412-02 Official Military Personnel Privilege Card Applications - Consisting of: documents reflecting applications for priviege cards and ration cards, including Department of Defense Forms (DD Forms) 1172 (Application for Unifomed Services Identification and Privilege Card) and similar documents which are maintained by any JS/combatant command activity. + Consisting of: documents reflecting applications for priviege cards and ration cards, including Department of Defense Forms (DD Forms) 1172 (Application for Unifomed Services Identification and Privilege Card) and similar documents which are maintained by any JS/combatant command activity. - + - + - - + + N1-218-00-3 item 20 Cut off when no longer needed and destroy immediately. - + - - + + cutoff no_longer_needed - - - + + + destroy immediately|0 - - + + - + + COL Bob Johnson 0412-02-01 @@ -388,6 +400,7 @@ + PFC Alan Murphy 0412-02-02 @@ -396,59 +409,61 @@ - + - + - + + - + Personnel Security Program Records 0412-03 Personnel Security Program Records - Position sensitivity files including requests for information relating to the designation of sensitive and non-sensitive personnel positions in an agency and results of final actions taken consisting of approved requests which are maintained by any JS/combatant command activity + Position sensitivity files including requests for information relating to the designation of sensitive and non-sensitive personnel positions in an agency and results of final actions taken consisting of approved requests which are maintained by any JS/combatant command activity - + - + - - + + N1-218-00-4 item 017 Cutoff when position is abolished, re-designated, or no longer needed, whichever is later. Destroy immediately after cutoff. - + - - + + cutoff abolished re_designated no_longer_needed - + and - - - + + + destroy immediately|0 - - + + - + + Commander's Administrative Assistant 0412-03-01 @@ -456,6 +471,7 @@ + Equal Opportunity Coordinator 0412-03-02 @@ -464,138 +480,142 @@ - + - + - + - + + Civilian Files 0430 Civilian Files Record series for civilian files - + - + - + + - + Employee Performance File System Records 0430-01 Employee Performance File System Records - Consisting of: performance records superseded through an administrative, judicial, or quasi-judicial procedure which are maintained by any JS/combatant command activity + Consisting of: performance records superseded through an administrative, judicial, or quasi-judicial procedure which are maintained by any JS/combatant command activity - + - + - - + + GRS 1 item 23b(1) Cutoff when superseded. Destroy immediately after cutoff - true + true - + - - + + cutoff superseded - - - + + + destroy immediately|0 - - + + - + - + - + - + + - + Foreign Employee Award Files 0430-02 Foreign Employee Award Files - Decorations to foreign nationals and US citizens not employed by the US Government consisting of: case files of recommendations, decisions, awards announcements, board meeting minutes, and related documents which are maintained by any JS/combatant command activity + Decorations to foreign nationals and US citizens not employed by the US Government consisting of: case files of recommendations, decisions, awards announcements, board meeting minutes, and related documents which are maintained by any JS/combatant command activity - + - - + + N1-218-00-3 item 18 - Permanent. Cut off on completion of case, hold 2 years, then retire to offline storage. Transfer to federal records holding area 5 years after retirement to offline storage. Transfer to NARA 25 years after cutoff. + Permanent. Cut off on completion of case, hold 2 years, then retire to offline storage. Transfer to federal records holding area 5 years after retirement to offline storage. Transfer to NARA 25 years after cutoff. - + - - + + cutoff case_complete - - - + + + transfer Retire to offline storage. Offline Storage year|2 {http://www.alfresco.org/model/recordsmanagement/1.0}cutOffDate - - - + + + transfer - Transfer to federal records holding area. + Transfer to federal records holding area. Federal Records Holding year|5 {http://www.alfresco.org/model/recordsmanagement/1.0}dispositionAsOf - - - + + + accession Transfer to NARA. NARA year|25 {http://www.alfresco.org/model/recordsmanagement/1.0}cutOffDate - - + + - - - + + + + Christian Bohr 0430-02-01 @@ -603,6 +623,7 @@ + Karl Planck 0430-02-02 @@ -611,27 +632,29 @@ - + - + - + + - + Case Files and Papers 0430-03 Case Files and Papers Consisting of library containing information on personnel actions which are maintained by R&A Br and Deputy Chief Information Office None - Disposal not authorized. Disposition pending NARA approval. + Disposal not authorized. Disposition pending NARA approval. - + + Gilbert Competency Hearing 0430-03-01 @@ -640,35 +663,36 @@ - + - + - + + - + Withholding of Within-Grade Increase (WGI) Records 0430-04 Withholding of Within-Grade Increase (WGI) Records - Files concerning an employee’s performance rating of record with work examples which establish less than fully successful performance, notice of withholding of WGI, employee's request for reconsideration of denied WGI, and decision concerning such a reconsideration request which are maintained by any JS/combatant command activity. + Files concerning an employee’s performance rating of record with work examples which establish less than fully successful performance, notice of withholding of WGI, employee's request for reconsideration of denied WGI, and decision concerning such a reconsideration request which are maintained by any JS/combatant command activity. - + - + - - + + N1-218-00-3 item 16 Cut off on completion of WGI action or on separation, whichever is earlier; hold 3 years, then destroy/delete. - + - + cutoff @@ -676,23 +700,24 @@ separation or - - - + + + destroy year|3 {http://www.alfresco.org/model/recordsmanagement/1.0}cutOffDate - - + + - - - + + + + Gilbert WGI Records 0430-04-01 @@ -701,62 +726,64 @@ - + - + - + + - + Payroll Differential and Allowances 0430-05 Payroll Differential and Allowances - Consisting of: information to assist overseas civilian personnel offices to document employee eligibility for foreign post differential and foreign quarters and post allowances, including SF 1190 (Foreign Allowances Application, Grant, and Report) and similar information which are maintained by any JS/combatant command activity. + Consisting of: information to assist overseas civilian personnel offices to document employee eligibility for foreign post differential and foreign quarters and post allowances, including SF 1190 (Foreign Allowances Application, Grant, and Report) and similar information which are maintained by any JS/combatant command activity. - + - + - - + + N1-218-00-3 item 3 Cut off at end of Fiscal Year (FY) in which all allowances granted are terminated, hold 3 years, then destroy. - + - - + + retain all_allowances_granted_are_terminated - - - + + + cutoff fyend|1 {http://www.alfresco.org/model/recordsmanagement/1.0}dispositionAsOf - - - + + + destroy year|3 {http://www.alfresco.org/model/recordsmanagement/1.0}cutOffDate - - + + - + - + + Martin Payroll Differential and Allowances 0430-05-01 @@ -765,73 +792,75 @@ - + - + - - + + - + Miscellaneous Files 0950 Miscellaneous Files Record series for miscellaneous files - + - + - + + - + Civilian Employee Training Program Records 0950-01 Civilian Employee Training Program Records - Decorations to foreign nationals and US citizens not employed by the US Government consisting of: case files of recommendations, decisions, awards announcements, board meeting minutes, and related documents which are maintained by any JS/combatant command activity + Decorations to foreign nationals and US citizens not employed by the US Government consisting of: case files of recommendations, decisions, awards announcements, board meeting minutes, and related documents which are maintained by any JS/combatant command activity - + - - + + GRS 1 item 29b - Cut off annually, hold 5 years, then destroy, or destroy when obsolete, whichever is earlier. + Cut off annually, hold 5 years, then destroy, or destroy when obsolete, whichever is earlier. - + - - + + cutoff year|1 {http://www.alfresco.org/model/recordsmanagement/1.0}dateFiled - - - + + + destroy year|5 {http://www.alfresco.org/model/recordsmanagement/1.0}cutOffDate obsolete - - + + - + + Bob Prentice Training Records (2008) 0950-01-01 @@ -839,6 +868,7 @@ + Beth Tanaka Training Records (2008) 0950-01-02 @@ -846,6 +876,7 @@ + Chuck Stevens Training Records (2008) 0950-01-03 @@ -854,104 +885,107 @@ - + - + - + + - + Purchase of Foreign Award Medals and Decorations 0950-02 Purchase of Foreign Award Medals and Decorations - Forms reflecting purchase of foreign award medals and decorations. + Forms reflecting purchase of foreign award medals and decorations. - + - + - - + + N1-218-00-3 item 11 Cutoff when related record is transferred to inactive storage, hold 1 year, destroy. - true + true - + - - + + cutoff related_record_trasfered_inactive_storage - - - + + + destroy year|1 {http://www.alfresco.org/model/recordsmanagement/1.0}cutOffDate - - + + - + - + - + - + + - + Monthly Cockpit Crew Training 0950-03 Monthly Cockpit/Crew Training - Consisting of skills training/evaluation forms, e.g., AF Form 4031. + Consisting of skills training/evaluation forms, e.g., AF Form 4031. - + - + - - + + N1-218-00-3 item 13 - Cutoff after training is complete, hold 1 year, destroy. + Cutoff after training is complete, hold 1 year, destroy. - + - - + + cutoff training_complete - - - + + + destroy year|1 {http://www.alfresco.org/model/recordsmanagement/1.0}cutOffDate - - + + - + + January Cockpit Crew Training 0950-03-01 @@ -959,6 +993,7 @@ + February Cockpit Crew Training 0950-03-02 @@ -967,66 +1002,68 @@ - + - + - + + - + Science Advisor Records 0950-04 Science Advisor Records - Consisting of: reports, studies, tasking orders, and similar records. Reports are usually informal and unpublished. Records may be generated at all activities + Consisting of: reports, studies, tasking orders, and similar records. Reports are usually informal and unpublished. Records may be generated at all activities - + - + - + N1-218-00-10 item 44 Cut off on completion of study, hold 5 years, then transfer to Inactive Storage. Transfer to NARA 25 years after cutoff. - + - - + + cutoff study_complete - - - + + + transfer Transfer to inactive storage. Inactive Storage year|5 {http://www.alfresco.org/model/recordsmanagement/1.0}cutOffDate - - - + + + accession Transfer to NARA. NARA year|25 {http://www.alfresco.org/model/recordsmanagement/1.0}cutOffDate - - + + - + + Phoenix Mars Mission 0950-04-01 @@ -1035,12 +1072,12 @@ - + - + - + - - \ No newline at end of file + + \ No newline at end of file From 49644a1f4710e0ff58f0f08786bb88dccf28afc6 Mon Sep 17 00:00:00 2001 From: Roy Wetherall Date: Thu, 17 Oct 2013 05:16:34 +0000 Subject: [PATCH 17/28] Merge HEAD to V2.0: 56762 - RM-981: Stack specific: "Failed to get lock" error when performing actions with "List of Values" and "Relationships" in Management Console git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.0@56763 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../job/RecordsManagementJob.java | 37 ++++--------------- .../job/RecordsManagementJobExecuter.java | 12 +++++- 2 files changed, 18 insertions(+), 31 deletions(-) diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/RecordsManagementJob.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/RecordsManagementJob.java index 9987308e3d..ac31ef8117 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/RecordsManagementJob.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/RecordsManagementJob.java @@ -18,12 +18,9 @@ */ package org.alfresco.module.org_alfresco_module_rm.job; -import java.util.concurrent.atomic.AtomicBoolean; - import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.repo.lock.JobLockService; import org.alfresco.repo.lock.LockAcquisitionException; -import org.alfresco.repo.lock.JobLockService.JobLockRefreshCallback; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.service.namespace.NamespaceService; @@ -102,37 +99,17 @@ public class RecordsManagementJob implements Job { // try and get the lock String lockToken = getLock(); - if (lockToken == null) - { - // exit - return null; - } - - // use a flag to keep track of the running job - final AtomicBoolean running = new AtomicBoolean(true); - jobLockService.refreshLock(lockToken, getLockQName(), DEFAULT_TIME, new JobLockRefreshCallback() - { - @Override - public boolean isActive() + if (lockToken != null) + { + try { - return running.get(); + // do work + jobExecuter.execute(); } - @Override - public void lockReleased() + finally { - running.set(false); + jobLockService.releaseLock(lockToken, getLockQName()); } - }); - - try - { - // do work - jobExecuter.execute(); - } - finally - { - // The lock will self-release if answer isActive in the negative - running.set(false); } // return diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/RecordsManagementJobExecuter.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/RecordsManagementJobExecuter.java index 233619ff0a..388b93eb8a 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/RecordsManagementJobExecuter.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/RecordsManagementJobExecuter.java @@ -21,6 +21,7 @@ package org.alfresco.module.org_alfresco_module_rm.job; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.repo.admin.RepositoryState; import org.alfresco.repo.transaction.RetryingTransactionHelper; +import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; /** * Records management job executer base class. @@ -59,7 +60,16 @@ public abstract class RecordsManagementJobExecuter implements RecordsManagementM // jobs not allowed to execute unless bootstrap is complete if (repositoryState.isBootstrapping() == false) { - executeImpl(); + retryingTransactionHelper.doInTransaction(new RetryingTransactionCallback() + { + @Override + public Void execute() throws Throwable + { + executeImpl(); + + return null; + } + }, false, true); } } From 39cd44864aefddf5c528c8f987b653bc03943a34 Mon Sep 17 00:00:00 2001 From: Roy Wetherall Date: Fri, 18 Oct 2013 04:18:51 +0000 Subject: [PATCH 18/28] RM: Fix build * double check existance of node ref prior to work git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.0@56793 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../job/PublishUpdatesJobExecuter.java | 66 ++++++++++--------- 1 file changed, 35 insertions(+), 31 deletions(-) diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/PublishUpdatesJobExecuter.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/PublishUpdatesJobExecuter.java index b40c648659..672f8d32ce 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/PublishUpdatesJobExecuter.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/PublishUpdatesJobExecuter.java @@ -97,37 +97,41 @@ public class PublishUpdatesJobExecuter extends RecordsManagementJobExecuter // Deal with each updated disposition action in turn for (NodeRef nodeRef : nodeRefs) { - // Mark the update node as publishing in progress - markPublishInProgress(nodeRef); - try - { - Date start = new Date(); - if (logger.isDebugEnabled() == true) - { - logger.debug("Starting publish of updates ..."); - logger.debug(" - for " + nodeRef.toString()); - logger.debug(" - at " + start.toString()); - } - - // Publish updates - publishUpdates(nodeRef); - - - if (logger.isDebugEnabled() == true) - { - Date end = new Date(); - long duration = end.getTime() - start.getTime(); - logger.debug("Completed publish of updates ..."); - logger.debug(" - for " + nodeRef.toString()); - logger.debug(" - at " + end.toString()); - logger.debug(" - duration " + Long.toString(duration)); - } - } - finally - { - // Ensure the update node has either completed the publish or is marked as no longer in progress - unmarkPublishInProgress(nodeRef); - } + // double check that the node in question still exists + if (nodeService.exists(nodeRef) == true) + { + // Mark the update node as publishing in progress + markPublishInProgress(nodeRef); + try + { + Date start = new Date(); + if (logger.isDebugEnabled() == true) + { + logger.debug("Starting publish of updates ..."); + logger.debug(" - for " + nodeRef.toString()); + logger.debug(" - at " + start.toString()); + } + + // Publish updates + publishUpdates(nodeRef); + + + if (logger.isDebugEnabled() == true) + { + Date end = new Date(); + long duration = end.getTime() - start.getTime(); + logger.debug("Completed publish of updates ..."); + logger.debug(" - for " + nodeRef.toString()); + logger.debug(" - at " + end.toString()); + logger.debug(" - duration " + Long.toString(duration)); + } + } + finally + { + // Ensure the update node has either completed the publish or is marked as no longer in progress + unmarkPublishInProgress(nodeRef); + } + } } return null; }; From be0eff46223115f95f51d63b7ac023a5258d76ca Mon Sep 17 00:00:00 2001 From: Samuel Langlois Date: Wed, 30 Oct 2013 12:13:46 +0000 Subject: [PATCH 19/28] Upgrade version number to 2.0.4 and Alfresco dependency to 4.1.6 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.0@57377 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 54b3170cb3..adb4c7949b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ groupid=alfresco packageName=rm -version=2.0.3 +version=2.0.4 build=dev -alfrescoBaseVersion=4.1.4 +alfrescoBaseVersion=4.1.6 From 72150ee5b34b6f12f4bb290982588c68e2b056ce Mon Sep 17 00:00:00 2001 From: Samuel Langlois Date: Wed, 30 Oct 2013 15:30:38 +0000 Subject: [PATCH 20/28] Rely on Alfresco 4.1.5 rather than 4.1.6, where test classes are missing in the war git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.0@57390 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index adb4c7949b..bf5d39cc8b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,4 +2,4 @@ groupid=alfresco packageName=rm version=2.0.4 build=dev -alfrescoBaseVersion=4.1.6 +alfrescoBaseVersion=4.1.5 From d7d72bd5d61680949ca79e251403c65ed62b8b1f Mon Sep 17 00:00:00 2001 From: Tuna Aksoy Date: Sun, 24 Nov 2013 16:12:59 +0000 Subject: [PATCH 21/28] RM-1092 (Impossible to apply RM module) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.0@58228 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../module/org_alfresco_module_rm/rm-service-context.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml index 629a9ee404..a7dcb900cd 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml @@ -157,7 +157,7 @@ - + @@ -490,7 +490,7 @@ - + From be717e846fb9cfe7b844e928239333760a0660e9 Mon Sep 17 00:00:00 2001 From: Tuna Aksoy Date: Sun, 24 Nov 2013 16:15:20 +0000 Subject: [PATCH 22/28] RM-1080 (ListOfValuesConstraint.getAllowedValues() called several times on custom constraint) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.0@58229 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../caveat/RMListOfValuesConstraint.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/caveat/RMListOfValuesConstraint.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/caveat/RMListOfValuesConstraint.java index 47ffa3fcbf..b4d8e3cd68 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/caveat/RMListOfValuesConstraint.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/caveat/RMListOfValuesConstraint.java @@ -153,6 +153,10 @@ public class RMListOfValuesConstraint extends ListOfValuesConstraint allowedValues = new ArrayList(0); } int valueCount = allowedValues.size(); + if (valueCount > 0) + { + super.setAllowedValues(allowedValues); + } this.allowedValues = Collections.unmodifiableList(allowedValues); // make the upper case versions From 81a2e0e9f4f65471a3916c9e82c8e71783c114c8 Mon Sep 17 00:00:00 2001 From: Samuel Langlois Date: Thu, 12 Dec 2013 15:02:33 +0000 Subject: [PATCH 23/28] Upgrade version to 2.0.5 and Alfresco base version to 4.1.7 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.0@58930 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index bf5d39cc8b..ce35aa1f8d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ groupid=alfresco packageName=rm -version=2.0.4 +version=2.0.5 build=dev -alfrescoBaseVersion=4.1.5 +alfrescoBaseVersion=4.1.7 From 16293b9d3c4e89097f10d7a544684f19962158bd Mon Sep 17 00:00:00 2001 From: Samuel Langlois Date: Wed, 18 Dec 2013 17:04:36 +0000 Subject: [PATCH 24/28] Add Alfresco test dependencies, now that test code is separated from main code git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.0@59136 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- rm-server/build.gradle | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rm-server/build.gradle b/rm-server/build.gradle index cb6ca069cd..225bc6e00e 100644 --- a/rm-server/build.gradle +++ b/rm-server/build.gradle @@ -7,6 +7,8 @@ dependencies { compile 'javax.servlet:servlet-api:2.5' testCompile 'org.springframework:spring-test:2.5' + testCompile group: 'org.alfresco.enterprise', name: 'alfresco-repository', version: alfrescoBaseVersion, classifier: 'tests', transitive: false + testCompile group: 'org.alfresco.enterprise', name: 'alfresco-remote-api', version: alfrescoBaseVersion, classifier: 'tests', transitive: false testRuntime files(explodedConfigDir) testRuntime files(configDir) From 12f7f7e062caa77b87aa616655e4f4ee617140f6 Mon Sep 17 00:00:00 2001 From: Samuel Langlois Date: Mon, 2 Jun 2014 10:20:21 +0000 Subject: [PATCH 25/28] RM-1536 Increase version in module.properties to 2.0.5, to match version of the build Increase dependent Alfresco version to 4.1.8 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.0@72746 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- gradle.properties | 2 +- .../alfresco/module/org_alfresco_module_rm/module.properties | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle.properties b/gradle.properties index ce35aa1f8d..bd6e5dc871 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,4 +2,4 @@ groupid=alfresco packageName=rm version=2.0.5 build=dev -alfrescoBaseVersion=4.1.7 +alfrescoBaseVersion=4.1.8 diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/module.properties b/rm-server/config/alfresco/module/org_alfresco_module_rm/module.properties index fcfa904742..d46e22e2d1 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/module.properties +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/module.properties @@ -6,7 +6,7 @@ module.aliases=org_alfresco_module_dod5015 module.title=Records Management module.description=Alfresco Record Management Extension -module.version=2.0.3 +module.version=2.0.5 module.repo.version.min=4.1.4 -module.repo.version.max=4.1.99 \ No newline at end of file +module.repo.version.max=4.1.99 From 589abffcc79b82c5b3585ead7240ed7159f46bd2 Mon Sep 17 00:00:00 2001 From: Samuel Langlois Date: Mon, 2 Jun 2014 13:40:10 +0000 Subject: [PATCH 26/28] Revert to using Alfresco 4.1.7 - Alfresco 4.1.8 causes test failures git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.0@72776 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index bd6e5dc871..ce35aa1f8d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,4 +2,4 @@ groupid=alfresco packageName=rm version=2.0.5 build=dev -alfrescoBaseVersion=4.1.8 +alfrescoBaseVersion=4.1.7 From eeb678337d5a2f77b3280eb9ab0c4a6cea393de8 Mon Sep 17 00:00:00 2001 From: Tom Page Date: Thu, 17 Dec 2015 11:58:03 +0000 Subject: [PATCH 27/28] RM-2871 Generate .gitignore file for V2.0. --- .gitignore | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..c095498da2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +# General ignored files and directories +.classpath +.gradle +.idea +.project +.settings +*.iml +*.log* +*.tmp +*.war +bin +dist +explodedDeps + +# / +/l10n +/root + +# /rm-server/ +/rm-server/alfresco-solr.zip +/rm-server/solr + +# /rm-server/build/ +/rm-server/build/* + +# /rm-server/config/alfresco/ +/rm-server/config/alfresco/extension + +# /rm-server/libs/ +/rm-server/libs/ + +# /rm-share/build/ +/rm-share/build/* From 8d20c8d4c092c946bed7bc05d5040f87a49d2b1d Mon Sep 17 00:00:00 2001 From: Tom Page Date: Thu, 17 Dec 2015 12:07:50 +0000 Subject: [PATCH 28/28] RM-2871 Generate .gitignore file for V2.0.1.x. --- .gitignore | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..c095498da2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +# General ignored files and directories +.classpath +.gradle +.idea +.project +.settings +*.iml +*.log* +*.tmp +*.war +bin +dist +explodedDeps + +# / +/l10n +/root + +# /rm-server/ +/rm-server/alfresco-solr.zip +/rm-server/solr + +# /rm-server/build/ +/rm-server/build/* + +# /rm-server/config/alfresco/ +/rm-server/config/alfresco/extension + +# /rm-server/libs/ +/rm-server/libs/ + +# /rm-share/build/ +/rm-share/build/*