Skip to content
Snippets Groups Projects
Commit 28799703 authored by Jonas Blatt's avatar Jonas Blatt :ant:
Browse files

Add String BiCreater Combine

parent 4000d96a
No related branches found
No related tags found
No related merge requests found
package de.unikoblenz.fgbks.base.utils.boundary.bicreater;
import de.unikoblenz.fgbks.base.utils.boundary.impl.StringBoundary;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Optional;
import java.util.Set;
public class BiCreaterStringCombine extends AbstractBoundaryBiCreater<StringBoundary> {
......@@ -22,6 +25,48 @@ public class BiCreaterStringCombine extends AbstractBoundaryBiCreater<StringBoun
@Override
public Optional<StringBoundary> create(StringBoundary b1, StringBoundary b2) {
return Optional.empty();
if (b1.isMatchAny() || b2.isMatchAny()) {
return Optional.of(StringBoundary.getBuilder().isMatchAny(true).build());
}
if (!b1.matchesNoneOfValues() && !b2.matchesNoneOfValues()) {
return Optional.of(
StringBoundary.getBuilder().addValues(b1.getValues()).addValues(b2.getValues()).build());
}
Set<String> values = new HashSet<>();
if (b1.matchesNoneOfValues() && b2.matchesNoneOfValues()) {
values = intersection(b1.getValues(), b2.getValues());
}
if (b1.matchesNoneOfValues()) {
values = leftInter(b1.getValues(), b2.getValues());
}
if (b2.matchesNoneOfValues()) {
values = leftInter(b2.getValues(), b1.getValues());
}
return Optional.of(
StringBoundary.getBuilder()
.isMatchNoneOfValues(true)
.addValues(values)
.isMatchAny(values.size() == 0)
.build());
}
private Set<String> leftInter(String[] values1, String[] values2) {
Set<String> vals = new HashSet<>(Arrays.asList(values1));
for (String v : values2) {
vals.removeIf(x -> x.equals(v));
}
return vals;
}
private Set<String> intersection(String[] values1, String[] values2) {
Set<String> vals = new HashSet<>();
for (String v1 : values1) {
for (String v2 : values2) {
if (v1.equals(v2)) {
vals.add(v1);
}
}
}
return vals;
}
}
......@@ -21,6 +21,7 @@ import de.unikoblenz.fgbks.base.utils.boundary.Boundary;
import de.unikoblenz.fgbks.base.utils.boundary.BoundaryParseException;
import de.unikoblenz.fgbks.base.utils.boundary.bicreater.BiCreaterStringAppend;
import de.unikoblenz.fgbks.base.utils.boundary.bicreater.BiCreaterStringBetween;
import de.unikoblenz.fgbks.base.utils.boundary.bicreater.BiCreaterStringCombine;
import de.unikoblenz.fgbks.base.utils.boundary.bicreater.BiCreaterStringIntersection;
import de.unikoblenz.fgbks.base.utils.boundary.bicreater.BiCreaterStringLowerBounds;
import de.unikoblenz.fgbks.base.utils.boundary.bicreater.BiCreaterStringUpperBounds;
......@@ -69,7 +70,7 @@ public class StringBoundary extends AbstractBoundary<String> {
biCreaterMap.put(UPPER_BOUNDS, BiCreaterStringUpperBounds.getInstance());
biCreaterMap.put(BETWEEN, BiCreaterStringBetween.getInstance());
biCreaterMap.put(APPEND, BiCreaterStringAppend.getInstance());
biCreaterMap.put(COMBINE, BiCreaterStringBetween.getInstance());
biCreaterMap.put(COMBINE, BiCreaterStringCombine.getInstance());
}
private boolean matchNoneOfValues;
......
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