Final cleanup
Project: http://git-wip-us.apache.org/repos/asf/zest-qi4j/repo Commit: http://git-wip-us.apache.org/repos/asf/zest-qi4j/commit/684bb9eb Tree: http://git-wip-us.apache.org/repos/asf/zest-qi4j/tree/684bb9eb Diff: http://git-wip-us.apache.org/repos/asf/zest-qi4j/diff/684bb9eb Branch: refs/heads/ramtej-fb/spatial.queries Commit: 684bb9eb3f99121a9817d5cd24e8f6c011fcdad5 Parents: 503532e Author: jj <[email protected]> Authored: Sat Jan 17 17:15:12 2015 +0100 Committer: jj <[email protected]> Committed: Sat Jan 17 17:15:12 2015 +0100 ---------------------------------------------------------------------- .../java/org/qi4j/api/geometry/TFeature.java | 34 +- .../qi4j/api/geometry/TFeatureCollection.java | 18 +- .../org/qi4j/api/geometry/TGeometryFactory.java | 41 +- .../java/org/qi4j/api/geometry/TMultiPoint.java | 30 +- .../main/java/org/qi4j/api/geometry/TPoint.java | 89 ++-- .../java/org/qi4j/api/geometry/TPolygon.java | 66 +-- .../main/java/org/qi4j/api/geometry/TUnit.java | 6 +- .../qi4j/api/geometry/internal/Coordinate.java | 83 ++-- .../qi4j/api/geometry/internal/TLinearRing.java | 6 +- .../internal/builders/TFeatureBuilder.java | 20 +- .../internal/builders/TLineStringBuilder.java | 28 +- .../builders/TMultiPolygonsBuilder.java | 29 +- .../convert/ST_PointFromTextSpecification.java | 44 -- .../ST_WithinSpatialSpecification.java | 78 --- .../predicate/ST_WithinSpecification.java | 36 +- .../org/qi4j/api/geometry/TGeometryTest.java | 195 ++++---- .../spatial/ElasticSearchSpatialFinder.java | 49 +- .../spatial/ElasticSearchSpatialIndexer.java | 121 +++-- .../configuration/SpatialConfiguration.java | 57 ++- .../SpatialFunctionsSupportMatrix.java | 65 +-- .../functions/convert/ST_GeometryFromText.java | 14 +- .../functions/predicates/ST_Disjoint.java | 24 +- .../functions/predicates/ST_Intersects.java | 26 +- .../mappings/builders/GeoPointBuilder.java | 29 +- .../mappings/builders/GeoShapeBuilder.java | 21 +- .../mappings/builders/MappingQueryBuilder.java | 6 +- .../builders/SpatialMappingFactory.java | 12 +- .../spatial/mappings/cache/MappingsCache.java | 46 +- .../ElasticSearchSpatialClusterQueryTest.java | 484 ------------------- .../spatial/ElasticSearchSpatialBench.java | 170 ------- ...earchSpatialQueryTestUsingUsingDefaults.java | 6 +- .../extension/spatial/utils/RandomPoint.java | 148 ------ .../src/test/resources/RIAKBenchmark.properties | 1 - libraries/spatial/build.gradle | 14 +- libraries/spatial/dev-status.xml | 26 +- .../conversions/from/GeoJsonFromConverter.java | 204 -------- .../from/TGeometryFromConverter.java | 38 -- .../conversions/from/WKTFromConverter.java | 226 --------- .../conversions/to/GeoJsonToConverter.java | 66 --- .../conversions/to/Spatial4JToConverter.java | 117 ----- .../conversions/to/TGeometryToConverter.java | 46 -- .../formats/conversions/TConversions.java | 31 ++ .../from/TGeometryFromConverter.java | 39 ++ .../conversions/from/WKTFromConverter.java | 164 +++++++ .../conversions/to/Spatial4JToConverter.java | 114 +++++ .../conversions/to/TGeometryToConverter.java | 47 ++ .../formats/conversions/to/ToHelper.java | 63 +++ .../transformations/fromto/ToHelper.java | 150 ------ .../transformations/TTransformations.java | 32 ++ .../ConvertFromGeoJsonToTGeometryTest.java | 179 ------- .../conversions/ConversionsFromWktTest.java | 33 ++ .../ConvertFromGeoJsonToTGeometryTest.java | 189 ++++++++ .../formats/data/GeoJSONSpec20080616.java | 28 ++ .../spatial/topo/GeoJSONSwissLakes2013.java | 79 --- .../openstreetmap/model/FeatureEntity.java | 17 - .../domain/openstreetmap/model/TagEntity.java | 15 - .../OpenStreetMapDomainModelAssembler.java | 45 -- .../model/interactions/api/OSM.java | 110 ----- 58 files changed, 1423 insertions(+), 2731 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/684bb9eb/core/api/src/main/java/org/qi4j/api/geometry/TFeature.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/qi4j/api/geometry/TFeature.java b/core/api/src/main/java/org/qi4j/api/geometry/TFeature.java index cf983e9..b47abec 100644 --- a/core/api/src/main/java/org/qi4j/api/geometry/TFeature.java +++ b/core/api/src/main/java/org/qi4j/api/geometry/TFeature.java @@ -17,18 +17,21 @@ package org.qi4j.api.geometry; import org.qi4j.api.common.Optional; import org.qi4j.api.geometry.internal.Coordinate; import org.qi4j.api.geometry.internal.TGeometry; -import org.qi4j.api.geometry.internal.TLinearRing; import org.qi4j.api.injection.scope.Structure; import org.qi4j.api.injection.scope.This; import org.qi4j.api.mixin.Mixins; import org.qi4j.api.property.Property; import org.qi4j.api.structure.Module; -import java.util.*; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; @Mixins(TFeature.Mixin.class) -public interface TFeature extends TGeometry { +public interface TFeature extends TGeometry +{ @Optional @@ -43,6 +46,7 @@ public interface TFeature extends TGeometry { TFeature of(TGeometry geometry); TFeature withProperties(Map<String, List<String>> properties); + TFeature addProperty(String name, String value); TGeometry asGeometry(); @@ -50,7 +54,8 @@ public interface TFeature extends TGeometry { Map<String, List<String>> asProperties(); - public abstract class Mixin implements TFeature { + public abstract class Mixin implements TFeature + { @Structure Module module; @@ -58,7 +63,8 @@ public interface TFeature extends TGeometry { @This TFeature self; - public TFeature of(TGeometry geometry) { + public TFeature of(TGeometry geometry) + { self.geometryType().set(TGEOMETRY_TYPE.FEATURE); self.geometry().set(geometry); @@ -76,10 +82,9 @@ public interface TFeature extends TGeometry { if (self.properties() == null || self.properties().get() == null || !self.properties().get().containsKey(name)) { Map<String, List<String>> properties = new HashMap<>(); - properties.put(name, Arrays.asList(value) ); + properties.put(name, Arrays.asList(value)); self.properties().set(properties); - } - else + } else { self.properties().get().get(name).add(value); } @@ -87,7 +92,8 @@ public interface TFeature extends TGeometry { } - public boolean isEmpty() { + public boolean isEmpty() + { return (self.geometry() == null) || (self.geometry().get() == null) || (self.geometry().get().isEmpty()) ? true : false; } @@ -96,16 +102,20 @@ public interface TFeature extends TGeometry { { return self.geometry().get().getCoordinates(); } - public int getNumPoints() { + + public int getNumPoints() + { return isEmpty() ? 0 : self.geometry().get().getNumPoints(); } - public TGeometry asGeometry() { + public TGeometry asGeometry() + { return self.geometry().get(); } - public Map<String, List<String>> asProperties() { + public Map<String, List<String>> asProperties() + { return self.properties().get(); } http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/684bb9eb/core/api/src/main/java/org/qi4j/api/geometry/TFeatureCollection.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/qi4j/api/geometry/TFeatureCollection.java b/core/api/src/main/java/org/qi4j/api/geometry/TFeatureCollection.java index 406a718..99593d3 100644 --- a/core/api/src/main/java/org/qi4j/api/geometry/TFeatureCollection.java +++ b/core/api/src/main/java/org/qi4j/api/geometry/TFeatureCollection.java @@ -25,29 +25,34 @@ import java.util.ArrayList; import java.util.List; @Mixins(TFeatureCollection.Mixin.class) -public interface TFeatureCollection extends GeometryCollections { +public interface TFeatureCollection extends GeometryCollections +{ TFeatureCollection of(TFeature... features); TFeatureCollection of(List<TFeature> features); - public abstract class Mixin extends GeometryCollections.Mixin implements TFeatureCollection { + public abstract class Mixin extends GeometryCollections.Mixin implements TFeatureCollection + { @Structure Module module; @This TFeatureCollection self; - public TFeatureCollection of(List<TFeature> features) { + public TFeatureCollection of(List<TFeature> features) + { of(features.toArray(new TFeature[features.size()])); return self; } - public TFeatureCollection of(TFeature... features) { + public TFeatureCollection of(TFeature... features) + { self.geometryType().set(TGEOMETRY_TYPE.FEATURECOLLECTION); init(); List<TGeometry> l = new ArrayList<>(); - for (TFeature f : features) { + for (TFeature f : features) + { l.add(f); } @@ -58,8 +63,5 @@ public interface TFeatureCollection extends GeometryCollections { return self; } - - } - } http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/684bb9eb/core/api/src/main/java/org/qi4j/api/geometry/TGeometryFactory.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/qi4j/api/geometry/TGeometryFactory.java b/core/api/src/main/java/org/qi4j/api/geometry/TGeometryFactory.java index 33b1709..7292e28 100644 --- a/core/api/src/main/java/org/qi4j/api/geometry/TGeometryFactory.java +++ b/core/api/src/main/java/org/qi4j/api/geometry/TGeometryFactory.java @@ -17,48 +17,51 @@ package org.qi4j.api.geometry; import org.qi4j.api.geometry.internal.builders.*; import org.qi4j.api.structure.Module; -/** - * Created by jj on 26.11.14. - */ -public class TGeometryFactory { + +public class TGeometryFactory +{ - public static TCRSBuilder TCrs(Module module) { + public static TCRSBuilder TCrs(Module module) + { return new TCRSBuilder(module); } - - public static TPointBuilder TPoint(Module module) { + public static TPointBuilder TPoint(Module module) + { return new TPointBuilder(module); } - public static TMultiPointBuilder TMultiPoint(Module module) { + public static TMultiPointBuilder TMultiPoint(Module module) + { return new TMultiPointBuilder(module); } - - public static TLinearRingBuilder TLinearRing(Module module) { + public static TLinearRingBuilder TLinearRing(Module module) + { return new TLinearRingBuilder(module); } - - public static TLineStringBuilder TLineString(Module module) { + public static TLineStringBuilder TLineString(Module module) + { return new TLineStringBuilder(module); } - public static TMultiLineStringBuilder TMultiLineString(Module module) { return new TMultiLineStringBuilder(module); } - public static TPolygonBuilder TPolygon(Module module) { + + public static TPolygonBuilder TPolygon(Module module) + { return new TPolygonBuilder(module); } - public static TMultiPolygonsBuilder TMultiPolygon(Module module) { + public static TMultiPolygonsBuilder TMultiPolygon(Module module) + { return new TMultiPolygonsBuilder(module); } - - public static TFeatureBuilder TFeature(Module module) { + public static TFeatureBuilder TFeature(Module module) + { return new TFeatureBuilder(module); } - - public static TFeatureCollectionBuilder TFeatureCollection(Module module) { + public static TFeatureCollectionBuilder TFeatureCollection(Module module) + { return new TFeatureCollectionBuilder(module); } } http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/684bb9eb/core/api/src/main/java/org/qi4j/api/geometry/TMultiPoint.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/qi4j/api/geometry/TMultiPoint.java b/core/api/src/main/java/org/qi4j/api/geometry/TMultiPoint.java index 2a85011..00e0a6f 100644 --- a/core/api/src/main/java/org/qi4j/api/geometry/TMultiPoint.java +++ b/core/api/src/main/java/org/qi4j/api/geometry/TMultiPoint.java @@ -26,42 +26,38 @@ import java.util.List; @Mixins(TMultiPoint.Mixin.class) -public interface TMultiPoint extends GeometryCollections { - - +public interface TMultiPoint extends GeometryCollections +{ TMultiPoint of(TPoint... points); TMultiPoint of(List<TPoint> points); - TMultiPoint yx(double y, double x); - public abstract class Mixin extends GeometryCollections.Mixin implements TMultiPoint { - + public abstract class Mixin extends GeometryCollections.Mixin implements TMultiPoint + { @This TMultiPoint self; - @Structure Module module; - public TMultiPoint of(List<TPoint> points) { + public TMultiPoint of(List<TPoint> points) + { of(points.toArray(new TPoint[points.size()])); return self; } - - public TMultiPoint yx(double y, double x) { + public TMultiPoint yx(double y, double x) + { of(module.newValueBuilder(TPoint.class).prototype().x(x).y(y)); return self; } - - - public TMultiPoint of(TPoint... points) { + public TMultiPoint of(TPoint... points) + { self.geometryType().set(TGEOMETRY_TYPE.MULTIPOINT); init(); List<TGeometry> l = new ArrayList<>(); - - for (TPoint p : points) { + for (TPoint p : points) + { l.add(p); } - if (self.isEmpty()) self.geometries().set(l); // points().set(l); else @@ -69,7 +65,5 @@ public interface TMultiPoint extends GeometryCollections { return self; } - - } } http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/684bb9eb/core/api/src/main/java/org/qi4j/api/geometry/TPoint.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/qi4j/api/geometry/TPoint.java b/core/api/src/main/java/org/qi4j/api/geometry/TPoint.java index 80b72d8..e7106ef 100644 --- a/core/api/src/main/java/org/qi4j/api/geometry/TPoint.java +++ b/core/api/src/main/java/org/qi4j/api/geometry/TPoint.java @@ -15,7 +15,6 @@ package org.qi4j.api.geometry; import org.qi4j.api.geometry.internal.Coordinate; -import org.qi4j.api.geometry.internal.HasNoArea; import org.qi4j.api.geometry.internal.TGeometry; import org.qi4j.api.injection.scope.Structure; import org.qi4j.api.injection.scope.This; @@ -28,7 +27,7 @@ import java.util.List; /** * Lat = Y Lon = X - * + * <p/> * For type "Point", each element in the coordinates array is a number representing the point coordinate in one * dimension. There must be at least two elements, and may be more. The order of elements must follow x, y, z order * (or longitude, latitude, altitude for coordinates in a geographic coordinate reference system). Any number of @@ -36,36 +35,46 @@ import java.util.List; * this specification. */ @Mixins(TPoint.Mixin.class) -public interface TPoint extends HasNoArea, TGeometry { +public interface TPoint extends TGeometry +{ Property<List<Coordinate>> coordinates(); TPoint of(Coordinate... coordinates); + TPoint of(double x, double y, double z); + TPoint of(); TPoint x(double x); + TPoint y(double y); + TPoint z(double z); double x(); + double y(); + double z(); Coordinate getCoordinate(); + int compareTo(Object o); - public abstract class Mixin implements TPoint { + public abstract class Mixin implements TPoint + { @Structure Module module; @This TPoint self; - private void init() { - - if (self.coordinates().get() == null) { + private void init() + { + if (self.coordinates().get() == null) + { List<Coordinate> c = new ArrayList<Coordinate>(); c.add(module.newValueBuilder(Coordinate.class).prototype().x(0).y(0).z(0)); @@ -75,31 +84,33 @@ public interface TPoint extends HasNoArea, TGeometry { } @Override - public boolean isEmpty() { + public boolean isEmpty() + { return (self.coordinates() == null) || (self.coordinates().get() == null) || (self.coordinates().get().isEmpty()) ? true : false; } - public TPoint of() { + public TPoint of() + { if (isEmpty()) return self.of(0.0d, 0.0d, 0.0d); else return self; } - - public TPoint of(double x, double y, double z) { + public TPoint of(double x, double y, double z) + { init(); - self.x(x); // JJ TODO use fluent DSL - self.y(y); - self.z(z); + self.x(x).y(y).z(z); self.geometryType().set(TGEOMETRY_TYPE.POINT); return self; } - public TPoint of(Coordinate... coordinates) { + public TPoint of(Coordinate... coordinates) + { List<Coordinate> c = new ArrayList<Coordinate>(); - for (Coordinate xyzn : coordinates) { + for (Coordinate xyzn : coordinates) + { c.add(xyzn); } self.coordinates().set(c); @@ -107,66 +118,68 @@ public interface TPoint extends HasNoArea, TGeometry { return self; } - public TPoint x(double x) { + public TPoint x(double x) + { init(); self.coordinates().get().get(0).x(x); return self; } - public double x() { - + public double x() + { return self.coordinates().get().get(0).getOrdinate(Coordinate.X); } - - - public TPoint y(double y) { + public TPoint y(double y) + { init(); self.coordinates().get().get(0).y(y); - return self; } - - public double y() { + public double y() + { return self.coordinates().get().get(0).getOrdinate(Coordinate.Y); } - public double z() { + public double z() + { return self.coordinates().get().get(0).getOrdinate(Coordinate.Z); } - - - public TPoint z(double z) { + public TPoint z(double z) + { init(); self.coordinates().get().get(0).z(z); - return self; } - public TPoint of(List<Double> coordinates) { - + public TPoint of(List<Double> coordinates) + { List<Coordinate> c = new ArrayList<Coordinate>(); - - for (Double xyzn : coordinates) { + for (Double xyzn : coordinates) + { c.add(module.newValueBuilder(Coordinate.class).prototype().of(xyzn)); } return null; } @Override - public Coordinate[] getCoordinates() { + public Coordinate[] getCoordinates() + { List<Coordinate> coordinates = new ArrayList<>(); coordinates.add(getCoordinate()); return coordinates.toArray(new Coordinate[coordinates.size()]); } - public Coordinate getCoordinate() { + public Coordinate getCoordinate() + { return self.coordinates().get().size() != 0 ? self.coordinates().get().get(0) : null; } - public int getNumPoints() { + public int getNumPoints() + { return isEmpty() ? 0 : 1; } - public int compareTo(Object other) { + public int compareTo(Object other) + { TPoint point = (TPoint) other; return getCoordinate().compareTo(point.getCoordinate()); } http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/684bb9eb/core/api/src/main/java/org/qi4j/api/geometry/TPolygon.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/qi4j/api/geometry/TPolygon.java b/core/api/src/main/java/org/qi4j/api/geometry/TPolygon.java index 26a900b..7c2b627 100644 --- a/core/api/src/main/java/org/qi4j/api/geometry/TPolygon.java +++ b/core/api/src/main/java/org/qi4j/api/geometry/TPolygon.java @@ -16,9 +16,9 @@ package org.qi4j.api.geometry; import org.qi4j.api.common.Optional; import org.qi4j.api.geometry.internal.Coordinate; -import org.qi4j.api.geometry.internal.TShape; import org.qi4j.api.geometry.internal.TGeometry; import org.qi4j.api.geometry.internal.TLinearRing; +import org.qi4j.api.geometry.internal.TShape; import org.qi4j.api.injection.scope.Structure; import org.qi4j.api.injection.scope.This; import org.qi4j.api.mixin.Mixins; @@ -29,7 +29,8 @@ import java.util.ArrayList; import java.util.List; @Mixins(TPolygon.Mixin.class) -public interface TPolygon extends TShape, TGeometry { +public interface TPolygon extends TShape, TGeometry +{ Property<TLinearRing> shell(); @@ -38,52 +39,54 @@ public interface TPolygon extends TShape, TGeometry { TPolygon of(TLinearRing shell); TPolygon of(TLinearRing shell, @Optional TLinearRing... holes); - TPolygon withHole(TLinearRing hole); TPolygon withHoles(@Optional TLinearRing... holes); - boolean isEmpty(); - public abstract class Mixin implements TPolygon { + public abstract class Mixin implements TPolygon + { @Structure Module module; @This TPolygon self; - private void init() { - - if (self.holes().get() == null) { - + private void init() + { + if (self.holes().get() == null) + { List<TLinearRing> ring = new ArrayList<>(); self.holes().set(ring); self.geometryType().set(TGEOMETRY_TYPE.POINT); } } - public TPolygon of(TLinearRing shell) { + public TPolygon of(TLinearRing shell) + { return of(shell, null); } - public TPolygon of(TLinearRing shell, TLinearRing... holes) { + public TPolygon of(TLinearRing shell, TLinearRing... holes) + { init(); - - if (shell != null) { + if (shell != null) + { self.shell().set(shell); } - withHoles(holes); self.geometryType().set(TGEOMETRY_TYPE.POLYGON); return self; } - public TPolygon withHole(TLinearRing hole) { + public TPolygon withHole(TLinearRing hole) + { if (hole != null) self.holes().get().add(hole); return self; } - - public TPolygon withHoles(TLinearRing... holes) { - if (holes != null && holes.length != 0) { + public TPolygon withHoles(TLinearRing... holes) + { + if (holes != null && holes.length != 0) + { for (TLinearRing hole : holes) withHole(hole); } @@ -91,22 +94,25 @@ public interface TPolygon extends TShape, TGeometry { } @Override - public Coordinate[] getCoordinates() { - if (isEmpty()) { + public Coordinate[] getCoordinates() + { + if (isEmpty()) + { return new Coordinate[]{}; } - Coordinate[] coordinates = new Coordinate[getNumPoints()]; - int k = -1; Coordinate[] shellCoordinates = self.shell().get().getCoordinates(); - for (int x = 0; x < shellCoordinates.length; x++) { + for (int x = 0; x < shellCoordinates.length; x++) + { k++; coordinates[k] = shellCoordinates[x]; } - for (int i = 0; i < self.holes().get().size(); i++) { + for (int i = 0; i < self.holes().get().size(); i++) + { Coordinate[] childCoordinates = self.holes().get().get(i).getCoordinates(); - for (int j = 0; j < childCoordinates.length; j++) { + for (int j = 0; j < childCoordinates.length; j++) + { k++; coordinates[k] = childCoordinates[j]; } @@ -114,18 +120,20 @@ public interface TPolygon extends TShape, TGeometry { return coordinates; } - public boolean isEmpty() { + public boolean isEmpty() + { return (self.shell() == null) || (self.shell().get() == null) || (self.shell().get().isEmpty()) ? true : false; } - public int getNumPoints() { + public int getNumPoints() + { int numPoints = self.shell().get().getNumPoints(); - for (int i = 0; i < self.holes().get().size(); i++) { + for (int i = 0; i < self.holes().get().size(); i++) + { numPoints += self.holes().get().get(i).getNumPoints(); } return numPoints; } - } } http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/684bb9eb/core/api/src/main/java/org/qi4j/api/geometry/TUnit.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/qi4j/api/geometry/TUnit.java b/core/api/src/main/java/org/qi4j/api/geometry/TUnit.java index 7de5a49..308fd9b 100644 --- a/core/api/src/main/java/org/qi4j/api/geometry/TUnit.java +++ b/core/api/src/main/java/org/qi4j/api/geometry/TUnit.java @@ -14,10 +14,8 @@ package org.qi4j.api.geometry; -/** - * Created by jj on 02.12.14. - */ -public enum TUnit { +public enum TUnit +{ RADIAN, DEGREE, http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/684bb9eb/core/api/src/main/java/org/qi4j/api/geometry/internal/Coordinate.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/qi4j/api/geometry/internal/Coordinate.java b/core/api/src/main/java/org/qi4j/api/geometry/internal/Coordinate.java index ac01539..e49e96e 100644 --- a/core/api/src/main/java/org/qi4j/api/geometry/internal/Coordinate.java +++ b/core/api/src/main/java/org/qi4j/api/geometry/internal/Coordinate.java @@ -28,7 +28,8 @@ import java.util.List; */ @Mixins(Coordinate.Mixin.class) -public interface Coordinate extends Comparable, ValueComposite, TGeometryRoot { +public interface Coordinate extends Comparable, ValueComposite +{ public static final int X = 0; public static final int Y = 1; @@ -42,7 +43,6 @@ public interface Coordinate extends Comparable, ValueComposite, TGeometryRoot { Coordinate of(double x, double y, double z); Coordinate of(double... coordinates); - Coordinate x(double x); Coordinate y(double y); Coordinate z(double z); @@ -52,20 +52,20 @@ public interface Coordinate extends Comparable, ValueComposite, TGeometryRoot { double z(); double getOrdinate(int ordinateIndex); - int compareTo(Object o); - double[] source(); - - public abstract class Mixin implements Coordinate { + public abstract class Mixin implements Coordinate + { List<Double> EMPTY = new ArrayList<>(X + Y + Z); @This Coordinate self; - private void init() { - if (isEmpty()) { + private void init() + { + if (isEmpty()) + { EMPTY.add(new Double(0.0)); EMPTY.add(new Double(0.0)); EMPTY.add(new Double(0.0)); @@ -74,15 +74,18 @@ public interface Coordinate extends Comparable, ValueComposite, TGeometryRoot { } } - private boolean isEmpty() { + private boolean isEmpty() + { return (self.coordinate() == null) || (self.coordinate().get() == null) || (self.coordinate().get().isEmpty()) ? true : false; } - public Coordinate of() { + public Coordinate of() + { return self.of(0.0d, 0.0d, 0.0d); } - public Coordinate of(double x, double y, double z) { + public Coordinate of(double x, double y, double z) + { init(); self.x(x); self.y(y); @@ -91,50 +94,52 @@ public interface Coordinate extends Comparable, ValueComposite, TGeometryRoot { } - public double x() { + public double x() + { return getOrdinate(X); } - - public double y() { + public double y() + { return getOrdinate(Y); } - - public double z() { + public double z() + { return getOrdinate(Z); } - public Coordinate x(double x) { + public Coordinate x(double x) + { init(); - - if (!Double.isNaN(x) && !Double.isInfinite(x)) { + if (!Double.isNaN(x) && !Double.isInfinite(x)) + { self.coordinate().get().set(X, x); } return self; } - public Coordinate y(double y) { - + public Coordinate y(double y) + { init(); - - if (!Double.isNaN(y) && !Double.isInfinite(y)) { + if (!Double.isNaN(y) && !Double.isInfinite(y)) + { self.coordinate().get().set(Y, y); } return self; } - public Coordinate z(double z) { - + public Coordinate z(double z) + { init(); - - if (!Double.isNaN(z) && !Double.isInfinite(z)) { + if (!Double.isNaN(z) && !Double.isInfinite(z)) + { self.coordinate().get().set(Z, z); } return self; } - public int compareTo(Object o) { + public int compareTo(Object o) + { Coordinate other = (Coordinate) o; - if (self.coordinate().get().get(X) < other.coordinate().get().get(X)) return -1; if (self.coordinate().get().get(X) > other.coordinate().get().get(X)) return 1; if (self.coordinate().get().get(Y) < other.coordinate().get().get(Y)) return -1; @@ -142,8 +147,10 @@ public interface Coordinate extends Comparable, ValueComposite, TGeometryRoot { return 0; } - public double getOrdinate(int ordinateIndex) { - switch (ordinateIndex) { + public double getOrdinate(int ordinateIndex) + { + switch (ordinateIndex) + { case X: return self.coordinate().get().get(X); case Y: @@ -154,28 +161,26 @@ public interface Coordinate extends Comparable, ValueComposite, TGeometryRoot { throw new IllegalArgumentException("Invalid ordinate index: " + ordinateIndex); } - public double[] source() { + public double[] source() + { double[] source = new double[X + Y + Z]; source[X] = getOrdinate(X); source[Y] = getOrdinate(Y); source[Z] = getOrdinate(Z); - return source; } - public Coordinate of(double... coordinates) { - + public Coordinate of(double... coordinates) + { List<Double> l = new ArrayList<Double>(coordinates.length); - - for (double xyzn : coordinates) { + for (double xyzn : coordinates) + { // only values that makes "sense" if (!Double.isNaN(xyzn) && !Double.isInfinite(xyzn)) l.add(new Double(xyzn)); } - self.coordinate().set(l); - return self; } http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/684bb9eb/core/api/src/main/java/org/qi4j/api/geometry/internal/TLinearRing.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/qi4j/api/geometry/internal/TLinearRing.java b/core/api/src/main/java/org/qi4j/api/geometry/internal/TLinearRing.java index 87fc414..2b99f9a 100644 --- a/core/api/src/main/java/org/qi4j/api/geometry/internal/TLinearRing.java +++ b/core/api/src/main/java/org/qi4j/api/geometry/internal/TLinearRing.java @@ -19,7 +19,8 @@ import org.qi4j.api.injection.scope.This; import org.qi4j.api.mixin.Mixins; @Mixins(TLinearRing.Mixin.class) -public interface TLinearRing extends TLineString { +public interface TLinearRing extends TLineString +{ boolean isValid(); @@ -29,7 +30,8 @@ public interface TLinearRing extends TLineString { TLinearRing self; @Override - public boolean isValid() { + public boolean isValid() + { if (self.getStartPoint() == null || self.getEndPoint() == null) return false; return self.getStartPoint().compareTo(self.getEndPoint()) == 0 ? true : false; } http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/684bb9eb/core/api/src/main/java/org/qi4j/api/geometry/internal/builders/TFeatureBuilder.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/qi4j/api/geometry/internal/builders/TFeatureBuilder.java b/core/api/src/main/java/org/qi4j/api/geometry/internal/builders/TFeatureBuilder.java index 58932e2..7cce0bd 100644 --- a/core/api/src/main/java/org/qi4j/api/geometry/internal/builders/TFeatureBuilder.java +++ b/core/api/src/main/java/org/qi4j/api/geometry/internal/builders/TFeatureBuilder.java @@ -18,22 +18,23 @@ import org.qi4j.api.geometry.TFeature; import org.qi4j.api.geometry.internal.TGeometry; import org.qi4j.api.structure.Module; -/** - * Created by jj on 26.11.14. - */ -public class TFeatureBuilder { + +public class TFeatureBuilder +{ private Module module; private TFeature geometry; - public TFeatureBuilder(Module module) { + public TFeatureBuilder(Module module) + { this.module = module; geometry = module.newValueBuilder(TFeature.class).prototype(); } - public TFeatureBuilder of(TGeometry feature) { + public TFeatureBuilder of(TGeometry feature) + { geometry.of(feature); return this; } @@ -44,10 +45,13 @@ public class TFeatureBuilder { return this; } - public TFeature geometry() { + public TFeature geometry() + { return geometry; } - public TFeature geometry(int srid) { + + public TFeature geometry(int srid) + { return geometry(); } } http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/684bb9eb/core/api/src/main/java/org/qi4j/api/geometry/internal/builders/TLineStringBuilder.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/qi4j/api/geometry/internal/builders/TLineStringBuilder.java b/core/api/src/main/java/org/qi4j/api/geometry/internal/builders/TLineStringBuilder.java index df1bbb8..21b6f6d 100644 --- a/core/api/src/main/java/org/qi4j/api/geometry/internal/builders/TLineStringBuilder.java +++ b/core/api/src/main/java/org/qi4j/api/geometry/internal/builders/TLineStringBuilder.java @@ -18,45 +18,51 @@ import org.qi4j.api.geometry.TLineString; import org.qi4j.api.geometry.TPoint; import org.qi4j.api.structure.Module; -/** - * Created by jj on 26.11.14. - */ -public class TLineStringBuilder { + +public class TLineStringBuilder +{ private Module module; private TLineString geometry; - public TLineStringBuilder(Module module) { + public TLineStringBuilder(Module module) + { this.module = module; geometry = module.newValueBuilder(TLineString.class).prototype(); } - public TLineStringBuilder points(double[][] points) { - for (double yx[] : points) { + public TLineStringBuilder points(double[][] points) + { + for (double yx[] : points) + { if (yx.length < 2) return null; geometry.yx(yx[0], yx[1]); } return this; } - public TLineStringBuilder of(TPoint... points) { + public TLineStringBuilder of(TPoint... points) + { geometry().of(points); return this; } - public TLineStringBuilder of() { + public TLineStringBuilder of() + { geometry().of(); return this; } - public TLineString geometry() { + public TLineString geometry() + { return geometry; } - public TLineString geometry(int srid) { + public TLineString geometry(int srid) + { return geometry(); } } http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/684bb9eb/core/api/src/main/java/org/qi4j/api/geometry/internal/builders/TMultiPolygonsBuilder.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/qi4j/api/geometry/internal/builders/TMultiPolygonsBuilder.java b/core/api/src/main/java/org/qi4j/api/geometry/internal/builders/TMultiPolygonsBuilder.java index 342e92e..c57bb16 100644 --- a/core/api/src/main/java/org/qi4j/api/geometry/internal/builders/TMultiPolygonsBuilder.java +++ b/core/api/src/main/java/org/qi4j/api/geometry/internal/builders/TMultiPolygonsBuilder.java @@ -20,45 +20,50 @@ import org.qi4j.api.structure.Module; import java.util.List; -/** - * Created by jj on 26.11.14. - */ -public class TMultiPolygonsBuilder { + +public class TMultiPolygonsBuilder +{ private Module module; private TMultiPolygon geometry; - public TMultiPolygonsBuilder(Module module) { + public TMultiPolygonsBuilder(Module module) + { this.module = module; geometry = module.newValueBuilder(TMultiPolygon.class).prototype(); } - public TMultiPolygonsBuilder points(double[][][] points) { - for (double xy[][] : points) { + public TMultiPolygonsBuilder points(double[][][] points) + { + for (double xy[][] : points) + { if (xy.length < 2) return null; - // geometry.xy(xy[0], xy[1]); } return this; } - public TMultiPolygonsBuilder of(List<TPolygon> polygons) { + public TMultiPolygonsBuilder of(List<TPolygon> polygons) + { geometry.of(polygons); return this; } - public TMultiPolygonsBuilder of(TPolygon... polygons) { + public TMultiPolygonsBuilder of(TPolygon... polygons) + { geometry.of(polygons); return this; } - public TMultiPolygon geometry() { + public TMultiPolygon geometry() + { return geometry; } - public TMultiPolygon geometry(int srid) { + public TMultiPolygon geometry(int srid) + { return geometry(); } } http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/684bb9eb/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/convert/ST_PointFromTextSpecification.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/convert/ST_PointFromTextSpecification.java b/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/convert/ST_PointFromTextSpecification.java deleted file mode 100644 index 4498f40..0000000 --- a/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/convert/ST_PointFromTextSpecification.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.qi4j.api.query.grammar.extensions.spatial.convert; - -import com.spatial4j.core.context.SpatialContext; -import com.spatial4j.core.context.jts.JtsSpatialContextFactory; -import com.spatial4j.core.io.jts.JtsWKTReaderShapeParser; -import com.spatial4j.core.io.jts.JtsWktShapeParser; -import com.spatial4j.core.shape.Point; -import com.spatial4j.core.shape.Shape; -import org.qi4j.api.geometry.internal.TGeometry; -import org.qi4j.api.injection.scope.Structure; -import org.qi4j.api.structure.Module; - -import java.text.ParseException; - -/** - * ST_Within Specification. - * - * - */ -public class ST_PointFromTextSpecification<T extends TGeometry> - extends SpatialConvertSpecification<T> -{ - - - - - public ST_PointFromTextSpecification(String wkt, String crs) - { - super( wkt, crs ); - } - - @Structure - Module module; - - - - - - @Override - public String toString() - { - return "converting"; //property.toString() + " is within " + value.toString(); - } -} http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/684bb9eb/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/measurements/ST_WithinSpatialSpecification.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/measurements/ST_WithinSpatialSpecification.java b/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/measurements/ST_WithinSpatialSpecification.java deleted file mode 100644 index b2f5681..0000000 --- a/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/measurements/ST_WithinSpatialSpecification.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.qi4j.api.query.grammar.extensions.spatial.measurements; - -import org.qi4j.api.query.grammar.PropertyFunction; - -import java.util.Collection; - -/** - * Regular expression match Specification. - */ -public class ST_WithinSpatialSpecification<T> - extends SpatialMeasurementsSpecification -{ - - - - // public ST_WithinSpatialSpecification(Property<T> property, T value, Double range) - // PropertyFunction<T> property - public ST_WithinSpatialSpecification(PropertyFunction<T> property, T value, Double range) - { - // super( property, value ); - // super(T); - super (property, value); - } - - private PropertyFunction<? extends Collection<T>> collectionProperty; - private Iterable<T> valueCollection; - -// public WithInSpatialSpecification( PropertyFunction<? extends Collection<T>> collectionProperty, -// Iterable<T> valueCollection -// ) -// { -// this.collectionProperty = collectionProperty; -// this.valueCollection = valueCollection; -// } - - public PropertyFunction<? extends Collection<T>> collectionProperty() - { - return collectionProperty; - } - - public Iterable<T> containedValues() - { - return valueCollection; - } - - // @Override - public boolean satisfiedBy( Object item ) - { - return true; - } - -// @Override -// public boolean satisfiedBy( Composite item ) -// { -// Collection<T> collection = collectionProperty.map( item ).get(); -// -// if( collection == null ) -// { -// return false; -// } -// -// for( T value : valueCollection ) -// { -// if( !collection.contains( value ) ) -// { -// return false; -// } -// } -// -// return true; -// } - - @Override - public String toString() - { - return "WithInSpatialSpecification()"; // collectionProperty + " contains " + Iterables.toList(valueCollection); - } -} http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/684bb9eb/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/ST_WithinSpecification.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/ST_WithinSpecification.java b/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/ST_WithinSpecification.java index cd28a85..4483fa6 100644 --- a/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/ST_WithinSpecification.java +++ b/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/ST_WithinSpecification.java @@ -4,13 +4,12 @@ import org.qi4j.api.geometry.TPoint; import org.qi4j.api.geometry.TUnit; import org.qi4j.api.geometry.internal.TGeometry; import org.qi4j.api.query.grammar.PropertyFunction; -import org.qi4j.api.query.grammar.Variable; import org.qi4j.api.query.grammar.extensions.spatial.convert.SpatialConvertSpecification; import org.qi4j.functional.Specification; public class ST_WithinSpecification<T extends TGeometry> - extends SpatialPredicatesSpecification<T> + extends SpatialPredicatesSpecification<T> { private double distance; @@ -18,37 +17,44 @@ public class ST_WithinSpecification<T extends TGeometry> public ST_WithinSpecification(PropertyFunction<T> property, TGeometry param) { - super( property, param ); + super(property, param); } public ST_WithinSpecification(PropertyFunction<T> property, TPoint param, double distance, TUnit unit) { - super( property, param ); - this.distance = distance; - this.unit = unit; + super(property, param); + this.distance = distance; + this.unit = unit; } public ST_WithinSpecification(PropertyFunction<T> property, Specification<SpatialConvertSpecification> operator, double distance, TUnit unit) { - super( property, operator ); - this.distance = distance; - this.unit = unit; + super(property, operator); + this.distance = distance; + this.unit = unit; } public ST_WithinSpecification(PropertyFunction<T> property, Specification<SpatialConvertSpecification> operator) { - super( property, operator ); + super(property, operator); } - public double getDistance() { return distance; } - public TUnit getUnit() { return unit; } + public double getDistance() + { + return distance; + } + + public TUnit getUnit() + { + return unit; + } - @Override - protected boolean compare( TGeometry param ) + @Override + protected boolean compare(TGeometry param) { - return param.equals( this.param ); + return param.equals(this.param); } @Override http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/684bb9eb/core/api/src/test/java/org/qi4j/api/geometry/TGeometryTest.java ---------------------------------------------------------------------- diff --git a/core/api/src/test/java/org/qi4j/api/geometry/TGeometryTest.java b/core/api/src/test/java/org/qi4j/api/geometry/TGeometryTest.java index 2c12c18..99f0493 100644 --- a/core/api/src/test/java/org/qi4j/api/geometry/TGeometryTest.java +++ b/core/api/src/test/java/org/qi4j/api/geometry/TGeometryTest.java @@ -26,16 +26,15 @@ import org.qi4j.test.AbstractQi4jTest; import static org.hamcrest.core.IsEqual.equalTo; import static org.junit.Assert.*; -import static org.junit.Assert.assertEquals; /** * JAVADOC */ public class TGeometryTest - extends AbstractQi4jTest + extends AbstractQi4jTest { - public void assemble( ModuleAssembly module ) - throws AssemblyException + public void assemble(ModuleAssembly module) + throws AssemblyException { // internal values module.values(Coordinate.class, TLinearRing.class, TCircle.class, TGeometry.class); @@ -58,14 +57,14 @@ public class TGeometryTest String CRS = "urn:ogc:def:crs:OGC:1.3:CRS84"; ValueBuilder<TCRS> builder = module.newValueBuilder(TCRS.class); TCRS crs = builder.prototype().of(CRS); - assertThat(crs.crs(), equalTo( CRS )); + assertThat(crs.crs(), equalTo(CRS)); } - @Test + @Test public void script02() { ValueBuilder<Coordinate> builder = module.newValueBuilder(Coordinate.class); - Coordinate coordinate1 = builder.prototype().of(1d,2d,3d); + Coordinate coordinate1 = builder.prototype().of(1d, 2d, 3d); assertNotNull(coordinate1); assertEquals(1d, coordinate1.x(), 0.0d); @@ -86,11 +85,11 @@ public class TGeometryTest assertEquals(2d, point1.y(), 0.0d); assertEquals(3d, point1.z(), 0.0d); - // assertTrue(point1.isEmpty() == false); + // assertTrue(point1.isEmpty() == false); ValueBuilder<TPoint> builder2 = module.newValueBuilder(TPoint.class); - TPoint point2 = builder2.prototype().of(1d,2d,3d); + TPoint point2 = builder2.prototype().of(1d, 2d, 3d); assertEquals(1d, point2.x(), 0.0d); assertEquals(2d, point2.y(), 0.0d); assertEquals(3d, point2.z(), 0.0d); @@ -105,7 +104,7 @@ public class TGeometryTest ValueBuilder<TPoint> builder4 = module.newValueBuilder(TPoint.class); - TPoint point4 = builder4.prototype().x(10d).y(20d).z(30d).of(1d,2d,3d); // check dsl + TPoint point4 = builder4.prototype().x(10d).y(20d).z(30d).of(1d, 2d, 3d); // check dsl assertEquals(1d, point4.x(), 0.0d); assertEquals(2d, point4.y(), 0.0d); assertEquals(3d, point4.z(), 0.0d); @@ -140,7 +139,8 @@ public class TGeometryTest } @Test - public void script05() { + public void script05() + { ValueBuilder<TLineString> builder = module.newValueBuilder(TLineString.class); TLineString lineString = builder.prototype().of() @@ -155,7 +155,8 @@ public class TGeometryTest } @Test - public void script06() { + public void script06() + { ValueBuilder<TMultiLineString> builder = module.newValueBuilder(TMultiLineString.class); TMultiLineString multiLineString = builder.prototype().of( @@ -165,19 +166,19 @@ public class TGeometryTest .yx(0d, 1d) .yx(1d, 0d) .yx(1d, 1d) - .yx(0d, 0d) ); + .yx(0d, 0d)); assertEquals(5, multiLineString.getNumPoints()); assertTrue(multiLineString.getGeometryN(0).isLineString()); } - @Test + @Test public void script07() { ValueBuilder<TLinearRing> builder = module.newValueBuilder(TLinearRing.class); - TLinearRing linearRing = (TLinearRing)builder.prototype().of( + TLinearRing linearRing = (TLinearRing) builder.prototype().of( module.newValueBuilder(TPoint.class).prototype().x(0d).y(0d).z(0d), module.newValueBuilder(TPoint.class).prototype().x(0d).y(1d).z(0d), module.newValueBuilder(TPoint.class).prototype().x(1d).y(0d).z(0d), @@ -193,7 +194,7 @@ public class TGeometryTest { ValueBuilder<TLinearRing> builder = module.newValueBuilder(TLinearRing.class); - TLinearRing linearRing = (TLinearRing)builder.prototype().of( + TLinearRing linearRing = (TLinearRing) builder.prototype().of( module.newValueBuilder(TPoint.class).prototype().x(0d).y(0d).z(0d), module.newValueBuilder(TPoint.class).prototype().x(0d).y(1d).z(0d), module.newValueBuilder(TPoint.class).prototype().x(1d).y(0d).z(0d), @@ -209,7 +210,7 @@ public class TGeometryTest { ValueBuilder<TLinearRing> builder = module.newValueBuilder(TLinearRing.class); - TLinearRing shell = (TLinearRing)builder.prototype().of() + TLinearRing shell = (TLinearRing) builder.prototype().of() .yx(0d, 0d) .yx(0d, 1d) @@ -228,15 +229,15 @@ public class TGeometryTest { ValueBuilder<TPolygon> builder = module.newValueBuilder(TPolygon.class); /** - builder.prototype().of( - module.newValueBuilder((TLinearRing.class).prototype().of() - .xy(0d, 0d) - .xy(0d, 10d) - .xy(10d, 0d) - .xy(1d, 10d) - .xy(0d, 0d) - ); -*/ + builder.prototype().of( + module.newValueBuilder((TLinearRing.class).prototype().of() + .xy(0d, 0d) + .xy(0d, 10d) + .xy(10d, 0d) + .xy(1d, 10d) + .xy(0d, 0d) + ); + */ //builder.prototype().of( // module.newValueBuilder(TLinearRing.class).prototype(). } @@ -247,21 +248,21 @@ public class TGeometryTest { ValueBuilder<TLineString> builder = module.newValueBuilder(TLineString.class); assertNotNull( - builder.prototype().of - ( - module.newValueBuilder(TPoint.class).prototype().of - ( - module.newValueBuilder(Coordinate.class).prototype().of(1d), //x - module.newValueBuilder(Coordinate.class).prototype().of(1d) //y - ) - , - module.newValueBuilder(TPoint.class).prototype().of - ( - module.newValueBuilder(Coordinate.class).prototype().of(2d), //x - module.newValueBuilder(Coordinate.class).prototype().of(2d) //y - ) - - ) + builder.prototype().of + ( + module.newValueBuilder(TPoint.class).prototype().of + ( + module.newValueBuilder(Coordinate.class).prototype().of(1d), //x + module.newValueBuilder(Coordinate.class).prototype().of(1d) //y + ) + , + module.newValueBuilder(TPoint.class).prototype().of + ( + module.newValueBuilder(Coordinate.class).prototype().of(2d), //x + module.newValueBuilder(Coordinate.class).prototype().of(2d) //y + ) + + ) ); } @@ -271,21 +272,21 @@ public class TGeometryTest { ValueBuilder<TLinearRing> builder = module.newValueBuilder(TLinearRing.class); assertNotNull( - builder.prototype().of - ( - module.newValueBuilder(TPoint.class).prototype().of - ( - module.newValueBuilder(Coordinate.class).prototype().of(1d), //x - module.newValueBuilder(Coordinate.class).prototype().of(1d) //y - ) - , - module.newValueBuilder(TPoint.class).prototype().of - ( - module.newValueBuilder(Coordinate.class).prototype().of(2d), //x - module.newValueBuilder(Coordinate.class).prototype().of(2d) //y - ) - - ) + builder.prototype().of + ( + module.newValueBuilder(TPoint.class).prototype().of + ( + module.newValueBuilder(Coordinate.class).prototype().of(1d), //x + module.newValueBuilder(Coordinate.class).prototype().of(1d) //y + ) + , + module.newValueBuilder(TPoint.class).prototype().of + ( + module.newValueBuilder(Coordinate.class).prototype().of(2d), //x + module.newValueBuilder(Coordinate.class).prototype().of(2d) //y + ) + + ) ); } @@ -295,46 +296,46 @@ public class TGeometryTest { ValueBuilder<TPolygon> builder = module.newValueBuilder(TPolygon.class); assertNotNull( - builder.prototype().of - ( - // shell - (TLinearRing)module.newValueBuilder(TLinearRing.class).prototype().of - ( - module.newValueBuilder(TPoint.class).prototype().of - ( - module.newValueBuilder(Coordinate.class).prototype().of(1d), //x - module.newValueBuilder(Coordinate.class).prototype().of(1d) //y - ) - , - module.newValueBuilder(TPoint.class).prototype().of - ( - module.newValueBuilder(Coordinate.class).prototype().of(1d), //x - module.newValueBuilder(Coordinate.class).prototype().of(2d) //y - ) - , - module.newValueBuilder(TPoint.class).prototype().of - ( - module.newValueBuilder(Coordinate.class).prototype().of(2d), //x - module.newValueBuilder(Coordinate.class).prototype().of(2d) //y - ) - , - module.newValueBuilder(TPoint.class).prototype().of - ( - module.newValueBuilder(Coordinate.class).prototype().of(2d), //x - module.newValueBuilder(Coordinate.class).prototype().of(1d) //y - ) - , - module.newValueBuilder(TPoint.class).prototype().of - ( - module.newValueBuilder(Coordinate.class).prototype().of(1d), //x - module.newValueBuilder(Coordinate.class).prototype().of(1d) //y - ) - - ) - , - // no holes - null - ) + builder.prototype().of + ( + // shell + (TLinearRing) module.newValueBuilder(TLinearRing.class).prototype().of + ( + module.newValueBuilder(TPoint.class).prototype().of + ( + module.newValueBuilder(Coordinate.class).prototype().of(1d), //x + module.newValueBuilder(Coordinate.class).prototype().of(1d) //y + ) + , + module.newValueBuilder(TPoint.class).prototype().of + ( + module.newValueBuilder(Coordinate.class).prototype().of(1d), //x + module.newValueBuilder(Coordinate.class).prototype().of(2d) //y + ) + , + module.newValueBuilder(TPoint.class).prototype().of + ( + module.newValueBuilder(Coordinate.class).prototype().of(2d), //x + module.newValueBuilder(Coordinate.class).prototype().of(2d) //y + ) + , + module.newValueBuilder(TPoint.class).prototype().of + ( + module.newValueBuilder(Coordinate.class).prototype().of(2d), //x + module.newValueBuilder(Coordinate.class).prototype().of(1d) //y + ) + , + module.newValueBuilder(TPoint.class).prototype().of + ( + module.newValueBuilder(Coordinate.class).prototype().of(1d), //x + module.newValueBuilder(Coordinate.class).prototype().of(1d) //y + ) + + ) + , + // no holes + null + ) ); } @@ -353,7 +354,7 @@ public class TGeometryTest TCircle tCircle = builder.prototype().of(48.13905780942574, 11.57958984375, 100); TPolygon tPolygon = tCircle.polygonize(360); assertTrue(tPolygon.shell().get().isValid()); - assertTrue(tPolygon.shell().get().getNumPoints() == (360 + 1) ); + assertTrue(tPolygon.shell().get().getNumPoints() == (360 + 1)); } http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/684bb9eb/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/extensions/spatial/ElasticSearchSpatialFinder.java ---------------------------------------------------------------------- diff --git a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/extensions/spatial/ElasticSearchSpatialFinder.java b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/extensions/spatial/ElasticSearchSpatialFinder.java index 29c38c4..fe42a47 100644 --- a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/extensions/spatial/ElasticSearchSpatialFinder.java +++ b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/extensions/spatial/ElasticSearchSpatialFinder.java @@ -1,4 +1,3 @@ - /* * Copyright 2014 Jiri Jetmar. * @@ -48,36 +47,43 @@ import org.slf4j.LoggerFactory; import java.util.HashMap; import java.util.Map; -public final class ElasticSearchSpatialFinder { +public final class ElasticSearchSpatialFinder +{ private static final Logger LOGGER = LoggerFactory.getLogger(ElasticSearchSpatialFinder.class); private static final Map<Class<?>, SpatialQuerySpecSupport> SPATIAL_QUERY_EXPRESSIONS_CATALOG = new HashMap<>(2); - static { + static + { SPATIAL_QUERY_EXPRESSIONS_CATALOG.put(SpatialPredicatesSpecification.class, new PredicateFinderSupport()); SPATIAL_QUERY_EXPRESSIONS_CATALOG.put(SpatialConvertSpecification.class, new ConvertFinderSupport()); } - private ElasticSearchSpatialFinder() { + private ElasticSearchSpatialFinder() + { } - public interface Support { + public interface Support + { SpatialQuerySpecSupport support(Module module, ElasticSearchSupport support); } - public static interface SpatialQuerySpecSupport extends Support { + public static interface SpatialQuerySpecSupport extends Support + { void processSpecification(FilterBuilder filterBuilder, Specification<?> spec, Map<String, Object> variables) throws EntityFinderException; } public static class SpatialSpecSupport - implements SpatialQuerySpecSupport { + implements SpatialQuerySpecSupport + { private Module module; private ElasticSearchSupport support; - public SpatialQuerySpecSupport support(Module module, ElasticSearchSupport support) { + public SpatialQuerySpecSupport support(Module module, ElasticSearchSupport support) + { this.module = module; this.support = support; return this; @@ -87,19 +93,22 @@ public final class ElasticSearchSpatialFinder { public void processSpecification(FilterBuilder filterBuilder, Specification<?> spec, Map<String, Object> variables) - throws EntityFinderException { + throws EntityFinderException + { SPATIAL_QUERY_EXPRESSIONS_CATALOG.get(spec.getClass().getSuperclass()).support(module, support).processSpecification(filterBuilder, spec, variables); } } public static class SpatialTypeSupport - implements ElasticSearchFinderSupport.ComplexTypeSupport { + implements ElasticSearchFinderSupport.ComplexTypeSupport + { private Module module; private ElasticSearchSupport support; - public ElasticSearchFinderSupport.ComplexTypeSupport support(Module module, ElasticSearchSupport support) { + public ElasticSearchFinderSupport.ComplexTypeSupport support(Module module, ElasticSearchSupport support) + { this.module = module; this.support = support; @@ -107,24 +116,30 @@ public final class ElasticSearchSpatialFinder { } - public FilterBuilder comparison(ComparisonSpecification<?> spec, Map<String, Object> variables) { + public FilterBuilder comparison(ComparisonSpecification<?> spec, Map<String, Object> variables) + { throw new RuntimeException("Unsupported operation"); } - public FilterBuilder contains(ContainsSpecification<?> spec, Map<String, Object> variables) { + public FilterBuilder contains(ContainsSpecification<?> spec, Map<String, Object> variables) + { throw new RuntimeException("Unsupported operation"); } - public FilterBuilder containsAll(ContainsAllSpecification<?> spec, Map<String, Object> variables) { + public FilterBuilder containsAll(ContainsAllSpecification<?> spec, Map<String, Object> variables) + { throw new RuntimeException("Unsupported operation"); } - public void orderBy(SearchRequestBuilder request, Specification<Composite> whereClause, OrderBy orderBySegment, Map<String, Object> variables) throws EntityFinderException { - if (!TPoint.class.isAssignableFrom(InternalUtils.classOfPropertyType(orderBySegment.property()))) { + public void orderBy(SearchRequestBuilder request, Specification<Composite> whereClause, OrderBy orderBySegment, Map<String, Object> variables) throws EntityFinderException + { + if (!TPoint.class.isAssignableFrom(InternalUtils.classOfPropertyType(orderBySegment.property()))) + { throw new EntityFinderException("Ordering can only be done on TPoints.. TODO"); } - if (!SpatialIndexMapper.IndexMappingCache.isMappedAsGeoPoint(support.index(), support.entitiesType(), orderBySegment.property().toString())) { + if (!SpatialIndexMapper.IndexMappingCache.isMappedAsGeoPoint(support.index(), support.entitiesType(), orderBySegment.property().toString())) + { throw new EntityFinderException("OrderBy is only supported when GEO_POINT indexing is used"); } http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/684bb9eb/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/extensions/spatial/ElasticSearchSpatialIndexer.java ---------------------------------------------------------------------- diff --git a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/extensions/spatial/ElasticSearchSpatialIndexer.java b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/extensions/spatial/ElasticSearchSpatialIndexer.java index 7fd7a2a..c51f31d 100644 --- a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/extensions/spatial/ElasticSearchSpatialIndexer.java +++ b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/extensions/spatial/ElasticSearchSpatialIndexer.java @@ -28,7 +28,7 @@ import org.qi4j.index.elasticsearch.ElasticSearchIndexException; import org.qi4j.index.elasticsearch.ElasticSearchSupport; import org.qi4j.index.elasticsearch.extensions.spatial.configuration.SpatialConfiguration; import org.qi4j.index.elasticsearch.extensions.spatial.mappings.SpatialIndexMapper; -import org.qi4j.library.spatial.projection.ProjectionsRegistry; +import org.qi4j.library.spatial.projections.ProjectionsRegistry; import java.util.HashMap; import java.util.ListIterator; @@ -36,23 +36,27 @@ import java.util.Map; import java.util.Stack; import static org.qi4j.index.elasticsearch.extensions.spatial.mappings.SpatialIndexMapper.IndexMappingCache; -import static org.qi4j.library.spatial.projection.transformations.TTransformations.Transform; +import static org.qi4j.library.spatial.projections.transformations.TTransformations.Transform; -public final class ElasticSearchSpatialIndexer { +public final class ElasticSearchSpatialIndexer +{ private static final String EPSG_4326 = "EPSG:4326"; private static final String DefaultSupportedProjection = EPSG_4326; private static final double DefaultProjectionConversionPrecisionInMeters = 2.00; private Module module; - private ElasticSearchSpatialIndexer() { + private ElasticSearchSpatialIndexer() + { } - public static void toJSON(ElasticSearchSupport support, TGeometry geometry, String property, String deepProperty, JSONObject json, Module module) throws ElasticSearchIndexException { + public static void toJSON(ElasticSearchSupport support, TGeometry geometry, String property, String deepProperty, JSONObject json, Module module) throws ElasticSearchIndexException + { // Spatial Mappings { - if (SpatialConfiguration.isEnabled(support.spatialConfiguration())) { + if (SpatialConfiguration.isEnabled(support.spatialConfiguration())) + { SpatialIndexMapper.createIfNotExist(support, geometry, deepProperty); } else throw new ElasticSearchIndexException("Spatial support is disabled. No spatial indexing available"); } @@ -61,50 +65,65 @@ public final class ElasticSearchSpatialIndexer { { if (new ProjectionsRegistry().getCRS(geometry.getCRS()) == null) throw new ElasticSearchIndexException("Project with the CRS Identity " + geometry.getCRS() + " is unknown. Supported projections are JJ TODO"); - if (SpatialConfiguration.isIndexerProjectionConversionEnabled(support.spatialConfiguration())) { + if (SpatialConfiguration.isIndexerProjectionConversionEnabled(support.spatialConfiguration())) + { Transform(module).from(geometry).to(DefaultSupportedProjection, SpatialConfiguration.getIndexerProjectionConversionAccuracy(support.spatialConfiguration())); } else if (!geometry.getCRS().equalsIgnoreCase(DefaultSupportedProjection)) throw new ElasticSearchIndexException("Project with the CRS Identity " + geometry.getCRS() + " is not supported by ElasticSearch and projection conversion is " + "disabled in the configuration."); } - try { + try + { - if (geometry.isPoint()) { - if (IndexMappingCache.isMappedAsGeoPoint(support.index(), support.entitiesType(), deepProperty)) { + if (geometry.isPoint()) + { + if (IndexMappingCache.isMappedAsGeoPoint(support.index(), support.entitiesType(), deepProperty)) + { createIndexPointAsGeoPointType(property, json, (TPoint) geometry); - } else if (IndexMappingCache.isMappedAsGeoShape(support.index(), support.entitiesType(), deepProperty)) { + } else if (IndexMappingCache.isMappedAsGeoShape(support.index(), support.entitiesType(), deepProperty)) + { createIndexPointAsGeoShapeType(property, json, (TPoint) geometry); } else new ElasticSearchIndexException("No spatial mapping for property " + deepProperty + " available."); - } else if (geometry.isMultiPoint()) { + } else if (geometry.isMultiPoint()) + { createIndexMultiPoint(property, json, (TMultiPoint) geometry); - } else if (geometry.isLineString()) { + } else if (geometry.isLineString()) + { createIndexLineString(property, json, (TLineString) geometry); - } else if (geometry.isMultiLineString()) { + } else if (geometry.isMultiLineString()) + { createIndexMultiLineString(property, json, (TMultiLineString) geometry); - } else if (geometry.isPolygon()) { + } else if (geometry.isPolygon()) + { createIndexPolygon(property, json, (TPolygon) geometry); - } else if (geometry.isMultiPolygon()) { + } else if (geometry.isMultiPolygon()) + { createIndexMultiPolygon(property, json, (TMultiPolygon) geometry); - } else if (geometry.isFeature()) { + } else if (geometry.isFeature()) + { createIndexFeature(property, json, (TFeature) geometry); - } else if (geometry.isFeatureCollection()) { + } else if (geometry.isFeatureCollection()) + { createIndexFeatureCollection(property, json, (TFeatureCollection) geometry); } else new ElasticSearchIndexException("Unsupported Geometry : " + geometry.getClass()); - } catch (JSONException _ex) { + } catch (JSONException _ex) + { throw new ElasticSearchIndexException("", _ex); } } - private static void createIndexMultiPoint(String property, JSONObject json, TMultiPoint tMultiPoint) throws JSONException { + private static void createIndexMultiPoint(String property, JSONObject json, TMultiPoint tMultiPoint) throws JSONException + { Map tMultiPointMap = new HashMap(); tMultiPointMap.put("type", "multipoint"); JSONArray points = new JSONArray(); - for (int i = 0; i < tMultiPoint.getNumPoints(); i++) { + for (int i = 0; i < tMultiPoint.getNumPoints(); i++) + { TPoint point = (TPoint) tMultiPoint.getGeometryN(i); points.put(new JSONArray().put(point.y()).put(point.x())); } @@ -114,12 +133,14 @@ public final class ElasticSearchSpatialIndexer { } - private static void createIndexLineString(String property, JSONObject json, TLineString tLineString) throws JSONException { + private static void createIndexLineString(String property, JSONObject json, TLineString tLineString) throws JSONException + { Map tLineStringMap = new HashMap(); tLineStringMap.put("type", "linestring"); JSONArray points = new JSONArray(); - for (int i = 0; i < tLineString.getNumPoints(); i++) { + for (int i = 0; i < tLineString.getNumPoints(); i++) + { TPoint point = (TPoint) tLineString.getPointN(i); points.put(new JSONArray().put(point.y()).put(point.x())); } @@ -160,7 +181,8 @@ public final class ElasticSearchSpatialIndexer { * @param tPoint * @throws Exception */ - private static void createIndexPointAsGeoPointType(String property, JSONObject json, TPoint tPoint) throws JSONException { + private static void createIndexPointAsGeoPointType(String property, JSONObject json, TPoint tPoint) throws JSONException + { Map tPointMap = new HashMap(); tPointMap.put("lat", tPoint.y()); tPointMap.put("lon", tPoint.x()); @@ -168,7 +190,8 @@ public final class ElasticSearchSpatialIndexer { json.put(property, tPointMap); } - private static void createIndexPointAsGeoShapeType(String property, JSONObject json, TPoint tPoint) throws JSONException { + private static void createIndexPointAsGeoShapeType(String property, JSONObject json, TPoint tPoint) throws JSONException + { Map tPointMap = new HashMap(); tPointMap.put("type", "point"); tPointMap.put("coordinates", new JSONArray().put(tPoint.x()).put(tPoint.y())); @@ -176,18 +199,21 @@ public final class ElasticSearchSpatialIndexer { json.put(property, tPointMap); } - private static void createIndexMultiLineString(String property, JSONObject json, TMultiLineString tMultiLineString) throws JSONException { + private static void createIndexMultiLineString(String property, JSONObject json, TMultiLineString tMultiLineString) throws JSONException + { Map tMultiLineStringMap = new HashMap(); tMultiLineStringMap.put("type", "multilinestring"); JSONArray coordinates = new JSONArray(); - for (int i = 0; i < tMultiLineString.geometries().get().size(); i++) { + for (int i = 0; i < tMultiLineString.geometries().get().size(); i++) + { JSONArray p = new JSONArray(); int nPoints = ((TLineString) tMultiLineString.getGeometryN(i)).getNumPoints(); JSONArray line = new JSONArray(); - for (int j = 0; j < nPoints; j++) { + for (int j = 0; j < nPoints; j++) + { JSONArray xy = new JSONArray(); xy.put(((TLineString) tMultiLineString.getGeometryN(i)).getPointN(j).x()); xy.put(((TLineString) tMultiLineString.getGeometryN(i)).getPointN(j).y()); @@ -199,7 +225,8 @@ public final class ElasticSearchSpatialIndexer { json.put(property, tMultiLineStringMap); } - private static void createIndexPolygon(String property, JSONObject json, TPolygon tPolygon) throws JSONException { + private static void createIndexPolygon(String property, JSONObject json, TPolygon tPolygon) throws JSONException + { if (!tPolygon.shell().get().isValid()) throw new ElasticSearchIndexException("Polygon shell has to be closed - first and last point must match. "); @@ -211,7 +238,8 @@ public final class ElasticSearchSpatialIndexer { // shell { JSONArray shell = new JSONArray(); - for (int i = 0; i < tPolygon.shell().get().getNumPoints(); i++) { + for (int i = 0; i < tPolygon.shell().get().getNumPoints(); i++) + { JSONArray p = new JSONArray(); p.put(tPolygon.shell().get().getPointN(i).x()); @@ -224,10 +252,12 @@ public final class ElasticSearchSpatialIndexer { // wholes { - for (int i = 0; i < tPolygon.holes().get().size(); i++) { + for (int i = 0; i < tPolygon.holes().get().size(); i++) + { JSONArray whole = new JSONArray(); // TLinearRing whole = tPolygon.holes().get().get(i); - for (int j = 0; j < tPolygon.holes().get().get(i).getNumPoints(); j++) { + for (int j = 0; j < tPolygon.holes().get().get(i).getNumPoints(); j++) + { if (!tPolygon.holes().get().get(i).isValid()) throw new ElasticSearchIndexException("Polygon whole has to be closed - first and last point must match. "); @@ -246,12 +276,14 @@ public final class ElasticSearchSpatialIndexer { json.put(property, tPolygonMap); } - private static void createIndexMultiPolygon(String property, JSONObject json, TMultiPolygon tMultiPolygon) throws JSONException { + private static void createIndexMultiPolygon(String property, JSONObject json, TMultiPolygon tMultiPolygon) throws JSONException + { Map tMultiPolygonMap = new HashMap(); tMultiPolygonMap.put("type", "multipolygon"); JSONArray coordinates = new JSONArray(); - for (int i = 0; i < tMultiPolygon.geometries().get().size(); i++) { + for (int i = 0; i < tMultiPolygon.geometries().get().size(); i++) + { JSONObject _json = new JSONObject(); createIndexPolygon(property, _json, (TPolygon) tMultiPolygon.getGeometryN(i)); coordinates.put(((JSONObject) _json.get(property)).get("coordinates")); @@ -260,16 +292,19 @@ public final class ElasticSearchSpatialIndexer { json.put(property, tMultiPolygonMap); } - private static void createIndexFeatureCollection(String property, JSONObject json, TFeatureCollection tFeatureCollection) throws JSONException { + private static void createIndexFeatureCollection(String property, JSONObject json, TFeatureCollection tFeatureCollection) throws JSONException + { Map tFeatureMap = new HashMap(); tFeatureMap.put("type", "geometrycollection"); JSONArray geometries = new JSONArray(); JSONObject _json = new JSONObject(); - for (TGeometry tGeometry : tFeatureCollection.geometries().get()) { + for (TGeometry tGeometry : tFeatureCollection.geometries().get()) + { TFeature tFeature = (TFeature) tGeometry; - switch (tFeature.asGeometry().getType()) { + switch (tFeature.asGeometry().getType()) + { case POINT: createIndexPointAsGeoShapeType(property, _json, (TPoint) tFeature.asGeometry()); break; @@ -296,14 +331,16 @@ public final class ElasticSearchSpatialIndexer { json.put(property, tFeatureMap); } - private static void createIndexFeature(String property, JSONObject json, TFeature tFeature) throws JSONException { + private static void createIndexFeature(String property, JSONObject json, TFeature tFeature) throws JSONException + { Map tFeatureMap = new HashMap(); tFeatureMap.put("type", "geometrycollection"); JSONArray geometries = new JSONArray(); JSONObject _json = new JSONObject(); - switch (tFeature.asGeometry().getType()) { + switch (tFeature.asGeometry().getType()) + { case POINT: createIndexPointAsGeoShapeType(property, _json, (TPoint) tFeature.asGeometry()); break; @@ -330,11 +367,13 @@ public final class ElasticSearchSpatialIndexer { json.put(property, tFeatureMap); } - public static String spatialMappingPropertyName(Stack<String> stack) { + public static String spatialMappingPropertyName(Stack<String> stack) + { ListIterator<String> it = stack.listIterator(); if (!it.hasNext()) return ""; StringBuilder sb = new StringBuilder(); - for (; ; ) { + for (; ; ) + { String s = it.next(); sb.append(s); if (!it.hasNext())
