package com.constellio.model.services.workflows.execution.xml; import java.util.Map; import org.jdom2.Document; import org.jdom2.Element; import com.constellio.model.entities.workflows.execution.WorkflowExecutedTask; import com.constellio.model.entities.workflows.execution.WorkflowExecution; import com.constellio.model.entities.workflows.trigger.Trigger; public class WorkflowExecutionWriter { private static final String STARTED_BY = "startedBy"; private static final String STARTED_ON = "startedOn"; private static final String WORKFLOW_DEFINITION_ID = "workflowDefinitionId"; private static final String CURRENT_TASK_ID = "currentTaskId"; private static final String WORKFLOW_EXCETUTION = "workflowExcetution"; private static final String ACTION_COMPLETION = "actionCompletion"; private static final String TRIGGER_METADATA_CODE = "triggerMetadataCode"; private static final String TRIGGER_SCHEMA_CODE = "triggerSchemaCode"; private static final String TRIGGER_TYPE = "triggerType"; private static final String TRIGGER = "trigger"; Document document; public WorkflowExecutionWriter(Document document) { this.document = document; } public void add(WorkflowExecution workflowExecution) { Element workflowExecutionElement = new Element(WORKFLOW_EXCETUTION); document.setRootElement(workflowExecutionElement); Element workflowDefinitionIdElement = new Element(WORKFLOW_DEFINITION_ID); workflowDefinitionIdElement.setText(workflowExecution.getWorkflowDefinitionId()); workflowExecutionElement.addContent(workflowDefinitionIdElement); Element startedOnElement = new Element(STARTED_ON); startedOnElement.setText(workflowExecution.getStartedOn().toString()); workflowExecutionElement.addContent(startedOnElement); Element startedByElement = new Element(STARTED_BY); startedByElement.setText(workflowExecution.getStartedBy()); workflowExecutionElement.addContent(startedByElement); Element triggerElement = createTriggerElement(workflowExecution.getTrigger()); workflowExecutionElement.addContent(triggerElement); Element recordIdsElement = new Element("recordIds"); for(String recordId: workflowExecution.getRecordIds()) { Element recordIdElement = new Element("recordId"); recordIdElement.setText(recordId); recordIdsElement.addContent(recordIdElement); } workflowExecutionElement.addContent(recordIdsElement); Element currentTaskIdElement = new Element(CURRENT_TASK_ID); currentTaskIdElement.setText(workflowExecution.getCurrentTaskId()); workflowExecutionElement.addContent(currentTaskIdElement); Element currentTaskStartedOnElement = new Element("currentTaskStartedOn"); currentTaskStartedOnElement.setText(workflowExecution.getCurrentTaskStartedOn().toString()); workflowExecutionElement.addContent(currentTaskStartedOnElement); Element variablesElements = new Element("variables"); for (Map.Entry<String, String> variables : workflowExecution.getVariables().entrySet()) { Element variableElement = new Element("variable"); Element variableKeyElement = new Element("variableKey"); variableKeyElement.setText(variables.getKey()); Element variableValueElement = new Element("variableValue"); variableValueElement.setText(variables.getValue()); variableElement.addContent(variableKeyElement); variableElement.addContent(variableValueElement); variablesElements.addContent(variableElement); } workflowExecutionElement.addContent(variablesElements); Element workflowExecutedTaskElements = new Element("workflowExecutedTask"); for (WorkflowExecutedTask workflowExecutedTask : workflowExecution.getExecutedTasks()) { Element workflowExecutedTaskElement = new Element("workflowExecutedTask"); Element taskIdElement = new Element("taskId"); taskIdElement.setText(workflowExecutedTask.getTaskId()); workflowExecutedTaskElement.addContent(taskIdElement); Element taskStartedOnElement = new Element("startedOn"); taskStartedOnElement.setText(workflowExecutedTask.getStartedOn().toString()); workflowExecutedTaskElement.addContent(taskStartedOnElement); Element taskFinishedOnElement = new Element("finishedOn"); taskFinishedOnElement.setText(workflowExecutedTask.getFinishedOn().toString()); workflowExecutedTaskElement.addContent(taskFinishedOnElement); Element taskFinishedByElement = new Element("finishedBy"); taskFinishedByElement.setText(workflowExecutedTask.getFinishedBy()); workflowExecutedTaskElement.addContent(taskFinishedByElement); workflowExecutedTaskElements.addContent(workflowExecutedTaskElement); } workflowExecutionElement.addContent(workflowExecutedTaskElements); Element markedAsWaitingForSystemElement = new Element("markedAsWaitingForSystem"); boolean markedAsWaitingForSystem = workflowExecution.isMarkAsWaitingForSystem(); markedAsWaitingForSystemElement.setText(String.valueOf(markedAsWaitingForSystem)); workflowExecutionElement.addContent(markedAsWaitingForSystemElement); } private Element createTriggerElement(Trigger trigger) { Element triggerTypeElement = new Element(TRIGGER_TYPE); triggerTypeElement.setText(trigger.getTriggerType().name()); Element actionCompletionElement = new Element(ACTION_COMPLETION); actionCompletionElement.setText(trigger.getActionCompletion().name()); Element triggerSchemaCodeElement = new Element(TRIGGER_SCHEMA_CODE); triggerSchemaCodeElement.setText(trigger.getTriggeredSchemaCode()); Element triggerMetadataCodeElement = new Element(TRIGGER_METADATA_CODE); triggerMetadataCodeElement.setText(trigger.getTriggeredMetadataCode()); Element triggerElement = new Element(TRIGGER); triggerElement.addContent(triggerTypeElement); triggerElement.addContent(triggerSchemaCodeElement); triggerElement.addContent(triggerMetadataCodeElement); triggerElement.addContent(actionCompletionElement); return triggerElement; } }