Fixed ALF-4782: Workflows I've Started list shows completed as well as running workflows

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@22549 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Gavin Cornwell
2010-09-15 12:18:46 +00:00
parent 673cc9c73f
commit 94a04311d7
2 changed files with 57 additions and 40 deletions

View File

@@ -26,12 +26,15 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.alfresco.model.ContentModel; import org.alfresco.model.ContentModel;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.workflow.WorkflowDefinition; import org.alfresco.service.cmr.workflow.WorkflowDefinition;
import org.alfresco.service.cmr.workflow.WorkflowInstance; import org.alfresco.service.cmr.workflow.WorkflowInstance;
import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Cache;
import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.Status;
import org.springframework.extensions.webscripts.WebScriptException;
import org.springframework.extensions.webscripts.WebScriptRequest; import org.springframework.extensions.webscripts.WebScriptRequest;
/** /**
@@ -62,9 +65,11 @@ public class WorkflowInstancesGet extends AbstractWorkflowWebscript
{ {
Map<String, String> params = req.getServiceMatch().getTemplateVars(); Map<String, String> params = req.getServiceMatch().getTemplateVars();
// state is not included into filters list as it will be taken into account before filtering
WorkflowState state = getState(req);
// get filter param values // get filter param values
Map<String, Object> filters = new HashMap<String, Object>(9); Map<String, Object> filters = new HashMap<String, Object>(9);
filters.put(PARAM_STATE, req.getParameter(PARAM_STATE));
filters.put(PARAM_INITIATOR, req.getParameter(PARAM_INITIATOR)); filters.put(PARAM_INITIATOR, req.getParameter(PARAM_INITIATOR));
filters.put(PARAM_PRIORITY, req.getParameter(PARAM_PRIORITY)); filters.put(PARAM_PRIORITY, req.getParameter(PARAM_PRIORITY));
filters.put(PARAM_DEFINITION_NAME, req.getParameter(PARAM_DEFINITION_NAME)); filters.put(PARAM_DEFINITION_NAME, req.getParameter(PARAM_DEFINITION_NAME));
@@ -90,12 +95,25 @@ public class WorkflowInstancesGet extends AbstractWorkflowWebscript
workflowDefinitionId = req.getParameter(PARAM_DEFINITION_ID); workflowDefinitionId = req.getParameter(PARAM_DEFINITION_ID);
} }
// default workflow state to ACTIVE if not supplied
if (state == null)
{
state = WorkflowState.ACTIVE;
}
List<WorkflowInstance> workflows = new ArrayList<WorkflowInstance>(); List<WorkflowInstance> workflows = new ArrayList<WorkflowInstance>();
if (workflowDefinitionId != null) if (workflowDefinitionId != null)
{ {
// list workflows for specified workflow definition // list workflows for specified workflow definition
workflows.addAll(workflowService.getWorkflows(workflowDefinitionId)); if (state == WorkflowState.ACTIVE)
{
workflows.addAll(workflowService.getActiveWorkflows(workflowDefinitionId));
}
else
{
workflows.addAll(workflowService.getCompletedWorkflows(workflowDefinitionId));
}
} }
else else
{ {
@@ -104,7 +122,14 @@ public class WorkflowInstancesGet extends AbstractWorkflowWebscript
// list workflows for all definitions // list workflows for all definitions
for (WorkflowDefinition workflowDefinition : workflowDefinitions) for (WorkflowDefinition workflowDefinition : workflowDefinitions)
{ {
workflows.addAll(workflowService.getWorkflows(workflowDefinition.getId())); if (state == WorkflowState.ACTIVE)
{
workflows.addAll(workflowService.getActiveWorkflows(workflowDefinition.getId()));
}
else
{
workflows.addAll(workflowService.getCompletedWorkflows(workflowDefinition.getId()));
}
} }
} }
@@ -199,20 +224,6 @@ public class WorkflowInstancesGet extends AbstractWorkflowWebscript
break; break;
} }
} }
else if (key.equals(PARAM_STATE))
{
WorkflowState filter = WorkflowState.getState(filterValue.toString());
if (filter != null)
{
if (filter.equals(WorkflowState.COMPLETED) && workflowInstance.isActive() ||
filter.equals(WorkflowState.ACTIVE) && !workflowInstance.isActive())
{
result = false;
break;
}
}
}
else if (key.equals(PARAM_DUE_BEFORE)) else if (key.equals(PARAM_DUE_BEFORE))
{ {
Date dueDate = workflowInstance.getDueDate(); Date dueDate = workflowInstance.getDueDate();
@@ -279,30 +290,36 @@ public class WorkflowInstancesGet extends AbstractWorkflowWebscript
return result; return result;
} }
private enum WorkflowState /**
* Gets the specified {@link WorkflowState}, null if not requested.
*
* @param req The WebScript request
* @return The workflow state or null if not requested
*/
private WorkflowState getState(WebScriptRequest req)
{ {
ACTIVE ("active"), String stateName = req.getParameter(PARAM_STATE);
COMPLETED ("completed"); if (stateName != null)
String value;
WorkflowState(String value)
{ {
this.value = value; try
{
return WorkflowState.valueOf(stateName.toUpperCase());
} }
catch (IllegalArgumentException e)
static WorkflowState getState(String value)
{ {
for (WorkflowState state : WorkflowState.values()) String msg = "Unrecognised State parameter: " + stateName;
{ throw new WebScriptException(HttpServletResponse.SC_BAD_REQUEST, msg);
if (state.value.equals(value))
{
return state;
} }
} }
return null; return null;
} }
// enum to represent workflow states
private enum WorkflowState
{
ACTIVE,
COMPLETED;
} }
/** /**