From 672e88ad28289af9418246443a079b118553e8af Mon Sep 17 00:00:00 2001
From: Florian Lambers <fl462057@fh-muenster.de>
Date: Tue, 30 Nov 2021 13:14:08 +0100
Subject: [PATCH] added embedded form constraints

---
 .../bpmn/data/BPMNNumericConstraint.java      |  4 ++
 .../bpmn/data/BPMNStringConstraint.java       |  4 ++
 .../BPMNVariableBoundaryScanner.java          |  2 +-
 .../BPMNVariableFormFieldScanner.java         | 53 +++++++++++++++++++
 .../Testgenerator/utils/BPMNParseUtils.java   |  1 +
 5 files changed, 63 insertions(+), 1 deletion(-)

diff --git a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/bpmn/data/BPMNNumericConstraint.java b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/bpmn/data/BPMNNumericConstraint.java
index 3c577aa..9ed98de 100644
--- a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/bpmn/data/BPMNNumericConstraint.java
+++ b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/bpmn/data/BPMNNumericConstraint.java
@@ -5,6 +5,10 @@ public class BPMNNumericConstraint implements BPMNFieldConstraint {
 	private Long min;
 	private Long max;
 	
+	public BPMNNumericConstraint() {
+		
+	}
+	
 	public BPMNNumericConstraint(Long min, Long max) {
 		this.min = min;
 		this.max = max;
diff --git a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/bpmn/data/BPMNStringConstraint.java b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/bpmn/data/BPMNStringConstraint.java
index e839860..9df88fc 100644
--- a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/bpmn/data/BPMNStringConstraint.java
+++ b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/bpmn/data/BPMNStringConstraint.java
@@ -5,6 +5,10 @@ public class BPMNStringConstraint implements BPMNFieldConstraint {
 	private Long minLength;
 	private Long maxLength;
 	
+	public BPMNStringConstraint() {
+		
+	}
+	
 	public BPMNStringConstraint(Long minLength, Long maxLength) {
 		this.minLength = minLength;
 		this.maxLength = maxLength;
diff --git a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/bpmn/processfragmentation/BPMNVariableBoundaryScanner.java b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/bpmn/processfragmentation/BPMNVariableBoundaryScanner.java
index f5f3485..dddc89a 100644
--- a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/bpmn/processfragmentation/BPMNVariableBoundaryScanner.java
+++ b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/bpmn/processfragmentation/BPMNVariableBoundaryScanner.java
@@ -412,7 +412,7 @@ public class BPMNVariableBoundaryScanner {
 
 		if (searchGlobalMax != null) {
 			final Long globalMax = searchGlobalMax;
-			List<Long> boundaryExceedingValues = testdata.getValues().stream().filter(value -> value > globalMax)
+			List<Long> boundaryExceedingValues = testdata.getValues().stream().filter(value -> value != null).filter(value -> value > globalMax)
 					.collect(Collectors.toList());
 
 			boundaryExceedingValues.forEach(v -> testdata.removeValue(v));
diff --git a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/bpmn/processfragmentation/BPMNVariableFormFieldScanner.java b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/bpmn/processfragmentation/BPMNVariableFormFieldScanner.java
index 4d4d269..2dd2eb0 100644
--- a/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/bpmn/processfragmentation/BPMNVariableFormFieldScanner.java
+++ b/Testgenerator/src/main/java/de/fhmuenster/masterthesis/Testgenerator/bpmn/processfragmentation/BPMNVariableFormFieldScanner.java
@@ -98,11 +98,37 @@ public class BPMNVariableFormFieldScanner {
 			for(Element input : inputs) {
 				String variableName = input.attr(CAMUNDA_VARIABLE_NAME);
 				String variableType = input.attr(CAMUNDA_VARIABLE_TYPE);
+				
 				Boolean variableRequired = false;
+				Integer minlength = null;
+				Integer maxlength = null;
+				Integer min = null;
+				Integer max = null;
+				
 				for(Attribute a : input.attributes()) {
 					if(a.getKey().equals("required")) {
 						variableRequired = true;
 					}
+					if(a.getKey().equals(CONSTRAINT_MIN_LENGTH)) {
+						if(a.getValue() != null && !a.getValue().equals("")) {
+							minlength = Integer.parseInt(a.getValue());
+						}
+					}
+					if(a.getKey().equals(CONSTRAINT_MAX_LENGTH)) {
+						if(a.getValue() != null && !a.getValue().equals("")) {
+							maxlength = Integer.parseInt(a.getValue());
+						}
+					}
+					if(a.getKey().equals(CONSTRAINT_MIN)) {
+						if(a.getValue() != null && !a.getValue().equals("")) {
+							min = Integer.parseInt(a.getValue());
+						}
+					}
+					if(a.getKey().equals(CONSTRAINT_MAX)) {
+						if(a.getValue() != null && !a.getValue().equals("")) {
+							max = Integer.parseInt(a.getValue());
+						}
+					}
 				}
 				
 				System.out.println("Scan Formfield " + variableName + " with type " + variableType + " und required: " + variableRequired);
@@ -114,6 +140,33 @@ public class BPMNVariableFormFieldScanner {
 				
 				formFields.addUserTaskVariable(baseElement.getId(), embeddedVariable.getName());
 				formFields.addVariableEmbedded(variableName, embeddedVariable);
+				
+				BPMNBooleanConstraint bc = new BPMNBooleanConstraint();
+				bc.setRequired(variableRequired);
+				formFields.addTaskSpecificConstraint(baseElement.getId(), variableName, bc);
+				
+				if(minlength != null || maxlength != null) {
+					BPMNStringConstraint stringConstraint = new BPMNStringConstraint();
+					if(minlength != null) {
+						stringConstraint.setMinLength(minlength.longValue());
+					}
+					if(maxlength != null) {
+						stringConstraint.setMaxLength(maxlength.longValue());
+					}
+					
+					formFields.addVariableConstraints(variableName, stringConstraint);
+				}
+				if(min != null || max != null) {
+					BPMNNumericConstraint numericConstraint = new BPMNNumericConstraint();
+					if(min != null) {
+						numericConstraint.setMin(min.longValue());
+					}
+					if(max != null) {
+						numericConstraint.setMax(max.longValue());
+					}
+					
+					formFields.addVariableConstraints(variableName, numericConstraint);
+				}
 			}
 		}
 	}
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 1fb2e7b..83f8838 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
@@ -262,6 +262,7 @@ public class BPMNParseUtils {
 
 	private static List<Integer> getIntProposals(String variable, BPMNTestdata<? extends Object> variableTestdata) {
 		return variableTestdata.getValues().stream() //
+				.filter(value -> value != null)
 				.map(value -> ((Long) value).intValue()) //
 				.collect(Collectors.toList()); //
 	}
-- 
GitLab