Coverage Summary for Class: TasksToWorkflowConverter (org.kitodo.production.migration)

Class Class, % Method, % Line, %
TasksToWorkflowConverter 100% (1/1) 100% (6/6) 96,7% (29/30)


 /*
  * (c) Kitodo. Key to digital objects e. V. <contact@kitodo.org>
  *
  * This file is part of the Kitodo project.
  *
  * It is licensed under GNU General Public License version 3 or later.
  *
  * For the full copyright and license information, please read the
  * GPL3-License.txt file that was distributed with this source code.
  */
 
 package org.kitodo.production.migration;
 
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.net.URI;
 import java.util.Comparator;
 import java.util.List;
 
 import org.kitodo.config.ConfigCore;
 import org.kitodo.data.database.beans.Task;
 import org.kitodo.production.services.ServiceManager;
 import org.kitodo.production.services.file.FileService;
 
 public class TasksToWorkflowConverter {
 
     private static final int BOX_DISTANCE = 150;
 
     /**
      * Convert given tasks to workflow file.
      *
      * @param title
      *            for workflow
      * @param tasks
      *            for conversion
      */
     public void convertTasksToWorkflowFile(String title, List<Task> tasks) throws IOException {
         String workflow = createWorkflow(title, tasks);
         saveFile(title, workflow);
     }
 
     private String createWorkflow(String title, List<Task> tasks) {
         tasks.sort(Comparator.comparing(Task::getOrdering));
 
         StringBuilder xmlDiagram = new StringBuilder(
                 "<bpmn2:definitions xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
                         + "                   xmlns:bpmn2=\"http://www.omg.org/spec/BPMN/20100524/MODEL\"\n"
                         + "                   xmlns:bpmndi=\"http://www.omg.org/spec/BPMN/20100524/DI\"\n"
                         + "                   xmlns:dc=\"http://www.omg.org/spec/DD/20100524/DC\"\n"
                         + "                   xmlns:di=\"http://www.omg.org/spec/DD/20100524/DI\"\n"
                         + "                   xmlns:template=\"http://www.kitodo.org/template\" id=\"sample-diagram\"\n"
                         + "                   targetNamespace=\"http://bpmn.io/schema/bpmn\"\n"
                         + "                   xsi:schemaLocation=\"http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd\">\n"
                         + "    <bpmn2:process id=\"" + title + "\" name=\"" + title + "\" isExecutable=\"false\"\n"
                         + "                   template:outputName=\"" + title + "\">\n"
                         + "        <bpmn2:startEvent id=\"StartEvent_1\">\n"
                         + "            <bpmn2:outgoing>SequenceFlow_1</bpmn2:outgoing>\n"
                         + "        </bpmn2:startEvent>\n");
 
         convertTasksToXmlWorkflow(xmlDiagram, tasks);
         XmlGenerator.generateEndEvent(xmlDiagram, tasks.size());
 
         XmlGenerator.generateBpmnDiagram(xmlDiagram, title);
         convertTasksToWorkflowCoordinates(xmlDiagram, tasks);
         XmlGenerator.generateCloseBpmnDiagram(xmlDiagram);
 
         return xmlDiagram.toString();
     }
 
     private void convertTasksToXmlWorkflow(StringBuilder diagram, List<Task> tasks) {
         for (int i = 0; i < tasks.size(); i++) {
             int diagramOrder = i + 1;
             if (i == 0) {
                 diagram.append(
                     XmlGenerator.generateTask(tasks.get(i), "StartEvent_1", diagramOrder));
             } else {
                 diagram.append(XmlGenerator.generateTask(tasks.get(i), diagramOrder));
             }
         }
     }
 
     private void convertTasksToWorkflowCoordinates(StringBuilder diagram, List<Task> tasks) {
         int diagramStart = 498;
 
         for (int i = 1; i <= tasks.size(); i++) {
             diagram.append(XmlGenerator.generateTaskShape(i, diagramStart));
             diagramStart = diagramStart + BOX_DISTANCE;
         }
 
         XmlGenerator.generateBpmnEndEvent(diagram, diagramStart);
     }
 
     private void saveFile(String title, String fileContent) throws IOException {
         FileService fileService = ServiceManager.getFileService();
         URI xmlDiagramURI = new File(ConfigCore.getKitodoDiagramDirectory() + title + ".bpmn20.xml").toURI();
         if (fileService.fileExist(xmlDiagramURI)) {
             fileService.delete(xmlDiagramURI);
         }
 
         try (OutputStream outputStream = fileService.write(xmlDiagramURI);
                 BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream))) {
             bufferedWriter.write(fileContent);
         }
     }
 }