Skip to content
Snippets Groups Projects
Commit 1e6e1598 authored by Till Josef Brinkhus's avatar Till Josef Brinkhus
Browse files

Nachbarschaftserkennung getestet und geupdatet; Flow-Zuordnung gefixt (alten...

Nachbarschaftserkennung getestet und geupdatet; Flow-Zuordnung gefixt (alten Flows werden nicht mehr mehrfach einem neuen zugewiesen)

Nachbarschaftserkennung getestet und geupdatet; Flow-Zuordnung gefixt (alten Flows werden nicht mehr mehrfach einem neuen zugewiesen)
parent 2dfc2e87
No related branches found
No related tags found
No related merge requests found
package de.sample.onlineschuhdemo;
import static org.camunda.bpm.engine.test.assertions.ProcessEngineTests.*;
import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareTests.complete;
import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareTests.runtimeService;
import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareTests.task;
import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareTests.withVariables;
import static org.assertj.core.api.Assertions.entry;
import static de.sample.onlineschuhdemo.TestUtils.*;
import org.apache.ibatis.logging.LogFactory;
import org.camunda.bpm.engine.runtime.ProcessInstance;
import org.camunda.bpm.engine.test.Deployment;
import org.camunda.bpm.engine.test.ProcessEngineRule;
import org.camunda.bpm.engine.externaltask.LockedExternalTask;
import org.camunda.bpm.extension.process_test_coverage.junit.rules.TestCoverageProcessEngineRuleBuilder;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import java.util.List;
import java.util.Map;
public class MatchingTestcollectionOld2 {
@ClassRule
@Rule
public static ProcessEngineRule rule = TestCoverageProcessEngineRuleBuilder.create().build();
private static final String VAR_KUNDENNUMMER = "kundennummer";
private static final String VAR_MARKE = "marke";
private static final String VAR_IBAN = "iban";
private static final String VAR_VORNAME = "vorname";
private static final String VAR_NACHNAME = "nachname";
private static final String VAR_PAKETTYP = "pakettyp";
private static final String VAR_EMAILGESENDET = "emailGesendet";
private static final String VAR_FIRSTNAME = "firstname";
private static final String VAR_LASTNAME = "lastname";
private static final String VAR_IBANREFUND = "ibanRefund";
private static final String VAR_CONFIRMATIONEMAILSENT = "confirmationEmailSent";
private static final String VAR_SERVICEIDENTIFIER = "serviceIdentifier";
private static final String VAR_PREIS = "preis";
private static final String VAR_ERSTATTUNG = "erstattung";
private static final String VAR_PAKET = "paket";
private static final String VAR_BESCHAEDIGT = "beschaedigt";
static {
LogFactory.useSlf4jLogging();
}
@Before
public void setup() {
init(rule.getProcessEngine());
}
}
......@@ -14,10 +14,17 @@ import de.fhmuenster.masterthesis.Testgenerator.rest.service.test.FlowNotFoundEx
import de.fhmuenster.masterthesis.Testgenerator.utils.ProjectDirectoryUtils;
import de.fhmuenster.masterthesis.serialization.TestgeneratorDSLObjectCreator;
import de.fhmuenster.masterthesis.serialization.TestgeneratorDSLSerializer;
import de.fhmuenster.masterthesis.testgeneratorDSL.BusinessRuleTaskFlowElement;
import de.fhmuenster.masterthesis.testgeneratorDSL.EndFlowElement;
import de.fhmuenster.masterthesis.testgeneratorDSL.Flow;
import de.fhmuenster.masterthesis.testgeneratorDSL.FlowElementReference;
import de.fhmuenster.masterthesis.testgeneratorDSL.GatewayFlowElement;
import de.fhmuenster.masterthesis.testgeneratorDSL.Loop;
import de.fhmuenster.masterthesis.testgeneratorDSL.ManualTaskFlowElement;
import de.fhmuenster.masterthesis.testgeneratorDSL.ScriptTaskFlowElement;
import de.fhmuenster.masterthesis.testgeneratorDSL.ServiceTaskFlowElement;
import de.fhmuenster.masterthesis.testgeneratorDSL.StartFlowElement;
import de.fhmuenster.masterthesis.testgeneratorDSL.UserTaskFlowElement;
@Service
public class ChangeService {
......@@ -44,6 +51,7 @@ public Flow[][] compareFlows(List<Flow> newFlows, List<Flow> oldFlows) {
int currentOldFlow = 0;
matchingFlows[currentNewFlow][0] = newFlow;
for (Flow oldFlow: oldFlows) {
......@@ -55,11 +63,6 @@ public Flow[][] compareFlows(List<Flow> newFlows, List<Flow> oldFlows) {
if(checkedFlowsOld.contains(currentOldFlow));
else {
FlowElementReference newNeighbourBefore = null;
FlowElementReference newNeighbourAfter;
FlowElementReference oldNeighbourBefore = null;
FlowElementReference oldNeighbourAfter;
//Zeiger auf aktuelles Flow Element des neuen Flows
int currentNewFlowElement = 0;
......@@ -73,6 +76,8 @@ public Flow[][] compareFlows(List<Flow> newFlows, List<Flow> oldFlows) {
else {
for (FlowElementReference oldFlowElement: oldFlowElements) {
boolean sameNeighbours = false;
if(checkedElements.contains(oldFlowElement.getRef().getName())) {}
......@@ -83,42 +88,232 @@ public Flow[][] compareFlows(List<Flow> newFlows, List<Flow> oldFlows) {
checkedElements.add(newFlowElement.getRef().getName());
}
//Erst Vergleich, ob beide Activities Manual Tasks sind; dann überprüfen, ob die Bezeichnung der Activities gleich ist und dann, ob vorheriger und nachfolgender Nachbar gleich sind
else if(newFlowElement.getRef() instanceof ManualTaskFlowElement && oldFlowElement.getRef() instanceof ManualTaskFlowElement) {
ManualTaskFlowElement labelNew = (ManualTaskFlowElement)newFlowElement.getRef();
ManualTaskFlowElement labelOld = (ManualTaskFlowElement)oldFlowElement.getRef();
//Vergleich der Bezeichnungen (Label) von neuem und altem Flow Element
if(labelNew.getLabel().equals(labelOld.getLabel())){
// //Casten des vorherigen Nachbarn des neuen Flows
// if(newFlowElements.get(currentNewFlowElement-2).getRef() instanceof StartFlowElement) {
// StartFlowElement NewNeighbourBefore = (StartFlowElement) newFlowElements.get(currentNewFlowElement-2).getRef();
// }else if (newFlowElements.get(currentNewFlowElement-2).getRef() instanceof EndFlowElement) {
// EndFlowElement NewNeighbourBefore = (EndFlowElement) newFlowElements.get(currentNewFlowElement-2).getRef();
// }else if (newFlowElements.get(currentNewFlowElement-2).getRef() instanceof GatewayFlowElement) {
// GatewayFlowElement NewNeighbourBefore = (GatewayFlowElement) newFlowElements.get(currentNewFlowElement-2).getRef();
// }else if (newFlowElements.get(currentNewFlowElement-2).getRef() instanceof GatewayFlowElement) {
// GatewayFlowElement NewNeighbourBefore = (GatewayFlowElement) newFlowElements.get(currentNewFlowElement-2).getRef();
// } else {
// ManualTaskFlowElement NewNeighbourBefore = (ManualTaskFlowElement) newFlowElements.get(currentNewFlowElement-2).getRef();
// }
//
// //Casten des nachfolgenden Nachbarn des neuen Flows
// if(newFlowElements.get(currentNewFlowElement+2).getRef() instanceof StartFlowElement) {
// StartFlowElement NewNeighbourAfter = (StartFlowElement) newFlowElements.get(currentNewFlowElement+2).getRef();
// }else if (newFlowElements.get(currentNewFlowElement+2).getRef() instanceof EndFlowElement) {
// EndFlowElement NewNeighbourAfter = (EndFlowElement) newFlowElements.get(currentNewFlowElement+2).getRef();
// }else if (newFlowElements.get(currentNewFlowElement+2).getRef() instanceof GatewayFlowElement) {
// GatewayFlowElement NewNeighbourAfter = (GatewayFlowElement) newFlowElements.get(currentNewFlowElement+2).getRef();
// }else if (newFlowElements.get(currentNewFlowElement+2).getRef() instanceof GatewayFlowElement) {
// GatewayFlowElement NewNeighbourAfter = (GatewayFlowElement) newFlowElements.get(currentNewFlowElement+2).getRef();
// } else {
// ManualTaskFlowElement NewNeighbourAfter = (ManualTaskFlowElement) newFlowElements.get(currentNewFlowElement+2).getRef();
// }
//
// //Casten des vorherigen Nachbarn des alten Flows
// if(newFlowElements.get(currentOldFlowElement-2).getRef() instanceof StartFlowElement) {
// StartFlowElement OldNeighbourBefore = (StartFlowElement) newFlowElements.get(currentOldFlowElement-2).getRef();
// }else if (newFlowElements.get(currentOldFlowElement-2).getRef() instanceof EndFlowElement) {
// EndFlowElement OldNeighbourBefore = (EndFlowElement) newFlowElements.get(currentOldFlowElement-2).getRef();
// }else if (newFlowElements.get(currentOldFlowElement-2).getRef() instanceof GatewayFlowElement) {
// GatewayFlowElement OldNeighbourBefore = (GatewayFlowElement) newFlowElements.get(currentOldFlowElement-2).getRef();
// }else if (newFlowElements.get(currentOldFlowElement-2).getRef() instanceof GatewayFlowElement) {
// GatewayFlowElement OldNeighbourBefore = (GatewayFlowElement) newFlowElements.get(currentOldFlowElement-2).getRef();
// } else {
// ManualTaskFlowElement OldNeighbourBefore = (ManualTaskFlowElement) newFlowElements.get(currentOldFlowElement-2).getRef();
// }
//
// UserTaskFlowElement OldNeighbourBefore = (UserTaskFlowElement) oldFlowElements.get(currentOldFlowElement-2).getRef();
// UserTaskFlowElement OldNeighbourAfter = (UserTaskFlowElement) oldFlowElements.get(currentOldFlowElement+2).getRef();
//
// System.out.println("nachbar vorher" + NewNeighbourBefore.getName());
//Vergleich von vorherigem Nachbarn von Flow neu mit vorherigem von Flow alt; Vergleich von nachfolgendem Nachbarn
// try {
// //try probiert Vergleich mit Label, catch dann mit der ID
// if(NewNeighbourBefore.getLabel().equals(OldNeighbourBefore.getLabel())) {
//
// try {
// if(NewNeighbourAfter.getLabel().equals(OldNeighbourAfter.getLabel())) {
// sameNeighbours = true;
// System.out.println("same neighbours im inneren try");
// }
//
// } catch (Exception e) {
// if(newFlowElements.get(currentNewFlowElement+2).getRef().getName().equals(oldFlowElements.get(currentOldFlowElement+2).getRef().getName())) {
// sameNeighbours = true;
// System.out.println("same neighbours im inneren catch");
//
// }
// }
// }
//
// } catch (Exception e) {
if(newFlowElements.get(currentNewFlowElement-2).getRef().getName().equals(oldFlowElements.get(currentOldFlowElement-2).getRef().getName()) &&
newFlowElements.get(currentNewFlowElement+2).getRef().getName().equals(oldFlowElements.get(currentOldFlowElement+2).getRef().getName())) {
// sameNeighbours = true;
similarities++;
checkedElements.add(newFlowElement.getRef().getName());
}
// if(sameNeighbours) {
// similarities++;
// checkedElements.add(newFlowElement.getRef().getName());
// }
}
}
//Erst Vergleich, ob beide Activities User Tasks sind; dann überprüfen, ob die Bezeichnung der Activities gleich ist und dann, ob vorheriger und nachfolgender Nachbar gleich sind
else if(newFlowElement.getRef() instanceof UserTaskFlowElement && oldFlowElement.getRef() instanceof UserTaskFlowElement) {
UserTaskFlowElement labelNew = (UserTaskFlowElement)newFlowElement.getRef();
UserTaskFlowElement labelOld = (UserTaskFlowElement)oldFlowElement.getRef();
//Vergleich der Bezeichnungen (Label) von neuem und altem Flow Element
if(labelNew.getLabel().equals(labelOld.getLabel())){
//Vergleich von vorherigem Nachbarn von Flow neu mit vorherigem von Flow alt; Vergleich von nachfolgendem Nachbarn
if(newFlowElements.get(currentNewFlowElement-2).getRef().getName().equals(oldFlowElements.get(currentOldFlowElement-2).getRef().getName()) &&
newFlowElements.get(currentNewFlowElement+2).getRef().getName().equals(oldFlowElements.get(currentOldFlowElement+2).getRef().getName())) {
similarities++;
checkedElements.add(newFlowElement.getRef().getName());
}
}
}
//Erst Vergleich, ob beide Activities Script Tasks sind; dann überprüfen, ob die Bezeichnung der Activities gleich ist und dann, ob vorheriger und nachfolgender Nachbar gleich sind
else if(newFlowElement.getRef() instanceof ScriptTaskFlowElement && oldFlowElement.getRef() instanceof ScriptTaskFlowElement) {
ScriptTaskFlowElement labelNew = (ScriptTaskFlowElement)newFlowElement.getRef();
ScriptTaskFlowElement labelOld = (ScriptTaskFlowElement)oldFlowElement.getRef();
//Vergleich der Bezeichnungen (Label) von neuem und altem Flow Element
if(labelNew.getLabel().equals(labelOld.getLabel())){
//Vergleich von vorherigem Nachbarn von Flow neu mit vorherigem von Flow alt; Vergleich von nachfolgendem Nachbarn
if(newFlowElements.get(currentNewFlowElement-2).getRef().getName().equals(oldFlowElements.get(currentOldFlowElement-2).getRef().getName()) &&
newFlowElements.get(currentNewFlowElement+2).getRef().getName().equals(oldFlowElements.get(currentOldFlowElement+2).getRef().getName())) {
similarities++;
checkedElements.add(newFlowElement.getRef().getName());
}
}
}
//Erst Vergleich, ob beide Activities Service Tasks sind; dann überprüfen, ob die Bezeichnung der Activities gleich ist und dann, ob vorheriger und nachfolgender Nachbar gleich sind
else if(newFlowElement.getRef() instanceof ServiceTaskFlowElement && oldFlowElement.getRef() instanceof ServiceTaskFlowElement) {
ServiceTaskFlowElement labelNew = (ServiceTaskFlowElement)newFlowElement.getRef();
ServiceTaskFlowElement labelOld = (ServiceTaskFlowElement)oldFlowElement.getRef();
//Vergleich der Bezeichnungen (Label) von neuem und altem Flow Element
if(labelNew.getLabel().equals(labelOld.getLabel())){
//Vergleich von vorherigem Nachbarn von Flow neu mit vorherigem von Flow alt; Vergleich von nachfolgendem Nachbarn
if(newFlowElements.get(currentNewFlowElement-2).getRef().getName().equals(oldFlowElements.get(currentOldFlowElement-2).getRef().getName()) &&
newFlowElements.get(currentNewFlowElement+2).getRef().getName().equals(oldFlowElements.get(currentOldFlowElement+2).getRef().getName())) {
similarities++;
checkedElements.add(newFlowElement.getRef().getName());
}
}
}
//Erst Vergleich, ob beide Activities Business Rule Tasks sind; dann überprüfen, ob die Bezeichnung der Activities gleich ist und dann, ob vorheriger und nachfolgender Nachbar gleich sind
else if(newFlowElement.getRef() instanceof BusinessRuleTaskFlowElement && oldFlowElement.getRef() instanceof BusinessRuleTaskFlowElement) {
BusinessRuleTaskFlowElement labelNew = (BusinessRuleTaskFlowElement)newFlowElement.getRef();
BusinessRuleTaskFlowElement labelOld = (BusinessRuleTaskFlowElement)oldFlowElement.getRef();
//Vergleich der Bezeichnungen (Label) von neuem und altem Flow Element
if(labelNew.getLabel().equals(labelOld.getLabel())){
//Vergleich von vorherigem Nachbarn von Flow neu mit vorherigem von Flow alt; Vergleich von nachfolgendem Nachbarn
if(newFlowElements.get(currentNewFlowElement-2).getRef().getName().equals(oldFlowElements.get(currentOldFlowElement-2).getRef().getName()) &&
newFlowElements.get(currentNewFlowElement+2).getRef().getName().equals(oldFlowElements.get(currentOldFlowElement+2).getRef().getName())) {
similarities++;
checkedElements.add(newFlowElement.getRef().getName());
}
}
}
}
currentOldFlowElement++;
}
}
currentNewFlowElement++;
}
}
//berechnen der Elemente, die aus dem alten und neuen Flow nicht zueinander gepasst haben
differences = oldFlow.getInclElements().size()-similarities + newFlow.getInclElements().size()-similarities;
double similaritiesPercentageFlowNew = 0.0;
double similaritiesPercentageFlowOld = 0.0;
similaritiesPercentageFlowNew = (double)similarities/ (double)newFlowElements.size();
similaritiesPercentageFlowOld = (double)similarities/ (double) oldFlowElements.size();
// 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)) {
if((mostSimilarities<similarities || (mostSimilarities==similarities && leastDifferences> differences))&& !(similaritiesPercentageFlowNew < 0.6 || similaritiesPercentageFlowOld < 0.6)) {
mostSimilarities=similarities;
leastDifferences = differences;
matchingFlows[currentNewFlow][0] = newFlow;
matchingFlows[currentNewFlow][1] = oldFlow;
// System.out.println(similarities);
if(checkedFlowsOld.size() == currentNewFlow) checkedFlowsOld.add(currentOldFlow);
else checkedFlowsOld.set(currentNewFlow, currentOldFlow);
}
checkedElements = new ArrayList <String>();
// if(currentNewFlow ==0 || currentNewFlow ==1){
// System.out.println(currentNewFlow+" "+ currentOldFlow+" "+ similarities);}
currentOldFlow++;
}
currentNewFlow++;
}
// for (int i=0; i<newFlows.size();i++) {
// System.out.println(matchingFlows[i][0]+" "+matchingFlows[i][1]);
// System.out.print(matchingFlows[i][0].getName()+" ---");
// try {
// System.out.print(matchingFlows[i][1].getName());
// } catch (Exception e) {
// System.out.print("kein passender Flow gefunden");
// if(matchingFlows[i][1]==null){
// System.out.println(i);
// }
// }
// System.out.println("");
//
//
// }
return matchingFlows;
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment