You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by ni...@apache.org on 2015/04/17 18:45:56 UTC
[09/50] [abbrv] zest-qi4j git commit: Updates,
Cleanup and preparation for a pull request.
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractSpatialRegressionTest.java
----------------------------------------------------------------------
diff --git a/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractSpatialRegressionTest.java b/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractSpatialRegressionTest.java
index 74cf07a..f442cdf 100644
--- a/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractSpatialRegressionTest.java
+++ b/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractSpatialRegressionTest.java
@@ -2,6 +2,7 @@ package org.qi4j.test.indexing;
import org.junit.Ignore;
import org.junit.Test;
+import org.qi4j.api.association.Association;
import org.qi4j.api.common.Optional;
import org.qi4j.api.entity.EntityBuilder;
import org.qi4j.api.entity.EntityComposite;
@@ -20,15 +21,12 @@ import java.util.Iterator;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
-import static org.junit.Assume.assumeTrue;
import static org.qi4j.api.geometry.TGeometryFactory.*;
import static org.qi4j.api.geometry.TGeometryFactory.TLinearRing;
import static org.qi4j.api.query.QueryExpressions.and;
import static org.qi4j.api.query.QueryExpressions.not;
import static org.qi4j.api.query.QueryExpressions.templateFor;
-import static org.qi4j.api.query.grammar.extensions.spatial.SpatialQueryExpressions.ST_Disjoint;
-import static org.qi4j.api.query.grammar.extensions.spatial.SpatialQueryExpressions.ST_GeometryFromText;
-import static org.qi4j.api.query.grammar.extensions.spatial.SpatialQueryExpressions.ST_Within;
+import static org.qi4j.api.query.grammar.extensions.spatial.SpatialQueryExpressions.*;
/**
* Created by jj on 21.12.14.
@@ -37,25 +35,36 @@ public abstract class AbstractSpatialRegressionTest
extends AbstractAnyQueryTest
{
- protected abstract boolean isExpressionSupported(Query<?> expression);
-
- public interface SpatialRegressionEntity extends EntityComposite, SpatialRegressionsValues {}
-
- public interface SpatialRegressionsValues
+ public interface A
{
@Optional Property<TPoint> point();
@Optional Property<TMultiPoint> multipoint();
@Optional Property<TLineString> line();
+ @Optional Property<TMultiLineString> multiline();
@Optional Property<TPolygon> polygon();
@Optional Property<TMultiPolygon> multipolygon();
@Optional Property<TFeature> feature();
@Optional Property<TFeatureCollection> featurecollection();
+ @Optional Association<Nested> nested();
+ }
+
+ public interface Nested
+ {
+ @Optional Property<TPoint> point();
}
- private TPoint _TPoint1,_TPoint2, _TPoint3;
+ public interface SpatialAEntity extends EntityComposite, A {}
+ public interface SpatialBEntity extends EntityComposite, Nested {}
+
+
+ private TPoint _TPoint1, _TPointNested,_TPoint2, _TPoint3;
private TMultiPoint _TMultiPoint;
private TLineString _TLineString;
+ private TMultiLineString _TMultiLineString;
+ private TMultiPolygon _TMultiPolygon;
private TPolygon _TPolygon;
+ private TFeature _TFeature;
+ private TFeatureCollection _TFeatureCollection;
public void setUp() throws Exception {
@@ -66,6 +75,9 @@ public abstract class AbstractSpatialRegressionTest
_TPoint1 = TPoint(module).lat(48.13905780942574).lon(11.57958984375)
.geometry();
+ _TPointNested = TPoint(module).lat(48.13905780942574).lon(11.57958984375)
+ .geometry();
+
_TPoint2 = TPoint(module).lat(48.145748).lon(11.567976)
.geometry();
@@ -74,29 +86,33 @@ public abstract class AbstractSpatialRegressionTest
_TMultiPoint = TMultiPoint(module).points(new double[][]
{
- { 48.13905780942574 , 11.579589843750000 },
- { 48.14913756559802 , 11.599502563476562 }
+ {48.13905780942574, 11.579589843750000},
+ {48.14913756559802, 11.599502563476562}
})
.geometry();
- _TLineString = TlineString(module).points(new double[][]
+
+ _TLineString = TLineString(module).points(new double[][]
{
{ 48.109035906197036 , 11.550750732421875 },
{ 48.16608541901253 , 11.552810668945312 }
})
.geometry();
+
+ _TMultiLineString = TMultiLineString(module).of(_TLineString).of(_TLineString, _TLineString).geometry();
+
_TPolygon = TPolygon(module)
.shell
(
TLinearRing(module).ring(new double[][]
{
- { 48.14478518644042 , 11.475906372070312 },
- { 48.18760570101003 , 11.572723388671875 },
- { 48.14043243818813 , 11.692886352539062 },
- { 48.08243697630599 , 11.679153442382812 },
- { 48.07211472138644 , 11.581306457519531 },
- { 48.10124109364004 , 11.522941589355469 },
- { 48.10949438777014 , 11.470069885253906 },
- { 48.14478518644042 , 11.475906372070312 }
+ {48.14478518644042, 11.475906372070312},
+ {48.18760570101003, 11.572723388671875},
+ {48.14043243818813, 11.692886352539062},
+ {48.08243697630599, 11.679153442382812},
+ {48.07211472138644, 11.581306457519531},
+ {48.10124109364004, 11.522941589355469},
+ {48.10949438777014, 11.470069885253906},
+ {48.14478518644042, 11.475906372070312}
})
.geometry()
@@ -105,17 +121,28 @@ public abstract class AbstractSpatialRegressionTest
(
TLinearRing(module).ring(new double[][]
{
- { 48.13837048124154 , 11.538391113281250 },
- { 48.15028286718964 , 11.614952087402344 },
- { 48.10513864768105 , 11.640357971191406 },
- { 48.10330454141599 , 11.558303833007812 },
- { 48.13837048124154 , 11.538391113281250 }
+ {48.13837048124154, 11.538391113281250},
+ {48.15028286718964, 11.614952087402344},
+ {48.10513864768105, 11.640357971191406},
+ {48.10330454141599, 11.558303833007812},
+ {48.13837048124154, 11.538391113281250}
})
.geometry()
)
.geometry();
+ _TMultiPolygon = TMultiPolygon(module).of(_TPolygon).of(_TPolygon, _TPolygon).geometry();
+
+ _TFeature = TFeature(module).of(_TPoint1).addProperty("property", "feature").geometry();
+ _TFeatureCollection = TFeatureCollection(module)
+ .of(TFeature(module).of(_TPoint1).addProperty("property", "point").geometry())
+ .of(TFeature(module).of(_TMultiPoint).addProperty("property", "multipoint").geometry())
+ .of(TFeature(module).of(_TLineString).addProperty("property", "linestring").geometry())
+ .of(TFeature(module).of(_TMultiLineString).addProperty("property", "multilinestring").geometry())
+ .of(TFeature(module).of(_TPolygon).addProperty("property", "polygon").geometry())
+ .of(TFeature(module).of(_TMultiPolygon).addProperty("property", "multipolygon").geometry())
+ .geometry();
try (UnitOfWork unitOfWork = module.newUnitOfWork())
@@ -123,41 +150,71 @@ public abstract class AbstractSpatialRegressionTest
// TPoint
{
- EntityBuilder<SpatialRegressionEntity> pointBuilder = unitOfWork.newEntityBuilder(SpatialRegressionEntity.class, "Point1");
+ EntityBuilder<SpatialBEntity> pointBuilderNested = unitOfWork.newEntityBuilder(SpatialBEntity.class, "Nested");
+ pointBuilderNested.instance().point().set(_TPointNested);
+ SpatialBEntity nested = pointBuilderNested.newInstance();
+
+ EntityBuilder<SpatialAEntity> pointBuilder = unitOfWork.newEntityBuilder(SpatialAEntity.class, "Point1");
pointBuilder.instance().point().set(_TPoint1);
+ pointBuilder.instance().nested().set(nested);
pointBuilder.newInstance();
- EntityBuilder<SpatialRegressionEntity> pointBuilder2 = unitOfWork.newEntityBuilder(SpatialRegressionEntity.class, "Point2");
+ EntityBuilder<SpatialAEntity> pointBuilder2 = unitOfWork.newEntityBuilder(SpatialAEntity.class, "Point2");
pointBuilder2.instance().point().set(_TPoint2);
pointBuilder2.newInstance();
- EntityBuilder<SpatialRegressionEntity> pointBuilder3 = unitOfWork.newEntityBuilder(SpatialRegressionEntity.class, "Point3");
+ EntityBuilder<SpatialAEntity> pointBuilder3 = unitOfWork.newEntityBuilder(SpatialAEntity.class, "Point3");
pointBuilder3.instance().point().set(_TPoint3);
pointBuilder3.newInstance();
-
}
// TMultiPoint
{
- EntityBuilder<SpatialRegressionEntity> mPointBuilder = unitOfWork.newEntityBuilder(SpatialRegressionEntity.class, "MultiPoint");
+ EntityBuilder<SpatialAEntity> mPointBuilder = unitOfWork.newEntityBuilder(SpatialAEntity.class, "MultiPoint");
mPointBuilder.instance().multipoint().set(_TMultiPoint);
mPointBuilder.newInstance();
}
// TLineString
{
- EntityBuilder<SpatialRegressionEntity> tlineStringBuilder = unitOfWork.newEntityBuilder(SpatialRegressionEntity.class, "LineString");
+ EntityBuilder<SpatialAEntity> tlineStringBuilder = unitOfWork.newEntityBuilder(SpatialAEntity.class, "LineString");
tlineStringBuilder.instance().line().set(_TLineString);
tlineStringBuilder.newInstance();
}
+ // TMultiLineString
+ {
+ EntityBuilder<SpatialAEntity> tlineStringBuilder = unitOfWork.newEntityBuilder(SpatialAEntity.class, "MultiLineString");
+ tlineStringBuilder.instance().multiline().set(_TMultiLineString);
+ tlineStringBuilder.newInstance();
+ }
// TPolygon
{
- EntityBuilder<SpatialRegressionEntity> tPolygonBuilder = unitOfWork.newEntityBuilder(SpatialRegressionEntity.class, "Polygon");
+ EntityBuilder<SpatialAEntity> tPolygonBuilder = unitOfWork.newEntityBuilder(SpatialAEntity.class, "Polygon");
tPolygonBuilder.instance().polygon().set(_TPolygon);
tPolygonBuilder.newInstance();
}
+ // TMultiPolygon
+ {
+ EntityBuilder<SpatialAEntity> tPolygonBuilder = unitOfWork.newEntityBuilder(SpatialAEntity.class, "MultiPolygon");
+ tPolygonBuilder.instance().multipolygon().set(_TMultiPolygon);
+ tPolygonBuilder.newInstance();
+ }
+
+ // TFeature
+ {
+ EntityBuilder<SpatialAEntity> tFeatureBuilder = unitOfWork.newEntityBuilder(SpatialAEntity.class, "Feature");
+ tFeatureBuilder.instance().feature().set(_TFeature);
+ tFeatureBuilder.newInstance();
+ }
+
+ // TFeatureCollection
+ {
+ EntityBuilder<SpatialAEntity> tFeatureCollectionBuilder = unitOfWork.newEntityBuilder(SpatialAEntity.class, "FeatureCollection");
+ tFeatureCollectionBuilder.instance().featurecollection().set(_TFeatureCollection);
+ tFeatureCollectionBuilder.newInstance();
+ }
unitOfWork.complete();
}
}
@@ -171,79 +228,75 @@ public abstract class AbstractSpatialRegressionTest
{
super.assemble( module );
- module.entities(SpatialRegressionEntity.class);
+ module.entities(SpatialAEntity.class, SpatialBEntity.class);
}
- // ST_Within()
@Test
- public void script01()
+ public void script01a()
throws EntityFinderException
{
- QueryBuilder<SpatialRegressionsValues> qb = this.module.newQueryBuilder(SpatialRegressionsValues.class);
+ QueryBuilder<A> qb = this.module.newQueryBuilder(A.class);
- Query<SpatialRegressionsValues> query = unitOfWork.newQuery(
+ Query<A> query = unitOfWork.newQuery(
qb
.where(
ST_Within
(
- templateFor(SpatialRegressionsValues.class).point(),
+ templateFor(A.class).point(),
TPoint(module).y(48.13905780942574).x(11.57958984375).geometry(),
10,TUnit.METER
)
));
- assumeTrue(isExpressionSupported(query));
query.find();
assertEquals(1, query.count());
TPoint tPoint = query.iterator().next().point().get();
assertTrue(tPoint.compareTo(_TPoint1) == 0);
- // assertSame
}
@Test
- public void script02()
+ public void script01b()
+ throws EntityFinderException
{
- QueryBuilder<SpatialRegressionsValues> qb = this.module.newQueryBuilder(SpatialRegressionsValues.class);
+ QueryBuilder<A> qb = this.module.newQueryBuilder(A.class);
- Query<SpatialRegressionsValues> query = unitOfWork.newQuery(
+ Query<A> query = unitOfWork.newQuery(
qb
.where(
ST_Within
(
- templateFor(SpatialRegressionsValues.class).point(),
+ templateFor(A.class).point(),
TPoint(module).y(2389280.7514562616).x(1286436.5975464052).geometry("EPSG:27572"),
10,TUnit.METER
)
));
- assumeTrue(isExpressionSupported(query));
+ System.out.println(query);
query.find();
assertEquals(1, query.count());
TPoint tPoint = query.iterator().next().point().get();
assertTrue(tPoint.compareTo(_TPoint1) == 0);
-
- // Transform(module).from(tPoint).to("EPSG:4326");
}
@Test
- public void script03()
+ public void script01c() throws EntityFinderException
{
- QueryBuilder<SpatialRegressionsValues> qb = this.module.newQueryBuilder(SpatialRegressionsValues.class);
+ QueryBuilder<A> qb = this.module.newQueryBuilder(A.class);
- Query<SpatialRegressionsValues> query = unitOfWork.newQuery(
+ Query<A> query = unitOfWork.newQuery(
qb
.where(
ST_Within
(
- templateFor(SpatialRegressionsValues.class).point(),
+ templateFor(A.class).point(),
TPoint(module).y(48.13905780941111).x(11.57958981111).geometry(),
10, TUnit.METER
)
))
- .orderBy(templateFor(SpatialRegressionsValues.class).point(), _TPoint1, OrderBy.Order.ASCENDING);
+ .orderBy(templateFor(A.class).point(), _TPoint1, OrderBy.Order.ASCENDING);
- assumeTrue(isExpressionSupported(query));
+ System.out.println(query);
query.find();
assertEquals(query.count(), 1);
TPoint tPoint = query.iterator().next().point().get();
@@ -251,31 +304,30 @@ public abstract class AbstractSpatialRegressionTest
}
@Test
- public void script03a()
+ public void script01d() throws EntityFinderException
{
- QueryBuilder<SpatialRegressionsValues> qb = this.module.newQueryBuilder(SpatialRegressionsValues.class);
+ QueryBuilder<A> qb = this.module.newQueryBuilder(A.class);
- Query<SpatialRegressionsValues> query = unitOfWork.newQuery(
+ Query<A> query = unitOfWork.newQuery(
qb
.where(and(
ST_Within
(
- templateFor(SpatialRegressionsValues.class).point(),
+ templateFor(A.class).point(),
TPoint(module).y(48.13905780941111).x(11.57958981111).geometry(),
10, TUnit.METER
)
,
ST_Within
(
- templateFor(SpatialRegressionsValues.class).point(),
+ templateFor(A.class).point(),
TPoint(module).y(48.13905780941111).x(11.57958981111).geometry(),
5, TUnit.METER
)
))
)
- .orderBy(templateFor(SpatialRegressionsValues.class).point(), _TPoint1, OrderBy.Order.ASCENDING);
-
- assumeTrue(isExpressionSupported(query));
+ .orderBy(templateFor(A.class).point(), _TPoint1, OrderBy.Order.ASCENDING);
+ System.out.println(query);
query.find();
assertEquals(query.count(), 1);
TPoint tPoint = query.iterator().next().point().get();
@@ -283,34 +335,35 @@ public abstract class AbstractSpatialRegressionTest
}
@Test
- public void script03b() {
- QueryBuilder<SpatialRegressionsValues> qb = this.module.newQueryBuilder(SpatialRegressionsValues.class);
+ public void script01e()
+ throws EntityFinderException
+ {
+ QueryBuilder<A> qb = this.module.newQueryBuilder(A.class);
- Query<SpatialRegressionsValues> query = unitOfWork.newQuery(
+ Query<A> query = unitOfWork.newQuery(
qb
.where(and(
ST_Within
(
- templateFor(SpatialRegressionsValues.class).point(),
+ templateFor(A.class).point(),
TPoint(module).y(48.13905780941111).x(11.57958981111).geometry(),
1000, TUnit.KILOMETER
)
,
not(ST_Within
(
- templateFor(SpatialRegressionsValues.class).point(),
+ templateFor(A.class).point(),
TPoint(module).y(48.13905780941111).x(11.57958981111).geometry(),
1, TUnit.METER
))
))
)
- .orderBy(templateFor(SpatialRegressionsValues.class).point(), _TPoint1, OrderBy.Order.ASCENDING);
+ .orderBy(templateFor(A.class).point(), _TPoint1, OrderBy.Order.ASCENDING);
- assumeTrue(isExpressionSupported(query));
query.find();
assertEquals(query.count(), 2);
- Iterator<SpatialRegressionsValues> results = query.iterator();
+ Iterator<A> results = query.iterator();
// sorted ascending by distance
TPoint tPoint2 = results.next().point().get();
@@ -321,34 +374,35 @@ public abstract class AbstractSpatialRegressionTest
}
@Test
- public void script03c() {
- QueryBuilder<SpatialRegressionsValues> qb = this.module.newQueryBuilder(SpatialRegressionsValues.class);
+ public void script01f()
+ throws EntityFinderException
+ {
+ QueryBuilder<A> qb = this.module.newQueryBuilder(A.class);
- Query<SpatialRegressionsValues> query = unitOfWork.newQuery(
+ Query<A> query = unitOfWork.newQuery(
qb
.where(and(
ST_Within
(
- templateFor(SpatialRegressionsValues.class).point(),
+ templateFor(A.class).point(),
TPoint(module).y(48.13905780941111).x(11.57958981111).geometry(),
1000, TUnit.KILOMETER
)
,
not(ST_Within
(
- templateFor(SpatialRegressionsValues.class).point(),
+ templateFor(A.class).point(),
TPoint(module).y(48.13905780941111).x(11.57958981111).geometry(),
1, TUnit.METER
))
))
)
- .orderBy(templateFor(SpatialRegressionsValues.class).point(), _TPoint1, OrderBy.Order.DESCENDING);
+ .orderBy(templateFor(A.class).point(), _TPoint1, OrderBy.Order.DESCENDING);
- assumeTrue(isExpressionSupported(query));
query.find();
assertEquals(query.count(), 2);
- Iterator<SpatialRegressionsValues> results = query.iterator();
+ Iterator<A> results = query.iterator();
// sorted descending by distance
TPoint tPoint3 = results.next().point().get();
@@ -359,25 +413,25 @@ public abstract class AbstractSpatialRegressionTest
}
- @Ignore
+ @Ignore // <-- WKT support disabled
@Test
- public void script04()
+ public void script01g()
+ throws EntityFinderException
{
- QueryBuilder<SpatialRegressionsValues> qb = this.module.newQueryBuilder(SpatialRegressionsValues.class);
+ QueryBuilder<A> qb = this.module.newQueryBuilder(A.class);
- Query<SpatialRegressionsValues> query = unitOfWork.newQuery(
+ Query<A> query = unitOfWork.newQuery(
qb
.where(
ST_Within
(
- templateFor(SpatialRegressionsValues.class).point(),
+ templateFor(A.class).point(),
ST_GeometryFromText("POINT(11.57958981111 48.13905780941111 )"),
10,TUnit.METER
)
))
- .orderBy(templateFor(SpatialRegressionsValues.class).point(), _TPoint1, OrderBy.Order.ASCENDING);
+ .orderBy(templateFor(A.class).point(), _TPoint1, OrderBy.Order.ASCENDING);
- // assumeTrue(isExpressionSupported(query));
query.find();
assertEquals(query.count(), 1);
TPoint tPoint = query.iterator().next().point().get();
@@ -385,16 +439,17 @@ public abstract class AbstractSpatialRegressionTest
}
@Test
- public void script05()
+ public void script01h()
+ throws EntityFinderException
{
- QueryBuilder<SpatialRegressionsValues> qb = this.module.newQueryBuilder(SpatialRegressionsValues.class);
+ QueryBuilder<A> qb = this.module.newQueryBuilder(A.class);
- Query<SpatialRegressionsValues> query = unitOfWork.newQuery(
+ Query<A> query = unitOfWork.newQuery(
qb
.where(
ST_Within
(
- templateFor(SpatialRegressionsValues.class).point(),
+ templateFor(A.class).point(),
TPolygon(module)
.shell
(
@@ -415,7 +470,6 @@ public abstract class AbstractSpatialRegressionTest
)
));
- assumeTrue(isExpressionSupported(query));
query.find();
assertEquals(1, query.count());
@@ -425,36 +479,35 @@ public abstract class AbstractSpatialRegressionTest
}
@Test
- public void script06()
+ public void script01i()
+ throws EntityFinderException
{
- QueryBuilder<SpatialRegressionsValues> qb = this.module.newQueryBuilder(SpatialRegressionsValues.class);
+ QueryBuilder<A> qb = this.module.newQueryBuilder(A.class);
- Query<SpatialRegressionsValues> query = unitOfWork.newQuery(
+ Query<A> query = unitOfWork.newQuery(
qb
.where(
ST_Within
(
- templateFor(SpatialRegressionsValues.class).line(),
+ templateFor(A.class).line(),
TPolygon(module)
.shell
- (
- new double[][]
- {{ 48.17341248658083 , 11.499938964843750 },
- { 48.21003212234042 , 11.622848510742188 },
- { 48.13470457551313 , 11.732711791992188 },
- { 48.07280293614395 , 11.699409484863281 },
- { 48.07372054150283 , 11.534614562988281 },
- { 48.08817066753472 , 11.481056213378906 },
- { 48.17341248658083 , 11.499938964843750 }}
-
- ).geometry()
+ (
+ new double[][]
+
+ {
+ {48.17341248658083, 11.499938964843750},
+ {48.21003212234042, 11.622848510742188},
+ {48.13470457551313, 11.732711791992188},
+ {48.07280293614395, 11.699409484863281},
+ {48.07372054150283, 11.534614562988281},
+ {48.08817066753472, 11.481056213378906},
+ {48.17341248658083, 11.499938964843750}
+ }
+
+ ).geometry()
)
));
-
- // .orderBy(templateFor(VerifyStatialTypes.class).point(), _tPoint, OrderBy.Order.ASCENDING);
-
- assumeTrue(isExpressionSupported(query));
-
query.find();
assertEquals(1, query.count());
TLineString tLineString = query.iterator().next().line().get();
@@ -464,16 +517,17 @@ public abstract class AbstractSpatialRegressionTest
@Test
- public void script07()
+ public void script01j()
+ throws EntityFinderException
{
- QueryBuilder<SpatialRegressionsValues> qb = this.module.newQueryBuilder(SpatialRegressionsValues.class);
+ QueryBuilder<A> qb = this.module.newQueryBuilder(A.class);
- Query<SpatialRegressionsValues> query = unitOfWork.newQuery(
+ Query<A> query = unitOfWork.newQuery(
qb
.where(
ST_Within
(
- templateFor(SpatialRegressionsValues.class).polygon(),
+ templateFor(A.class).polygon(),
TPolygon(module)
.shell
@@ -502,85 +556,97 @@ public abstract class AbstractSpatialRegressionTest
assertTrue(tPolygon.holes().get().get(0).compareTo(_TPolygon.holes().get().get(0)) == 0);
}
+ @Test
+ public void script01k()
+ throws EntityFinderException
+ {
+ QueryBuilder<A> qb = this.module.newQueryBuilder(A.class);
+
+ Query<A> query = unitOfWork.newQuery(
+ qb
+ .where(
+ ST_Within
+ (
+ templateFor(A.class).nested().get().point(), // <- "nested.point" : [ 11.57958984375, 48.13905780942574 ]
+ TPoint(module).y(48.13905780942574).x(11.57958984375).geometry(),
+ 10,TUnit.METER
+ )
+ ));
+ query.find();
+ assertEquals(1, query.count());
+ TPoint tPoint = query.iterator().next().point().get();
+ assertTrue(tPoint.compareTo(_TPointNested) == 0);
+ }
+
// ST_Disjoint()
@Test
- public void script08()
+ public void script02a()
throws EntityFinderException
{
- QueryBuilder<SpatialRegressionsValues> qb = this.module.newQueryBuilder(SpatialRegressionsValues.class);
+ QueryBuilder<A> qb = this.module.newQueryBuilder(A.class);
- Query<SpatialRegressionsValues> query = unitOfWork.newQuery(
+ Query<A> query = unitOfWork.newQuery(
qb
.where(
ST_Disjoint
(
- templateFor(SpatialRegressionsValues.class).point(),
+ templateFor(A.class).point(),
TPoint(module).y(48.13905780942574).x(11.57958984375).geometry(),
10,TUnit.METER
)
));
- assumeTrue(isExpressionSupported(query));
query.find();
- assertEquals(4, query.count());
- TPoint tPoint = query.iterator().next().point().get();
- assertTrue(tPoint.compareTo(_TPoint1) == 0);
- // assertSame
+ assertEquals(2, query.count());
}
@Test
- public void script09()
+ public void script02b()
throws EntityFinderException
{
- QueryBuilder<SpatialRegressionsValues> qb = this.module.newQueryBuilder(SpatialRegressionsValues.class);
+ QueryBuilder<A> qb = this.module.newQueryBuilder(A.class);
- Query<SpatialRegressionsValues> query = unitOfWork.newQuery(
+ Query<A> query = unitOfWork.newQuery(
qb
.where(
ST_Disjoint
(
- templateFor(SpatialRegressionsValues.class).point(),
+ templateFor(A.class).point(),
TPoint(module).y(48.13905780942574).x(11.57958984375).geometry(),
- // TPoint(module).y(45.13905780942574).x(10.57958984375).geometry(),
10,TUnit.KILOMETER
)
));
- assumeTrue(isExpressionSupported(query));
query.find();
- System.out.println("Count " + query.count());
-
assertEquals(1, query.count());
TPoint tPoint = query.iterator().next().point().get();
assertTrue(tPoint.compareTo(_TPoint3) == 0);
- // assertSame
}
@Test
- public void script10()
+ public void script02c()
throws EntityFinderException
{
- QueryBuilder<SpatialRegressionsValues> qb = this.module.newQueryBuilder(SpatialRegressionsValues.class);
+ QueryBuilder<A> qb = this.module.newQueryBuilder(A.class);
- Query<SpatialRegressionsValues> query = unitOfWork.newQuery(
+ Query<A> query = unitOfWork.newQuery(
qb
.where(and(
ST_Disjoint
(
- templateFor(SpatialRegressionsValues.class).point(),
+ templateFor(A.class).point(),
TPoint(module).y(48.13905780942574).x(11.57958984375).geometry(),
10, TUnit.METER
),
ST_Within
(
- templateFor(SpatialRegressionsValues.class).point(),
+ templateFor(A.class).point(),
TPoint(module).y(48.13905780942574).x(11.57958984375).geometry(),
10,TUnit.KILOMETER
)
)
));
- assumeTrue(isExpressionSupported(query));
query.find();
assertEquals(1, query.count());
@@ -589,29 +655,28 @@ public abstract class AbstractSpatialRegressionTest
}
@Test
- public void script11()
+ public void script02d()
throws EntityFinderException
{
- QueryBuilder<SpatialRegressionsValues> qb = this.module.newQueryBuilder(SpatialRegressionsValues.class);
+ QueryBuilder<A> qb = this.module.newQueryBuilder(A.class);
- Query<SpatialRegressionsValues> query = unitOfWork.newQuery(
+ Query<A> query = unitOfWork.newQuery(
qb
.where(and(
ST_Disjoint
(
- templateFor(SpatialRegressionsValues.class).point(),
+ templateFor(A.class).point(),
TPoint(module).y(2389280.7514562616).x(1286436.5975464052).geometry("EPSG:27572"),
10, TUnit.METER
),
ST_Within
(
- templateFor(SpatialRegressionsValues.class).point(),
+ templateFor(A.class).point(),
TPoint(module).y(48.13905780942574).x(11.57958984375).geometry(),
100,TUnit.KILOMETER
)
)
));
- assumeTrue(isExpressionSupported(query));
query.find();
assertEquals(1, query.count());
@@ -621,35 +686,159 @@ public abstract class AbstractSpatialRegressionTest
}
@Test
- public void script12()
+ public void script02e()
throws EntityFinderException
{
- QueryBuilder<SpatialRegressionsValues> qb = this.module.newQueryBuilder(SpatialRegressionsValues.class);
+ QueryBuilder<A> qb = this.module.newQueryBuilder(A.class);
- Query<SpatialRegressionsValues> query = unitOfWork.newQuery(
+ Query<A> query = unitOfWork.newQuery(
qb
.where(and(
ST_Disjoint
(
- templateFor(SpatialRegressionsValues.class).point(),
+ templateFor(A.class).point(),
TPoint(module).y(2389280.7514562616).x(1286436.5975464052).geometry("EPSG:27572"),
10, TUnit.METER
),
ST_Within
(
- templateFor(SpatialRegressionsValues.class).point(),
+ templateFor(A.class).point(),
TPoint(module).y(2389280.7514562616).x(1286436.5975464052).geometry("EPSG:27572"),
1000,TUnit.KILOMETER
)
)
));
- assumeTrue(isExpressionSupported(query));
query.find();
assertEquals(2, query.count());
}
+ @Test
+ public void script02f()
+ throws EntityFinderException
+ {
+ QueryBuilder<A> qb = this.module.newQueryBuilder(A.class);
+
+ Query<A> query = unitOfWork.newQuery(
+ qb
+ .where(
+ ST_Disjoint
+ (
+ templateFor(A.class).nested().get().point(),
+ TPoint(module).y(49.13905780942574).x(12.57958984375).geometry(),
+ 10,TUnit.METER
+ )
+ ));
+ query.find();
+ assertEquals(1, query.count());
+ TPoint tPoint = query.iterator().next().point().get();
+ assertTrue(tPoint.compareTo(_TPointNested) == 0);
+ }
+
+ // ST_Intersects()
+
+ @Test
+ public void script03a()
+ throws EntityFinderException
+ {
+ QueryBuilder<A> qb = this.module.newQueryBuilder(A.class);
+
+ Query<A> query = unitOfWork.newQuery(
+ qb
+ .where(
+ ST_Intersects
+ (
+ templateFor(A.class).point(),
+ TPoint(module).y(48.13905780942574).x(11.57958984375).geometry(),
+ 10,TUnit.METER
+ )
+ ));
+ query.find();
+ assertEquals(1, query.count());
+ }
+
+ @Test
+ public void script03b()
+ throws EntityFinderException
+ {
+ QueryBuilder<A> qb = this.module.newQueryBuilder(A.class);
+
+ Query<A> query = unitOfWork.newQuery(
+ qb
+ .where(
+ ST_Intersects
+ (
+ templateFor(A.class).polygon(),
+
+ TPolygon(module)
+ .shell
+ (
+ new double[][]
+ {
+ { 48.160131, 11.778717 },
+ { 48.156925, 11.631775 },
+ { 48.061561, 11.600876 },
+ { 48.006922, 11.778030 },
+ { 48.062020, 11.858368 },
+ { 48.159215, 11.778717 }
+ }
+ ).geometry()
+ )
+ ));
+
+
+ query.find();
+
+ assertEquals(query.count(), 1);
+ TPolygon tPolygon = query.iterator().next().polygon().get();
+ assertTrue(tPolygon.holes().get().size() == 1);
+ assertTrue(tPolygon.shell().get().compareTo(_TPolygon.shell().get()) == 0);
+ assertFalse(tPolygon.holes().get().get(0).compareTo(_TPolygon.shell().get()) == 0);
+ assertTrue(tPolygon.holes().get().get(0).compareTo(_TPolygon.holes().get().get(0)) == 0);
+ }
+
+ @Test
+ public void script03c()
+ throws EntityFinderException
+ {
+ QueryBuilder<A> qb = this.module.newQueryBuilder(A.class);
+
+ Query<A> query = unitOfWork.newQuery(
+ qb
+ .where(
+ ST_Intersects
+ (
+ templateFor(A.class).polygon(),
+
+ TPolygon(module)
+ .shell
+ (
+ new double[][]
+ {
+ { 48.160131, 11.778717 },
+ { 48.156925, 11.631775 },
+ { 48.061561, 11.600876 },
+ { 48.006922, 11.778030 },
+ { 48.062020, 11.858368 },
+ { 48.159215, 11.778717 }
+ }
+ ).geometry()
+ )
+ ))
+ .orderBy(templateFor(A.class).point(), _TPoint1, OrderBy.Order.ASCENDING);
+
+
+ query.find();
+
+ assertEquals(query.count(), 1);
+ TPolygon tPolygon = query.iterator().next().polygon().get();
+ assertTrue(tPolygon.holes().get().size() == 1);
+ assertTrue(tPolygon.shell().get().compareTo(_TPolygon.shell().get()) == 0);
+ assertFalse(tPolygon.holes().get().get(0).compareTo(_TPolygon.shell().get()) == 0);
+ assertTrue(tPolygon.holes().get().get(0).compareTo(_TPolygon.holes().get().get(0)) == 0);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/core/testsupport/src/main/java/org/qi4j/test/indexing/TestData.java
----------------------------------------------------------------------
diff --git a/core/testsupport/src/main/java/org/qi4j/test/indexing/TestData.java b/core/testsupport/src/main/java/org/qi4j/test/indexing/TestData.java
index 1312a46..2dbe700 100644
--- a/core/testsupport/src/main/java/org/qi4j/test/indexing/TestData.java
+++ b/core/testsupport/src/main/java/org/qi4j/test/indexing/TestData.java
@@ -106,7 +106,6 @@ class TestData
kualaLumpur.name().set( "Kuala Lumpur" );
kualaLumpur.country().set( "Malaysia" );
kualaLumpur.county().set( "Some Jaya" );
- kualaLumpur.location().set(TPoint(module).x(101.686854).y(3.139003).geometry());
kualaLumpur = cityBuilder.newInstance();
NameableAssert.trace( kualaLumpur );
}
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/extensions/indexing-elasticsearch/build.gradle
----------------------------------------------------------------------
diff --git a/extensions/indexing-elasticsearch/build.gradle b/extensions/indexing-elasticsearch/build.gradle
index 6bf7bfa..525bf4e 100644
--- a/extensions/indexing-elasticsearch/build.gradle
+++ b/extensions/indexing-elasticsearch/build.gradle
@@ -9,6 +9,8 @@ dependencies {
compile project(":org.qi4j.libraries:org.qi4j.library.spatial")
compile project(":org.qi4j.libraries:org.qi4j.library.sql")
compile project(":org.qi4j.extensions:org.qi4j.extension.entitystore-sql")
+ compile(project(":org.qi4j.extensions:org.qi4j.extension.entitystore-riak"))
+
compile libraries.elasticsearch
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchConfiguration.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchConfiguration.java b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchConfiguration.java
index 795fc6b..9fe42d7 100644
--- a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchConfiguration.java
+++ b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchConfiguration.java
@@ -22,7 +22,6 @@ import org.qi4j.api.common.Optional;
import org.qi4j.api.common.UseDefaults;
import org.qi4j.api.configuration.ConfigurationComposite;
import org.qi4j.api.property.Property;
-import org.qi4j.index.elasticsearch.extensions.spatial.configuration.SpatialExceptionConfiguration;
import org.qi4j.index.elasticsearch.extensions.spatial.configuration.SpatialConfiguration;
// START SNIPPET: config
@@ -50,11 +49,6 @@ public interface ElasticSearchConfiguration
@UseDefaults Property<Boolean> indexNonAggregatedAssociations();
- public static enum INDEX_MAPPING_POINT_METHOD {GEO_POINT, GEO_SHAPE}
-
-
- @Optional Property<INDEX_MAPPING_POINT_METHOD> indexPointMappingMethod();
-
@Optional
Property<SpatialConfiguration.Configuration> spatial();
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchFinder.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchFinder.java b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchFinder.java
index dd204ea..1936d50 100644
--- a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchFinder.java
+++ b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchFinder.java
@@ -78,15 +78,6 @@ public interface ElasticSearchFinder
private static final Map<Class<?>, ComplexTypeSupport> COMPLEX_TYPE_SUPPORTS = new HashMap<>( 9 );
public static final Map<Class<?>, SpatialQuerySpecSupport> EXTENDED_SPEC_SUPPORTS = new HashMap<>( 2 );
- public static final Map<Class<?>, SpatialQuerySpecSupport> EXTENDED_QUERY_EXPRESSIONS_CATALOG = new HashMap<>( 2 );
-
- static
- {
-
- EXTENDED_QUERY_EXPRESSIONS_CATALOG.put(SpatialPredicatesSpecification.class, new PredicateFinderSupport());
- EXTENDED_QUERY_EXPRESSIONS_CATALOG.put(SpatialConvertSpecification.class, new ConvertFinderSupport());
- }
-
// Spec Support
static
{
@@ -198,12 +189,9 @@ public interface ElasticSearchFinder
System.out.println("request " + request.toString());
-
// Execute
SearchResponse response = request.execute().actionGet();
- // System.out.println("response " + response.toString());
-
if( response.getHits().totalHits() == 1 )
{
return EntityReference.parseEntityReference( response.getHits().getAt( 0 ).id() );
@@ -596,38 +584,16 @@ public interface ElasticSearchFinder
throws EntityFinderException
{
LOGGER.trace("Processing SpatialPredicatesSpecification {}", spec);
- SpatialQuerySpecSupport spatialQuerySpecSupport = EXTENDED_SPEC_SUPPORTS.get( spec.getClass().getSuperclass() );
- spatialQuerySpecSupport.setModule(module, support);
-
-
-
- try
- {
- spatialQuerySpecSupport.processSpecification(filterBuilder, spec, variables);
-
- } catch(Exception _ex)
- {
- throw new EntityFinderException(_ex);
- }
+ EXTENDED_SPEC_SUPPORTS.get( spec.getClass().getSuperclass() ).support(module, support).processSpecification(filterBuilder, spec, variables);
}
private void processSpatialConvertSpecification( FilterBuilder filterBuilder,
SpatialConvertSpecification<?> spec,
Map<String, Object> variables )
+ throws EntityFinderException
{
LOGGER.trace("Processing SpatialConvertSpecification {}", spec);
-
- SpatialQuerySpecSupport spatialQuerySpecSupport = EXTENDED_SPEC_SUPPORTS.get( spec.getClass().getSuperclass() );
- spatialQuerySpecSupport.setModule(module, support);
-
- try
- {
- spatialQuerySpecSupport.processSpecification(filterBuilder, spec, variables);
-
- } catch(Exception _ex)
- {
- _ex.printStackTrace();
- }
+ EXTENDED_SPEC_SUPPORTS.get( spec.getClass().getSuperclass() ).support(module, support).processSpecification(filterBuilder, spec, variables);
}
}
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchIndexer.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchIndexer.java b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchIndexer.java
index fe969ba..e651ee3 100644
--- a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchIndexer.java
+++ b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchIndexer.java
@@ -23,7 +23,6 @@ import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.qi4j.api.association.AssociationDescriptor;
-import org.qi4j.api.association.AssociationStateDescriptor;
import org.qi4j.api.entity.EntityDescriptor;
import org.qi4j.api.entity.EntityReference;
import org.qi4j.api.geometry.internal.TGeometry;
@@ -52,10 +51,7 @@ import org.qi4j.spi.entitystore.StateChangeListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Stack;
+import java.util.*;
/**
* Listen to Entity state changes and index them in ElasticSearch.
@@ -82,6 +78,9 @@ public interface ElasticSearchIndexer
@This
private ElasticSearchSupport support;
+ Stack<String> deepSpatialMappingKeyStack = new Stack<>();
+
+
public void emptyIndex()
{
support.client().admin().indices().prepareDelete( support.index() ).execute().actionGet();
@@ -195,16 +194,9 @@ public interface ElasticSearchIndexer
{
return toJSON(null, state, newStates, uow);
}
-
-
- Stack<String> stack = new Stack<>();
- int iterations = 0;
-
- private String toJSON(String assotiationKey, EntityState state, Map<String, EntityState> newStates, EntityStoreUnitOfWork uow )
+ private String toJSON(String mKey, EntityState state, Map<String, EntityState> newStates, EntityStoreUnitOfWork uow )
{
- // System.out.println("# --- > Iterations " + iterations++);
-
try
{
JSONObject json = new JSONObject();
@@ -218,36 +210,32 @@ public interface ElasticSearchIndexer
for( PropertyDescriptor propDesc : entityType.state().properties() )
{
- AssociationStateDescriptor associationStateDescriptor = entityType.state();
-
if( propDesc.queryable() )
{
String key = propDesc.qualifiedName().name();
Object value = state.propertyValueOf( propDesc.qualifiedName() );
if( value == null || ValueType.isPrimitiveValue( value ) )
{
- json.put( key, value );
+ json.put(key, value);
}
-
else
- if (ValueType.isGeometryValue(value) )
+ // For spatial types is is required to generate a "deep mapping key" that is used during indexing as
+ // mapping name. The mapping name has to be "deep" and is also used for spatial queries :
+ // "geo_distance" : {
+ // "city.location" : [ 11.57958984375, 48.13905780942574 ],
+ // "distance" : "10.0km"
+ if (ValueType.isGeometricValue(value) )
{
-
- String newKey = null;
-
- if (assotiationKey != null)
+ if (mKey != null)
{
- newKey = assotiationKey + "." + key;
+ deepSpatialMappingKeyStack.add(mKey);
+ deepSpatialMappingKeyStack.add(key);
}
- else
- {
- newKey = key;
- }
-
-
- ElasticSearchSpatialIndexer.toJSON(support, (TGeometry) value, key, newKey, json, module);
+ else { deepSpatialMappingKeyStack.add(key);}
- //System.out.println("Spatial JSON " + json);
+ String deepKey = ElasticSearchSpatialIndexer.spatialMappingPropertyName(deepSpatialMappingKeyStack);
+ ElasticSearchSpatialIndexer.toJSON(support, (TGeometry) value, key, deepKey, json, module);
+ deepSpatialMappingKeyStack.clear();
}
else
{
@@ -373,7 +361,6 @@ public interface ElasticSearchIndexer
json.put( key, array );
}
}
- iterations = 0;
return json.toString();
}
catch( JSONException e )
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchSupport.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchSupport.java b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchSupport.java
index f3d683b..16859fd 100644
--- a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchSupport.java
+++ b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchSupport.java
@@ -34,8 +34,6 @@ public interface ElasticSearchSupport
boolean indexNonAggregatedAssociations();
- ElasticSearchConfiguration.INDEX_MAPPING_POINT_METHOD indexPointMappingMethod();
-
SpatialConfiguration.Configuration spatialConfiguration();
Module getModule();
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/cluster/ESClusterSupport.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/cluster/ESClusterSupport.java b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/cluster/ESClusterSupport.java
index 1a88b49..c573d3f 100644
--- a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/cluster/ESClusterSupport.java
+++ b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/cluster/ESClusterSupport.java
@@ -46,12 +46,8 @@ public class ESClusterSupport
index = config.index().get() == null ? DEFAULT_INDEX_NAME : config.index().get();
indexNonAggregatedAssociations = config.indexNonAggregatedAssociations().get();
- indexPointMappingMethod = config.indexPointMappingMethod() == null ?
- ElasticSearchConfiguration.INDEX_MAPPING_POINT_METHOD.GEO_POINT : config.indexPointMappingMethod().get();
+ defaultSpatialConfiguration(config);
- indexPointMappingMethod = ElasticSearchConfiguration.INDEX_MAPPING_POINT_METHOD.GEO_POINT;
-
- System.out.println("---- TEST ---- " + config.spatial());
String[] nodes = config.nodes().get() == null ? new String[]{ "localhost:9300" } : config.nodes().get().split( "," );
boolean clusterSniff = config.clusterSniff().get();
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/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 af529fd..29c38c4 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 @@
-package org.qi4j.index.elasticsearch.extensions.spatial;
/*
* Copyright 2014 Jiri Jetmar.
@@ -17,11 +16,13 @@ package org.qi4j.index.elasticsearch.extensions.spatial;
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+package org.qi4j.index.elasticsearch.extensions.spatial;
+
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.common.geo.GeoDistance;
import org.elasticsearch.common.unit.DistanceUnit;
-import org.elasticsearch.index.query.*;
+import org.elasticsearch.index.query.FilterBuilder;
import org.elasticsearch.search.sort.GeoDistanceSortBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.qi4j.api.composite.Composite;
@@ -34,6 +35,7 @@ import org.qi4j.api.query.grammar.extensions.spatial.convert.SpatialConvertSpeci
import org.qi4j.api.query.grammar.extensions.spatial.predicate.SpatialPredicatesSpecification;
import org.qi4j.api.structure.Module;
import org.qi4j.functional.Specification;
+import org.qi4j.index.elasticsearch.ElasticSearchFinderSupport;
import org.qi4j.index.elasticsearch.ElasticSearchSupport;
import org.qi4j.index.elasticsearch.extensions.spatial.functions.convert.ConvertFinderSupport;
import org.qi4j.index.elasticsearch.extensions.spatial.functions.predicates.PredicateFinderSupport;
@@ -46,111 +48,83 @@ import org.slf4j.LoggerFactory;
import java.util.HashMap;
import java.util.Map;
-import static org.elasticsearch.index.query.FilterBuilders.geoShapeFilter;
-
-import org.qi4j.index.elasticsearch.ElasticSearchFinderSupport;
-
-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 );
+ 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());
}
-
- public interface ModuleHelper {
- void setModule(Module module, ElasticSearchSupport support);
+ private ElasticSearchSpatialFinder() {
}
- public static interface SpatialQuerySpecSupport extends ModuleHelper
- {
- void processSpecification(FilterBuilder filterBuilder, Specification<?> spec, Map<String, Object> variables) throws EntityFinderException;
+ public interface Support {
+ SpatialQuerySpecSupport support(Module module, ElasticSearchSupport 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 {
-
- Module module;
- ElasticSearchSupport support;
+ implements SpatialQuerySpecSupport {
+ private Module module;
+ private ElasticSearchSupport support;
- public void setModule(Module module, ElasticSearchSupport support)
- {
- this.module = module;
+ public SpatialQuerySpecSupport support(Module module, ElasticSearchSupport support) {
+ this.module = module;
this.support = support;
+ return this;
}
public void processSpecification(FilterBuilder filterBuilder,
- Specification<?> spec,
- Map<String, Object> variables)
- throws EntityFinderException
- {
-
- SpatialQuerySpecSupport spatialQuerySpecSupport = SPATIAL_QUERY_EXPRESSIONS_CATALOG.get(spec.getClass().getSuperclass());
- spatialQuerySpecSupport.setModule(module, support);
-
- try {
- spatialQuerySpecSupport.processSpecification(filterBuilder, spec, variables);
-
- } catch (Exception _ex) {
- throw new EntityFinderException(_ex);
- }
-
-
+ Specification<?> spec,
+ Map<String, Object> variables)
+ 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)
- {
- this.module = module;
+ public ElasticSearchFinderSupport.ComplexTypeSupport support(Module module, ElasticSearchSupport support) {
+ this.module = module;
this.support = support;
return this;
}
- 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");
}
@@ -162,11 +136,4 @@ public final class ElasticSearchSpatialFinder
}
}
-
-
-
- private ElasticSearchSpatialFinder()
- {
- }
-
}