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

Add Lower Bound Creater for String

Upper Bound Creater for Strings is always false!
parent 29c2e089
No related branches found
No related tags found
No related merge requests found
......@@ -9,6 +9,7 @@ import de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreaterType;
import de.unikoblenz.fgbks.base.utils.boundary.impl.InvalidBoundary;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VTypeRef;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import org.apache.commons.lang3.Validate;
......@@ -113,11 +114,11 @@ public abstract class AbstractBoundary<T extends Comparable<? super T>> implemen
protected abstract void validate();
protected abstract HashMap<BoundaryCheckType, BoundaryCheck> getChecker();
protected abstract Map<BoundaryCheckType, BoundaryCheck> getChecker();
protected abstract HashMap<BoundaryBiCreaterType, BoundaryBiCreater> getBiCreater();
protected abstract Map<BoundaryBiCreaterType, BoundaryBiCreater> getBiCreater();
protected abstract HashMap<BoundaryCreaterType, BoundaryCreater> getCreater();
protected abstract Map<BoundaryCreaterType, BoundaryCreater> getCreater();
@Override
public String toString() {
......
......@@ -36,7 +36,9 @@ 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.CreaterLower;
import de.unikoblenz.fgbks.base.utils.boundary.creater.CreaterUpper;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import org.apache.commons.lang3.Validate;
......@@ -117,18 +119,18 @@ public abstract class AbstractGrowingBoundary<T extends Comparable<? super T>>
}
@Override
protected HashMap<BoundaryCheckType, BoundaryCheck> getChecker() {
return checkerMap;
protected Map<BoundaryCheckType, BoundaryCheck> getChecker() {
return Collections.unmodifiableMap(checkerMap);
}
@Override
protected HashMap<BoundaryBiCreaterType, BoundaryBiCreater> getBiCreater() {
return biCreaterMap;
protected Map<BoundaryBiCreaterType, BoundaryBiCreater> getBiCreater() {
return Collections.unmodifiableMap(biCreaterMap);
}
@Override
protected HashMap<BoundaryCreaterType, BoundaryCreater> getCreater() {
return createrMap;
protected Map<BoundaryCreaterType, BoundaryCreater> getCreater() {
return Collections.unmodifiableMap(createrMap);
}
@Override
......
......@@ -22,6 +22,10 @@ public class CreaterStringLower extends AbstractBoundaryCreater<StringBoundary>
@Override
public Optional<StringBoundary> create(StringBoundary b) {
return Optional.empty();
return Optional.of(StringBoundary.getBuilder()
.addValues(b.getValues())
.isMatchNoneOfValues(!b.matchesNoneOfValues())
.isMatchAny(b.getAmountOfElements() == 0)
.build());
}
}
......@@ -22,6 +22,8 @@ public class CreaterStringUpper extends AbstractBoundaryCreater<StringBoundary>
@Override
public Optional<StringBoundary> create(StringBoundary b) {
// is every time empty, because there is no "Upper", the result for "Upper" is
// inside the class CreaterStringLower
return Optional.empty();
}
}
......@@ -41,8 +41,10 @@ import de.unikoblenz.fgbks.base.utils.boundary.creater.CreaterStringUpper;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
import org.apache.commons.lang3.Validate;
......@@ -117,7 +119,6 @@ public class StringBoundary extends AbstractBoundary<String> {
matchAny = Validate.notNull(text).isEmpty();
if (matchAny) {
values = new String[0];
valuesHashes = new int[0];
} else {
matchNoneOfValues = text.toLowerCase().startsWith("not");
text = text.replace('(', '\0').replace(')', '\0').trim();
......@@ -125,37 +126,41 @@ public class StringBoundary extends AbstractBoundary<String> {
text = text.replaceFirst("not", "").trim();
}
values = text.split(",");
valuesHashes = new int[values.length];
for (int i = 0; i < values.length; i++) {
values[i] = values[i].replace('"', '\0').trim();
valuesHashes[i] = Objects.hashCode(values[i]);
}
}
// Sort hashes for later comparisons
Arrays.sort(valuesHashes);
calcHashes();
} catch (Exception e) {
throw new BoundaryParseException("String value is not valid: " + this.getText());
}
}
private void calcHashes() {
valuesHashes = new int[values.length];
for (int i = 0; i < values.length; i++) {
values[i] = values[i].replace('"', '\0').trim();
valuesHashes[i] = Objects.hashCode(values[i]);
}
// Sort hashes for later comparisons
Arrays.sort(valuesHashes);
}
@Override
protected void validate() {
Validate.noNullElements(values);
}
@Override
protected HashMap<BoundaryCheckType, BoundaryCheck> getChecker() {
return checkerMap;
protected Map<BoundaryCheckType, BoundaryCheck> getChecker() {
return Collections.unmodifiableMap(checkerMap);
}
@Override
protected HashMap<BoundaryBiCreaterType, BoundaryBiCreater> getBiCreater() {
return biCreaterMap;
protected Map<BoundaryBiCreaterType, BoundaryBiCreater> getBiCreater() {
return Collections.unmodifiableMap(biCreaterMap);
}
@Override
protected HashMap<BoundaryCreaterType, BoundaryCreater> getCreater() {
return createrMap;
protected Map<BoundaryCreaterType, BoundaryCreater> getCreater() {
return Collections.unmodifiableMap(createrMap);
}
@Override
......@@ -186,8 +191,10 @@ public class StringBoundary extends AbstractBoundary<String> {
public Builder isMatchAny(boolean matchAny) {
value.matchAny = matchAny;
value.matchNoneOfValues = false;
value.values = new String[0];
if (matchAny) {
value.matchNoneOfValues = false;
value.values = new String[0];
}
return this;
}
......@@ -201,6 +208,10 @@ public class StringBoundary extends AbstractBoundary<String> {
return this;
}
public Builder addValues(String[] values) {
return addValues(Validate.notNull(Arrays.asList(values)));
}
@Override
protected void validate() {
super.validate();
......@@ -211,7 +222,8 @@ public class StringBoundary extends AbstractBoundary<String> {
@Override
public StringBoundary build() {
value.values = buildingValues.toArray(new String[buildingValues.size()]);
value.values = buildingValues.toArray(new String[0]);
value.calcHashes();
value.text = value.getParsedText();
return super.build();
}
......
package de.unikoblenz.fgbks.base.utils.boundary.creater;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import de.unikoblenz.fgbks.base.utils.boundary.impl.StringBoundary;
import io.quarkus.test.junit.QuarkusTest;
import org.junit.jupiter.api.Test;
@QuarkusTest
class CreaterStringLowerTest {
@Test
public void testStringLower() {
StringBoundary sb = StringBoundary.getBuilder().addValue("a").build();
assertEquals("a", sb.getValues()[0]);
assertFalse(sb.isMatchAny());
assertFalse(sb.matchesNoneOfValues());
assertEquals("\"a\"", sb.getText());
StringBoundary sb2 = (StringBoundary) sb.create(BoundaryCreaterType.LOWER).get();
assertArrayEquals(sb.getValues(), sb2.getValues());
assertTrue(sb2.matchesNoneOfValues());
assertFalse(sb.isMatchAny());
}
}
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