diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/dispositionactiondefinition.delete.json.ftl b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/dispositionactiondefinition.delete.json.ftl index 9e26dfeeb6..73394b2703 100644 --- a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/dispositionactiondefinition.delete.json.ftl +++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/dispositionactiondefinition.delete.json.ftl @@ -1 +1 @@ -{} \ No newline at end of file +<#include "dispositionschedule.get.json.ftl"> \ No newline at end of file diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/DispositionAbstractBase.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/DispositionAbstractBase.java index e7bca4c641..4afd717642 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/DispositionAbstractBase.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/DispositionAbstractBase.java @@ -28,20 +28,21 @@ import javax.servlet.http.HttpServletResponse; import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionActionDefinition; import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedule; import org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEvent; +import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.service.cmr.repository.NodeRef; import org.springframework.extensions.webscripts.WebScriptException; import org.springframework.extensions.webscripts.WebScriptRequest; /** * Abstract base class for all disposition related java backed webscripts. - * + * * @author Gavin Cornwell */ public class DispositionAbstractBase extends AbstractRmWebScript { /** * Parses the request and providing it's valid returns the DispositionSchedule object. - * + * * @param req The webscript request * @return The DispositionSchedule object the request is aimed at */ @@ -49,7 +50,7 @@ public class DispositionAbstractBase extends AbstractRmWebScript { // get the NodeRef from the request NodeRef nodeRef = parseRequestForNodeRef(req); - + // Determine whether we are getting the inherited disposition schedule or not boolean inherited = true; String inheritedString = req.getParameter("inherited"); @@ -57,7 +58,7 @@ public class DispositionAbstractBase extends AbstractRmWebScript { inherited = Boolean.parseBoolean(inheritedString); } - + // make sure the node passed in has a disposition schedule attached DispositionSchedule schedule = null; if (inherited == true) @@ -70,16 +71,16 @@ public class DispositionAbstractBase extends AbstractRmWebScript } if (schedule == null) { - throw new WebScriptException(HttpServletResponse.SC_NOT_FOUND, "Node " + + throw new WebScriptException(HttpServletResponse.SC_NOT_FOUND, "Node " + nodeRef.toString() + " does not have a disposition schedule"); } - + return schedule; } - + /** * Parses the request and providing it's valid returns the DispositionActionDefinition object. - * + * * @param req The webscript request * @param schedule The disposition schedule * @return The DispositionActionDefinition object the request is aimed at @@ -93,16 +94,16 @@ public class DispositionAbstractBase extends AbstractRmWebScript DispositionActionDefinition actionDef = schedule.getDispositionActionDefinition(actionDefId); if (actionDef == null) { - throw new WebScriptException(HttpServletResponse.SC_NOT_FOUND, + throw new WebScriptException(HttpServletResponse.SC_NOT_FOUND, "Requested disposition action definition (id:" + actionDefId + ") does not exist"); } - + return actionDef; } - + /** * Helper to create a model to represent the given disposition action definition. - * + * * @param actionDef The DispositionActionDefinition instance to generate model for * @param url The URL for the DispositionActionDefinition * @return Map representing the model @@ -111,34 +112,34 @@ public class DispositionAbstractBase extends AbstractRmWebScript String url) { Map model = new HashMap(8); - + model.put("id", actionDef.getId()); model.put("index", actionDef.getIndex()); model.put("url", url); model.put("name", actionDef.getName()); model.put("label", actionDef.getLabel()); model.put("eligibleOnFirstCompleteEvent", actionDef.eligibleOnFirstCompleteEvent()); - + if (actionDef.getDescription() != null) { model.put("description", actionDef.getDescription()); } - + if (actionDef.getPeriod() != null) { model.put("period", actionDef.getPeriod().toString()); } - + if (actionDef.getPeriodProperty() != null) { model.put("periodProperty", actionDef.getPeriodProperty().toPrefixString(this.namespaceService)); } - + if (actionDef.getLocation() != null) { model.put("location", actionDef.getLocation()); } - + List events = actionDef.getEvents(); if (events != null && events.size() > 0) { @@ -149,7 +150,66 @@ public class DispositionAbstractBase extends AbstractRmWebScript } model.put("events", eventNames); } - + + return model; + } + + /** + * Helper method to parse the request and retrieve the disposition schedule model. + * + * @param req The webscript request + * @return Map representing the model + */ + protected Map getDispositionScheduleModel(WebScriptRequest req) + { + // parse the request to retrieve the schedule object + DispositionSchedule schedule = parseRequestForSchedule(req); + + // add all the schedule data to Map + Map scheduleModel = new HashMap(8); + + // build url + String serviceUrl = req.getServiceContextPath() + req.getPathInfo(); + scheduleModel.put("url", serviceUrl); + String actionsUrl = serviceUrl + "/dispositionactiondefinitions"; + scheduleModel.put("actionsUrl", actionsUrl); + scheduleModel.put("nodeRef", schedule.getNodeRef().toString()); + scheduleModel.put("recordLevelDisposition", schedule.isRecordLevelDisposition()); + scheduleModel.put("canStepsBeRemoved", + !this.dispositionService.hasDisposableItems(schedule)); + + if (schedule.getDispositionAuthority() != null) + { + scheduleModel.put("authority", schedule.getDispositionAuthority()); + } + + if (schedule.getDispositionInstructions() != null) + { + scheduleModel.put("instructions", schedule.getDispositionInstructions()); + } + + boolean unpublishedUpdates = false; + boolean publishInProgress = false; + + List> actions = new ArrayList>(); + for (DispositionActionDefinition actionDef : schedule.getDispositionActionDefinitions()) + { + NodeRef actionDefNodeRef = actionDef.getNodeRef(); + if (nodeService.hasAspect(actionDefNodeRef, RecordsManagementModel.ASPECT_UNPUBLISHED_UPDATE) == true) + { + unpublishedUpdates = true; + publishInProgress = ((Boolean)nodeService.getProperty(actionDefNodeRef, RecordsManagementModel.PROP_PUBLISH_IN_PROGRESS)).booleanValue(); + } + + actions.add(createActionDefModel(actionDef, actionsUrl + "/" + actionDef.getId())); + } + scheduleModel.put("actions", actions); + scheduleModel.put("unpublishedUpdates", unpublishedUpdates); + scheduleModel.put("publishInProgress", publishInProgress); + + // create model object with just the schedule data + Map model = new HashMap(1); + model.put("schedule", scheduleModel); return model; } } \ No newline at end of file diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/DispositionActionDefinitionDelete.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/DispositionActionDefinitionDelete.java index 453219b878..8b36e5e822 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/DispositionActionDefinitionDelete.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/DispositionActionDefinitionDelete.java @@ -18,7 +18,7 @@ */ package org.alfresco.module.org_alfresco_module_rm.script; -import java.util.HashMap; +import java.util.List; import java.util.Map; import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionActionDefinition; @@ -29,7 +29,7 @@ import org.springframework.extensions.webscripts.WebScriptRequest; /** * Implementation for Java backed webscript to delete a dispostion action definition. - * + * * @author Gavin Cornwell */ public class DispositionActionDefinitionDelete extends DispositionAbstractBase @@ -42,14 +42,33 @@ public class DispositionActionDefinitionDelete extends DispositionAbstractBase { // parse the request to retrieve the schedule object DispositionSchedule schedule = parseRequestForSchedule(req); - + // parse the request to retrieve the action definition object DispositionActionDefinition actionDef = parseRequestForActionDefinition(req, schedule); - + // remove the action definition from the schedule - this.dispositionService.removeDispositionActionDefinition(schedule, actionDef); - - // return an empty model - return new HashMap(); + removeDispositionActionDefinitions(schedule, actionDef); + + // return the disposition schedule model + return getDispositionScheduleModel(req); + } + + /** + * Helper method to remove a disposition action definition and the following definition(s) + * + * @param schedule The disposition schedule + * @param actionDef The disposition action definition + */ + private void removeDispositionActionDefinitions(DispositionSchedule schedule, DispositionActionDefinition actionDef) + { + int index = actionDef.getIndex(); + List dispositionActionDefinitions = schedule.getDispositionActionDefinitions(); + for (DispositionActionDefinition dispositionActionDefinition : dispositionActionDefinitions) + { + if (dispositionActionDefinition.getIndex() >= index) + { + dispositionService.removeDispositionActionDefinition(schedule, dispositionActionDefinition); + } + } } } \ No newline at end of file diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/DispositionScheduleGet.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/DispositionScheduleGet.java index c9775259ef..b8746b399a 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/DispositionScheduleGet.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/DispositionScheduleGet.java @@ -18,15 +18,8 @@ */ package org.alfresco.module.org_alfresco_module_rm.script; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; import java.util.Map; -import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionActionDefinition; -import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedule; -import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; -import org.alfresco.service.cmr.repository.NodeRef; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; @@ -34,7 +27,7 @@ import org.springframework.extensions.webscripts.WebScriptRequest; /** * Implementation for Java backed webscript to return full details * about a disposition schedule. - * + * * @author Gavin Cornwell */ public class DispositionScheduleGet extends DispositionAbstractBase @@ -45,54 +38,7 @@ public class DispositionScheduleGet extends DispositionAbstractBase @Override protected Map executeImpl(WebScriptRequest req, Status status, Cache cache) { - // parse the request to retrieve the schedule object - DispositionSchedule schedule = parseRequestForSchedule(req); - - // add all the schedule data to Map - Map scheduleModel = new HashMap(8); - - // build url - String serviceUrl = req.getServiceContextPath() + req.getPathInfo(); - scheduleModel.put("url", serviceUrl); - String actionsUrl = serviceUrl + "/dispositionactiondefinitions"; - scheduleModel.put("actionsUrl", actionsUrl); - scheduleModel.put("nodeRef", schedule.getNodeRef().toString()); - scheduleModel.put("recordLevelDisposition", schedule.isRecordLevelDisposition()); - scheduleModel.put("canStepsBeRemoved", - !this.dispositionService.hasDisposableItems(schedule)); - - if (schedule.getDispositionAuthority() != null) - { - scheduleModel.put("authority", schedule.getDispositionAuthority()); - } - - if (schedule.getDispositionInstructions() != null) - { - scheduleModel.put("instructions", schedule.getDispositionInstructions()); - } - - boolean unpublishedUpdates = false; - boolean publishInProgress = false; - - List> actions = new ArrayList>(); - for (DispositionActionDefinition actionDef : schedule.getDispositionActionDefinitions()) - { - NodeRef actionDefNodeRef = actionDef.getNodeRef(); - if (nodeService.hasAspect(actionDefNodeRef, RecordsManagementModel.ASPECT_UNPUBLISHED_UPDATE) == true) - { - unpublishedUpdates = true; - publishInProgress = ((Boolean)nodeService.getProperty(actionDefNodeRef, RecordsManagementModel.PROP_PUBLISH_IN_PROGRESS)).booleanValue(); - } - - actions.add(createActionDefModel(actionDef, actionsUrl + "/" + actionDef.getId())); - } - scheduleModel.put("actions", actions); - scheduleModel.put("unpublishedUpdates", unpublishedUpdates); - scheduleModel.put("publishInProgress", publishInProgress); - - // create model object with just the schedule data - Map model = new HashMap(1); - model.put("schedule", scheduleModel); - return model; + // return the disposition schedule model + return getDispositionScheduleModel(req); } } \ No newline at end of file