diff --git a/src/main/java/datawave/data/normalizer/GeometryNormalizer.java b/src/main/java/datawave/data/normalizer/GeometryNormalizer.java index 1200261..149a311 100644 --- a/src/main/java/datawave/data/normalizer/GeometryNormalizer.java +++ b/src/main/java/datawave/data/normalizer/GeometryNormalizer.java @@ -2,6 +2,7 @@ import java.util.List; +import org.apache.accumulo.core.util.Pair; import org.locationtech.geowave.core.geotime.index.dimension.LatitudeDefinition; import org.locationtech.geowave.core.geotime.index.dimension.LongitudeDefinition; import org.locationtech.geowave.core.index.NumericIndexStrategy; @@ -13,6 +14,7 @@ import com.google.common.collect.Lists; +import datawave.data.type.Type; import datawave.data.type.util.Geometry; /** @@ -65,18 +67,21 @@ public static Index getGeometryIndex() { } @Override - public List normalizeToMany(String geoString) throws IllegalArgumentException { + public List> normalizeToMany(String geoString) throws IllegalArgumentException { + List> list = Lists.newArrayList(); if (validHash(geoString)) { - return Lists.newArrayList(geoString); + for (String s : Lists.newArrayList(geoString)) { + list.add(new Pair<>(s, Type.Category.GEOHASH)); + } } return normalizeDelegateTypeToMany(createDatawaveGeometry(parseGeometry(geoString))); } @Override - public List normalizeDelegateTypeToMany(Geometry geometry) { - List list = Lists.newArrayList(); + public List> normalizeDelegateTypeToMany(Geometry geometry) { + List> list = Lists.newArrayList(); for (byte[] one : getIndicesFromGeometry(geometry)) { - list.add(getEncodedStringFromIndexBytes(one)); + list.add(new Pair<>(getEncodedStringFromIndexBytes(one), Type.Category.GEOHASH)); } return list; } diff --git a/src/main/java/datawave/data/normalizer/OneToManyNormalizer.java b/src/main/java/datawave/data/normalizer/OneToManyNormalizer.java index 1ad641c..052ba56 100644 --- a/src/main/java/datawave/data/normalizer/OneToManyNormalizer.java +++ b/src/main/java/datawave/data/normalizer/OneToManyNormalizer.java @@ -2,9 +2,13 @@ import java.util.List; +import org.apache.accumulo.core.util.Pair; + +import datawave.data.type.Type; + public interface OneToManyNormalizer extends Normalizer { - List normalizeToMany(String in); + List> normalizeToMany(String in); - List normalizeDelegateTypeToMany(T foo); + List> normalizeDelegateTypeToMany(T foo); } diff --git a/src/main/java/datawave/data/type/GeometryType.java b/src/main/java/datawave/data/type/GeometryType.java index 23e6e69..80a525d 100644 --- a/src/main/java/datawave/data/type/GeometryType.java +++ b/src/main/java/datawave/data/type/GeometryType.java @@ -1,6 +1,9 @@ package datawave.data.type; import java.util.List; +import java.util.stream.Collectors; + +import org.apache.accumulo.core.util.Pair; import datawave.data.normalizer.Normalizer; import datawave.data.normalizer.OneToManyNormalizer; @@ -18,7 +21,7 @@ public GeometryType() { super(Normalizer.GEOMETRY_NORMALIZER); } - public List normalizeToMany(String in) { + public List> normalizeToMany(String in) { return ((OneToManyNormalizer) normalizer).normalizeToMany(in); } @@ -29,7 +32,8 @@ public void setNormalizedValues(List normalizedValues) { @Override public void normalizeAndSetNormalizedValue(Geometry valueToNormalize) { - setNormalizedValues(((OneToManyNormalizer) normalizer).normalizeDelegateTypeToMany(valueToNormalize)); + setNormalizedValues(((OneToManyNormalizer) normalizer).normalizeDelegateTypeToMany(valueToNormalize).stream().map(Pair::getFirst) + .collect(Collectors.toList())); } public List getNormalizedValues() { diff --git a/src/main/java/datawave/data/type/ListType.java b/src/main/java/datawave/data/type/ListType.java index e9a9a06..ca7a7e0 100644 --- a/src/main/java/datawave/data/type/ListType.java +++ b/src/main/java/datawave/data/type/ListType.java @@ -1,7 +1,11 @@ package datawave.data.type; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; +import java.util.stream.Collectors; + +import org.apache.accumulo.core.util.Pair; import datawave.data.normalizer.Normalizer; import datawave.util.StringUtils; @@ -19,13 +23,13 @@ public ListType(String delegateString, Normalizer normalizer) { } @Override - public List normalizeToMany(String in) { + public List> normalizeToMany(String in) { String[] splits = StringUtils.split(in, delimiter); - List strings = new ArrayList(splits.length); + List> strings = new ArrayList(splits.length); for (String s : splits) { String str = normalizer.normalize(s); - strings.add(str); + strings.add(new Pair(str, Category.LIST_ELEMENT)); } @@ -34,7 +38,7 @@ public List normalizeToMany(String in) { @Override public void setDelegateFromString(String in) { - this.normalizedValues = normalizeToMany(in); + this.normalizedValues = normalizeToMany(in).stream().map(Pair::getFirst).collect(Collectors.toList()); this.delegate = in; setNormalizedValue(in); } diff --git a/src/main/java/datawave/data/type/OneToManyNormalizerType.java b/src/main/java/datawave/data/type/OneToManyNormalizerType.java index 6ea93b9..cf379cc 100644 --- a/src/main/java/datawave/data/type/OneToManyNormalizerType.java +++ b/src/main/java/datawave/data/type/OneToManyNormalizerType.java @@ -2,9 +2,11 @@ import java.util.List; +import org.apache.accumulo.core.util.Pair; + public interface OneToManyNormalizerType> extends Type { - List normalizeToMany(String in); + List> normalizeToMany(String in); List getNormalizedValues(); diff --git a/src/main/java/datawave/data/type/Type.java b/src/main/java/datawave/data/type/Type.java index 9025a38..f7efc17 100644 --- a/src/main/java/datawave/data/type/Type.java +++ b/src/main/java/datawave/data/type/Type.java @@ -53,4 +53,8 @@ public static Type createType(String datawaveTypeClassName) { } } } + + enum Category { + FULL, PART, GEOHASH, LIST_ELEMENT + } } diff --git a/src/test/java/datawave/data/type/ListTypeTest.java b/src/test/java/datawave/data/type/ListTypeTest.java index 64bb59b..e2caea3 100644 --- a/src/test/java/datawave/data/type/ListTypeTest.java +++ b/src/test/java/datawave/data/type/ListTypeTest.java @@ -3,10 +3,13 @@ import java.util.Arrays; import java.util.List; +import org.apache.accumulo.core.util.Pair; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.locationtech.jts.util.Assert; +import com.google.common.collect.Lists; + public class ListTypeTest { @Test @@ -15,7 +18,13 @@ public void test() { LcNoDiacriticsListType t = new LcNoDiacriticsListType(str); Assert.equals(6, t.normalizeToMany(str).size()); - List expected = Arrays.asList(new String[] {"1", "2", "3", "a", "b", "c"}); + List> expected = Lists.newArrayList(); + expected.add(new Pair("1", Type.Category.LIST_ELEMENT)); + expected.add(new Pair("2", Type.Category.LIST_ELEMENT)); + expected.add(new Pair("3", Type.Category.LIST_ELEMENT)); + expected.add(new Pair("a", Type.Category.LIST_ELEMENT)); + expected.add(new Pair("b", Type.Category.LIST_ELEMENT)); + expected.add(new Pair("c", Type.Category.LIST_ELEMENT)); Assert.equals(expected, t.normalizeToMany(str)); } @@ -25,14 +34,24 @@ public void testLcNDList() { LcNoDiacriticsListType t = new LcNoDiacriticsListType(); Assert.equals(6, t.normalizeToMany(str).size()); - List expected = Arrays.asList(new String[] {"01", "02", "03", "a", "b", "c"}); + List> expected = Lists.newArrayList(); + expected.add(new Pair("01", Type.Category.LIST_ELEMENT)); + expected.add(new Pair("02", Type.Category.LIST_ELEMENT)); + expected.add(new Pair("03", Type.Category.LIST_ELEMENT)); + expected.add(new Pair("a", Type.Category.LIST_ELEMENT)); + expected.add(new Pair("b", Type.Category.LIST_ELEMENT)); + expected.add(new Pair("c", Type.Category.LIST_ELEMENT)); Assert.equals(expected, t.normalizeToMany(str)); } @Test public void testNumberList() { String str = "1,2,3,5.5"; - List expected = Arrays.asList(new String[] {"+aE1", "+aE2", "+aE3", "+aE5.5"}); + List> expected = Lists.newArrayList(); + expected.add(new Pair("+aE1", Type.Category.LIST_ELEMENT)); + expected.add(new Pair("+aE2", Type.Category.LIST_ELEMENT)); + expected.add(new Pair("+aE3", Type.Category.LIST_ELEMENT)); + expected.add(new Pair("+aE5.5", Type.Category.LIST_ELEMENT)); NumberListType nt = new NumberListType(); Assert.equals(4, nt.normalizeToMany(str).size());