diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..b0557ce Binary files /dev/null and b/.DS_Store differ diff --git a/src/.DS_Store b/src/.DS_Store new file mode 100644 index 0000000..acabdc4 Binary files /dev/null and b/src/.DS_Store differ diff --git a/src/main/.DS_Store b/src/main/.DS_Store new file mode 100644 index 0000000..96c62b2 Binary files /dev/null and b/src/main/.DS_Store differ diff --git a/src/main/java/.DS_Store b/src/main/java/.DS_Store new file mode 100644 index 0000000..6b6936b Binary files /dev/null and b/src/main/java/.DS_Store differ diff --git a/src/main/java/de/.DS_Store b/src/main/java/de/.DS_Store new file mode 100644 index 0000000..dfdda8d Binary files /dev/null and b/src/main/java/de/.DS_Store differ diff --git a/src/main/java/de/vill/model/constraint/AndConstraint.java b/src/main/java/de/vill/model/constraint/AndConstraint.java index 1eea5f4..1cb5a49 100644 --- a/src/main/java/de/vill/model/constraint/AndConstraint.java +++ b/src/main/java/de/vill/model/constraint/AndConstraint.java @@ -6,55 +6,93 @@ import java.util.Arrays; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; public class AndConstraint extends Constraint { - private Constraint left; - private Constraint right; + + //List of children + private final List children = new ArrayList<>(); + + public AndConstraint(Constraint... constraints) { + for (Constraint c : constraints) { + if (c != null) { + children.add(c); + } + } + } public AndConstraint(Constraint left, Constraint right) { - this.left = left; - this.right = right; + this.children.add(left); + this.children.add(right); } public Constraint getLeft() { - return left; + if (children.isEmpty()){ + return null; + } + else{ + return children.get(0); + } } public Constraint getRight() { - return right; + if (children.isEmpty() || children.size() < 2){ + return null; + } + else{ + return children.get(children.size() - 1); + } + } + + public List getChildren() { + return children; } @Override public String toString(boolean withSubmodels, String currentAlias) { - return left.toString(withSubmodels, currentAlias) + - " & " + - right.toString(withSubmodels, currentAlias); + return + // Constraint-Stream - jeder constraint in einen String umgewandelt und mit einem & verknüpft + children.stream() + .map(c -> c.toString(withSubmodels, currentAlias)) + .collect(Collectors.joining(" & ")); } @Override public List getConstraintSubParts() { - return Arrays.asList(left, right); + return new ArrayList<>(children); } @Override public void replaceConstraintSubPart(Constraint oldSubConstraint, Constraint newSubConstraint) { - if (left == oldSubConstraint) { - left = newSubConstraint; - } else if (right == oldSubConstraint) { - right = newSubConstraint; + for (int i = 0; i< children.size(); i++) { + if (children.get(i) == oldSubConstraint){ + children.set(i, newSubConstraint); + } } } @Override public Constraint clone() { - return new AndConstraint(left.clone(), right.clone()); + AndConstraint clone = new AndConstraint(); + for (Constraint c : children) { + clone.addChild(c.clone()); + } + return clone; + } + + public void addChild(Constraint constraint){ + if (constraint != null) { + children.add(constraint); + } } @Override public int hashCode(int level) { final int prime = 31; - int result = prime * level + (left == null ? 0 : left.hashCode(1 + level)); - result = prime * result + (right == null ? 0 : right.hashCode(1 + level)); + int result = prime * level; + for(Constraint c: children) { + result = prime * result + (c == null ? 0 : c.hashCode(1 + level)); + } return result; } @@ -67,14 +105,15 @@ public boolean equals(Object obj) { return false; } AndConstraint other = (AndConstraint) obj; - return Objects.equals(left, other.left) && Objects.equals(right, other.right); + return Objects.equals(children, other.children); } @Override public List getReferences() { List references = new ArrayList<>(); - references.addAll(left.getReferences()); - references.addAll(right.getReferences()); + for(Constraint c: children){ + references.addAll(c.getReferences()); + } return references; } } diff --git a/src/main/java/de/vill/model/constraint/OrConstraint.java b/src/main/java/de/vill/model/constraint/OrConstraint.java index f770df8..cbc74ca 100644 --- a/src/main/java/de/vill/model/constraint/OrConstraint.java +++ b/src/main/java/de/vill/model/constraint/OrConstraint.java @@ -6,56 +6,92 @@ import java.util.Arrays; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; public class OrConstraint extends Constraint { - private Constraint left; - private Constraint right; + private final List children = new ArrayList<>(); + + public OrConstraint(Constraint... constraints) { + for (Constraint c : constraints) { + if (c != null) { + children.add(c); + } + } + } public OrConstraint(Constraint left, Constraint right) { - this.left = left; - this.right = right; + this.children.add(left); + this.children.add(right); } public Constraint getLeft() { - return left; + if (children.isEmpty()){ + return null; + } + else{ + return children.get(0); + } } public Constraint getRight() { - return right; + if (children.isEmpty() || children.size() < 2){ + return null; + } + else{ + return children.get(children.size() - 1); + } + } + + public List getChildren() { + return children; } @Override public String toString(boolean withSubmodels, String currentAlias) { - return left.toString(withSubmodels, currentAlias) + - " | " + - right.toString(withSubmodels, currentAlias); + return + // Constraint-Stream - jeder constraint in einen String umgewandelt und mit einem & verknüpft + children.stream() + .map(c -> c.toString(withSubmodels, currentAlias)) + .collect(Collectors.joining(" | ")); } @Override public List getConstraintSubParts() { - return Arrays.asList(left, right); + return new ArrayList<>(children); } @Override public void replaceConstraintSubPart(Constraint oldSubConstraint, Constraint newSubConstraint) { - if (left == oldSubConstraint) { - left = newSubConstraint; - } else if (right == oldSubConstraint) { - right = newSubConstraint; + for (int i = 0; i< children.size(); i++) { + if (children.get(i) == oldSubConstraint){ + children.set(i, newSubConstraint); + } } } @Override public Constraint clone() { - return new OrConstraint(left.clone(), right.clone()); + OrConstraint clone = new OrConstraint(); + for (Constraint c : children) { + clone.addChild(c.clone()); + } + return clone; + } + + public void addChild(Constraint constraint){ + if (constraint != null) { + children.add(constraint); + } } @Override public int hashCode(int level) { final int prime = 31; - int result = prime * level + (left == null ? 0 : left.hashCode(1 + level)); - result = prime * result + (right == null ? 0 : right.hashCode(1 + level)); + int result = prime * level; + for(Constraint c: children) { + result = prime * result + (c == null ? 0 : c.hashCode(1 + level)); + } return result; } @@ -68,14 +104,15 @@ public boolean equals(Object obj) { return false; } OrConstraint other = (OrConstraint) obj; - return Objects.equals(left, other.left) && Objects.equals(right, other.right); + return Objects.equals(children, other.children); } @Override public List getReferences() { List references = new ArrayList<>(); - references.addAll(left.getReferences()); - references.addAll(right.getReferences()); + for(Constraint c: children){ + references.addAll(c.getReferences()); + } return references; } }