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()
-    {
-    }
-
 }