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 index 43f943a5600510924a3ae4bcd34980c30865f714..49ec4494b987f3686213daa7b6c04ec4392e0115 100644 --- a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/migration/FlowChangeWrapper.java +++ b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/migration/FlowChangeWrapper.java @@ -87,9 +87,9 @@ public class FlowChangeWrapper { dto.setFlowElement(flowElementDTO); MigrationResultDTO migrationResultDTO = new MigrationResultDTO(); - migrationResultDTO.setPriority(this.getMigrationResult().getPriority()); migrationResultDTO.setPriority(this.getMigrationResult().getPriority()); + migrationResultDTO.setStatus(this.getMigrationResult().getStatus().name()); dto.setMigrationResult(migrationResultDTO); 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 70a08eb15dfb97e85900d48314f111b932019775..aea5bf6112604eeb16715674ed1e0287ad7bd20a 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 @@ -9,9 +9,13 @@ import javax.annotation.PostConstruct; import org.eclipse.emf.common.util.BasicEList; import org.eclipse.emf.common.util.EList; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import de.fhmuenster.masterthesis.Testgenerator.rest.dto.MigrationResultWrapperDTO; +import de.fhmuenster.masterthesis.Testgenerator.rest.service.change.ChangeService; +import de.fhmuenster.masterthesis.Testgenerator.rest.service.test.TestService; +import de.fhmuenster.masterthesis.Testgenerator.yaml.MigrationResultStatus; import de.fhmuenster.masterthesis.Testgenerator.yaml.MigrationYaml; import de.fhmuenster.masterthesis.Testgenerator.yaml.YamlReader; import de.fhmuenster.masterthesis.serialization.TestgeneratorDSLSerializer; @@ -33,6 +37,9 @@ public class MigrationService { private MigrationYaml yaml; + @Autowired + private ChangeService changeService; + public MigrationService() { } @@ -47,8 +54,6 @@ public class MigrationService { 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); @@ -64,10 +69,20 @@ public class MigrationService { private List<FlowChangeWrapper> detectActivityAddActions(List<Flow> oldFlows, List<Flow> newFlows) { List<FlowChangeWrapper> result = new ArrayList<>(); + + //Flow Matching + Flow [][] matchingFlows = this.changeService.compareFlows(newFlows, oldFlows); + + for(int i=0; i < matchingFlows.length; i++) { + result.addAll(compareFlowsForAddAction(matchingFlows[i][1], matchingFlows[i][0])); + } + //Flows miteinander vergleichen + /* for(int i=0; i < oldFlows.size(); i++) { result.addAll(compareFlowsForAddAction(oldFlows.get(i), newFlows.get(i))); } + */ return result; } @@ -95,12 +110,22 @@ public class MigrationService { 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())); + FlowChangeWrapper fcw = new FlowChangeWrapper(newFlow, ActionType.ACTIVITY_ADD_MANUAL_TASK, + e.getRef(), yaml.getActivity().getAdd().getManualTask()); + if(fcw.getMigrationResult().getPriority() == null) { + fcw.getMigrationResult().setPriority(this.loadGlobalPriority(fcw.getMigrationResult().getStatus(), yaml)); + } + + result.add(fcw); } if(e.getRef() instanceof UserTaskFlowElement) { - result.add(new FlowChangeWrapper(newFlow, ActionType.ACTIVITY_ADD_USER_TASK, - e.getRef(), yaml.getActivity().getAdd().getManualTask())); + FlowChangeWrapper fcw = new FlowChangeWrapper(newFlow, ActionType.ACTIVITY_ADD_USER_TASK, + e.getRef(), yaml.getActivity().getAdd().getUserTask()); + if(fcw.getMigrationResult().getPriority() == null) { + fcw.getMigrationResult().setPriority(this.loadGlobalPriority(fcw.getMigrationResult().getStatus(), yaml)); + } + + result.add(fcw); } if(e.getRef() instanceof BusinessRuleTaskFlowElement) { BusinessRuleTaskFlowElement element = (BusinessRuleTaskFlowElement) e.getRef(); @@ -153,4 +178,24 @@ public class MigrationService { return dto; } + + private Integer loadGlobalPriority(MigrationResultStatus status, MigrationYaml yaml) { + Integer globalPriority = 0; + switch(status) { + case GREEN: + globalPriority = yaml.getConfiguration().getGreen(); + break; + case YELLOW: + globalPriority = yaml.getConfiguration().getYellow(); + break; + case RED: + globalPriority = yaml.getConfiguration().getRed(); + break; + default: + globalPriority = yaml.getConfiguration().getGreen(); + break; + } + + return globalPriority; + } } 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 7c29fa92a78a053ab5ba89bb296689acde67220d..c5d0fafca5adb8824298a84b7dc4fdfd02299ffb 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 @@ -4,8 +4,10 @@ import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; +import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -57,6 +59,8 @@ public class ChangeController { private ChangeService changeService; @Autowired private MigrationService migrationService; + @Autowired + private TestService testService; @RequestMapping(path = "/project/{projectId}/match", method = RequestMethod.GET) public void getNewFlows(@PathVariable(required = true) Long projectId) { @@ -91,10 +95,33 @@ public class ChangeController { Project project = projectService.getProjectForId(projectId); MigrationResultWrapperDTO migrationResultWrapperDTO = new MigrationResultWrapperDTO(); - //Alte und neue DSL einlesen + + //Alte DSL kopieren und neu generieren Path testFilePath = ProjectDirectoryUtils.getTestspecificationPath(project.getProjectDirectories()); + Path source = Paths.get(testFilePath.toString()); + Path target = Paths.get(project.getProjectDirectories().getProjectRootPath().toString(), + project.getProjectDirectories().getModelPath(), this.projectService.getBackupFolderName(), + "Testcollection.bpmn-testgen"); + + try { + Files.move(source, target, StandardCopyOption.REPLACE_EXISTING); + } + catch(Exception e) { + + } + + + + //Path testFilePath = ProjectDirectoryUtils.getTestspecificationPath(project.getProjectDirectories()); Path newDSLFile = Paths.get(testFilePath.toString()); - Path oldDSLFile = Paths.get(project.getProjectDirectories().resolveTestPath(), "Testcollection-old.bpmn-testgen"); + //Path oldDSLFile = Paths.get(project.getProjectDirectories().resolveTestPath(), "Testcollection-old.bpmn-testgen"); + Path oldDSLFile = Paths.get(project.getProjectDirectories().getProjectRootPath().toString(), + project.getProjectDirectories().getModelPath(), this.projectService.getBackupFolderName(), + "Testcollection.bpmn-testgen"); + + testService.initLoops(project); + testService.initTestcollection(project); + try { TestgeneratorDSLSerializer oldDSL = new TestgeneratorDSLSerializer(oldDSLFile.toString()); TestgeneratorDSLSerializer newDSL = new TestgeneratorDSLSerializer(newDSLFile.toString()); diff --git a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/service/test/TestService.java b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/service/test/TestService.java index 9e4f962d2d8c37bd3088e3e0214435330fa136ce..35027be70d3be454277aa7531e3eee0f724c536e 100644 --- a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/service/test/TestService.java +++ b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/service/test/TestService.java @@ -372,7 +372,9 @@ public class TestService { } else if (flowElement instanceof ScriptTask) { return TestgeneratorDSLObjectCreator.createScriptTaskFlowElement(flowElement.getId()); } else if (flowElement instanceof BusinessRuleTask) { - return TestgeneratorDSLObjectCreator.createBusinessRuleTaskFlowElement(flowElement.getId()); + String resultVariable = BPMNParseUtils.getResultVariable((BusinessRuleTask) flowElement); + + return TestgeneratorDSLObjectCreator.createBusinessRuleTaskFlowElement(flowElement.getId(), resultVariable); } else if (flowElement instanceof ServiceTask) { String delegate = getDelegate((ServiceTask) flowElement); String externalTopicTextual = getExternalTopic((ServiceTask) flowElement); diff --git a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/utils/BPMNParseUtils.java b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/utils/BPMNParseUtils.java index 93b97cdfc716d956a09a812c124fccb2064cc248..1058f4830164fe84dc88b0831709af0317155c4a 100644 --- a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/utils/BPMNParseUtils.java +++ b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/utils/BPMNParseUtils.java @@ -10,6 +10,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import org.camunda.bpm.model.bpmn.BpmnModelInstance; +import org.camunda.bpm.model.bpmn.instance.BusinessRuleTask; import org.camunda.bpm.model.bpmn.instance.ServiceTask; import org.camunda.bpm.model.dmn.DmnModelInstance; @@ -223,6 +224,11 @@ public class BPMNParseUtils { return externalTopic; } + public static String getResultVariable(BusinessRuleTask businessRuleTask) { + String resultVariable = businessRuleTask.getAttributeValueNs(NAMESPACE_URI_BPMN, "resultVariable"); + return resultVariable; + } + public static List<VariableDeclaration> getHardcodedVariables(String flowElementId, List<Variable> variables, BPMNIOParameters bpmnIOParameters) { List<VariableDeclaration> hardcodedVariables = new ArrayList<>(); diff --git a/Testgenerator/src/main/resources/migration.yaml b/Testgenerator/src/main/resources/migration.yaml index 8781b0b7bf0cf68def945a8c811999455d16c616..55fe0103660b9f994b2b4ba453bb34b18e927ba5 100644 --- a/Testgenerator/src/main/resources/migration.yaml +++ b/Testgenerator/src/main/resources/migration.yaml @@ -26,5 +26,4 @@ activity: status: RED priority: 0 manualTask: - status: GREEN - priority: 0 \ No newline at end of file + status: GREEN \ 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 6b34003b7744d128ac86e531a2080cdb15c98352..d47aafc67706640a512b32be088991e329b06a66 100644 --- a/testgenerator-web/testgenerator-web/src/app/app-routing.module.ts +++ b/testgenerator-web/testgenerator-web/src/app/app-routing.module.ts @@ -16,7 +16,7 @@ import { DeleteProjectComponent } from './components/delete-project/delete-proje import { LoopsComponent } from './components/loops/loops.component'; import { LoopComponent } from './components/loop/loop.component'; import { UpdateProjectComponent } from './components/update-project/update-project.component'; -import { MigrationOverviewComponent } from './migration-overview/migration-overview.component'; +import { MigrationOverviewComponent } from './components/migration-overview/migration-overview.component'; const routes: Routes = [ diff --git a/testgenerator-web/testgenerator-web/src/app/app.module.ts b/testgenerator-web/testgenerator-web/src/app/app.module.ts index 0fe153006afd0bb80fbc46add660cd77b668db5f..015a77f4c8fad5baca81f563ec59a10eab2e7c8a 100644 --- a/testgenerator-web/testgenerator-web/src/app/app.module.ts +++ b/testgenerator-web/testgenerator-web/src/app/app.module.ts @@ -30,7 +30,7 @@ import { DeleteProjectComponent } from './components/delete-project/delete-proje import { LoopsComponent } from './components/loops/loops.component'; import { LoopComponent } from './components/loop/loop.component'; import { UpdateProjectComponent } from './components/update-project/update-project.component'; -import { MigrationOverviewComponent } from './migration-overview/migration-overview.component'; +import { MigrationOverviewComponent } from './components/migration-overview/migration-overview.component'; @NgModule({ declarations: [ diff --git a/testgenerator-web/testgenerator-web/src/app/migration-overview/migration-overview.component.css b/testgenerator-web/testgenerator-web/src/app/components/migration-overview/migration-overview.component.css similarity index 100% rename from testgenerator-web/testgenerator-web/src/app/migration-overview/migration-overview.component.css rename to testgenerator-web/testgenerator-web/src/app/components/migration-overview/migration-overview.component.css diff --git a/testgenerator-web/testgenerator-web/src/app/migration-overview/migration-overview.component.html b/testgenerator-web/testgenerator-web/src/app/components/migration-overview/migration-overview.component.html similarity index 100% rename from testgenerator-web/testgenerator-web/src/app/migration-overview/migration-overview.component.html rename to testgenerator-web/testgenerator-web/src/app/components/migration-overview/migration-overview.component.html diff --git a/testgenerator-web/testgenerator-web/src/app/migration-overview/migration-overview.component.spec.ts b/testgenerator-web/testgenerator-web/src/app/components/migration-overview/migration-overview.component.spec.ts similarity index 100% rename from testgenerator-web/testgenerator-web/src/app/migration-overview/migration-overview.component.spec.ts rename to testgenerator-web/testgenerator-web/src/app/components/migration-overview/migration-overview.component.spec.ts diff --git a/testgenerator-web/testgenerator-web/src/app/migration-overview/migration-overview.component.ts b/testgenerator-web/testgenerator-web/src/app/components/migration-overview/migration-overview.component.ts similarity index 85% rename from testgenerator-web/testgenerator-web/src/app/migration-overview/migration-overview.component.ts rename to testgenerator-web/testgenerator-web/src/app/components/migration-overview/migration-overview.component.ts index a0aec047820e5814dc080a2c54b190734535c44a..ca40a67be0438d83f52853aee7e3c174e151cbae 100644 --- a/testgenerator-web/testgenerator-web/src/app/migration-overview/migration-overview.component.ts +++ b/testgenerator-web/testgenerator-web/src/app/components/migration-overview/migration-overview.component.ts @@ -1,7 +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'; +import { MigrationResultWrapper } from '../../models/migration-result-wrapper'; +import { MigrationService } from '../../services/migration-service'; @Component({ selector: 'app-migration-overview',