From 7c2ec8b3ace7a838d4270e06ab349c1a008482c7 Mon Sep 17 00:00:00 2001 From: Julia Pham Date: Fri, 17 Oct 2025 17:35:34 +0200 Subject: [PATCH 1/3] feat(and-constraint): allow more than two children --- .DS_Store | Bin 0 -> 6148 bytes src/.DS_Store | Bin 0 -> 6148 bytes src/main/.DS_Store | Bin 0 -> 6148 bytes src/main/java/.DS_Store | Bin 0 -> 6148 bytes src/main/java/de/.DS_Store | Bin 0 -> 6148 bytes .../vill/model/constraint/AndConstraint.java | 66 ++++++++++++------ 6 files changed, 43 insertions(+), 23 deletions(-) create mode 100644 .DS_Store create mode 100644 src/.DS_Store create mode 100644 src/main/.DS_Store create mode 100644 src/main/java/.DS_Store create mode 100644 src/main/java/de/.DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b0557cef18e300f7717a8eec4e9fc1502a62ee7f GIT binary patch literal 6148 zcmeHKL2uJA6n<{YnrK4m0i<1!EOD($p%V;o$-4G12{~IZ$~SrTKWO328D$%DXpd zo~U_W&GMws+|YD*zUPlxJBvkc_eop!_V$)-xp?}h+m^e%$IGSf-M#SG@UsGoB~dP8!KRU zByao1443E>a0>h{3h@3Q;f#UB%AnplQ0OZFuz|2P)cK>4InrWau`-Arm@rhJp$dD& z5QdJpw0VKW%Alc>u$K>EpDgSRMd+tve5un(1O{E{6mSZxDo{7g7N7sa-{1dNNv`D- za0>iW3W&xa9P}|Id$w*&j?Y>N{{Uy>yvpDu1r>c1BbSfj9k@2cC0Brf#mXQeF!v## MWpIU4;EyWs3rkLgo&W#< literal 0 HcmV?d00001 diff --git a/src/.DS_Store b/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..acabdc49236a35e3c3488defa796663c73817b57 GIT binary patch literal 6148 zcmeHKy-ve05I(m7QX!-cAa#tyT0x z=iasKdAXl=vzFgErPh&@NieMY!Eqe*+SU18ndW|+MjaIphY`A*oy2JE;r>P~ZWb5M8sTdR$_v({W63@Y}*;_~)k`zEod{4K~Kf(-HrKAy1eJs;R)VFs81X5ddUV9rK+_D_C2e>5||416a8 zbUrw!gs#CtqdGdUP$>W+JtLK1T|NB~9Wo%g1`Ca7K@mC>QHKhXVhEEt2px|7uJJE4 z>TnQhW*o=NEKG(XOyVINF!;MIs8RBB?2Mq^f*v^kVQ&iX@siNB*W zyPJYmPl8C9f!Vj2o!KyN!%l`V#@$hWi!qBaW`ZJ?sxW*bxQ;p}C2c7Ka@^xM5;s94 z0(iy^N&Y_rcyshOZB2N7<9t>qb*dKt)<#`zQMdpf8+)rez zrxwhrS?yW%$)wfZZP=|&XWFnQd)v*1-EQqnr&V)peRKb$_YghC;#pD8;k%TwqOpJ% zn9TASd&4*q@h#X2|H6-u7$63Sfkk9M-*skf5tE~whyh~YR}A3&V1pt$8gqs6>VQGE z0DuOVrNCVN`UBc%0CY6w3c&)xRVbhe<+{b-x^v(v9M&D}pDR@1jLSE}KKjjEcPLyp z9^97hj5`WxBnF6q&kSJi2V!CUKl-`HZ^wAp;+rE+CyxoTCdnsw#f z$;?arbTaPxqYHdGl`;+r+Yip7LDqLx4`q`2Q8E~*fG8Y*%jJ2Lgfi>ONfM4#tfv<& z+p_ykeL8KmcN?PB>C75py0_hIh<0mdHnXj@_09d0{(bzA$R|xVhyPK@iopV&!BDw8 zdZQ$k$t^q=zJ(7VF+dCu1B=dpIrpsEq9;oE5d*})uNlDeL4YE<26K(-=zu}B0Du*k zRsuF&|1m}wbPeVjVFiTiP(U5ZO^d;GILr&<=Nim4>Tt$Q^TExVx#>{2dOPedlsn_D zMjD9$V&F3a*!zJvSpScH?*Ek&4a5L3u$T<+O3&+cAvaT7=d#3FD?qP7QP3~f_z?nz iD#hT7rMM2N1m*=AfUdz@Bg}x%ML^L&12OQY47>yOiBRDH literal 0 HcmV?d00001 diff --git a/src/main/java/de/.DS_Store b/src/main/java/de/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..dfdda8d1ee8ab99e931e744b4c22bb09bcedac41 GIT binary patch literal 6148 zcmeHK!Ab)$5KY=@Q;N`oLXQEjMXN1Z@v^S<;MEm9sMM}4x)?X5-L{8P*t7nSU*hlR zOp+F~dJ;s+3`|~jGLvOqmdp-gjQhjR4r3+8m;go06kzy9a2<6)GR~3($fQJi8nlv4|*S+DI)rvEFf_|)Yd=Ivn|ICk&7$63Sfn{XC-F2e4jLA_>!~ikyD+cg>kf4a3!_=a=I$$s@ z0ALQxMqqA!{Q)H!06mAPMX-Qy8wzMcxoa`F>m0ZZhjq{SrxtBE children = new ArrayList<>(); + + public AndConstraint(Constraint... constraints) { + for (Constraint c : constraints) { + if (c != null) { + children.add(c); + } + } } - public Constraint getLeft() { - return left; + public AndConstraint(Constraint left, Constraint right) { + this(new Constraint[]{left, right}); } - public Constraint getRight() { - return right; + 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 +86,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; } } From a7daa3a9b6e14190badef3bdf5ffd5f81936de1d Mon Sep 17 00:00:00 2001 From: Julia Pham Date: Fri, 21 Nov 2025 18:12:06 +0100 Subject: [PATCH 2/3] feat: added getLeft and getRight for backwards compatibility --- .../vill/model/constraint/AndConstraint.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/vill/model/constraint/AndConstraint.java b/src/main/java/de/vill/model/constraint/AndConstraint.java index e102357..1cb5a49 100644 --- a/src/main/java/de/vill/model/constraint/AndConstraint.java +++ b/src/main/java/de/vill/model/constraint/AndConstraint.java @@ -22,7 +22,26 @@ public AndConstraint(Constraint... constraints) { } public AndConstraint(Constraint left, Constraint right) { - this(new Constraint[]{left, right}); + this.children.add(left); + this.children.add(right); + } + + public Constraint getLeft() { + if (children.isEmpty()){ + return null; + } + else{ + return children.get(0); + } + } + + public Constraint getRight() { + if (children.isEmpty() || children.size() < 2){ + return null; + } + else{ + return children.get(children.size() - 1); + } } public List getChildren() { From d5155b7e53a4c5765b758a9a28179feec63eddc5 Mon Sep 17 00:00:00 2001 From: Julia Pham Date: Mon, 1 Dec 2025 09:01:26 +0100 Subject: [PATCH 3/3] fix: implemented OrConstraint like AndConstraint allowing multiple children --- .../vill/model/constraint/OrConstraint.java | 77 ++++++++++++++----- 1 file changed, 57 insertions(+), 20 deletions(-) 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; } }