From 84e7374c72e874de52fec85017ac835b802e153f Mon Sep 17 00:00:00 2001
From: Florian Lambers <fl462057@fh-muenster.de>
Date: Wed, 1 Dec 2021 10:56:27 +0100
Subject: [PATCH] added constraints to frontend

---
 .../bpmn/data/VariableValue.java              |  9 ++
 .../rest/dto/FlowElementEnhancedDTO.java      |  8 +-
 .../rest/service/change/ChangeController.java | 20 ++++-
 .../service/converters/TestConverter.java     |  1 +
 .../rest/service/test/TestController.java     | 44 ++++++++++
 .../rest/service/test/TestService.java        | 83 ++++++++++++++++++-
 .../new-external-mock.component.ts            |  3 +-
 .../app/components/test/test.component.html   | 11 ++-
 .../src/app/components/test/test.component.ts | 23 +++--
 .../app/models/bpmn-flow-enhanced-element.ts  |  4 +-
 .../src/app/models/variable-value.ts          |  1 +
 11 files changed, 183 insertions(+), 24 deletions(-)

diff --git a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/bpmn/data/VariableValue.java b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/bpmn/data/VariableValue.java
index 168d8b3..f489152 100644
--- a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/bpmn/data/VariableValue.java
+++ b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/bpmn/data/VariableValue.java
@@ -4,6 +4,7 @@ public class VariableValue {
 	
 	private String variable;
 	private Object value;
+	private boolean required;
 	
 	public VariableValue() {
 	}
@@ -28,4 +29,12 @@ public class VariableValue {
 	public void setValue(Object value) {
 		this.value = value;
 	}
+
+	public boolean isRequired() {
+		return required;
+	}
+
+	public void setRequired(boolean required) {
+		this.required = required;
+	}
 }
\ No newline at end of file
diff --git a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/dto/FlowElementEnhancedDTO.java b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/dto/FlowElementEnhancedDTO.java
index 1959c02..ef4d2be 100644
--- a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/dto/FlowElementEnhancedDTO.java
+++ b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/dto/FlowElementEnhancedDTO.java
@@ -2,10 +2,12 @@ package de.fhmuenster.masterthesis.Testgenerator.rest.dto;
 
 import java.util.List;
 
+import de.fhmuenster.masterthesis.Testgenerator.bpmn.data.VariableValue;
+
 public class FlowElementEnhancedDTO {
 
 	private String name;
-	private List<String> inputVariables;
+	private List<VariableValue> inputVariables;
 	private List<String> outputVariables;
 	
 	public FlowElementEnhancedDTO() {
@@ -19,11 +21,11 @@ public class FlowElementEnhancedDTO {
 		this.name = name;
 	}
 	
-	public List<String> getInputVariables() {
+	public List<VariableValue> getInputVariables() {
 		return inputVariables;
 	}
 	
-	public void setInputVariables(List<String> inputVariables) {
+	public void setInputVariables(List<VariableValue> inputVariables) {
 		this.inputVariables = inputVariables;
 	}
 	
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 10031c1..bad7d51 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
@@ -7,6 +7,7 @@ import java.nio.file.Paths;
 import java.nio.file.StandardCopyOption;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 import org.eclipse.emf.common.util.BasicEList;
@@ -31,6 +32,7 @@ import de.fhmuenster.masterthesis.Testgenerator.utils.ProjectDirectoryUtils;
 import de.fhmuenster.masterthesis.serialization.TestgeneratorDSLSerializer;
 import de.fhmuenster.masterthesis.Testgenerator.rest.service.test.TestService;
 import de.fhmuenster.masterthesis.testgeneratorDSL.Flow;
+import de.fhmuenster.masterthesis.testgeneratorDSL.StartFlowElement;
 import de.fhmuenster.masterthesis.testgeneratorDSL.Test;
 import de.fhmuenster.masterthesis.testgeneratorDSL.UserTaskFlowElement;
 import de.fhmuenster.masterthesis.testgeneratorDSL.VariableReference;
@@ -145,10 +147,20 @@ public class ChangeController {
 					//Prüfen, ob eine Prozessvariable gelöscht wurde, diese muss dann aus der Testspezifikation raus
 					int index = 0;
 					for(TaskVariables tv : bpmnTestcase.getTaskVariableList()) {
-						UserTaskFlowElement oldUserTask = (UserTaskFlowElement) oldDSL.getFlowElements(Arrays.asList(tv.getTask())).get(0);
-						List<VariableReference> oldInputVariables = oldUserTask.getInputVariables();
-						UserTaskFlowElement newUserTask = (UserTaskFlowElement) newDSL.getFlowElements(Arrays.asList(tv.getTask())).get(0);
-						List<VariableReference> newInputVariables = newUserTask.getInputVariables();
+						List<VariableReference> oldInputVariables = Collections.emptyList();
+						List<VariableReference> newInputVariables = Collections.emptyList();
+						if(oldDSL.getFlowElements(Arrays.asList(tv.getTask())).get(0) instanceof UserTaskFlowElement) {
+							UserTaskFlowElement oldUserTask = (UserTaskFlowElement) oldDSL.getFlowElements(Arrays.asList(tv.getTask())).get(0);
+							oldInputVariables = oldUserTask.getInputVariables();
+							UserTaskFlowElement newUserTask = (UserTaskFlowElement) newDSL.getFlowElements(Arrays.asList(tv.getTask())).get(0);
+							newInputVariables = newUserTask.getInputVariables();
+						}
+						if(oldDSL.getFlowElements(Arrays.asList(tv.getTask())).get(0) instanceof StartFlowElement) {
+							StartFlowElement oldUserTask = (StartFlowElement) oldDSL.getFlowElements(Arrays.asList(tv.getTask())).get(0);
+							oldInputVariables = oldUserTask.getInputVariables();
+							StartFlowElement newUserTask = (StartFlowElement) newDSL.getFlowElements(Arrays.asList(tv.getTask())).get(0);
+							newInputVariables = newUserTask.getInputVariables();
+						}
 						
 						List<String> deletedInputVariables = new ArrayList<>();
 						for(VariableReference v : oldInputVariables) {
diff --git a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/service/converters/TestConverter.java b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/service/converters/TestConverter.java
index 54436ae..1f4666c 100644
--- a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/service/converters/TestConverter.java
+++ b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/service/converters/TestConverter.java
@@ -89,6 +89,7 @@ public class TestConverter {
 			TaskVariables taskVariables = new TaskVariables();
 			taskVariables.setTask(variableDeclarations.getTaskReference().getRef().getName());
 			taskVariables.setVariableValues(variableValues);
+			
 			taskVariableList.add(taskVariables);
 		}
 		
diff --git a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/service/test/TestController.java b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/service/test/TestController.java
index 744767d..95c2c8f 100644
--- a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/service/test/TestController.java
+++ b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/rest/service/test/TestController.java
@@ -12,6 +12,7 @@ import org.springframework.web.servlet.config.annotation.EnableWebMvc;
 
 import de.fhmuenster.masterthesis.Testgenerator.bpmn.data.BPMNServiceWithMocks;
 import de.fhmuenster.masterthesis.Testgenerator.bpmn.data.BPMNTestcase;
+import de.fhmuenster.masterthesis.Testgenerator.bpmn.data.VariableValue;
 import de.fhmuenster.masterthesis.Testgenerator.rest.dto.BPMNTestcaseDTO;
 import de.fhmuenster.masterthesis.Testgenerator.rest.dto.ExternalTopicWithMockDTO;
 import de.fhmuenster.masterthesis.Testgenerator.rest.dto.FlowElementEnhancedDTO;
@@ -28,6 +29,10 @@ import de.fhmuenster.masterthesis.serialization.VariableProposal;
 import de.fhmuenster.masterthesis.testgeneratorDSL.Flow;
 import de.fhmuenster.masterthesis.testgeneratorDSL.FlowElement;
 import de.fhmuenster.masterthesis.testgeneratorDSL.Loop;
+import de.fhmuenster.masterthesis.testgeneratorDSL.StartFlowElement;
+import de.fhmuenster.masterthesis.testgeneratorDSL.UserTaskFlowElement;
+import de.fhmuenster.masterthesis.testgeneratorDSL.ValidationState;
+import de.fhmuenster.masterthesis.testgeneratorDSL.VariableReference;
 
 @RestController
 @EnableWebMvc
@@ -122,6 +127,45 @@ public class TestController {
 		Flow flow = flowService.getFlow(projectForId.getProjectDirectories(), flowId);
 		List<FlowElement> userInputTasks = testService.getUserInputTasks(flow);
 		List<FlowElementEnhancedDTO> userInputDtos = MAPPER.mapToList(userInputTasks, FlowElementEnhancedDTO.class);
+		
+		int index = 0;
+		for(FlowElement e : userInputTasks) {
+			if(e instanceof UserTaskFlowElement) {
+				UserTaskFlowElement ue = (UserTaskFlowElement) e;
+				int vrIndex = 0;
+				for(VariableReference vr : ue.getInputVariables()) {
+					VariableValue vv = userInputDtos.get(index).getInputVariables().get(vrIndex);
+					vv.setVariable(vr.getRef().getName());
+					vv.setValue(null);
+					if(vr.getValidationStatus().equals(ValidationState.OPTIONAL)) {
+						vv.setRequired(false);
+					}
+					else {
+						vv.setRequired(true);
+					}
+					
+					vrIndex++;
+				}
+			}
+			if(e instanceof StartFlowElement) {
+				StartFlowElement se = (StartFlowElement) e;
+				int vrIndex = 0;
+				for(VariableReference vr : se.getInputVariables()) {
+					VariableValue vv = userInputDtos.get(index).getInputVariables().get(vrIndex);
+					vv.setVariable(vr.getRef().getName());
+					vv.setValue(null);
+					if(vr.getValidationStatus().equals(ValidationState.OPTIONAL)) {
+						vv.setRequired(false);
+					}
+					else {
+						vv.setRequired(true);
+					}
+					vrIndex++;
+				}
+			}
+			index++;
+		}
+		
 
 		List<VariableProposal<?>> variableProposals = testService
 				.getVariableProposals(projectForId.getProjectDirectories());
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 04afa41..5ac5ff0 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
@@ -3,6 +3,7 @@ package de.fhmuenster.masterthesis.Testgenerator.rest.service.test;
 import java.io.IOException;
 import java.nio.file.Path;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -33,6 +34,8 @@ import de.fhmuenster.masterthesis.Testgenerator.bpmn.data.BPMNIOParameters;
 import de.fhmuenster.masterthesis.Testgenerator.bpmn.data.BPMNNumericConstraint;
 import de.fhmuenster.masterthesis.Testgenerator.bpmn.data.BPMNTestcase;
 import de.fhmuenster.masterthesis.Testgenerator.bpmn.data.BPMNTestdata;
+import de.fhmuenster.masterthesis.Testgenerator.bpmn.data.TaskVariables;
+import de.fhmuenster.masterthesis.Testgenerator.bpmn.data.VariableValue;
 import de.fhmuenster.masterthesis.Testgenerator.bpmn.processfragmentation.BPMNExpressionScanner;
 import de.fhmuenster.masterthesis.Testgenerator.bpmn.processfragmentation.BPMNFlowScanner;
 import de.fhmuenster.masterthesis.Testgenerator.bpmn.processfragmentation.BPMNVariableBoundaryScanner;
@@ -66,10 +69,14 @@ import de.fhmuenster.masterthesis.testgeneratorDSL.Flow;
 import de.fhmuenster.masterthesis.testgeneratorDSL.FlowElement;
 import de.fhmuenster.masterthesis.testgeneratorDSL.FlowElementReference;
 import de.fhmuenster.masterthesis.testgeneratorDSL.Mock;
+import de.fhmuenster.masterthesis.testgeneratorDSL.StartFlowElement;
 import de.fhmuenster.masterthesis.testgeneratorDSL.Test;
 import de.fhmuenster.masterthesis.testgeneratorDSL.TestgeneratorDSLFactory;
+import de.fhmuenster.masterthesis.testgeneratorDSL.UserTaskFlowElement;
+import de.fhmuenster.masterthesis.testgeneratorDSL.ValidationState;
 import de.fhmuenster.masterthesis.testgeneratorDSL.Variable;
 import de.fhmuenster.masterthesis.testgeneratorDSL.VariableDeclaration;
+import de.fhmuenster.masterthesis.testgeneratorDSL.VariableReference;
 import de.fhmuenster.masterthesis.utils.TestgeneratorDSLUtils;
 
 @Service
@@ -325,6 +332,42 @@ public class TestService {
 			Test test = getTest(testId, serializer);
 
 			BPMNTestcase bpmnTestcase = TestConverter.getBPMNTestcase(test);
+			
+			for(TaskVariables t : bpmnTestcase.getTaskVariableList()) {
+				FlowElement e = serializer.getFlowElements(Arrays.asList(t.getTask())).get(0);
+				if(e instanceof UserTaskFlowElement) {
+					UserTaskFlowElement ue = (UserTaskFlowElement) e;
+					for(VariableReference vr : ue.getInputVariables()) {
+						for(VariableValue vv : t.getVariableValues()) {
+							if(vv.getVariable().equals(vr.getRef().getName())) {
+								if(vr.getValidationStatus().equals(ValidationState.REQUIRED)) {
+									vv.setRequired(true);
+								}
+								else {
+									vv.setRequired(false);
+								}
+							}
+						}
+					}
+				}
+				if(e instanceof StartFlowElement) {
+					StartFlowElement se = (StartFlowElement) e;
+					for(VariableReference vr : se.getInputVariables()) {
+						for(VariableValue vv : t.getVariableValues()) {
+							if(vv.getVariable().equals(vr.getRef().getName())) {
+								if(vr.getValidationStatus().equals(ValidationState.REQUIRED)) {
+									vv.setRequired(true);
+								}
+								else {
+									vv.setRequired(false);
+								}
+							}
+						}
+					}
+				}
+			}
+			
+			
 			return bpmnTestcase;
 		} catch (IOException e) {
 			//
@@ -382,7 +425,44 @@ public class TestService {
 					formFields.getVariablesForTask(flowElement.getId()));
 			
 			int dependencies = startVariables.size();
-			return TestgeneratorDSLObjectCreator.createStartFlowElement(flowElement.getId(), startVariables);
+			
+			HashMap<String, List<BPMNFieldConstraint>> allConstraintsForTask = formFields.getAllTaskSpecificConstraintsForTask(flowElement.getId());
+			HashMap<String, List<Constraint>> newTaskSpecificConstraints = new HashMap<>();
+			
+			/*
+			for(Variable v : startVariables) {
+				if(allConstraintsForTask.get(v.getName()) != null && !allConstraintsForTask.get(v.getName()).isEmpty()) {
+					//Constraints kopieren
+					List<Constraint> variableConstraints = new ArrayList<>();
+					for(BPMNFieldConstraint c : allConstraintsForTask.get(v.getName())) {
+						Constraint newConstraint = TestgeneratorDSLFactory.eINSTANCE.createConstraint();
+						if(c instanceof BPMNBooleanConstraint) {
+							BPMNBooleanConstraint bc = (BPMNBooleanConstraint) c;
+							newConstraint.setKey("required");
+							if(bc.getRequired()) {
+								newConstraint.setValue(1);
+							}
+							else {
+								newConstraint.setValue(0);
+							}
+							variableConstraints.add(newConstraint);
+						}
+					}
+					
+					newTaskSpecificConstraints.put(v.getName(), variableConstraints);
+				}
+				else {
+					List<Constraint> variableConstraints = new ArrayList<>();
+					Constraint newConstraint = TestgeneratorDSLFactory.eINSTANCE.createConstraint();
+					newConstraint.setKey("required");
+					newConstraint.setValue(0);
+					variableConstraints.add(newConstraint);
+					newTaskSpecificConstraints.put(v.getName(), variableConstraints);
+				}
+			}
+			*/
+			
+			return TestgeneratorDSLObjectCreator.createStartFlowElement(flowElement.getId(), startVariables, newTaskSpecificConstraints);
 		} else if (flowElement instanceof EndEvent) {
 			return TestgeneratorDSLObjectCreator.createEndFlowElement(flowElement.getId());
 		} else if (flowElement instanceof Gateway) {
@@ -393,7 +473,6 @@ public class TestService {
 			int dependencies = inputVariables.size() + outputVariables.size();
 			
 			HashMap<String, List<BPMNFieldConstraint>> allConstraintsForTask = formFields.getAllTaskSpecificConstraintsForTask(flowElement.getId());
-			
 			HashMap<String, List<Constraint>> newTaskSpecificConstraints = new HashMap<>();
 			
 			for(Variable v : inputVariables) {
diff --git a/testgenerator-web/testgenerator-web/src/app/components/new-external-mock/new-external-mock.component.ts b/testgenerator-web/testgenerator-web/src/app/components/new-external-mock/new-external-mock.component.ts
index e084270..7f86a10 100644
--- a/testgenerator-web/testgenerator-web/src/app/components/new-external-mock/new-external-mock.component.ts
+++ b/testgenerator-web/testgenerator-web/src/app/components/new-external-mock/new-external-mock.component.ts
@@ -250,7 +250,8 @@ export class NewExternalMockComponent implements OnInit {
   addVariableValueToValue(mockRuleIndex: number) {
     let variableValue = {
       variable: "",
-      value: ""
+      value: "",
+      required: false
     }
 
     this.mock.mockRules[mockRuleIndex].variables.push(variableValue);
diff --git a/testgenerator-web/testgenerator-web/src/app/components/test/test.component.html b/testgenerator-web/testgenerator-web/src/app/components/test/test.component.html
index 836b680..10cd0ac 100644
--- a/testgenerator-web/testgenerator-web/src/app/components/test/test.component.html
+++ b/testgenerator-web/testgenerator-web/src/app/components/test/test.component.html
@@ -59,10 +59,13 @@
                                 <!--String and Integer Fields-->
                                 <div class="md-form form-group" *ngIf="(dataTypes.get(variableValue.variable) == 'java.lang.Integer') || dataTypes.get(variableValue.variable) == 'java.lang.String'">
                                     <input mdbInput mdbValidate type="number" class="form-control" id="{{variableValue.variable}}-{{i}}-{{v}}"
-                                        formControlName="{{variableValue.variable}}" *ngIf="dataTypes.get(variableValue.variable) == 'java.lang.Integer'">
+                                        formControlName="{{variableValue.variable}}" *ngIf="dataTypes.get(variableValue.variable) == 'java.lang.Integer'"
+                                        [required]="variableValue.required">
                                     <input mdbInput mdbValidate type="text" class="form-control" id="{{variableValue.variable}}-{{i}}-{{v}}"
-                                        formControlName="{{variableValue.variable}}" *ngIf="dataTypes.get(variableValue.variable) == 'java.lang.String'">
-                                    <label for="{{variableValue.variable}}-{{i}}-{{v}}">{{variableValue.variable}}</label>
+                                        formControlName="{{variableValue.variable}}" *ngIf="dataTypes.get(variableValue.variable) == 'java.lang.String'"
+                                        [required]="variableValue.required">
+                                    <label *ngIf="variableValue.required" class="text-danger" for="{{variableValue.variable}}-{{i}}-{{v}}">{{variableValue.variable}}</label>
+                                    <label *ngIf="!variableValue.required" for="{{variableValue.variable}}-{{i}}-{{v}}">{{variableValue.variable}}</label>
                                     <p *ngIf="getVariableProposals(variableValue.variable).proposals.length > 0" i18n="proposals">Proposals : [{{getVariableProposals(variableValue.variable) | variableProposals}}]</p>
                                     <p *ngIf="getVariableProposals(variableValue.variable).proposals.length == 0" i18n="no proposals">No proposals</p>
                                 </div>
@@ -148,7 +151,7 @@
             <div class="testgen-actionbar testgen-actionbar-right">
                 <button type="button" class="btn btn-light" [routerLink]="['../']" *ngIf="!isEdit" i18n="cancel">>Cancel</button>
                 <button type="button" class="btn btn-light" [routerLink]="['../../']" *ngIf="isEdit" i18n="cancel">Cancel</button>
-                <button type="button" class="btn btn-success" (click)="save()" i18n="save testcase">Save testcase</button>
+                <button type="button" class="btn btn-success" (click)="save()" i18n="save testcase" [disabled]="formGroup.invalid">Save testcase</button>
             </div>
         </div>
     </div>
diff --git a/testgenerator-web/testgenerator-web/src/app/components/test/test.component.ts b/testgenerator-web/testgenerator-web/src/app/components/test/test.component.ts
index 788d2a3..ec50ed8 100644
--- a/testgenerator-web/testgenerator-web/src/app/components/test/test.component.ts
+++ b/testgenerator-web/testgenerator-web/src/app/components/test/test.component.ts
@@ -104,12 +104,12 @@ export class TestComponent implements OnInit {
         let valueObj = {};
         let variableList = [];
         for (let variables of userInputs.inputVariables) {
-          inputProposals.push(this.getVariableProposals(variables));
-          let countVariableFrequency = this.countVariable(variables, taskVariableValueList);
-          let value = this.getVariableValueOrDefault(userInputs.name, variables, countVariableFrequency);
-          valueObj[variables] = value;
+          inputProposals.push(this.getVariableProposals(variables.variable));
+          let countVariableFrequency = this.countVariable(variables.variable, taskVariableValueList);
+          let value = this.getVariableValueOrDefault(userInputs.name, variables.variable, countVariableFrequency);
+          valueObj[variables.variable] = value;
           
-          let newVariable = this.createVariableValue(variables, value);
+          let newVariable = this.createVariableValue(variables.variable, value, variables.required);
           variableList.push(newVariable);
         }
         
@@ -187,6 +187,8 @@ export class TestComponent implements OnInit {
       this.cleanUpServiceWithMocks();
       this.initVariableDataTypes();
 
+      
+
       let result2 = await this.flowService.getFlow(this.actualProject, this.actualFlow);
       this.flow = result2;
 
@@ -248,10 +250,11 @@ export class TestComponent implements OnInit {
     }
   }
 
-  createVariableValue(variable: string, value: Object): VariableValue {
+  createVariableValue(variable: string, value: Object, required: boolean): VariableValue {
     return {
       variable: variable,
-      value: value
+      value: value,
+      required: required
     }
   }
 
@@ -508,8 +511,10 @@ export class TestComponent implements OnInit {
 
   private checkIfElementIsRed(task: string): boolean {
     for(let i=0; i < this.flow.flowElements.length; i++) {
-      if(this.flow.flowElements[i].flag === 'RED') {
-        return true;
+      if(this.flow.flowElements[i].id === task) {
+        if(this.flow.flowElements[i].flag === 'RED') {
+          return true;
+        }
       }
     }
 
diff --git a/testgenerator-web/testgenerator-web/src/app/models/bpmn-flow-enhanced-element.ts b/testgenerator-web/testgenerator-web/src/app/models/bpmn-flow-enhanced-element.ts
index 09a752d..c2457f7 100644
--- a/testgenerator-web/testgenerator-web/src/app/models/bpmn-flow-enhanced-element.ts
+++ b/testgenerator-web/testgenerator-web/src/app/models/bpmn-flow-enhanced-element.ts
@@ -1,4 +1,6 @@
+import { VariableValue } from "./variable-value";
+
 export interface FlowElementEnhanced {
     name: string;
-    inputVariables: Array<string>;
+    inputVariables: Array<VariableValue>;
 }
\ No newline at end of file
diff --git a/testgenerator-web/testgenerator-web/src/app/models/variable-value.ts b/testgenerator-web/testgenerator-web/src/app/models/variable-value.ts
index 8afad63..cea82b9 100644
--- a/testgenerator-web/testgenerator-web/src/app/models/variable-value.ts
+++ b/testgenerator-web/testgenerator-web/src/app/models/variable-value.ts
@@ -2,4 +2,5 @@
 export interface VariableValue {
     variable: string;
     value: Object;
+    required: boolean;
 }
\ No newline at end of file
-- 
GitLab