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 22d5ef5a91..8880e7a61b 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 @@ -66,6 +66,7 @@ + aspectPair = qnameDAO.getQName(ASPECT_FILE_PLAN_COMPONENT); - if (aspectPair != null) + retryingTransactionHelper.doInTransaction(new Work(), false, true); + + if (logger.isDebugEnabled() == true) { - List filePlanComponents = patchDAO.getNodesByAspectQNameId(aspectPair.getFirst(), 0L, patchDAO.getMaxAdmNodeID()); + logger.debug(" ... complete RM Module RMv2FilePlanNodeRef Patch"); + } + + } - if (logger.isDebugEnabled() == true) + private class Work implements RetryingTransactionHelper.RetryingTransactionCallback + { + @Override + public Integer execute() throws Throwable + { + Pair aspectPair = qnameDAO.getQName(RecordsManagementModel.ASPECT_FILE_PLAN_COMPONENT); + if (aspectPair != null) { - logger.debug(" ... updating " + filePlanComponents.size() + " items" ); - } - - behaviourFilter.disableBehaviour(); - try - { - for (Long filePlanComponent : filePlanComponents) + List filePlanComponents = patchDAO.getNodesByAspectQNameId(aspectPair.getFirst(), 0L, patchDAO.getMaxAdmNodeID()); + + if (logger.isDebugEnabled() == true) { - Pair recordPair = nodeDAO.getNodePair(filePlanComponent); - NodeRef filePlanComponentNodeRef = recordPair.getSecond(); - - NodeRef filePlan = filePlanService.getFilePlan(filePlanComponentNodeRef); - - // set the file plan node reference - if (nodeService.getProperty(filePlanComponentNodeRef, PROP_ROOT_NODEREF) == null) + logger.debug(" ... updating " + filePlanComponents.size() + " items" ); + } + + behaviourFilter.disableBehaviour(); + try + { + for (Long filePlanComponent : filePlanComponents) { - nodeService.setProperty(filePlanComponentNodeRef, PROP_ROOT_NODEREF, filePlan); - } - - // only set the rmadmin permissions on record categories, record folders and records - FilePlanComponentKind kind = filePlanService.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 = filePlanRoleService.getRole(filePlan, "Administrator"); - if (adminRole != null) - { - permissionService.setPermission(filePlanComponentNodeRef, adminRole.getRoleGroupName(), RMPermissionModel.FILING, true); - } + Pair recordPair = nodeDAO.getNodePair(filePlanComponent); + NodeRef filePlanComponentNodeRef = recordPair.getSecond(); - // 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) + NodeRef filePlan = filePlanService.getFilePlan(filePlanComponentNodeRef); + + // set the file plan node reference + if (nodeService.getProperty(filePlanComponentNodeRef, PROP_ROOT_NODEREF) == null) { - nodeService.setProperty(filePlanComponentNodeRef, PROP_VITAL_RECORD_INDICATOR, false); - } - Serializable reviewPeriod = nodeService.getProperty(filePlanComponentNodeRef, PROP_REVIEW_PERIOD); - if (reviewPeriod == null) + nodeService.setProperty(filePlanComponentNodeRef, PROP_ROOT_NODEREF, filePlan); + } + + // only set the rmadmin permissions on record categories, record folders and records + FilePlanComponentKind kind = filePlanService.getFilePlanComponentKind(filePlanComponentNodeRef); + if (FilePlanComponentKind.RECORD_CATEGORY.equals(kind) == true || + FilePlanComponentKind.RECORD_FOLDER.equals(kind) == true || + FilePlanComponentKind.RECORD.equals(kind) == true ) { - nodeService.setProperty(filePlanComponentNodeRef, PROP_REVIEW_PERIOD, new Period("none|0")); + // ensure the that the records management role has read and file on the node + Role adminRole = filePlanRoleService.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(); + } } - 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 7d8fa3549c..b1c9927677 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 @@ -51,6 +51,7 @@ public class RMv2ModelPatch extends ModulePatchComponent private QNameDAO qnameDAO; private RetryingTransactionHelper retryingTransactionHelper; + public void setPatchDAO(PatchDAO patchDAO) { this.patchDAO = patchDAO; @@ -89,44 +90,22 @@ public class RMv2ModelPatch extends ModulePatchComponent 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; } @@ -137,24 +116,43 @@ public class RMv2ModelPatch extends ModulePatchComponent @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; + } + } }