diff --git a/pom.xml b/pom.xml index db68447..808e119 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ type-utils - 1.12-SNAPSHOT + 1.13-SNAPSHOT https://code.nsa.gov/datawave-type-utils @@ -28,7 +28,7 @@ 3.9 3.6 1.1.0 - 2.6.0-cdh5.9.1 + 3.1.1.7.2.15.0-147 1.19.0 1.6.2 1.7.29 diff --git a/src/main/java/datawave/data/normalizer/AbstractGeometryNormalizer.java b/src/main/java/datawave/data/normalizer/AbstractGeometryNormalizer.java index 3ea2369..9a4f55f 100644 --- a/src/main/java/datawave/data/normalizer/AbstractGeometryNormalizer.java +++ b/src/main/java/datawave/data/normalizer/AbstractGeometryNormalizer.java @@ -35,6 +35,7 @@ public abstract class AbstractGeometryNormalizer= 0 && tier <= 0x1f; + } + + public boolean validLength(short tier, String value) { + // determine the length of the position in hex characters + // ceil(tier/4) will get the number of bytes + int bytes = (tier >> 2) + ((tier & 0x3) == 0 ? 0 : 1); + + // multiply by 2 to get the number of hex digits + int posLen = 2 * bytes; + // length is the tier length plus the position length + return value.length() == (2 + posLen); + } + + public boolean validPosition(short tier, long value) { + // The maximum value must be less than pow(2, tier*2) + long max = 1L << (tier * 2); + return value >= 0 && value < max; + } + } diff --git a/src/main/java/datawave/data/normalizer/GeometryNormalizer.java b/src/main/java/datawave/data/normalizer/GeometryNormalizer.java index e27c78a..f9a883d 100644 --- a/src/main/java/datawave/data/normalizer/GeometryNormalizer.java +++ b/src/main/java/datawave/data/normalizer/GeometryNormalizer.java @@ -16,11 +16,11 @@ /** * A normalizer that, given a parseable geometry string representing an arbitrary geometry, will perform GeoWave indexing with a multi-tiered spatial geowave * index configuration - * */ public class GeometryNormalizer extends AbstractGeometryNormalizer implements OneToManyNormalizer { private static final long serialVersionUID = 171360806347433135L; + // NOTE: If we change the index strategy, then we will need to update the validHash method appropriately. // @formatter:off public static final NumericIndexStrategy indexStrategy = TieredSFCIndexFactory.createFullIncrementalTieredStrategy( new NumericDimensionDefinition[]{ @@ -40,6 +40,7 @@ public class GeometryNormalizer extends AbstractGeometryNormalizer normalizeToMany(String geoString) throws IllegalArgumentException { + if (validHash(geoString)) { + return Lists.newArrayList(geoString); + } return normalizeDelegateTypeToMany(createDatawaveGeometry(parseGeometry(geoString))); } @@ -64,4 +68,5 @@ public List normalizeDelegateTypeToMany(Geometry geometry) { protected datawave.data.type.util.Geometry createDatawaveGeometry(org.locationtech.jts.geom.Geometry geometry) { return new datawave.data.type.util.Geometry(geometry); } + } diff --git a/src/main/java/datawave/data/normalizer/PointNormalizer.java b/src/main/java/datawave/data/normalizer/PointNormalizer.java index 6387a2c..b6f3ce9 100644 --- a/src/main/java/datawave/data/normalizer/PointNormalizer.java +++ b/src/main/java/datawave/data/normalizer/PointNormalizer.java @@ -13,11 +13,11 @@ /** * A normalizer that, given a parseable geometry string representing a point geometry will perform GeoWave indexing with a single-tier spatial geowave index * configuration - * */ public class PointNormalizer extends AbstractGeometryNormalizer { private static final long serialVersionUID = 171360806347433135L; + // NOTE: If we change the index strategy, then we will need to update the validHash method appropriately. // @formatter:off public static final NumericIndexStrategy indexStrategy = TieredSFCIndexFactory.createSingleTierStrategy( new NumericDimensionDefinition[]{ @@ -37,6 +37,7 @@ public class PointNormalizer extends AbstractGeometryNormalizer