Updates, Cleanup and preparation for a pull request.

Project: http://git-wip-us.apache.org/repos/asf/zest-qi4j/repo
Commit: http://git-wip-us.apache.org/repos/asf/zest-qi4j/commit/9d71ec3c
Tree: http://git-wip-us.apache.org/repos/asf/zest-qi4j/tree/9d71ec3c
Diff: http://git-wip-us.apache.org/repos/asf/zest-qi4j/diff/9d71ec3c

Branch: refs/heads/ramtej-fb/spatial.queries
Commit: 9d71ec3c0e31329504d5cd6f86e03f5f915630e4
Parents: 236d0ef
Author: jj <[email protected]>
Authored: Sat Jan 10 23:45:55 2015 +0100
Committer: jj <[email protected]>
Committed: Sat Jan 10 23:45:56 2015 +0100

----------------------------------------------------------------------
 .../java/org/qi4j/api/geometry/TFeature.java    |  25 +-
 .../org/qi4j/api/geometry/TGeometryFactory.java |   7 +-
 .../org/qi4j/api/geometry/TMultiLineString.java |  59 ++
 .../java/org/qi4j/api/geometry/TMultiPoint.java |   2 -
 .../java/org/qi4j/api/geometry/TPolygon.java    |   4 +-
 .../geometry/internal/GeometryCollections.java  |  14 +-
 .../qi4j/api/geometry/internal/HasShape.java    |   7 -
 .../qi4j/api/geometry/internal/TGeometry.java   | 131 +++-
 .../api/geometry/internal/TGeometryRoot.java    |   2 +-
 .../qi4j/api/geometry/internal/TLinearRing.java |  29 -
 .../org/qi4j/api/geometry/internal/TShape.java  |  18 +
 .../internal/builders/TFeatureBuilder.java      |   6 +-
 .../builders/TMultiLineStringBuilder.java       |  64 ++
 .../spatial/SpatialQueryExpressions.java        | 104 +--
 .../predicate/ST_ContainsSpecification.java     |  30 -
 .../predicate/ST_DisjointSpecification.java     |  17 +-
 .../predicate/ST_IntersectsSpecification.java   |  22 +-
 .../predicate/ST_WithinSpecification.java       |  32 +-
 .../SpatialPredicatesSpecification.java         |  14 +-
 .../main/java/org/qi4j/api/type/ValueType.java  |   8 +-
 .../qi4j/api/geometry/TGeometryFactoryTest.java |  55 +-
 .../org/qi4j/api/geometry/TGeometryTest.java    |  54 +-
 .../test/indexing/AbstractAnyQueryTest.java     |   2 +-
 .../indexing/AbstractSpatialRegressionTest.java | 489 +++++++++-----
 .../java/org/qi4j/test/indexing/TestData.java   |   1 -
 extensions/indexing-elasticsearch/build.gradle  |   2 +
 .../ElasticSearchConfiguration.java             |   6 -
 .../elasticsearch/ElasticSearchFinder.java      |  40 +-
 .../elasticsearch/ElasticSearchIndexer.java     |  51 +-
 .../elasticsearch/ElasticSearchSupport.java     |   2 -
 .../elasticsearch/cluster/ESClusterSupport.java |   6 +-
 .../spatial/ElasticSearchSpatialFinder.java     |  97 +--
 .../spatial/ElasticSearchSpatialIndexer.java    | 325 ++++++----
 .../configuration/SpatialConfiguration.java     | 122 ++--
 .../SpatialExceptionConfiguration.java          |  15 -
 .../SpatialFunctionsSupportMatrix.java          | 212 +++---
 .../functions/convert/ConvertFinderSupport.java |  75 +--
 .../functions/convert/ST_GeometryFromText.java  |  49 +-
 .../predicates/PredicateFinderSupport.java      |  85 +--
 .../functions/predicates/ST_Disjoint.java       | 150 ++---
 .../functions/predicates/ST_DisjointV2.java     |  96 ---
 .../functions/predicates/ST_DisjointV3.java     | 131 ----
 .../functions/predicates/ST_Intersects.java     |  86 ++-
 .../spatial/functions/predicates/ST_Within.java |  85 ++-
 ...stractElasticSearchSpatialFinderSupport.java |   7 -
 .../AbstractElasticSearchSpatialFunction.java   | 225 +++----
 .../spatial/internal/InternalUtils.java         |  48 +-
 .../spatial/mappings/SpatialIndexMapper.java    |  65 +-
 .../mappings/builders/AbstractBuilder.java      |  37 +-
 .../mappings/builders/GeoPointBuilder.java      |  75 +--
 .../mappings/builders/GeoShapeBuilder.java      |  95 ++-
 .../mappings/builders/MappingQueryBuilder.java  |  14 +
 .../builders/SpatialMappingFactory.java         |  21 +-
 .../spatial/mappings/cache/MappingsCache.java   |  89 +--
 .../mappings/cache/MappingsCachesTable.java     |  27 +-
 .../filesystem/ESFilesystemSupport.java         |  20 +-
 .../internal/AbstractElasticSearchSupport.java  |  55 +-
 .../elasticsearch/memory/ESMemorySupport.java   |   8 +-
 .../ElasticSearchComplexQueryTest.java          |   7 +
 .../elasticsearch/ElasticSearchFinderTest.java  |   7 +
 .../elasticsearch/ElasticSearchQueryTest.java   |  41 +-
 .../index/elasticsearch/ElasticSearchTest.java  |   7 +
 .../index/elasticsearch/ImmenseTermTest.java    |   7 +
 .../spatial/ElasticSearchSpatialBench.java      | 118 +---
 ...cSearchSpatialExtensionClusterQueryTest.java | 640 -------------------
 ...chSpatialQueryTestUsingGeoPointIndexing.java | 159 +++++
 ...chSpatialQueryTestUsingGeoShapeIndexing.java | 140 ++++
 ...earchSpatialQueryTestUsingUsingDefaults.java | 153 +++++
 ...SearchSpatialRegressionQueryClusterTest.java |   1 -
 ...earchSpatialRegressionQueryVariant1Test.java | 131 ----
 ...earchSpatialRegressionQueryVariant2Test.java | 131 ----
 ...lasticSearchConfigurationVariant1.properties |  28 -
 ...lasticSearchConfigurationVariant2.properties |  28 -
 ...SearchConfigurationVariant2Backup.properties |  28 -
 ...archConfigurationVariant2_Backup_.properties |  28 -
 .../ElasticSearchGeoPointIndexing.properties    |  28 +
 .../ElasticSearchGeoShapeIndexing.properties    |  28 +
 .../geojson/internal/TransformationBuilder.java |   4 +-
 .../spatial/v2/assembly/TGeometryAssembler.java |   1 +
 .../conversions/from/GeoJsonFromConverter.java  |   2 +-
 80 files changed, 2444 insertions(+), 2890 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/core/api/src/main/java/org/qi4j/api/geometry/TFeature.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/qi4j/api/geometry/TFeature.java 
b/core/api/src/main/java/org/qi4j/api/geometry/TFeature.java
index 4f89954..f899d0b 100644
--- a/core/api/src/main/java/org/qi4j/api/geometry/TFeature.java
+++ b/core/api/src/main/java/org/qi4j/api/geometry/TFeature.java
@@ -16,14 +16,14 @@ package org.qi4j.api.geometry;
 
 import org.qi4j.api.common.Optional;
 import org.qi4j.api.geometry.internal.TGeometry;
+import org.qi4j.api.geometry.internal.TLinearRing;
 import org.qi4j.api.injection.scope.Structure;
 import org.qi4j.api.injection.scope.This;
 import org.qi4j.api.mixin.Mixins;
 import org.qi4j.api.property.Property;
 import org.qi4j.api.structure.Module;
 
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 
 @Mixins(TFeature.Mixin.class)
@@ -42,6 +42,7 @@ public interface TFeature extends TGeometry {
     TFeature of(TGeometry geometry);
 
     TFeature withProperties(Map<String, List<String>> properties);
+    TFeature addProperty(String name, String value);
 
     TGeometry asGeometry();
 
@@ -56,7 +57,6 @@ public interface TFeature extends TGeometry {
         @This
         TFeature self;
 
-
         public TFeature of(TGeometry geometry) {
             self.geometryType().set(TGEOMETRY_TYPE.FEATURE);
             self.geometry().set(geometry);
@@ -64,11 +64,28 @@ public interface TFeature extends TGeometry {
             return self;
         }
 
-        public TFeature withProperties(Map<String, List<String>> properties) {
+        public TFeature withProperties(Map<String, List<String>> properties)
+        {
             self.properties().set(properties);
             return self;
         }
 
+        public TFeature addProperty(String name, String value)
+        {
+            if (self.properties() == null || self.properties().get() == null 
|| !self.properties().get().containsKey(name))
+            {
+                Map<String, List<String>> properties = new HashMap<>();
+                properties.put(name, Arrays.asList(value) );
+                self.properties().set(properties);
+            }
+            else
+            {
+                self.properties().get().get(name).add(value);
+            }
+            return self;
+        }
+
+
         public boolean isEmpty() {
             return (self.geometry() == null) || (self.geometry().get() == 
null) || (self.geometry().get().isEmpty()) ? true : false;
         }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/core/api/src/main/java/org/qi4j/api/geometry/TGeometryFactory.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/qi4j/api/geometry/TGeometryFactory.java 
b/core/api/src/main/java/org/qi4j/api/geometry/TGeometryFactory.java
index 6a2ea39..33b1709 100644
--- a/core/api/src/main/java/org/qi4j/api/geometry/TGeometryFactory.java
+++ b/core/api/src/main/java/org/qi4j/api/geometry/TGeometryFactory.java
@@ -39,14 +39,17 @@ public class TGeometryFactory {
         return new TLinearRingBuilder(module);
     }
 
-    public static TLineStringBuilder TlineString(Module module) {
+    public static TLineStringBuilder TLineString(Module module) {
         return new TLineStringBuilder(module);
     }
 
+    public static TMultiLineStringBuilder TMultiLineString(Module module)
+    {
+        return new TMultiLineStringBuilder(module);
+    }
     public static TPolygonBuilder TPolygon(Module module) {
         return new TPolygonBuilder(module);
     }
-
     public static TMultiPolygonsBuilder TMultiPolygon(Module module) {
         return new TMultiPolygonsBuilder(module);
     }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/core/api/src/main/java/org/qi4j/api/geometry/TMultiLineString.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/qi4j/api/geometry/TMultiLineString.java 
b/core/api/src/main/java/org/qi4j/api/geometry/TMultiLineString.java
new file mode 100644
index 0000000..9b12a3f
--- /dev/null
+++ b/core/api/src/main/java/org/qi4j/api/geometry/TMultiLineString.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2014, Jiri Jetmar. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.qi4j.api.geometry;
+
+import org.qi4j.api.geometry.internal.GeometryCollections;
+import org.qi4j.api.geometry.internal.TGeometry;
+import org.qi4j.api.injection.scope.Structure;
+import org.qi4j.api.injection.scope.This;
+import org.qi4j.api.mixin.Mixins;
+import org.qi4j.api.structure.Module;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Mixins(TMultiLineString.Mixin.class)
+public interface TMultiLineString extends GeometryCollections {
+
+    TMultiLineString of(TLineString... lines);
+    TMultiLineString of(List<TLineString> lines);
+
+    public abstract class Mixin extends GeometryCollections.Mixin implements 
TMultiLineString {
+        @Structure
+        Module module;
+
+        @This
+        TMultiLineString self;
+
+        public TMultiLineString of(List<TLineString> lines) {
+            of(lines.toArray(new TLineString[lines.size()]));
+            return self;
+        }
+        public TMultiLineString of(TLineString... lines) {
+            self.geometryType().set(TGEOMETRY_TYPE.MULTILINESTRING);
+            init();
+            List<TGeometry> l = new ArrayList<>();
+
+            for (TLineString p : lines) {
+                l.add(p);
+            }
+            if (self.isEmpty())
+                self.geometries().set(l);
+            else
+                self.geometries().get().addAll(l);
+            return self;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/core/api/src/main/java/org/qi4j/api/geometry/TMultiPoint.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/qi4j/api/geometry/TMultiPoint.java 
b/core/api/src/main/java/org/qi4j/api/geometry/TMultiPoint.java
index f20b3ab..2a85011 100644
--- a/core/api/src/main/java/org/qi4j/api/geometry/TMultiPoint.java
+++ b/core/api/src/main/java/org/qi4j/api/geometry/TMultiPoint.java
@@ -67,8 +67,6 @@ public interface TMultiPoint extends GeometryCollections {
             else
                 self.geometries().get().addAll(l);
 
-            // self.type().set(TGeomRoot.TGEOMETRY.LINESTRING);
-
             return self;
         }
 

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/core/api/src/main/java/org/qi4j/api/geometry/TPolygon.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/qi4j/api/geometry/TPolygon.java 
b/core/api/src/main/java/org/qi4j/api/geometry/TPolygon.java
index 73b1020..26a900b 100644
--- a/core/api/src/main/java/org/qi4j/api/geometry/TPolygon.java
+++ b/core/api/src/main/java/org/qi4j/api/geometry/TPolygon.java
@@ -16,7 +16,7 @@ package org.qi4j.api.geometry;
 
 import org.qi4j.api.common.Optional;
 import org.qi4j.api.geometry.internal.Coordinate;
-import org.qi4j.api.geometry.internal.HasShape;
+import org.qi4j.api.geometry.internal.TShape;
 import org.qi4j.api.geometry.internal.TGeometry;
 import org.qi4j.api.geometry.internal.TLinearRing;
 import org.qi4j.api.injection.scope.Structure;
@@ -29,7 +29,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 @Mixins(TPolygon.Mixin.class)
-public interface TPolygon extends HasShape, TGeometry {
+public interface TPolygon extends TShape, TGeometry {
 
     Property<TLinearRing> shell();
 

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/core/api/src/main/java/org/qi4j/api/geometry/internal/GeometryCollections.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/qi4j/api/geometry/internal/GeometryCollections.java
 
b/core/api/src/main/java/org/qi4j/api/geometry/internal/GeometryCollections.java
index 081703b..e99831c 100644
--- 
a/core/api/src/main/java/org/qi4j/api/geometry/internal/GeometryCollections.java
+++ 
b/core/api/src/main/java/org/qi4j/api/geometry/internal/GeometryCollections.java
@@ -26,10 +26,9 @@ import java.util.List;
 public interface GeometryCollections extends TGeometry {
 
     Property<List<TGeometry>> geometries();
-
-
     TGeometry getGeometryN(int n);
 
+
     int getNumGeometries();
 
     boolean isEmpty();
@@ -42,17 +41,18 @@ public interface GeometryCollections extends TGeometry {
 
         protected void init() {
 
-            if (self.geometries().get() == null) {
-
+            if (self.geometries().get() == null)
+            {
                 List<TGeometry> geometries = new ArrayList<>();
                 self.geometries().set(geometries);
-                // self.type().set(TGeomRoot.TGEOMETRY.POINT);
             }
         }
 
         public boolean isEmpty() {
-            for (int i = 0; i < self.geometries().get().size(); i++) {
-                if (!self.geometries().get().get(i).isEmpty()) {
+            for (int i = 0; i < self.geometries().get().size(); i++)
+            {
+                if (!self.geometries().get().get(i).isEmpty())
+                {
                     return false;
                 }
             }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/core/api/src/main/java/org/qi4j/api/geometry/internal/HasShape.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/qi4j/api/geometry/internal/HasShape.java 
b/core/api/src/main/java/org/qi4j/api/geometry/internal/HasShape.java
deleted file mode 100644
index 92d43c8..0000000
--- a/core/api/src/main/java/org/qi4j/api/geometry/internal/HasShape.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.qi4j.api.geometry.internal;
-
-/**
- * Created by jj on 02.12.14.
- */
-public interface HasShape extends TGeometry {
-}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/core/api/src/main/java/org/qi4j/api/geometry/internal/TGeometry.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/qi4j/api/geometry/internal/TGeometry.java 
b/core/api/src/main/java/org/qi4j/api/geometry/internal/TGeometry.java
index 28b7974..5138596 100644
--- a/core/api/src/main/java/org/qi4j/api/geometry/internal/TGeometry.java
+++ b/core/api/src/main/java/org/qi4j/api/geometry/internal/TGeometry.java
@@ -14,8 +14,11 @@
 
 package org.qi4j.api.geometry.internal;
 
+import com.vividsolutions.jts.geom.LineString;
+import com.vividsolutions.jts.geom.MultiPoint;
 import org.qi4j.api.common.Optional;
 import org.qi4j.api.common.UseDefaults;
+import org.qi4j.api.geometry.*;
 import org.qi4j.api.injection.scope.Structure;
 import org.qi4j.api.injection.scope.This;
 import org.qi4j.api.mixin.Mixins;
@@ -25,29 +28,48 @@ import org.qi4j.api.structure.Module;
 @Mixins(TGeometry.Mixin.class)
 public interface TGeometry extends TGeometryRoot {
 
-    // @Optional
     Property<TGEOMETRY_TYPE> geometryType();
 
-    // Property<TGEOM_TYPE> type1();
-
     @Optional
     @UseDefaults
     Property<String> CRS();
 
 
     String getCRS();
-
     void setCRS(String crs);
 
-
     abstract Coordinate[] getCoordinates();
-
     abstract int getNumPoints();
-
     abstract boolean isEmpty();
 
     TGEOMETRY_TYPE getType();
 
+    boolean isPoint();
+    boolean isPoint(TGeometry tGeometry);
+
+    boolean isMultiPoint();
+    boolean isMultiPoint(TGeometry tGeometry);
+
+    boolean isLineString();
+    boolean isLineString(TGeometry tGeometry);
+
+    boolean isMultiLineString();
+    boolean isMultiLineString(TGeometry tGeometry);
+
+    boolean isPolygon();
+    boolean isPolygon(TGeometry tGeometry);
+
+    boolean isMultiPolygon();
+    boolean isMultiPolygon(TGeometry tGeometry);
+
+    boolean isFeature();
+    boolean isFeature(TGeometry tGeometry);
+
+    boolean isFeatureCollection();
+    boolean isFeatureCollection(TGeometry tGeometry);
+
+    boolean isGeometry();
+    boolean isGeometry(Object tGeometry);
 
     public abstract class Mixin implements TGeometry {
 
@@ -78,8 +100,99 @@ public interface TGeometry extends TGeometryRoot {
             throw new RuntimeException("Should never be called");
         }
 
-        public TGEOMETRY_TYPE getType() {
-            return self.geometryType().get();
+        public TGEOMETRY_TYPE getType()
+        {
+            // "strong typing" - type & instanceOf must match
+            switch(self.geometryType().get())
+            {
+                case POINT              : return self.isPoint()             == 
false ? TGEOMETRY_TYPE.INVALID:TGEOMETRY_TYPE.POINT;
+                case MULTIPOINT         : return self.isMultiPoint()        == 
false ? TGEOMETRY_TYPE.INVALID:TGEOMETRY_TYPE.MULTIPOINT;
+                case LINESTRING         : return self.isLineString()        == 
false ? TGEOMETRY_TYPE.INVALID:TGEOMETRY_TYPE.LINESTRING;
+                case MULTILINESTRING    : return self.isMultiLineString()   == 
false ? TGEOMETRY_TYPE.INVALID:TGEOMETRY_TYPE.MULTILINESTRING;
+                case POLYGON            : return self.isPolygon()           == 
false ? TGEOMETRY_TYPE.INVALID:TGEOMETRY_TYPE.POLYGON;
+                case MULTIPOLYGON       : return self.isMultiPolygon()      == 
false ? TGEOMETRY_TYPE.INVALID:TGEOMETRY_TYPE.MULTIPOLYGON;
+                case FEATURE            : return self.isFeature()           == 
false ? TGEOMETRY_TYPE.INVALID:TGEOMETRY_TYPE.FEATURE;
+                case FEATURECOLLECTION  : return self.isFeatureCollection() == 
false ? TGEOMETRY_TYPE.INVALID:TGEOMETRY_TYPE.FEATURECOLLECTION;
+                default                 : return TGEOMETRY_TYPE.INVALID;
+            }
+        }
+
+        public boolean isPoint()
+        {
+            return self instanceof TPoint ? true:false;
+        }
+        public boolean isPoint(TGeometry tGeometry)
+        {
+            return tGeometry instanceof TPoint ? true:false;
+        }
+
+        public boolean isMultiPoint()
+        {
+            return self instanceof TMultiPoint ? true:false;
+        }
+        public boolean isMultiPoint(TGeometry tGeometry)
+        {
+            return tGeometry instanceof TMultiPoint ? true:false;
+        }
+
+        public boolean isLineString()
+        {
+            return self instanceof TLineString ? true:false;
+        }
+        public boolean isLineString(TGeometry tGeometry)
+        {
+            return tGeometry instanceof TLineString ? true:false;
+        }
+
+        public boolean isMultiLineString()
+        {
+            return self instanceof TMultiLineString ? true:false;
+        }
+        public boolean isMultiLineString(TGeometry tGeometry)
+        {
+            return tGeometry instanceof TMultiLineString ? true:false;
+        }
+        public boolean isPolygon()
+        {
+            return self instanceof TPolygon ? true:false;
+        }
+        public boolean isPolygon(TGeometry tGeometry)
+        {
+            return tGeometry instanceof TPolygon ? true:false;
+        }
+        public boolean isMultiPolygon()
+        {
+            return self instanceof TMultiPolygon ? true:false;
+        }
+        public boolean isMultiPolygon(TGeometry tGeometry)
+        {
+            return tGeometry instanceof TMultiPolygon ? true:false;
+        }
+        public boolean isFeature()
+        {
+            return self instanceof TFeature ? true:false;
+        }
+        public boolean isFeature(TGeometry tGeometry)
+        {
+            return tGeometry instanceof TFeature ? true:false;
+        }
+
+        public boolean isFeatureCollection()
+        {
+            return self instanceof TFeatureCollection ? true:false;
+        }
+        public boolean isFeatureCollection(TGeometry tGeometry)
+        {
+            return tGeometry instanceof TFeatureCollection ? true:false;
+        }
+
+        public boolean isGeometry()
+        {
+            return self instanceof TGeometry ? true:false;
+        }
+        public boolean isGeometry(Object tGeometry)
+        {
+            return tGeometry instanceof TGeometry ? true:false;
         }
 
     }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/core/api/src/main/java/org/qi4j/api/geometry/internal/TGeometryRoot.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/qi4j/api/geometry/internal/TGeometryRoot.java 
b/core/api/src/main/java/org/qi4j/api/geometry/internal/TGeometryRoot.java
index e06ad9c..25731c0 100644
--- a/core/api/src/main/java/org/qi4j/api/geometry/internal/TGeometryRoot.java
+++ b/core/api/src/main/java/org/qi4j/api/geometry/internal/TGeometryRoot.java
@@ -21,7 +21,7 @@ import org.qi4j.api.value.ValueComposite;
  */
 public interface TGeometryRoot extends ValueComposite {
 
-    public static enum TGEOMETRY_TYPE {POINT, MULTIPOINT, LINESTRING, 
MULTILINESTRING, POLYGON, MULTIPOLYGON, FEATURE, FEATURECOLLECTION}
+    public static enum TGEOMETRY_TYPE {POINT, MULTIPOINT, LINESTRING, 
MULTILINESTRING, POLYGON, MULTIPOLYGON, FEATURE, FEATURECOLLECTION, INVALID}
 
 }
 

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/core/api/src/main/java/org/qi4j/api/geometry/internal/TLinearRing.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/qi4j/api/geometry/internal/TLinearRing.java 
b/core/api/src/main/java/org/qi4j/api/geometry/internal/TLinearRing.java
index 63261e7..87fc414 100644
--- a/core/api/src/main/java/org/qi4j/api/geometry/internal/TLinearRing.java
+++ b/core/api/src/main/java/org/qi4j/api/geometry/internal/TLinearRing.java
@@ -21,42 +21,13 @@ import org.qi4j.api.mixin.Mixins;
 @Mixins(TLinearRing.Mixin.class)
 public interface TLinearRing extends TLineString {
 
-    // TLinearRing of(TPoint... points);
-    // TLinearRing of(List<TPoint> points);
-    // TLinearRing xy(double x, double y);
     boolean isValid();
 
     public abstract class Mixin extends TLineString.Mixin implements 
TLinearRing //, TLineString
     {
-
         @This
         TLinearRing self;
 
-        /**
-         * @Override public TLinearRing of(TPoint... points)
-         * {
-         * super.of(points);
-         * <p/>
-         * // self.of(points);
-         * <p/>
-         * return self;
-         * }
-         * @Override public TLinearRing of(List<TPoint> points)
-         * {
-         * of(points.toArray(new TPoint[points.size()]));
-         * return self;
-         * }
-         * @Override public TLinearRing xy(double x, double y) {
-         * super.xy(x,y);
-         * // self.xy(x,y);
-         * return self;
-         * }
-         */
-
-        // public Coordinate[] getCoordinates()
-        //  {
-        //    return null;
-        //}
         @Override
         public boolean isValid() {
             if (self.getStartPoint() == null || self.getEndPoint() == null) 
return false;

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/core/api/src/main/java/org/qi4j/api/geometry/internal/TShape.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/qi4j/api/geometry/internal/TShape.java 
b/core/api/src/main/java/org/qi4j/api/geometry/internal/TShape.java
new file mode 100644
index 0000000..7c0f8da
--- /dev/null
+++ b/core/api/src/main/java/org/qi4j/api/geometry/internal/TShape.java
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2014, Jiri Jetmar. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.qi4j.api.geometry.internal;
+
+public interface TShape extends TGeometry {
+}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/core/api/src/main/java/org/qi4j/api/geometry/internal/builders/TFeatureBuilder.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/qi4j/api/geometry/internal/builders/TFeatureBuilder.java
 
b/core/api/src/main/java/org/qi4j/api/geometry/internal/builders/TFeatureBuilder.java
index 4306851..58932e2 100644
--- 
a/core/api/src/main/java/org/qi4j/api/geometry/internal/builders/TFeatureBuilder.java
+++ 
b/core/api/src/main/java/org/qi4j/api/geometry/internal/builders/TFeatureBuilder.java
@@ -38,11 +38,15 @@ public class TFeatureBuilder {
         return this;
     }
 
+    public TFeatureBuilder addProperty(String name, String value)
+    {
+        geometry.addProperty(name, value);
+        return this;
+    }
 
     public TFeature geometry() {
         return geometry;
     }
-
     public TFeature geometry(int srid) {
         return geometry();
     }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/core/api/src/main/java/org/qi4j/api/geometry/internal/builders/TMultiLineStringBuilder.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/qi4j/api/geometry/internal/builders/TMultiLineStringBuilder.java
 
b/core/api/src/main/java/org/qi4j/api/geometry/internal/builders/TMultiLineStringBuilder.java
new file mode 100644
index 0000000..9862301
--- /dev/null
+++ 
b/core/api/src/main/java/org/qi4j/api/geometry/internal/builders/TMultiLineStringBuilder.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2014, Jiri Jetmar. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.qi4j.api.geometry.internal.builders;
+
+import org.qi4j.api.geometry.TLineString;
+import org.qi4j.api.geometry.TMultiLineString;
+import org.qi4j.api.structure.Module;
+
+import java.util.List;
+
+/**
+ * Created by jj on 26.11.14.
+ */
+public class TMultiLineStringBuilder {
+
+    private Module module;
+    private TMultiLineString geometry;
+
+
+    public TMultiLineStringBuilder(Module module) {
+        this.module = module;
+        geometry = module.newValueBuilder(TMultiLineString.class).prototype();
+    }
+
+
+    public TMultiLineStringBuilder points(double[][][] points) {
+        for (double xy[][] : points) {
+            if (xy.length < 2) return null;
+            // geometry.xy(xy[0], xy[1]);
+        }
+        return this;
+    }
+
+    public TMultiLineStringBuilder of(List<TLineString> lines) {
+        geometry.of(lines);
+        return this;
+    }
+
+    public TMultiLineStringBuilder of(TLineString... lines) {
+        geometry.of(lines);
+        return this;
+    }
+
+
+    public TMultiLineString geometry() {
+        return geometry;
+    }
+
+    public TMultiLineString geometry(int srid) {
+        return geometry();
+    }
+}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/SpatialQueryExpressions.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/SpatialQueryExpressions.java
 
b/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/SpatialQueryExpressions.java
index f180928..c86a090 100644
--- 
a/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/SpatialQueryExpressions.java
+++ 
b/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/SpatialQueryExpressions.java
@@ -1,9 +1,8 @@
 package org.qi4j.api.query.grammar.extensions.spatial;
 
-import org.qi4j.api.composite.Composite;
 import org.qi4j.api.geometry.TPoint;
 import org.qi4j.api.geometry.TUnit;
-import org.qi4j.api.geometry.internal.HasShape;
+import org.qi4j.api.geometry.internal.TShape;
 import org.qi4j.api.geometry.internal.TGeometry;
 import org.qi4j.api.property.Property;
 import org.qi4j.api.query.QueryExpressions;
@@ -14,105 +13,66 @@ import 
org.qi4j.api.query.grammar.extensions.spatial.predicate.ST_IntersectsSpec
 import 
org.qi4j.api.query.grammar.extensions.spatial.predicate.ST_WithinSpecification;
 import org.qi4j.functional.Specification;
 
-/**
- * Created by jakes on 2/8/14.
- */
+
 public final class SpatialQueryExpressions extends QueryExpressions {
 
-    // valid for TPoint values
-    public static <T extends TGeometry> ST_WithinSpecification<TGeometry> 
ST_Within( Property<T> geometry1, TPoint value, double distance, TUnit unit) // 
T value )
+    // ST_Within
+    public static <T extends TGeometry> ST_WithinSpecification<TGeometry> 
ST_Within( Property<T> geometry, TPoint param, double distance, TUnit unit)
     {
-        return new ST_WithinSpecification( property(geometry1), value, 
distance, unit);
+        return new ST_WithinSpecification( property(geometry), param, 
distance, unit);
     }
 
-    public static <T extends TGeometry>  ST_WithinSpecification<TGeometry> 
ST_Within( Property<T> geometry1, HasShape value)
+    public static <T extends TGeometry>  ST_WithinSpecification<TGeometry> 
ST_Within( Property<T> geometry, TShape param)
     {
-       return new ST_WithinSpecification( property(geometry1), value);
+       return new ST_WithinSpecification( property(geometry), param);
     }
 
-    public static <T extends TGeometry> ST_WithinSpecification<TGeometry> 
ST_Within( Property<T> geometry1, Specification<SpatialConvertSpecification> 
operator, double distance, TUnit unit )
-    {
-        return new ST_WithinSpecification( property(geometry1), operator, 
distance, unit);
-    }
-/**
-    public static <T extends TGeometry> ST_WithinSpecification<TGeometry> 
ST_Within( Property<T> geometry1, Specification<SpatialConvertSpecification> 
operator)
+    public static <T extends TGeometry> ST_WithinSpecification<TGeometry> 
ST_Within( Property<T> geometry, Specification<SpatialConvertSpecification> 
operator, double distance, TUnit unit )
     {
-        return new ST_WithinSpecification( property(geometry1), operator;
+        return new ST_WithinSpecification( property(geometry), operator, 
distance, unit);
     }
-*/
-    public static <T extends TGeometry> ST_WithinSpecification<TGeometry> 
ST_Within( Property<T> geometry1, Specification<SpatialConvertSpecification> 
operator)
-    {
-        return new ST_WithinSpecification( property(geometry1), operator);
-    }
-
 
-
-    public static <T extends TGeometry> ST_WithinSpecification<TGeometry> 
ST_Within(  Specification<SpatialConvertSpecification> operator) // T value )
+    public static <T extends TGeometry> ST_WithinSpecification<TGeometry> 
ST_Within( Property<T> geometry, Specification<SpatialConvertSpecification> 
operator)
     {
-        // return new ST_WithinSpecification<TGeometry>( property(geometry1), 
operator);
-        return null;
+        return new ST_WithinSpecification( property(geometry), operator);
     }
 
-
-    public static <T extends TGeometry> ST_DisjointSpecification<TGeometry> 
ST_Disjoint( Property<T> geometry1, Specification<SpatialConvertSpecification> 
operator, long distance )
+    // ST_Disjoint
+    public static <T extends TGeometry> ST_DisjointSpecification<TGeometry> 
ST_Disjoint( Property<T> geometry, Specification<SpatialConvertSpecification> 
operator, long distance )
     {
-        return new ST_DisjointSpecification( property(geometry1), operator, 
distance);
+        return new ST_DisjointSpecification( property(geometry), operator, 
distance);
     }
 
-    public static <T extends TGeometry> ST_DisjointSpecification<TGeometry> 
ST_Disjoint( Property<T> geometry1, TPoint value, double distance, TUnit unit) 
// T value )
+    public static <T extends TGeometry> ST_DisjointSpecification<TGeometry> 
ST_Disjoint( Property<T> geometry, TPoint param, double distance, TUnit unit)
     {
-        return new ST_DisjointSpecification( property(geometry1), value, 
distance, unit);
+        return new ST_DisjointSpecification( property(geometry), param, 
distance, unit);
     }
 
-    public static <T extends TGeometry>  ST_DisjointSpecification<TGeometry> 
ST_Disjoint( Property<T> geometry1, HasShape value)
+    public static <T extends TGeometry>  ST_DisjointSpecification<TGeometry> 
ST_Disjoint( Property<T> geometry, TShape param)
     {
-        // return new ST_WithinSpecification( property(geometry1), value);
-        return new ST_DisjointSpecification(property(geometry1), value);
+        return new ST_DisjointSpecification(property(geometry), param);
     }
 
 
-    public static <T extends TGeometry> ST_IntersectsSpecification<TGeometry> 
ST_Intersects( Property<T> geometry1, 
Specification<SpatialConvertSpecification> operator, long distance )
-    {
-        return new ST_IntersectsSpecification( property(geometry1), operator, 
distance);
-    }
-
-    public static <T extends TGeometry> ST_IntersectsSpecification<TGeometry> 
ST_Intersects( Property<T> geometry1, TPoint value, double distance, TUnit 
unit) // T value )
+    // ST_Intersects
+    public static <T extends TGeometry> ST_IntersectsSpecification<TGeometry> 
ST_Intersects( Property<T> geometry, Specification<SpatialConvertSpecification> 
operator, long distance )
     {
-        return new ST_IntersectsSpecification( property(geometry1), value, 
distance, unit);
+        return new ST_IntersectsSpecification( property(geometry), operator, 
distance);
     }
 
-    public static <T extends TGeometry>  ST_IntersectsSpecification<TGeometry> 
ST_Intersects( Property<T> geometry1, HasShape value)
+    public static <T extends TGeometry> ST_IntersectsSpecification<TGeometry> 
ST_Intersects( Property<T> geometry, TPoint value, double distance, TUnit unit)
     {
-        // return new ST_WithinSpecification( property(geometry1), value);
-        return new ST_IntersectsSpecification(property(geometry1), value);
+        return new ST_IntersectsSpecification( property(geometry), value, 
distance, unit);
     }
 
-
-
-    /**
-    public static <TGeometry> ST_GeomFromTextSpecification<TGeometry> 
ST_GeomFromText( Property<TGeometry> geometry1, 
Specification<SpatialConvertSpecification> operator) // T value )
+    public static <T extends TGeometry>  ST_IntersectsSpecification<TGeometry> 
ST_Intersects( Property<T> geometry, TShape param)
     {
-        return new ST_GeomFromTextSpecification<TGeometry>( 
property(geometry1), operator);
+        return new ST_IntersectsSpecification(property(geometry), param);
     }
-     */
-
 
-   //  PropertyFunction<T> property
-
-//    public static <TGeometry> ST_PointFromTextSpecification<TGeometry> 
ST_PointFromText( String WKT, int a)
-//    {
-//        // return null;
-//        return new ST_PointFromTextSpecification<TGeometry>( WKT, a);
-//    }
-
-//    public static TGeomPoint ST_PointFromText( String WKT, int a) throws 
ParseException
-//    {
-//        // return null;
-//        return (TGeomPoint)new ST_PointFromTextSpecification<TGeometry>( 
WKT, a).convert();
-//        // return null;
-//    }
 
 
+    // ST_GeometryFromText
     public static Specification<SpatialConvertSpecification> 
ST_GeometryFromText(String WKT)
     {
         return ST_GeometryFromText( WKT, null);
@@ -123,16 +83,4 @@ public final class SpatialQueryExpressions extends 
QueryExpressions {
         return new ST_GeomFromTextSpecification( WKT, crs);
     }
 
-
-    /**
-    public static  ST_GeomFromTextSpecification<TGeometry> 
ST_GeomFromText(String WKT, int a) throws ParseException
-    {
-        // return null;
-        return new ST_GeomFromTextSpecification<TGeometry>( WKT, a);
-        // return null;
-    }
-     */
-
-
-
 }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/ST_ContainsSpecification.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/ST_ContainsSpecification.java
 
b/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/ST_ContainsSpecification.java
deleted file mode 100644
index 8ad961f..0000000
--- 
a/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/ST_ContainsSpecification.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.qi4j.api.query.grammar.extensions.spatial.predicate;
-
-import org.qi4j.api.geometry.internal.TGeometry;
-import org.qi4j.api.query.grammar.PropertyFunction;
-
-/**
- * ST_Within Specification.
- *
- *
- */
-public class ST_ContainsSpecification<T extends TGeometry>
-    extends SpatialPredicatesSpecification<TGeometry>
-{
-    public ST_ContainsSpecification(PropertyFunction<TGeometry> property, 
TGeometry value)
-    {
-        super( property, value );
-    }
-
-    @Override
-    protected boolean compare( TGeometry value )
-    {
-        return value.equals( this.value );
-    }
-
-    @Override
-    public String toString()
-    {
-        return property.toString() + " is within " + value.toString();
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/ST_DisjointSpecification.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/ST_DisjointSpecification.java
 
b/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/ST_DisjointSpecification.java
index 06dfbd2..b3c95a3 100644
--- 
a/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/ST_DisjointSpecification.java
+++ 
b/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/ST_DisjointSpecification.java
@@ -16,9 +16,9 @@ public class ST_DisjointSpecification<T extends TGeometry>
     private double distance;
     private TUnit unit;
 
-    public ST_DisjointSpecification(PropertyFunction<T> property, TGeometry 
value)
+    public ST_DisjointSpecification(PropertyFunction<T> property, TGeometry 
param)
     {
-        super( property, value );
+        super( property, param );
     }
 
     public ST_DisjointSpecification(PropertyFunction<T> property, 
Specification<SpatialConvertSpecification> operator, long distance)
@@ -33,24 +33,15 @@ public class ST_DisjointSpecification<T extends TGeometry>
         this.unit       = unit;
     }
 
-    public ST_DisjointSpecification(PropertyFunction<T> property, 
Specification<SpatialConvertSpecification> operator, Variable variable)
-    {
-        super( property, operator );
-    }
-
-    public ST_DisjointSpecification(PropertyFunction<T> property, 
Specification<SpatialConvertSpecification> operator)
-    {
-        super( property, operator );
-    }
 
     public double getDistance() { return distance; }
     public TUnit  getUnit() { return unit; }
 
 
    @Override
-    protected boolean compare( TGeometry value )
+    protected boolean compare( TGeometry param )
     {
-        return value.equals( this.value );
+        return param.equals( this.param );
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/ST_IntersectsSpecification.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/ST_IntersectsSpecification.java
 
b/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/ST_IntersectsSpecification.java
index e14d553..b7f40c4 100644
--- 
a/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/ST_IntersectsSpecification.java
+++ 
b/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/ST_IntersectsSpecification.java
@@ -16,9 +16,9 @@ public class ST_IntersectsSpecification<T extends TGeometry>
     private double distance;
     private TUnit unit;
 
-    public ST_IntersectsSpecification(PropertyFunction<T> property, TGeometry 
value)
+    public ST_IntersectsSpecification(PropertyFunction<T> property, TGeometry 
param)
     {
-        super( property, value );
+        super( property, param );
     }
 
     public ST_IntersectsSpecification(PropertyFunction<T> property, 
Specification<SpatialConvertSpecification> operator, long distance)
@@ -26,36 +26,28 @@ public class ST_IntersectsSpecification<T extends TGeometry>
         super( property, operator );
     }
 
-    public ST_IntersectsSpecification(PropertyFunction<T> property, TPoint 
value, double distance, TUnit unit)
+    public ST_IntersectsSpecification(PropertyFunction<T> property, TPoint 
param, double distance, TUnit unit)
     {
-        super( property, value );
+        super( property, param );
         this.distance   = distance;
         this.unit       = unit;
     }
 
-    public ST_IntersectsSpecification(PropertyFunction<T> property, 
Specification<SpatialConvertSpecification> operator, Variable variable)
-    {
-        super( property, operator );
-    }
 
-    public ST_IntersectsSpecification(PropertyFunction<T> property, 
Specification<SpatialConvertSpecification> operator)
-    {
-        super( property, operator );
-    }
 
     public double getDistance() { return distance; }
     public TUnit  getUnit() { return unit; }
 
 
    @Override
-    protected boolean compare( TGeometry value )
+    protected boolean compare( TGeometry param )
     {
-        return value.equals( this.value );
+        return param.equals( this.param );
     }
 
     @Override
     public String toString()
     {
-        return "ST_DisjointSpecification"; // property.toString() + " is 
within " + value.toString();
+        return "ST_IntersectsSpecification"; // property.toString() + " is 
within " + value.toString();
     }
 }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/ST_WithinSpecification.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/ST_WithinSpecification.java
 
b/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/ST_WithinSpecification.java
index 3b67dad..cd28a85 100644
--- 
a/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/ST_WithinSpecification.java
+++ 
b/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/ST_WithinSpecification.java
@@ -8,9 +8,7 @@ import org.qi4j.api.query.grammar.Variable;
 import 
org.qi4j.api.query.grammar.extensions.spatial.convert.SpatialConvertSpecification;
 import org.qi4j.functional.Specification;
 
-/**
- * ST_Within Specification.
- */
+
 public class ST_WithinSpecification<T extends TGeometry>
     extends SpatialPredicatesSpecification<T>
 {
@@ -18,14 +16,14 @@ public class ST_WithinSpecification<T extends TGeometry>
     private double distance;
     private TUnit unit;
 
-    public ST_WithinSpecification(PropertyFunction<T> property, TGeometry 
value)
+    public ST_WithinSpecification(PropertyFunction<T> property, TGeometry 
param)
     {
-        super( property, value );
+        super( property, param );
     }
 
-    public ST_WithinSpecification(PropertyFunction<T> property, TPoint value, 
double distance, TUnit unit)
+    public ST_WithinSpecification(PropertyFunction<T> property, TPoint param, 
double distance, TUnit unit)
     {
-        super( property, value );
+        super( property, param );
         this.distance   = distance;
         this.unit       = unit;
     }
@@ -37,10 +35,6 @@ public class ST_WithinSpecification<T extends TGeometry>
         this.unit       = unit;
     }
 
-    public ST_WithinSpecification(PropertyFunction<T> property, 
Specification<SpatialConvertSpecification> operator, Variable variable)
-    {
-        super( property, operator );
-    }
 
     public ST_WithinSpecification(PropertyFunction<T> property, 
Specification<SpatialConvertSpecification> operator)
     {
@@ -52,14 +46,24 @@ public class ST_WithinSpecification<T extends TGeometry>
 
 
    @Override
-    protected boolean compare( TGeometry value )
+    protected boolean compare( TGeometry param )
     {
-        return value.equals( this.value );
+        return param.equals( this.param );
     }
 
     @Override
     public String toString()
     {
-        return "ST_WithinSpecification"; // property.toString() + " is within 
" + value.toString();
+        StringBuffer spec = new StringBuffer();
+        spec.append("ST_WITHIN").append("( 
").append(property.toString()).append(" IS WITHIN ");
+        spec.append(param.toString());
+
+        if (distance > 0)
+        {
+            spec.append(" WITH RADIUS ").append(distance).append(" 
").append(unit);
+        }
+
+        spec.append(" ) ");
+        return spec.toString();
     }
 }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/SpatialPredicatesSpecification.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/SpatialPredicatesSpecification.java
 
b/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/SpatialPredicatesSpecification.java
index 7031145..9d3dfec 100644
--- 
a/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/SpatialPredicatesSpecification.java
+++ 
b/core/api/src/main/java/org/qi4j/api/query/grammar/extensions/spatial/predicate/SpatialPredicatesSpecification.java
@@ -17,13 +17,13 @@ public abstract class SpatialPredicatesSpecification<T 
extends TGeometry>
     extends ExpressionSpecification
 {
     protected final PropertyFunction<T> property;
-    protected final TGeometry value;
+    protected final TGeometry param;
     protected final Specification<SpatialConvertSpecification> operator;
 
-    public SpatialPredicatesSpecification(PropertyFunction<T> property, 
TGeometry value)
+    public SpatialPredicatesSpecification(PropertyFunction<T> property, 
TGeometry param)
     {
         this.property = property;
-        this.value = value;
+        this.param = param;
         this.operator = null;
     }
 
@@ -31,7 +31,7 @@ public abstract class SpatialPredicatesSpecification<T 
extends TGeometry>
     {
         this.property = property;
         this.operator = operator;
-        this.value    = null;
+        this.param    = null;
     }
 
     public PropertyFunction<T> property()
@@ -42,8 +42,6 @@ public abstract class SpatialPredicatesSpecification<T 
extends TGeometry>
     @Override
     public final boolean satisfiedBy( Composite item )
     {
-        System.out.println("SpatialPredicatesSpecification::satisfiedBy(" + 
item + ")");
-
         try
         {
             Property<T> prop = property.map( item );
@@ -69,9 +67,9 @@ public abstract class SpatialPredicatesSpecification<T 
extends TGeometry>
 
     protected abstract boolean compare( TGeometry value );
 
-    public TGeometry value()
+    public TGeometry param()
     {
-        return value;
+        return param;
     }
 
     public Specification<SpatialConvertSpecification> operator()

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/core/api/src/main/java/org/qi4j/api/type/ValueType.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/qi4j/api/type/ValueType.java 
b/core/api/src/main/java/org/qi4j/api/type/ValueType.java
index 0700337..8c74442 100644
--- a/core/api/src/main/java/org/qi4j/api/type/ValueType.java
+++ b/core/api/src/main/java/org/qi4j/api/type/ValueType.java
@@ -108,7 +108,7 @@ public class ValueType
         }
         return false;
     }
-    public static boolean isGeometryValue(Object object)
+    public static boolean isGeometricValue(Object object)
     {
         NullArgumentException.validateNotNull( "object", object );
         if( object instanceof TGeometry)
@@ -118,12 +118,6 @@ public class ValueType
         return false;
     }
 
-    public static boolean isGeometryValue(Class<?> type)
-    {
-
-        return false;
-    }
-
     protected final Iterable<Class<?>> types;
 
     public ValueType( Class<?> type )

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/core/api/src/test/java/org/qi4j/api/geometry/TGeometryFactoryTest.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/test/java/org/qi4j/api/geometry/TGeometryFactoryTest.java 
b/core/api/src/test/java/org/qi4j/api/geometry/TGeometryFactoryTest.java
index f106517..30276bd 100644
--- a/core/api/src/test/java/org/qi4j/api/geometry/TGeometryFactoryTest.java
+++ b/core/api/src/test/java/org/qi4j/api/geometry/TGeometryFactoryTest.java
@@ -33,9 +33,7 @@ import static 
org.qi4j.api.geometry.TGeometryFactory.TMultiPolygon;
 import static org.qi4j.api.geometry.TGeometryFactory.TPoint;
 import static org.qi4j.api.geometry.TGeometryFactory.TPolygon;
 
-/**
- * JAVADOC
- */
+
 public class TGeometryFactoryTest
         extends AbstractQi4jTest {
 
@@ -54,6 +52,7 @@ public class TGeometryFactoryTest
                                 TPoint.class,
                                 TMultiPoint.class,
                                 TLineString.class,
+                                TMultiLineString.class,
                                 TPolygon.class,
                                 TMultiPolygon.class,
                                 TFeature.class,
@@ -64,7 +63,7 @@ public class TGeometryFactoryTest
     }
 
     @Test
-    public void testWhenCRSIsCreated()
+    public void script01()
     {
         String CRS_EPSG_4326 = "EPSG:4326";
         TCRS crs = TCrs(module).crs(CRS_EPSG_4326);
@@ -72,7 +71,7 @@ public class TGeometryFactoryTest
     }
 
     @Test
-    public void testWhenPointIsCreated()
+    public void script02()
     {
         TPoint point_2D = TPoint(module).x(1d).y(2d).geometry();
         assertEquals(1d, point_2D.x(), ZERO);
@@ -90,7 +89,7 @@ public class TGeometryFactoryTest
     }
 
     @Test
-    public void testWhenMultiPointIsCreatedVerifyTypesAndValues()
+    public void script03()
     {
 
         TMultiPoint multiPoint = TMultiPoint(module).points(new double[][]
@@ -129,10 +128,10 @@ public class TGeometryFactoryTest
 
 
     @Test
-    public void testWhenLineStringCreated()
+    public void script04()
     {
 
-        TLineString line = TlineString(module).points(new double[][]
+        TLineString line = TLineString(module).points(new double[][]
                 {
                                                 {0, 0},
                                                 {1, 0},
@@ -151,7 +150,29 @@ public class TGeometryFactoryTest
     }
 
     @Test
-    public void testWhenLinearRingCreated()
+    public void script05()
+    {
+        TMultiLineString mLine = TMultiLineString(module).of
+                (
+                        TLineString(module).points(new double[][]
+                                {
+                                        {0, 0},
+                                        {1, 0},
+                                        {1, 1},
+                                        {0, 1},
+                                        {0, 1}
+
+                                }).geometry()
+                ).geometry();
+
+        assertThat(mLine.getCRS(), equalTo(CRS_EPSG_27572));
+        assertEquals(5, mLine.getNumPoints());
+        assertTrue(mLine.getGeometryN(0).isLineString());
+    }
+
+
+        @Test
+    public void script06()
     {
 
         TLinearRing ring = TLinearRing(module).ring(new double[][]
@@ -171,13 +192,13 @@ public class TGeometryFactoryTest
     }
 
     @Test
-    public void testWhenLinearRingIsCleatedDSL()
+    public void script07()
     {
         TLinearRing tLinearRing = TLinearRing(module).of().geometry();
     }
 
     @Test
-    public void testWhenPolygonIsCreated()
+    public void script08()
     {
         TPolygon polygon = TPolygon(module)
 
@@ -213,7 +234,7 @@ public class TGeometryFactoryTest
     }
 
     @Test
-    public void testWhenPolygonIsCreatedWithoutHoles()
+    public void script09()
     {
         TPolygon polygon = TPolygon(module)
 
@@ -246,7 +267,7 @@ public class TGeometryFactoryTest
     }
 
     @Test
-    public void testWhenPolygonIsCreatedWitHoles()
+    public void script11()
     {
         TPolygon polygon = TPolygon(module)
 
@@ -292,7 +313,7 @@ public class TGeometryFactoryTest
 
 
     @Test
-    public void testWhenMultiPolygonIsCreated() {
+    public void script12() {
 
         TPolygon polygon1 = TPolygon(module)
 
@@ -383,7 +404,7 @@ public class TGeometryFactoryTest
     }
 
     @Test
-    public void testWhenFeatureCreated() {
+    public void script13() {
 
         TFeature featureOfAPoint = 
TFeature(module).of(TPoint(module).x(1d).y(2d).z(3d).geometry()).geometry();
         assertEquals(featureOfAPoint.getType(), 
TGeometryRoot.TGEOMETRY_TYPE.FEATURE);
@@ -394,7 +415,7 @@ public class TGeometryFactoryTest
     }
 
     @Test
-    public void testWhenFeatureOfPolygonIsCreated() {
+    public void script14() {
 
         TFeature featureOfAPolygon = TFeature(module).of(
 
@@ -420,7 +441,7 @@ public class TGeometryFactoryTest
     }
 
     @Test
-    public void testWhenFeatureCollectionIsCreated() {
+    public void script15() {
         TFeature featureOfAPolygon = TFeature(module).of(
 
                 TPolygon(module)

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/core/api/src/test/java/org/qi4j/api/geometry/TGeometryTest.java
----------------------------------------------------------------------
diff --git a/core/api/src/test/java/org/qi4j/api/geometry/TGeometryTest.java 
b/core/api/src/test/java/org/qi4j/api/geometry/TGeometryTest.java
index 6bb4d11..2c12c18 100644
--- a/core/api/src/test/java/org/qi4j/api/geometry/TGeometryTest.java
+++ b/core/api/src/test/java/org/qi4j/api/geometry/TGeometryTest.java
@@ -26,6 +26,7 @@ import org.qi4j.test.AbstractQi4jTest;
 
 import static org.hamcrest.core.IsEqual.equalTo;
 import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
 
 /**
  * JAVADOC
@@ -44,6 +45,7 @@ public class TGeometryTest
                 TPoint.class,
                 TMultiPoint.class,
                 TLineString.class,
+                TMultiLineString.class,
                 TPolygon.class,
                 TMultiPolygon.class,
                 TFeature.class,
@@ -51,7 +53,7 @@ public class TGeometryTest
     }
 
     @Test
-    public void testWhenCRSIsCreated()
+    public void script01()
     {
         String CRS = "urn:ogc:def:crs:OGC:1.3:CRS84";
         ValueBuilder<TCRS> builder = module.newValueBuilder(TCRS.class);
@@ -60,7 +62,7 @@ public class TGeometryTest
     }
 
         @Test
-    public void testWhenCoordinatedCreated()
+    public void script02()
     {
         ValueBuilder<Coordinate> builder = 
module.newValueBuilder(Coordinate.class);
         Coordinate coordinate1 = builder.prototype().of(1d,2d,3d);
@@ -75,7 +77,7 @@ public class TGeometryTest
     }
 
     @Test
-    public void testWhenPointCreated()
+    public void script03()
     {
         ValueBuilder<TPoint> builder1 = module.newValueBuilder(TPoint.class);
 
@@ -112,7 +114,7 @@ public class TGeometryTest
 
 
     @Test
-    public void testWhenLineStringCreated()
+    public void script04()
     {
         ValueBuilder<TLineString> builder = 
module.newValueBuilder(TLineString.class);
 
@@ -138,7 +140,7 @@ public class TGeometryTest
     }
 
     @Test
-    public void testWhenLineStringCreatedV2() {
+    public void script05() {
         ValueBuilder<TLineString> builder = 
module.newValueBuilder(TLineString.class);
 
         TLineString lineString = builder.prototype().of()
@@ -150,12 +152,28 @@ public class TGeometryTest
                 .yx(0d, 0d);
 
         assertTrue(lineString.getStartPoint().x() == 0d);
+    }
+
+    @Test
+    public void script06() {
+        ValueBuilder<TMultiLineString> builder = 
module.newValueBuilder(TMultiLineString.class);
+
+        TMultiLineString multiLineString = builder.prototype().of(
+                module.newValueBuilder(TLineString.class).prototype().of()
 
+                        .yx(0d, 0d)
+                        .yx(0d, 1d)
+                        .yx(1d, 0d)
+                        .yx(1d, 1d)
+                        .yx(0d, 0d) );
+
+        assertEquals(5, multiLineString.getNumPoints());
+        assertTrue(multiLineString.getGeometryN(0).isLineString());
     }
 
 
         @Test
-    public void testWhenValidLinearRingIsCreated()
+    public void script07()
     {
         ValueBuilder<TLinearRing> builder = 
module.newValueBuilder(TLinearRing.class);
 
@@ -171,7 +189,7 @@ public class TGeometryTest
     }
 
     @Test
-    public void testWhenInvalidLinearRingIsCreated()
+    public void script08()
     {
         ValueBuilder<TLinearRing> builder = 
module.newValueBuilder(TLinearRing.class);
 
@@ -187,7 +205,7 @@ public class TGeometryTest
     }
 
     @Test
-    public void testWhenInvalidLinearRingIsCreatedV2()
+    public void script09()
     {
         ValueBuilder<TLinearRing> builder = 
module.newValueBuilder(TLinearRing.class);
 
@@ -206,7 +224,7 @@ public class TGeometryTest
 
 
     @Test
-    public void testWhenPolygonIsCreated()
+    public void script10()
     {
         ValueBuilder<TPolygon> builder = 
module.newValueBuilder(TPolygon.class);
 /**
@@ -225,7 +243,7 @@ public class TGeometryTest
 
 
     @Test
-    public void testWhenCreatedTGeomLineStringNotNull()
+    public void script11()
     {
         ValueBuilder<TLineString> builder = 
module.newValueBuilder(TLineString.class);
         assertNotNull(
@@ -249,7 +267,7 @@ public class TGeometryTest
     }
 
     @Test
-    public void testWhenCreatedLinearRingNotNull()
+    public void script12()
     {
         ValueBuilder<TLinearRing> builder = 
module.newValueBuilder(TLinearRing.class);
         assertNotNull(
@@ -273,7 +291,7 @@ public class TGeometryTest
     }
 
     @Test
-    public void testWhenCreatedTGeomPolygonWithNoHolesNotNull()
+    public void script13()
     {
         ValueBuilder<TPolygon> builder = 
module.newValueBuilder(TPolygon.class);
         assertNotNull(
@@ -322,24 +340,20 @@ public class TGeometryTest
     }
 
     @Test
-    public void testWhenCreatedTGeomPolygonWithWithHolesNotNull()
+    public void script14()
     {
-        // JJ TODO - add test polygon and holes
+        // JJ TODO - add test polygon with holes
     }
 
     @Test
-    public void testWhenCreatedTCircleThenPolygonize()
+    public void script15()
     {
         ValueBuilder<TCircle> builder = module.newValueBuilder(TCircle.class);
 
-        // 48.13905780942574).x(11.57958984375
-
         TCircle tCircle = builder.prototype().of(48.13905780942574, 
11.57958984375, 100);
         TPolygon tPolygon = tCircle.polygonize(360);
         assertTrue(tPolygon.shell().get().isValid());
-        assertTrue(tPolygon.shell().get().getNumPoints() == 360 + 1);
-
-        System.out.println(tPolygon);
+        assertTrue(tPolygon.shell().get().getNumPoints() == (360 + 1) );
     }
 
 

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9d71ec3c/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractAnyQueryTest.java
----------------------------------------------------------------------
diff --git 
a/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractAnyQueryTest.java
 
b/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractAnyQueryTest.java
index 3a2f2bf..1c5ba2e 100644
--- 
a/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractAnyQueryTest.java
+++ 
b/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractAnyQueryTest.java
@@ -87,7 +87,7 @@ public class AbstractAnyQueryTest
         throws Exception
     {
         super.setUp();
-        // TestData.populate( module );
+        TestData.populate( module );
 
         this.unitOfWork = this.module.newUnitOfWork();
     }

Reply via email to