From 55c4c05ca81b1b570feef94171612c4b0f22a0b9 Mon Sep 17 00:00:00 2001 From: tb149289 <tb149289@fh-muenster.de> Date: Tue, 9 Nov 2021 15:07:59 +0100 Subject: [PATCH] Code aus ChangeController teilweise in ChangeService ausgelagert --- .../sample/onlineschuhdemo/ManualTasks.java | 3 - .../Testcollection-old.bpmn-testgen | 0 .../Testcollection.bpmn-testgen | 9 ++ .../rest/service/change/ChangeController.java | 127 ++---------------- .../rest/service/change/ChangeService.java | 112 +++++++++++++++ .../src/main/resources/application.properties | 2 +- 6 files changed, 132 insertions(+), 121 deletions(-) create mode 100644 OnlineSchuhDemo/src/test/java/de/sample/onlineschuhdemo/Testcollection-old.bpmn-testgen create mode 100644 Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/service/change/ChangeService.java diff --git a/OnlineSchuhDemo/src-gen/de/sample/onlineschuhdemo/ManualTasks.java b/OnlineSchuhDemo/src-gen/de/sample/onlineschuhdemo/ManualTasks.java index 5cc6b03..ac22bea 100644 --- a/OnlineSchuhDemo/src-gen/de/sample/onlineschuhdemo/ManualTasks.java +++ b/OnlineSchuhDemo/src-gen/de/sample/onlineschuhdemo/ManualTasks.java @@ -3,9 +3,6 @@ package de.sample.onlineschuhdemo; public class ManualTasks { public static final String WARE_EINSORTIEREN = "Ware_einsortieren"; - public static final String NEW_TASK_1 = "New_Task_1"; - public static final String NEW_TASK_2 = "New_Task_2"; - public static final String NEW_FLOW_2 = "New_Flow_2"; public static final String WARE_AUSPACKEN_NORMAL = "Ware_auspacken_normal"; public static final String WARE_AUSPACKEN_LUXUS = "Ware_auspacken_luxus"; diff --git a/OnlineSchuhDemo/src/test/java/de/sample/onlineschuhdemo/Testcollection-old.bpmn-testgen b/OnlineSchuhDemo/src/test/java/de/sample/onlineschuhdemo/Testcollection-old.bpmn-testgen new file mode 100644 index 0000000..e69de29 diff --git a/OnlineSchuhDemo/src/test/java/de/sample/onlineschuhdemo/Testcollection.bpmn-testgen b/OnlineSchuhDemo/src/test/java/de/sample/onlineschuhdemo/Testcollection.bpmn-testgen index 4cc8a59..6599442 100644 --- a/OnlineSchuhDemo/src/test/java/de/sample/onlineschuhdemo/Testcollection.bpmn-testgen +++ b/OnlineSchuhDemo/src/test/java/de/sample/onlineschuhdemo/Testcollection.bpmn-testgen @@ -127,6 +127,15 @@ without elements : [ Flow_unbeschaedigt , Ware_einsortieren , Flow_0a9rzst , Flo Flow Flow_11 for process with elements : [ Retoure_Start , Flow_Start , Gateway_Parallel_Lager_Neusendung , Flow_0eh02jo , Gateway_Beschaedigt , Flow_beschaedigt , Warendaten_erfassen , Flow_01lf19r , Vernichtung_ermitteln , Flow_0kgxxke , Gateway_Vernichtung , Flow_spenden , Ware_spenden , Flow_0f171gg , Gateway_Vernichtung_Close , Flow_14jbtgw , Gateway_Beschaedigt_Close , Flow_1c2tfla , Flow_1gu0k49 , Kundendaten_ermitteln , Flow_0iibopi , Gateway_Neusendung , Flow_neusenden , Manuelle_Pruefung , Flow_0u77zm0 , Warennummer_ermitteln , Flow_03ubi3l , Gateway_Einpackung_Fehlerhaft_Closed , Flow_006t3wo , Paket_packen , Flow_0bhr7g8 , Paket_pruefen , Flow_1n6o3h6 , Gateway_Einpackung_Fehlerhaft , Flow_fehlerhaft_eingepackt , Gateway_Auspacken , Flow_luxus_auspacken , Ware_auspacken_luxus , Flow_04tyvq1 , Gateway_14evkap , Flow_1bnro90 , Gateway_Einpackung_Fehlerhaft_Closed , Flow_006t3wo , Paket_packen , Flow_0bhr7g8 , Paket_pruefen , Flow_1n6o3h6 , Gateway_Einpackung_Fehlerhaft , Flow_paket_okay , Paket_senden , Flow_0u4n4gn , Gateway_Neusendung_Closed , Flow_0m33odz , Gateway_Parallel_Lager_Neusendung_Closed , Flow_Ende , Retoure_Ende ] without elements : [ Flow_unbeschaedigt , Ware_einsortieren , Flow_0a9rzst , Flow_Erstattung , Finanzdaten_ermitteln , Flow_Erstattung_Datenermittlung , Erstattung , Flow_Erstattung_abgeschlossen , Flow_normal_auspacken , Ware_auspacken_normal , Flow_0d8lhxo , Flow_vernichten , Ware_vernichten , Flow_0zkq7z5 ] ; +Flow Flow_12 for process +with elements : [ Retoure_Start , Flow_Start , Gateway_Parallel_Lager_Neusendung , Flow_0eh02jo , Gateway_Beschaedigt , Flow_beschaedigt , Warendaten_erfassen , Flow_01lf19r , Vernichtung_ermitteln , Flow_0kgxxke , Gateway_Vernichtung , Flow_spenden , Ware_spenden , Flow_0f171gg , Gateway_Vernichtung_Close , Flow_14jbtgw , Gateway_Beschaedigt_Close , Flow_1c2tfla , Flow_1gu0k49 , Kundendaten_ermitteln , Flow_0iibopi , Gateway_Neusendung , Flow_neusenden , Manuelle_Pruefung , Flow_0u77zm0 , Warennummer_ermitteln , Flow_03ubi3l , Gateway_Einpackung_Fehlerhaft_Closed , Flow_006t3wo , Paket_packen , Flow_0bhr7g8 , Paket_pruefen , Flow_1n6o3h6 , Gateway_Einpackung_Fehlerhaft , Flow_fehlerhaft_eingepackt , Gateway_Auspacken , Flow_normal_auspacken , Ware_auspacken_normal , Flow_0d8lhxo , Gateway_14evkap , Flow_1bnro90 , Gateway_Einpackung_Fehlerhaft_Closed , Flow_006t3wo , Paket_packen , Flow_0bhr7g8 , Paket_pruefen , Flow_1n6o3h6 , Gateway_Einpackung_Fehlerhaft , Flow_paket_okay , Paket_senden , Flow_0u4n4gn , Gateway_Neusendung_Closed , Flow_0m33odz , Gateway_Parallel_Lager_Neusendung_Closed , Flow_Ende , Retoure_Ende ] +without elements : [ Flow_unbeschaedigt , Ware_einsortieren , Flow_0a9rzst , New_Task_1 , Flow_New_1 , Flow_Erstattung , Finanzdaten_ermitteln , Flow_Erstattung_Datenermittlung , Erstattung , Flow_Erstattung_abgeschlossen , New_Task_2 , New_Flow_2 , Flow_luxus_auspacken , Ware_auspacken_luxus , Flow_04tyvq1 , Flow_vernichten , Ware_vernichten , Flow_0zkq7z5 ] ; +Flow Flow_13 for process +with elements : [ Retoure_Start , Flow_Start , Gateway_Parallel_Lager_Neusendung , Flow_0eh02jo , Gateway_Beschaedigt , Flow_beschaedigt , Warendaten_erfassen , Flow_01lf19r , Vernichtung_ermitteln , Flow_0kgxxke , Gateway_Vernichtung , Flow_spenden , Ware_spenden , Flow_0f171gg , Gateway_Vernichtung_Close , Flow_14jbtgw , Gateway_Beschaedigt_Close , Flow_1c2tfla , Flow_1gu0k49 , Kundendaten_ermitteln , Flow_0iibopi , Gateway_Neusendung , Flow_neusenden , Manuelle_Pruefung , Flow_0u77zm0 , Warennummer_ermitteln , Flow_03ubi3l , Gateway_Einpackung_Fehlerhaft_Closed , Flow_006t3wo , Paket_packen , Flow_0bhr7g8 , Paket_pruefen , Flow_1n6o3h6 , Gateway_Einpackung_Fehlerhaft , Flow_fehlerhaft_eingepackt , Gateway_Auspacken , Flow_normal_auspacken , Ware_auspacken_normal , Flow_0d8lhxo , Gateway_14evkap , Flow_1bnro90 , Gateway_Einpackung_Fehlerhaft_Closed , Flow_006t3wo , Paket_packen , Flow_0bhr7g8 , Paket_pruefen , Flow_1n6o3h6 , Gateway_Einpackung_Fehlerhaft , Flow_paket_okay , Paket_senden , Flow_0u4n4gn , Gateway_Neusendung_Closed , Flow_0m33odz , Gateway_Parallel_Lager_Neusendung_Closed , Flow_Ende , Retoure_Ende ] +without elements : [ Flow_unbeschaedigt , Ware_einsortieren , Flow_0a9rzst , New_Task_1 , Flow_New_1 , Flow_Erstattung , Finanzdaten_ermitteln , Flow_Erstattung_Datenermittlung , Erstattung , Flow_Erstattung_abgeschlossen , New_Task_2 , New_Flow_2 , Flow_luxus_auspacken , Ware_auspacken_luxus , Flow_04tyvq1 , Flow_vernichten , Ware_vernichten , Flow_0zkq7z5 ] ; +Flow Flow_14 for process +with elements : [ Retoure_Start , Flow_Start , Gateway_Parallel_Lager_Neusendung , Flow_0eh02jo , Gateway_Beschaedigt , Flow_beschaedigt , Warendaten_erfassen , Flow_01lf19r , Vernichtung_ermitteln , Flow_0kgxxke , Gateway_Vernichtung , Flow_vernichten , Ware_vernichten , Flow_0zkq7z5 , Gateway_Vernichtung_Close , Flow_14jbtgw , Gateway_Beschaedigt_Close , Flow_1c2tfla , Flow_1gu0k49 , Kundendaten_ermitteln , Flow_0iibopi , Gateway_Neusendung , Flow_neusenden , Manuelle_Pruefung , Flow_0u77zm0 , Warennummer_ermitteln , Flow_03ubi3l , Gateway_Einpackung_Fehlerhaft_Closed , Flow_006t3wo , Paket_packen , Flow_0bhr7g8 , Paket_pruefen , Flow_1n6o3h6 , Gateway_Einpackung_Fehlerhaft , Flow_fehlerhaft_eingepackt , Gateway_Auspacken , Flow_luxus_auspacken , Ware_auspacken_luxus , Flow_04tyvq1 , Gateway_14evkap , Flow_1bnro90 , Gateway_Einpackung_Fehlerhaft_Closed , Flow_006t3wo , Paket_packen , Flow_0bhr7g8 , Paket_pruefen , Flow_1n6o3h6 , Gateway_Einpackung_Fehlerhaft , Flow_paket_okay , Paket_senden , Flow_0u4n4gn , Gateway_Neusendung_Closed , Flow_0m33odz , Gateway_Parallel_Lager_Neusendung_Closed , Flow_Ende , Retoure_Ende ] +without elements : [ Flow_unbeschaedigt , Ware_einsortieren , Flow_0a9rzst , New_Task_1 , Flow_New_1 , Flow_Erstattung , Finanzdaten_ermitteln , Flow_Erstattung_Datenermittlung , Erstattung , Flow_Erstattung_abgeschlossen , New_Task_2 , New_Flow_2 , Flow_normal_auspacken , Ware_auspacken_normal , Flow_0d8lhxo , Flow_spenden , Ware_spenden , Flow_0f171gg ] ; DelegateMock Warennummer_ermitteln for Warennummer_ermitteln with delegate "de.sample.onlineschuhdemo.externalaccess.WarennummerErmittelnDelegate" with manual "de.sample.onlineschuhdemo.externalaccess.LagerService" by setter "setLagerService" ; 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 f39025f..7c29fa9 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 @@ -54,141 +54,34 @@ public class ChangeController { @Autowired private FlowService flowService; @Autowired - private TestService testService; - + private ChangeService changeService; @Autowired private MigrationService migrationService; @RequestMapping(path = "/project/{projectId}/match", method = RequestMethod.GET) public void getNewFlows(@PathVariable(required = true) Long projectId) { - boolean success = true; - List <List<String>> newFlowsElements = new ArrayList<List<String>>(); - List <List<String>> oldFlowsElements = new ArrayList<List<String>>(); - - //neue Flow ist erste Element, alte Flow zweite - - -// String[] keywords = { "Flow Flow_", "with elements", "without elements"}; -// try { -// BufferedReader reader = new BufferedReader(new FileReader("C:\\Users\\tillb\\Desktop\\fe_projekt\\fe-pda-testing-tool\\OnlineSchuhDemo\\dsl_matching\\Testcollection1.bpmn-testgen")); -// String line = reader.readLine(); -// while(line !=null) -// { -// for(int i = 0 ; i<keywords.length;i++){ -// if(line.startsWith(keywords[i])){ -// System.out.println(line); -// } -// } -// line=reader.readLine(); -// } -// } catch (Exception ex) { -// System.out.println(ex.getMessage()); -// } Project projectForId = projectService.getProjectForId(projectId); - //speichern von neuen Flow Elementen aller Flows - + //speichern aller neuen Flows List<Flow> newFlows = flowService.getFlows(projectForId.getProjectDirectories()); - - //für alte Flows + //Pfad zu alten Flows und Speichern aller alten Flows String pathOld = "C:\\Users\\tillb\\Desktop\\fe_projekt\\fe-pda-testing-tool\\OnlineSchuhDemo\\dsl_matching\\MatchingTestcollectionOld.bpmn-testgen"; List<Flow> oldFlows = flowService.getOldFlows(pathOld); - Flow [][] matchingFlows = new Flow [newFlows.size()][]; - - matchingFlows = compareFlows(newFlows, oldFlows); - } + Flow [][] matchingFlows = changeService.compareFlows(newFlows, oldFlows); +// for (int i=0; i<newFlows.size();i++) { +// System.out.println(matchingFlows[i][0]+" "+matchingFlows[i][1]); +// +// } + } - private Flow[][] compareFlows(List<Flow> newFlows, List<Flow> oldFlows) { - - //hier werden die Flows gespeichert, die zurückgegeben werden. [x][0] -> Flow neu, [x][1] -> passender Flow alt - Flow [][] matchingFlows = new Flow [newFlows.size()][2]; - - List <Integer> checkedFlowsOld = new ArrayList <Integer>(); - List <String> checkedElements = new ArrayList <String>(); - - int currentNewFlow = 0; - - for (Flow newFlow: newFlows) { - - EList<FlowElementReference> newFlowElements = newFlow.getInclElements(); - - int mostSimilarities = 0; - int leastDifferences = 10000; - - int currentOldFlow = 0; - - - for (Flow oldFlow: oldFlows) { - - EList<FlowElementReference> oldFlowElements = oldFlow.getInclElements(); - - int similarities = 0; - int differences = 0; - - if(checkedFlowsOld.contains(currentOldFlow)); - - else { - - for (FlowElementReference newFlowElement: newFlowElements) { - if(checkedElements.contains(newFlowElement.getRef().getName())) {} - - else { - - for (FlowElementReference oldFlowElement: oldFlowElements) { - - if(checkedElements.contains(oldFlowElement.getRef().getName())) {} - - else { - - if(newFlowElement.getRef().getName().equals(oldFlowElement.getRef().getName())) { - similarities++; - checkedElements.add(newFlowElement.getRef().getName()); - - } - - } - } - } - } - } - //berechnen der Elemente, die aus dem alten und neuen Flow nicht zueinander gepasst haben - differences = oldFlow.getInclElements().size()-similarities + newFlow.getInclElements().size()-similarities; - - - // falls aktuell übprüfte Flow alt und neu Kombination die meisten Gemeinsamkeiten haben oder noch nichts in matchingFlows gespeichert wurde - if(mostSimilarities<similarities || (mostSimilarities==similarities && leastDifferences> differences)) { - - - mostSimilarities=similarities; - leastDifferences = differences; - - matchingFlows[currentNewFlow][0] = newFlow; - matchingFlows[currentNewFlow][1] = oldFlow; - - - } - checkedElements = new ArrayList <String>(); - - currentOldFlow++; - - } - - currentNewFlow++; - } - - - - - - return matchingFlows; - } + @RequestMapping(path = "/project/{projectId}/migration/changes", method = RequestMethod.GET) diff --git a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/service/change/ChangeService.java b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/service/change/ChangeService.java new file mode 100644 index 0000000..b9778b5 --- /dev/null +++ b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/service/change/ChangeService.java @@ -0,0 +1,112 @@ +package de.fhmuenster.masterthesis.Testgenerator.rest.service.change; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +import org.eclipse.emf.common.util.EList; +import org.springframework.stereotype.Service; + +import de.fhmuenster.masterthesis.Testgenerator.rest.service.project.ProjectDirectories; +import de.fhmuenster.masterthesis.Testgenerator.rest.service.test.FlowNotFoundException; +import de.fhmuenster.masterthesis.Testgenerator.utils.ProjectDirectoryUtils; +import de.fhmuenster.masterthesis.serialization.TestgeneratorDSLObjectCreator; +import de.fhmuenster.masterthesis.serialization.TestgeneratorDSLSerializer; +import de.fhmuenster.masterthesis.testgeneratorDSL.Flow; +import de.fhmuenster.masterthesis.testgeneratorDSL.FlowElementReference; +import de.fhmuenster.masterthesis.testgeneratorDSL.Loop; +import de.fhmuenster.masterthesis.testgeneratorDSL.ServiceTaskFlowElement; + +@Service +public class ChangeService { + + public ChangeService() { + } + +public Flow[][] compareFlows(List<Flow> newFlows, List<Flow> oldFlows) { + + //hier werden die Flows gespeichert, die zurückgegeben werden. [x][0] -> Flow neu, [x][1] -> passender Flow alt + Flow [][] matchingFlows = new Flow [newFlows.size()][2]; + + List <Integer> checkedFlowsOld = new ArrayList <Integer>(); + List <String> checkedElements = new ArrayList <String>(); + + int currentNewFlow = 0; + + for (Flow newFlow: newFlows) { + + EList<FlowElementReference> newFlowElements = newFlow.getInclElements(); + + int mostSimilarities = 0; + int leastDifferences = 10000; + + int currentOldFlow = 0; + + + for (Flow oldFlow: oldFlows) { + + EList<FlowElementReference> oldFlowElements = oldFlow.getInclElements(); + + int similarities = 0; + int differences = 0; + + if(checkedFlowsOld.contains(currentOldFlow)); + + else { + + for (FlowElementReference newFlowElement: newFlowElements) { + if(checkedElements.contains(newFlowElement.getRef().getName())) {} + + else { + + for (FlowElementReference oldFlowElement: oldFlowElements) { + + if(checkedElements.contains(oldFlowElement.getRef().getName())) {} + + else { + + if(newFlowElement.getRef().getName().equals(oldFlowElement.getRef().getName())) { + similarities++; + checkedElements.add(newFlowElement.getRef().getName()); + + } + + } + } + } + } + } + //berechnen der Elemente, die aus dem alten und neuen Flow nicht zueinander gepasst haben + differences = oldFlow.getInclElements().size()-similarities + newFlow.getInclElements().size()-similarities; + + + // falls aktuell übprüfte Flow alt und neu Kombination die meisten Gemeinsamkeiten haben oder noch nichts in matchingFlows gespeichert wurde + if(mostSimilarities<similarities || (mostSimilarities==similarities && leastDifferences> differences)) { + + + mostSimilarities=similarities; + leastDifferences = differences; + + matchingFlows[currentNewFlow][0] = newFlow; + matchingFlows[currentNewFlow][1] = oldFlow; + + + } + checkedElements = new ArrayList <String>(); + + currentOldFlow++; + + } + + currentNewFlow++; + } +// for (int i=0; i<newFlows.size();i++) { +// System.out.println(matchingFlows[i][0]+" "+matchingFlows[i][1]); +// +// } + + return matchingFlows; + } +} \ No newline at end of file diff --git a/Testgenerator/src/main/resources/application.properties b/Testgenerator/src/main/resources/application.properties index f7d1dac..59dee82 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:\\CodePro\\projects.json +testgenerator.projects=C:\\Users\\tillb\\Desktop\\fe_projekt\\projects.json -- GitLab