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