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

Add Builder Pattern for String Boundary

parent 4ffa334d
No related branches found
No related tags found
No related merge requests found
...@@ -18,7 +18,7 @@ public abstract class AbstractBoundary<T extends Comparable<? super T>> implemen ...@@ -18,7 +18,7 @@ public abstract class AbstractBoundary<T extends Comparable<? super T>> implemen
private HashMap<BoundaryBiCreaterType, BoundaryBiCreater> biCreaterFunctions; private HashMap<BoundaryBiCreaterType, BoundaryBiCreater> biCreaterFunctions;
private HashMap<BoundaryCreaterType, BoundaryCreater> createrFunctions; private HashMap<BoundaryCreaterType, BoundaryCreater> createrFunctions;
private Class<T> type; private Class<T> type;
private String text; protected String text;
protected AbstractBoundary(String text, Class<T> type) { protected AbstractBoundary(String text, Class<T> type) {
this.text = text; this.text = text;
......
...@@ -15,6 +15,7 @@ import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType. ...@@ -15,6 +15,7 @@ import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.
import static de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreaterType.LOWER; import static de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreaterType.LOWER;
import static de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreaterType.UPPER; import static de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreaterType.UPPER;
import de.unikoblenz.fgbks.base.builder.DefaultBuilder;
import de.unikoblenz.fgbks.base.utils.boundary.AbstractBoundary; import de.unikoblenz.fgbks.base.utils.boundary.AbstractBoundary;
import de.unikoblenz.fgbks.base.utils.boundary.Boundary; import de.unikoblenz.fgbks.base.utils.boundary.Boundary;
import de.unikoblenz.fgbks.base.utils.boundary.BoundaryParseException; import de.unikoblenz.fgbks.base.utils.boundary.BoundaryParseException;
...@@ -37,8 +38,11 @@ import de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreater; ...@@ -37,8 +38,11 @@ import de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreater;
import de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreaterType; import de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreaterType;
import de.unikoblenz.fgbks.base.utils.boundary.creater.CreaterStringLower; import de.unikoblenz.fgbks.base.utils.boundary.creater.CreaterStringLower;
import de.unikoblenz.fgbks.base.utils.boundary.creater.CreaterStringUpper; import de.unikoblenz.fgbks.base.utils.boundary.creater.CreaterStringUpper;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.apache.commons.lang3.Validate; import org.apache.commons.lang3.Validate;
...@@ -76,6 +80,10 @@ public class StringBoundary extends AbstractBoundary<String> { ...@@ -76,6 +80,10 @@ public class StringBoundary extends AbstractBoundary<String> {
super(text, String.class); super(text, String.class);
} }
private StringBoundary() {
super(String.class);
}
@Override @Override
public int compareTo(Boundary o) { public int compareTo(Boundary o) {
return o.getText().compareTo(o.getText()); return o.getText().compareTo(o.getText());
...@@ -156,4 +164,56 @@ public class StringBoundary extends AbstractBoundary<String> { ...@@ -156,4 +164,56 @@ public class StringBoundary extends AbstractBoundary<String> {
+ Arrays.stream(values).map(v -> '"' + v + '"').collect(Collectors.joining(",")) + Arrays.stream(values).map(v -> '"' + v + '"').collect(Collectors.joining(","))
+ (matchNoneOfValues ? ")" : ""); + (matchNoneOfValues ? ")" : "");
} }
public static Builder getBuilder() {
return new StringBoundary().new Builder();
}
public class Builder extends DefaultBuilder<StringBoundary> {
private List<String> buildingValues;
private Builder() {
buildingValues = new ArrayList<>();
value.matchAny = false;
value.matchNoneOfValues = false;
}
public Builder isMatchNoneOfValues(boolean matchNoneOfValues) {
value.matchNoneOfValues = matchNoneOfValues;
return this;
}
public Builder isMatchAny(boolean matchAny) {
value.matchAny = matchAny;
value.matchNoneOfValues = false;
value.values = new String[0];
return this;
}
public Builder addValue(String value) {
buildingValues.add(Validate.notNull(value));
return this;
}
public Builder addValues(Collection<String> values) {
buildingValues.addAll(Validate.noNullElements(values));
return this;
}
@Override
protected void validate() {
super.validate();
if (matchAny) {
// TODO exception
}
}
@Override
public StringBoundary build() {
value.values = buildingValues.toArray(new String[buildingValues.size()]);
value.text = value.getParsedText();
return super.build();
}
}
} }
package de.unikoblenz.fgbks.base.utils.boundary.impl;
import io.quarkus.test.junit.QuarkusTest;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@QuarkusTest
class StringBoundaryTest {
@Test
public void testBuilder() {
StringBoundary sb = StringBoundary.getBuilder().addValue("a").build();
Assertions.assertEquals("a", sb.getValues()[0]);
Assertions.assertFalse(sb.isMatchAny());
Assertions.assertFalse(sb.matchesNoneOfValues());
Assertions.assertEquals("\"a\"", sb.getText());
sb = StringBoundary.getBuilder().addValue("a").addValue("b").isMatchNoneOfValues(true).build();
Assertions.assertEquals("a", sb.getValues()[0]);
Assertions.assertFalse(sb.isMatchAny());
Assertions.assertTrue(sb.matchesNoneOfValues());
Assertions.assertEquals("not(\"a\",\"b\")", sb.getText());
}
}
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