diff --git a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/BPMNTestgenerationApplication.java b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/BPMNTestgenerationApplication.java index 5ebf377cc13182725c8794438be6dd4c8a569964..24ad441a0825354a705f576a5dfe7782bcd4355c 100644 --- a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/BPMNTestgenerationApplication.java +++ b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/BPMNTestgenerationApplication.java @@ -4,14 +4,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.support.SpringBootServletInitializer; -import de.fhmuenster.masterthesis.Testgenerator.migration.MigrationService; - @SpringBootApplication public class BPMNTestgenerationApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(BPMNTestgenerationApplication.class, args); - - //MigrationService service = new MigrationService(); } } diff --git a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/migration/ActionType.java b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/migration/ActionType.java new file mode 100644 index 0000000000000000000000000000000000000000..e33ac0a9b4aa78b25dacd662f6b8aa2e17c1c7fe --- /dev/null +++ b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/migration/ActionType.java @@ -0,0 +1,5 @@ +package de.fhmuenster.masterthesis.Testgenerator.migration; + +public enum ActionType { + ACTIVITY_ADD_MANUAL_TASK, ACTIVITY_ADD_USER_TASK, ACTIVITY_ADD_SCRIPT_TASK, ACTIVITY_ADD_SERVICE_TASK +} diff --git a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/migration/FlowChangeWrapper.java b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/migration/FlowChangeWrapper.java new file mode 100644 index 0000000000000000000000000000000000000000..29bcbd5f65bfe6950ff2287f415b342ead9b4f40 --- /dev/null +++ b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/migration/FlowChangeWrapper.java @@ -0,0 +1,98 @@ +package de.fhmuenster.masterthesis.Testgenerator.migration; + +import java.util.ArrayList; +import java.util.List; + +import de.fhmuenster.masterthesis.Testgenerator.rest.dto.BPMNFlowDTO; +import de.fhmuenster.masterthesis.Testgenerator.rest.dto.FlowChangeWrapperDTO; +import de.fhmuenster.masterthesis.Testgenerator.rest.dto.FlowElementDTO; +import de.fhmuenster.masterthesis.Testgenerator.rest.dto.MigrationResultDTO; +import de.fhmuenster.masterthesis.Testgenerator.yaml.MigrationResult; +import de.fhmuenster.masterthesis.testgeneratorDSL.Flow; +import de.fhmuenster.masterthesis.testgeneratorDSL.FlowElement; +import de.fhmuenster.masterthesis.testgeneratorDSL.FlowElementReference; + +public class FlowChangeWrapper { + + private Flow flow; + private ActionType actionType; + private FlowElement flowElement; + private MigrationResult migrationResult; + + public FlowChangeWrapper() { + + } + + public Flow getFlow() { + return flow; + } + + public void setFlow(Flow flow) { + this.flow = flow; + } + + public ActionType getActionType() { + return actionType; + } + + public void setActionType(ActionType actionType) { + this.actionType = actionType; + } + + public FlowElement getFlowElement() { + return flowElement; + } + + public void setFlowElementReference(FlowElement flowElement) { + this.flowElement = flowElement; + } + + public FlowChangeWrapper(Flow flow, ActionType actionType, FlowElement flowElement, MigrationResult migrationResult) { + this.flow = flow; + this.actionType = actionType; + this.flowElement = flowElement; + this.migrationResult = migrationResult; + } + + public MigrationResult getMigrationResult() { + return migrationResult; + } + + public void setMigrationResult(MigrationResult migrationResult) { + this.migrationResult = migrationResult; + } + + public FlowChangeWrapperDTO convertToDTO() { + FlowChangeWrapperDTO dto = new FlowChangeWrapperDTO(); + + BPMNFlowDTO bpmnFlowDTO = new BPMNFlowDTO(); + bpmnFlowDTO.setName(this.getFlow().getName()); + bpmnFlowDTO.setTestCount(0); + + List<FlowElementDTO> flowElementDTOs = new ArrayList<>(); + for(FlowElementReference f : this.getFlow().getInclElements()) { + FlowElementDTO fDTO = new FlowElementDTO(); + fDTO.setId(f.getRef().getName()); + + flowElementDTOs.add(fDTO); + } + + bpmnFlowDTO.setFlowElements(flowElementDTOs); + + dto.setFlow(bpmnFlowDTO); + dto.setActionType(this.actionType.name()); + + FlowElementDTO flowElementDTO = new FlowElementDTO(); + flowElementDTO.setId(this.getFlowElement().getName()); + dto.setFlowElement(flowElementDTO); + + MigrationResultDTO migrationResultDTO = new MigrationResultDTO(); + migrationResultDTO.setPriority(this.getMigrationResult().getPriority()); + migrationResultDTO.setStatus(this.getMigrationResult().getStatus().name()); + + dto.setMigrationResult(migrationResultDTO); + + return dto; + } + +} diff --git a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/migration/MigrationResultWrapper.java b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/migration/MigrationResultWrapper.java new file mode 100644 index 0000000000000000000000000000000000000000..57f25c563f3db3db337bf24e5bdd1212446922cd --- /dev/null +++ b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/migration/MigrationResultWrapper.java @@ -0,0 +1,81 @@ +package de.fhmuenster.masterthesis.Testgenerator.migration; + +import java.util.ArrayList; +import java.util.List; + +import de.fhmuenster.masterthesis.Testgenerator.rest.dto.FlowChangeWrapperDTO; +import de.fhmuenster.masterthesis.Testgenerator.rest.dto.MigrationResultWrapperDTO; + +public class MigrationResultWrapper { + + private List<FlowChangeWrapper> greenResults; + private List<FlowChangeWrapper> yellowResults; + private List<FlowChangeWrapper> redResults; + + public MigrationResultWrapper() { + this.greenResults = new ArrayList<>(); + this.yellowResults = new ArrayList<>(); + this.redResults = new ArrayList<>(); + } + + public List<FlowChangeWrapper> getGreenResults() { + return greenResults; + } + + public void setGreenResults(List<FlowChangeWrapper> greenResults) { + this.greenResults = greenResults; + } + + public List<FlowChangeWrapper> getYellowResults() { + return yellowResults; + } + + public void setYellowResults(List<FlowChangeWrapper> yellowResults) { + this.yellowResults = yellowResults; + } + + public List<FlowChangeWrapper> getRedResults() { + return redResults; + } + + public void setRedResults(List<FlowChangeWrapper> redResults) { + this.redResults = redResults; + } + + public void addToGreenResult(FlowChangeWrapper wrapper) { + this.greenResults.add(wrapper); + } + + public void addToYellowResult(FlowChangeWrapper wrapper) { + this.yellowResults.add(wrapper); + } + + public void addToRedResult(FlowChangeWrapper wrapper) { + this.redResults.add(wrapper); + } + + public MigrationResultWrapperDTO convertToDTO() { + MigrationResultWrapperDTO dto = new MigrationResultWrapperDTO(); + List<FlowChangeWrapperDTO> greenDTO = new ArrayList<>(); + List<FlowChangeWrapperDTO> yellowDTO = new ArrayList<>(); + List<FlowChangeWrapperDTO> redDTO = new ArrayList<>(); + + for(FlowChangeWrapper f : this.getGreenResults()) { + greenDTO.add(f.convertToDTO()); + } + + for(FlowChangeWrapper f : this.getYellowResults()) { + yellowDTO.add(f.convertToDTO()); + } + + for(FlowChangeWrapper f : this.getRedResults()) { + redDTO.add(f.convertToDTO()); + } + + dto.setGreenResults(greenDTO); + dto.setYellowResults(yellowDTO); + dto.setRedResults(redDTO); + + return dto; + } +} diff --git a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/migration/MigrationService.java b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/migration/MigrationService.java index bf99ba75fdf61c4bd58f3e1b5ef1aa3539bd2e85..70a08eb15dfb97e85900d48314f111b932019775 100644 --- a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/migration/MigrationService.java +++ b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/migration/MigrationService.java @@ -1,14 +1,156 @@ package de.fhmuenster.masterthesis.Testgenerator.migration; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import javax.annotation.PostConstruct; + +import org.eclipse.emf.common.util.BasicEList; +import org.eclipse.emf.common.util.EList; +import org.springframework.stereotype.Service; + +import de.fhmuenster.masterthesis.Testgenerator.rest.dto.MigrationResultWrapperDTO; import de.fhmuenster.masterthesis.Testgenerator.yaml.MigrationYaml; import de.fhmuenster.masterthesis.Testgenerator.yaml.YamlReader; +import de.fhmuenster.masterthesis.serialization.TestgeneratorDSLSerializer; +import de.fhmuenster.masterthesis.testgeneratorDSL.Flow; +import de.fhmuenster.masterthesis.testgeneratorDSL.FlowElement; +import de.fhmuenster.masterthesis.testgeneratorDSL.FlowElementReference; +import de.fhmuenster.masterthesis.testgeneratorDSL.ManualTaskFlowElement; +import de.fhmuenster.masterthesis.testgeneratorDSL.UserTaskFlowElement; +import de.fhmuenster.masterthesis.testgeneratorDSL.SequenceFlowElement; +import de.fhmuenster.masterthesis.testgeneratorDSL.ServiceTaskFlowElement; +import de.fhmuenster.masterthesis.testgeneratorDSL.BusinessRuleTaskFlowElement; +import de.fhmuenster.masterthesis.utils.TestgeneratorDSLUtils; +import org.camunda.bpm.model.bpmn.instance.SequenceFlow; +import org.camunda.bpm.model.bpmn.instance.ServiceTask; +import org.camunda.bpm.model.bpmn.instance.ManualTask; +@Service public class MigrationService { + + private MigrationYaml yaml; + public MigrationService() { + } + + @PostConstruct + public void initYaml() { + + } + + public MigrationResultWrapper detectChanges(TestgeneratorDSLSerializer oldDSL, TestgeneratorDSLSerializer newDSL) { + //Annahme: Flows sind identisch + + MigrationResultWrapper migrationResultWrapper = new MigrationResultWrapper(); + List<FlowChangeWrapper> result = new ArrayList<>(); + + //oldDSL.getVariables().get(0). + + // 1. Schritt: Prüfen, ob in einem Flow neue Elemente hinzugekommen sind + List<FlowChangeWrapper> activityAddActionResults = detectActivityAddActions(oldDSL.getFlows(), newDSL.getFlows()); + transferResultsToCorrespondingCategory(migrationResultWrapper, activityAddActionResults); + + System.out.println("Ergebnis addAction"); + for(FlowChangeWrapper fcw : activityAddActionResults) { + System.out.println("+++ Neu: " + fcw.getFlowElement().getName() + " [" + fcw.getActionType() + "] in Flow " + fcw.getFlow().getName() + + " mit Status: " + fcw.getMigrationResult().getPriority()); + } + + return migrationResultWrapper; + } + + private List<FlowChangeWrapper> detectActivityAddActions(List<Flow> oldFlows, List<Flow> newFlows) { + List<FlowChangeWrapper> result = new ArrayList<>(); + //Flows miteinander vergleichen + for(int i=0; i < oldFlows.size(); i++) { + result.addAll(compareFlowsForAddAction(oldFlows.get(i), newFlows.get(i))); + } + + return result; + } + + private List<FlowChangeWrapper> compareFlowsForAddAction(Flow oldFlow, Flow newFlow) { + List<FlowElementReference> addedFlowElements = new ArrayList<>(); + List<FlowElementReference> oldElements = TestgeneratorDSLUtils.getInclElements(oldFlow); + List<FlowElementReference> newElements = TestgeneratorDSLUtils.getInclElements(newFlow); + + List<FlowChangeWrapper> result = new ArrayList<>(); + + for(FlowElementReference fer : newElements) { + if (fer.getRef() instanceof SequenceFlowElement) continue; + + if(!checkIfElementExistsInFlowElements(fer, oldElements)) { + addedFlowElements.add(fer); + } + } + + if(addedFlowElements.size() == 0) return result; + //Yaml laden YamlReader yamlReader = new YamlReader(); MigrationYaml yaml = yamlReader.loadMigrationYaml(); - System.out.println(yaml.getGateway().getAdd().getXor().getStatus()); + for(FlowElementReference e : addedFlowElements) { + if(e.getRef() instanceof ManualTaskFlowElement) { + result.add(new FlowChangeWrapper(newFlow, ActionType.ACTIVITY_ADD_MANUAL_TASK, + e.getRef(), yaml.getActivity().getAdd().getManualTask())); + } + if(e.getRef() instanceof UserTaskFlowElement) { + result.add(new FlowChangeWrapper(newFlow, ActionType.ACTIVITY_ADD_USER_TASK, + e.getRef(), yaml.getActivity().getAdd().getManualTask())); + } + if(e.getRef() instanceof BusinessRuleTaskFlowElement) { + BusinessRuleTaskFlowElement element = (BusinessRuleTaskFlowElement) e.getRef(); + //element.get + //element.get + result.add(new FlowChangeWrapper(newFlow, ActionType.ACTIVITY_ADD_USER_TASK, + e.getRef(), yaml.getActivity().getAdd().getManualTask())); + } + } + + return result; + + } + + private boolean checkIfElementExistsInFlowElements(FlowElementReference fer, List<FlowElementReference> elements) { + String id = fer.getRef().getName(); + + for(FlowElementReference e : elements) { + if(e.getRef().getName().equals(id)) { + return true; + } + } + return false; + } + + private void transferResultsToCorrespondingCategory(MigrationResultWrapper wrapper, List<FlowChangeWrapper> changes) { + if(changes.isEmpty()) return; + + for(FlowChangeWrapper change : changes) { + switch(change.getMigrationResult().getStatus()) { + case GREEN: + wrapper.addToGreenResult(change); + break; + case YELLOW: + wrapper.addToYellowResult(change); + break; + case RED: + wrapper.addToRedResult(change); + break; + default: + wrapper.addToGreenResult(change); + break; + } + } + } + + public MigrationResultWrapperDTO convertMigrationResultWrapper(MigrationResultWrapper wrapper) { + MigrationResultWrapperDTO dto = new MigrationResultWrapperDTO(); + dto = wrapper.convertToDTO(); + + return dto; } } diff --git a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/dto/FlowChangeWrapperDTO.java b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/dto/FlowChangeWrapperDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..47a2b8016a347b43584007469da6ac1490183810 --- /dev/null +++ b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/dto/FlowChangeWrapperDTO.java @@ -0,0 +1,53 @@ +package de.fhmuenster.masterthesis.Testgenerator.rest.dto; + +public class FlowChangeWrapperDTO { + + private BPMNFlowDTO flow; + private String actionType; + private FlowElementDTO flowElement; + private MigrationResultDTO migrationResult; + + public FlowChangeWrapperDTO() { + + } + + public FlowChangeWrapperDTO(BPMNFlowDTO flow, String actionType, FlowElementDTO flowElement, + MigrationResultDTO migrationResult) { + this.flow = flow; + this.actionType = actionType; + this.flowElement = flowElement; + this.migrationResult = migrationResult; + } + + public BPMNFlowDTO getFlow() { + return flow; + } + + public void setFlow(BPMNFlowDTO flow) { + this.flow = flow; + } + + public String getActionType() { + return actionType; + } + + public void setActionType(String actionType) { + this.actionType = actionType; + } + + public FlowElementDTO getFlowElement() { + return flowElement; + } + + public void setFlowElement(FlowElementDTO flowElement) { + this.flowElement = flowElement; + } + + public MigrationResultDTO getMigrationResult() { + return migrationResult; + } + + public void setMigrationResult(MigrationResultDTO migrationResult) { + this.migrationResult = migrationResult; + } +} diff --git a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/dto/MigrationResultDTO.java b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/dto/MigrationResultDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..32c472bae5c97079f3f994bcb22d5dc83e45baea --- /dev/null +++ b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/dto/MigrationResultDTO.java @@ -0,0 +1,36 @@ +package de.fhmuenster.masterthesis.Testgenerator.rest.dto; + +public class MigrationResultDTO { + private String status; + private int priority; + + public MigrationResultDTO() { + + } + + public MigrationResultDTO(String status, int priority) { + super(); + this.status = status; + this.priority = priority; + } + + + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public int getPriority() { + return priority; + } + + public void setPriority(int priority) { + this.priority = priority; + } + + +} diff --git a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/dto/MigrationResultWrapperDTO.java b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/dto/MigrationResultWrapperDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..d2b4ca9e6552280ebf55b55ac25bd7dba6512d0f --- /dev/null +++ b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/dto/MigrationResultWrapperDTO.java @@ -0,0 +1,46 @@ +package de.fhmuenster.masterthesis.Testgenerator.rest.dto; + +import java.util.List; + +public class MigrationResultWrapperDTO { + + private List<FlowChangeWrapperDTO> greenResults; + private List<FlowChangeWrapperDTO> yellowResults; + private List<FlowChangeWrapperDTO> redResults; + + public MigrationResultWrapperDTO() { + + } + + public MigrationResultWrapperDTO(List<FlowChangeWrapperDTO> greenResults, List<FlowChangeWrapperDTO> yellowResults, + List<FlowChangeWrapperDTO> redResults) { + super(); + this.greenResults = greenResults; + this.yellowResults = yellowResults; + this.redResults = redResults; + } + + public List<FlowChangeWrapperDTO> getGreenResults() { + return greenResults; + } + + public void setGreenResults(List<FlowChangeWrapperDTO> greenResults) { + this.greenResults = greenResults; + } + + public List<FlowChangeWrapperDTO> getYellowResults() { + return yellowResults; + } + + public void setYellowResults(List<FlowChangeWrapperDTO> yellowResults) { + this.yellowResults = yellowResults; + } + + public List<FlowChangeWrapperDTO> getRedResults() { + return redResults; + } + + public void setRedResults(List<FlowChangeWrapperDTO> redResults) { + this.redResults = redResults; + } +} diff --git a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/service/change/ChangeController.java b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/service/change/ChangeController.java index 0ff46e55fc848defcb127519fecbf53a43ff8d01..815260e3ae9ccee8f95b8ab2ec7968dd385bb32d 100644 --- a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/service/change/ChangeController.java +++ b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/service/change/ChangeController.java @@ -15,8 +15,13 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import de.fhmuenster.masterthesis.Testgenerator.migration.MigrationResultWrapper; +import de.fhmuenster.masterthesis.Testgenerator.migration.MigrationService; +import de.fhmuenster.masterthesis.Testgenerator.rest.dto.MigrationResultWrapperDTO; import de.fhmuenster.masterthesis.Testgenerator.rest.service.project.Project; import de.fhmuenster.masterthesis.Testgenerator.rest.service.project.ProjectService; +import de.fhmuenster.masterthesis.Testgenerator.utils.ProjectDirectoryUtils; +import de.fhmuenster.masterthesis.serialization.TestgeneratorDSLSerializer; @RestController public class ChangeController { @@ -24,6 +29,9 @@ public class ChangeController { @Autowired private ProjectService projectService; + @Autowired + private MigrationService migrationService; + @RequestMapping(path = "/project/{projectId}/match", method = RequestMethod.GET) public String test() { boolean success = true; @@ -54,4 +62,34 @@ public class ChangeController { return "false"; } + + @RequestMapping(path = "/project/{projectId}/migration/changes", method = RequestMethod.GET) + public MigrationResultWrapperDTO detectChanges(@PathVariable(required = true) Long projectId) { + //Annahme: Flows stimmen überein + + Project project = projectService.getProjectForId(projectId); + + MigrationResultWrapperDTO migrationResultWrapperDTO = new MigrationResultWrapperDTO(); + //Alte und neue DSL einlesen + Path testFilePath = ProjectDirectoryUtils.getTestspecificationPath(project.getProjectDirectories()); + Path newDSLFile = Paths.get(testFilePath.toString()); + Path oldDSLFile = Paths.get(project.getProjectDirectories().resolveTestPath(), "Testcollection-old.bpmn-testgen"); + try { + TestgeneratorDSLSerializer oldDSL = new TestgeneratorDSLSerializer(oldDSLFile.toString()); + TestgeneratorDSLSerializer newDSL = new TestgeneratorDSLSerializer(newDSLFile.toString()); + + MigrationResultWrapper migrationResultWrapper = migrationService.detectChanges(oldDSL, newDSL); + + migrationResultWrapperDTO = migrationService.convertMigrationResultWrapper(migrationResultWrapper); + + return migrationResultWrapperDTO; + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + return migrationResultWrapperDTO; + + } } diff --git a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/yaml/Configuration.java b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/yaml/Configuration.java new file mode 100644 index 0000000000000000000000000000000000000000..d7ee5dccb270e551ce8ca05c6b1fa5edf0d684b8 --- /dev/null +++ b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/yaml/Configuration.java @@ -0,0 +1,35 @@ +package de.fhmuenster.masterthesis.Testgenerator.yaml; + +public class Configuration { + private int green; + private int yellow; + private int red; + + public Configuration() { + + } + + public int getGreen() { + return green; + } + + public void setGreen(int green) { + this.green = green; + } + + public int getYellow() { + return yellow; + } + + public void setYellow(int yellow) { + this.yellow = yellow; + } + + public int getRed() { + return red; + } + + public void setRed(int red) { + this.red = red; + } +} diff --git a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/yaml/MigrationResult.java b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/yaml/MigrationResult.java index 18ce0a36f649d5ea607ed3f4891eee7aebd34806..bff5f3231bd68cf9437e43d72d8a160c79cb0d9e 100644 --- a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/yaml/MigrationResult.java +++ b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/yaml/MigrationResult.java @@ -3,7 +3,7 @@ package de.fhmuenster.masterthesis.Testgenerator.yaml; public class MigrationResult { private MigrationResultStatus status; - private int priority; + private Integer priority; public MigrationResult() { @@ -17,11 +17,11 @@ public class MigrationResult { this.status = status; } - public int getPriority() { + public Integer getPriority() { return priority; } - public void setPriority(int priority) { + public void setPriority(Integer priority) { this.priority = priority; } } diff --git a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/yaml/MigrationYaml.java b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/yaml/MigrationYaml.java index 5fba1770f66ff9de0fdee8a199d7d6c72d041e20..55eded941e1a8774257e031df42f528b86c7c086 100644 --- a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/yaml/MigrationYaml.java +++ b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/yaml/MigrationYaml.java @@ -1,6 +1,7 @@ package de.fhmuenster.masterthesis.Testgenerator.yaml; public class MigrationYaml { + private Configuration configuration; private Gateway gateway; private Activity activity; @@ -23,6 +24,15 @@ public class MigrationYaml { public void setActivity(Activity activity) { this.activity = activity; } + + public Configuration getConfiguration() { + return configuration; + } + + public void setConfiguration(Configuration configuration) { + this.configuration = configuration; + } + } diff --git a/Testgenerator/src/main/resources/application.properties b/Testgenerator/src/main/resources/application.properties index 59dee823fb4526817c23b33c82a43e5911377485..f7d1dac8f318dd197818d957016bb699648d3ac4 100644 --- a/Testgenerator/src/main/resources/application.properties +++ b/Testgenerator/src/main/resources/application.properties @@ -1,3 +1,3 @@ logging.level.root=INFO -testgenerator.projects=C:\\Users\\tillb\\Desktop\\fe_projekt\\projects.json +testgenerator.projects=C:\\CodePro\\projects.json diff --git a/Testgenerator/src/main/resources/migration.yaml b/Testgenerator/src/main/resources/migration.yaml index 7953ceb2984507162530610493eae059d756b457..7ba751b4e12d2aa0471ee96431fa103d36cb6979 100644 --- a/Testgenerator/src/main/resources/migration.yaml +++ b/Testgenerator/src/main/resources/migration.yaml @@ -1,3 +1,8 @@ +# globale Konfiguration für Status, kann dann spezieller überschrieben werden +configuration: + green: 100 + yellow: 200 + red: 500 gateway: add: xor: @@ -22,128 +27,3 @@ activity: priority: 0 manualTask: status: GREEN - priority: 0 - businessRuleTask: - withOutput: - status: RED - priority: 0 - withoutOutput: - status: GREEN - priority: 0 - serviceTask: - withOutput: - status: RED - priority: 0 - withoutOutput: - status: GREEN - priority: 0 - scriptTask: - withOutput: - status: RED - priority: 0 - withoutOutput: - status: GREEN - priority: 0 - delete: - userTask: - status: YELLOW - priority: 0 - manualTask: - status: GREEN - priority: 0 - businessRuleTask: - withOutput: - status: YELLOW - priority: 0 - withoutOutput: - status: GREEN - priority: 0 - serviceTask: - withOutput: - status: YELLOW - priority: 0 - withoutOutput: - status: GREEN - priority: 0 - scriptTask: - withOutput: - status: YELLOW - priority: 0 - withoutOutput: - status: GREEN - priority: 0 - changeConstraints: - betweenMinAndMax: - status: GREEN - priority: 0 - notBetweenMinAndMax: - status: RED - priority: 0 - addProcessVariable: - withOutput: - status: RED - priority: 0 - withoutOutput: - status: GREEN - priority: 0 - deleteProcessVariable: - withOutput: - status: YELLOW - priority: 0 - withoutOutput: - status: GREEN - priority: 0 - changeTaskType: - toUserask: - status: RED - priority: 0 - toManualTask: - status: GREEN - priority: 0 - toBusinessRuleTask: - withOutput: - status: RED - priority: 0 - withoutOutput: - status: GREEN - priority: 0 - toServiceTask: - withOutput: - status: RED - priority: 0 - withoutOutput: - status: GREEN - priority: 0 - toScriptTask: - withOutput: - status: RED - priority: 0 - withoutOutput: - status: GREEN - priority: 0 -event: - rename: - status: GREEN - priority: 0 - newVariable: - status: RED - priority: 0 - add: - status: RED - priority: 0 - delete: - status: RED - priority: 0 - changeConstraints: - betweenMinAndMax: - status: GREEN - priority: 0 - notBetweenMinAndMax: - status: RED - priority: 0 - changeOutgoing: - status: RED - priority: 0 - changeIncoming: - status: RED - priority: 0 \ No newline at end of file diff --git a/testgenerator-web/testgenerator-web/src/app/app-routing.module.ts b/testgenerator-web/testgenerator-web/src/app/app-routing.module.ts index 1fa6b2eb63f5367dee8ac87262d28853e90776a3..6b34003b7744d128ac86e531a2080cdb15c98352 100644 --- a/testgenerator-web/testgenerator-web/src/app/app-routing.module.ts +++ b/testgenerator-web/testgenerator-web/src/app/app-routing.module.ts @@ -35,8 +35,8 @@ const routes: Routes = [ { path: 'project/:projectId/mocks/external/:mockId', component: NewExternalMockComponent }, { path: 'project/:projectId/mocks/manual', component: NewManualMockComponent }, { path: 'project/:projectId/mocks/manual/:mockId', component: NewManualMockComponent }, + { path: 'project/:projectId/update/migration', component: MigrationOverviewComponent }, { path: 'project/:projectId/update', component: UpdateProjectComponent }, // new Update Component - { path: 'project/:projectId/migration-overview', component: MigrationOverviewComponent }, { path: 'impressum', component: ImprintComponent }, { path: 'notfound', component: NotfoundComponent }, { path: '**', redirectTo: 'notfound'} //has to be the last entry diff --git a/testgenerator-web/testgenerator-web/src/app/components/update-project/update-project.component.html b/testgenerator-web/testgenerator-web/src/app/components/update-project/update-project.component.html index d7cf7a1e1e69dc15597752430a0c7215840ae7a2..a305ea7172579e9cc2e3ed4b7775c965d79fe4f7 100644 --- a/testgenerator-web/testgenerator-web/src/app/components/update-project/update-project.component.html +++ b/testgenerator-web/testgenerator-web/src/app/components/update-project/update-project.component.html @@ -23,6 +23,9 @@ <button mdbBtn type="submit" (click)="compareProjects()" class="testgen-btn-rounded testgen-primary" rounded="true" i18n="compare bpmn">Compare BPMN-Diagrams</button> </div> + <div class="col-md-6"> + <a class="testgen-cardmenu testgen-card-basic" [routerLink]="['migration']">Migration starten</a> + </div> <div class="col-md-6"> <button mdbBtn type="submit" (click)="parseFiles()" class="testgen-btn-rounded testgen-primary" rounded="true" i18n="compare bpmn">@Henning parseFiles Testing-Button</button> diff --git a/testgenerator-web/testgenerator-web/src/app/components/update-project/update-project.component.ts b/testgenerator-web/testgenerator-web/src/app/components/update-project/update-project.component.ts index 07b98037cae9c1f541ca3e7ab95d522c9fd57f73..63e0c9081ddf8494a31eb08d310c736ea84265ed 100644 --- a/testgenerator-web/testgenerator-web/src/app/components/update-project/update-project.component.ts +++ b/testgenerator-web/testgenerator-web/src/app/components/update-project/update-project.component.ts @@ -91,6 +91,9 @@ export class UpdateProjectComponent implements OnInit { } console.log(this.actualProject) this.getMatchingFlowsMessage(); + + const url = `${environment.apiBaseUrl}project/${this.actualProject}/migration/changes`; + console.log(this.http.get(url, {responseType: 'json'}).toPromise()); } identifyMatchingFlows(projectId: number): Promise<string> { diff --git a/testgenerator-web/testgenerator-web/src/app/migration-overview/migration-overview.component.html b/testgenerator-web/testgenerator-web/src/app/migration-overview/migration-overview.component.html index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a64581b3786f8fc58811a20cca603f982e2a1428 100644 --- a/testgenerator-web/testgenerator-web/src/app/migration-overview/migration-overview.component.html +++ b/testgenerator-web/testgenerator-web/src/app/migration-overview/migration-overview.component.html @@ -0,0 +1,39 @@ +<div class="container"> + <div class="row row mt-5"> + <div class="col"> + <h2 class="testgen-headline-message" i18n="new-project header">Migration - Übersicht</h2> + <span>Die folgenden Änderungen wurden erkannt und durchgeführt.</span> + <div *ngIf="result"> + <div class="alert alert-success" role="alert"> + <h5>Automatische Übernahme</h5> + <span *ngFor="let greenResult of result.greenResults"> + ActionType: {{greenResult.actionType}} {{greenResult.flowElement.id}} in <b>{{greenResult.flow.name}}</b> + + + </span> + <div *ngIf="result.greenResults.length == 0">keine Daten</div> + </div> + <div class="alert alert-warning" role="alert"> + <h5>Automatische Übernahme, aber Analyse durch Prozessanalysten vorteilhaft</h5> + <span *ngFor="let yellowResult of result.yellowResults"> + ActionType: {{yellowResult.actionType}} {{yellowResult.flowElement.id}} in <b>{{yellowResult.flow.name}}</b> + + + </span> + <div *ngIf="result.yellowResults.length == 0">keine Daten</div> + </div> + <div class="alert alert-danger" role="alert"> + <h5>Automatische Übernahme nicht möglich, der Prozessanalyst muss eingreifen</h5> + <span *ngFor="let redResult of result.redResults"> + ActionType: {{redResult.actionType}} {{redResult.flowElement.id}} in <b>{{redResult.flow.name}}</b> + + + </span> + <div *ngIf="result.redResults.length == 0">keine Daten</div> + </div> + </div> + </div> + </div> +</div> + +<app-loading *ngIf="isLoading"></app-loading> \ No newline at end of file diff --git a/testgenerator-web/testgenerator-web/src/app/migration-overview/migration-overview.component.ts b/testgenerator-web/testgenerator-web/src/app/migration-overview/migration-overview.component.ts index 9d807a5e20612cda3947080914c9c4e73dfce2ef..a0aec047820e5814dc080a2c54b190734535c44a 100644 --- a/testgenerator-web/testgenerator-web/src/app/migration-overview/migration-overview.component.ts +++ b/testgenerator-web/testgenerator-web/src/app/migration-overview/migration-overview.component.ts @@ -1,4 +1,7 @@ import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { MigrationResultWrapper } from '../models/migration-result-wrapper'; +import { MigrationService } from '../services/migration-service'; @Component({ selector: 'app-migration-overview', @@ -7,9 +10,27 @@ import { Component, OnInit } from '@angular/core'; }) export class MigrationOverviewComponent implements OnInit { - constructor() { } + projectId: number; + result: MigrationResultWrapper; + isLoading: boolean; + + constructor(private migrationService: MigrationService, private route: ActivatedRoute) { + this.route.params.subscribe(params => + this.projectId = params['projectId'] + ) + } ngOnInit(): void { + this.startMigration(); + + } + + async startMigration() { + this.isLoading = true; + this.result = await this.migrationService.getMigrationResultWrapper(this.projectId); + this.isLoading = false; + console.log(this.result); + } } diff --git a/testgenerator-web/testgenerator-web/src/app/models/flow-change-wrapper.ts b/testgenerator-web/testgenerator-web/src/app/models/flow-change-wrapper.ts new file mode 100644 index 0000000000000000000000000000000000000000..127e272925532190fa04077c63a498f289b50cc5 --- /dev/null +++ b/testgenerator-web/testgenerator-web/src/app/models/flow-change-wrapper.ts @@ -0,0 +1,11 @@ +import { BPMNFlow } from "./bpmn-flow"; +import { BPMNFlowElement } from "./bpmn-flow-element"; +import { MigrationResult } from "./migration-result"; +import { MigrationResultWrapper } from "./migration-result-wrapper"; + +export interface FlowChangeWrapper { + flow: BPMNFlow; + actionType: string; + flowElement: BPMNFlowElement; + migrationResult: MigrationResult; +} \ No newline at end of file diff --git a/testgenerator-web/testgenerator-web/src/app/models/migration-result-wrapper.ts b/testgenerator-web/testgenerator-web/src/app/models/migration-result-wrapper.ts new file mode 100644 index 0000000000000000000000000000000000000000..7b7a980302929a54bdf8444a67b9033253209e2e --- /dev/null +++ b/testgenerator-web/testgenerator-web/src/app/models/migration-result-wrapper.ts @@ -0,0 +1,7 @@ +import { FlowChangeWrapper } from "./flow-change-wrapper"; + +export interface MigrationResultWrapper { + greenResults: Array<FlowChangeWrapper>; + yellowResults: Array<FlowChangeWrapper>; + redResults: Array<FlowChangeWrapper>; +} \ No newline at end of file diff --git a/testgenerator-web/testgenerator-web/src/app/models/migration-result.ts b/testgenerator-web/testgenerator-web/src/app/models/migration-result.ts new file mode 100644 index 0000000000000000000000000000000000000000..f19a9981cc36511bbaec585c2b487e7bc4a94904 --- /dev/null +++ b/testgenerator-web/testgenerator-web/src/app/models/migration-result.ts @@ -0,0 +1,4 @@ +export interface MigrationResult { + status: string; + priority: number; +} \ No newline at end of file diff --git a/testgenerator-web/testgenerator-web/src/app/services/migration-service.ts b/testgenerator-web/testgenerator-web/src/app/services/migration-service.ts new file mode 100644 index 0000000000000000000000000000000000000000..73a85a44646ae11d7facf09da9d6b8e1fa61aab1 --- /dev/null +++ b/testgenerator-web/testgenerator-web/src/app/services/migration-service.ts @@ -0,0 +1,18 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { environment } from 'src/environments/environment'; +import { BPMNFlowSet } from '../models/bpmn-flow-set'; +import { MigrationResultWrapper } from '../models/migration-result-wrapper'; + +@Injectable({ + providedIn: 'root' +}) +export class MigrationService { + + constructor(public http: HttpClient) { } + + public async getMigrationResultWrapper(projectId: number): Promise<MigrationResultWrapper> { + const url = `${environment.apiBaseUrl}project/${projectId}/migration/changes`; + return <MigrationResultWrapper>await this.http.get(url).toPromise(); + } +}