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:49 UTC
[02/50] [abbrv] zest-qi4j git commit: ..
..
Project: http://git-wip-us.apache.org/repos/asf/zest-qi4j/repo
Commit: http://git-wip-us.apache.org/repos/asf/zest-qi4j/commit/c93be181
Tree: http://git-wip-us.apache.org/repos/asf/zest-qi4j/tree/c93be181
Diff: http://git-wip-us.apache.org/repos/asf/zest-qi4j/diff/c93be181
Branch: refs/heads/ramtej-fb/spatial.queries
Commit: c93be181549ac93665bd648103dff653a8890751
Parents: d4076d1
Author: jj <ju...@gmail.com>
Authored: Tue Jan 6 17:11:27 2015 +0100
Committer: jj <ju...@gmail.com>
Committed: Tue Jan 6 17:11:27 2015 +0100
----------------------------------------------------------------------
.../SpatialExceptionConfiguration.java | 7 +
.../configuration/SpatialSupportMatrix.java | 123 ++++++++++++++++++
.../ElasticSearchSpatialExtensionFinder.java | 129 +++++++++++++++++++
.../domain/openstreetmap/model/state/OSM.java | 7 +
.../domain/openstreetmap/model/MapEntity.java | 7 +
.../domain/openstreetmap/model/TagEntity.java | 7 +
.../OpenStreetMapDomainModelAssembler.java | 7 +
.../openstreetmap/model/state/Features.java | 7 +
.../openstreetmap/model/state/Identifiable.java | 7 +
.../openstreetmap/model/state/Properties.java | 7 +
.../model/test/TestOpenStreetMapModel.java | 26 ++++
11 files changed, 334 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/c93be181/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/extensions/spatial/configuration/SpatialExceptionConfiguration.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/extensions/spatial/configuration/SpatialExceptionConfiguration.java b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/extensions/spatial/configuration/SpatialExceptionConfiguration.java
new file mode 100644
index 0000000..40012c7
--- /dev/null
+++ b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/extensions/spatial/configuration/SpatialExceptionConfiguration.java
@@ -0,0 +1,7 @@
+package org.qi4j.index.elasticsearch.extensions.spatial.configuration;
+
+/**
+ * Created by jj on 25.12.14.
+ */
+public interface SpatialExceptionConfiguration {
+}
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/c93be181/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/extensions/spatial/configuration/SpatialSupportMatrix.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/extensions/spatial/configuration/SpatialSupportMatrix.java b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/extensions/spatial/configuration/SpatialSupportMatrix.java
new file mode 100644
index 0000000..e805410
--- /dev/null
+++ b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/extensions/spatial/configuration/SpatialSupportMatrix.java
@@ -0,0 +1,123 @@
+package org.qi4j.index.elasticsearch.extensions.spatial.configuration;
+
+import com.google.common.collect.HashBasedTable;
+import com.google.common.collect.Table;
+import org.qi4j.api.geometry.TPoint;
+import org.qi4j.api.geometry.TPolygon;
+import org.qi4j.api.geometry.internal.TGeometry;
+import org.qi4j.api.query.grammar.ExpressionSpecification;
+import org.qi4j.index.elasticsearch.extensions.spatial.functions.predicates.ST_Disjoint;
+import org.qi4j.index.elasticsearch.extensions.spatial.functions.predicates.ST_Intersects;
+import org.qi4j.index.elasticsearch.extensions.spatial.functions.predicates.ST_WithinV2;
+import org.qi4j.index.elasticsearch.extensions.spatial.mappings.cache.MappingsCache;
+
+import java.lang.reflect.Array;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * Created by jj on 22.12.14.
+ */
+public class SpatialSupportMatrix
+{
+
+ private Boolean OrderBy = true;
+ private Class<? extends TGeometry> AnyGeometry = TGeometry.class;
+ public static enum INDEX_MAPPING_POINT_METHOD {AS_GEO_POINT, AS_GEO_SHAPE}
+
+ private static final Table<Class, INDEX_MAPPING_POINT_METHOD, ConfigurationEntry> SPATIAL_SUPPORT_MATRIX = HashBasedTable.create();
+
+
+
+ {
+ // ST_Within
+ supports(ST_WithinV2.class, propertyOf(AnyGeometry), filterOf(TPoint.class, TPolygon.class), OrderBy, INDEX_MAPPING_POINT_METHOD.AS_GEO_POINT);
+ supports(ST_WithinV2.class, propertyOf(AnyGeometry), filterOf(TPoint.class, TPolygon.class), not(OrderBy), INDEX_MAPPING_POINT_METHOD.AS_GEO_SHAPE);
+
+ // ST_Disjoint
+ supports(not(ST_Disjoint.class), AnyGeometry, AnyGeometry, OrderBy, INDEX_MAPPING_POINT_METHOD.AS_GEO_POINT);
+ supports(ST_Disjoint.class, TGeometry.class, TGeometry.class, not(OrderBy), INDEX_MAPPING_POINT_METHOD.AS_GEO_SHAPE);
+
+ // ST_Intersects
+ supports(not(ST_Intersects.class), AnyGeometry, AnyGeometry, OrderBy, INDEX_MAPPING_POINT_METHOD.AS_GEO_POINT);
+ supports(not(ST_Intersects.class), TGeometry.class, TGeometry.class, not(OrderBy), INDEX_MAPPING_POINT_METHOD.AS_GEO_SHAPE);
+ }
+
+
+
+
+ {
+ supports(ST_WithinV2.class, TPoint.class, not(TPoint.class), OrderBy, INDEX_MAPPING_POINT_METHOD.AS_GEO_SHAPE);
+ }
+
+ private class ConfigurationEntry
+ {
+ private INDEX_MAPPING_POINT_METHOD method;
+ private Boolean orderBy;
+ private List<Class<? extends TGeometry>> supportedPropertyGeometries = new LinkedList<>();
+ private List<Class<? extends TGeometry>> supportedFilterGeometries = new LinkedList<>();
+
+ public ConfigurationEntry(Class<? extends TGeometry>[] geometriesOfProperty, Class<? extends TGeometry>[] geometriesOfFilter, Boolean orderBy, INDEX_MAPPING_POINT_METHOD method)
+ {
+ this.supportedPropertyGeometries = Arrays.asList(geometriesOfProperty);
+ this.supportedFilterGeometries = Arrays.asList(geometriesOfFilter);
+ this.orderBy = orderBy;
+ this.method = method;
+ }
+
+ public boolean isSupported( Class<? extends TGeometry> geometryOfProperty, Class<? extends TGeometry> geometryOfFilter, Boolean orderBy)
+ {
+ return false;
+ }
+ }
+
+
+ public boolean isSupported(Class expression, Class<? extends TGeometry> geometryOfProperty,Class<? extends TGeometry> geometryOfFilter, Boolean orderBy, INDEX_MAPPING_POINT_METHOD method )
+ {
+ if (SPATIAL_SUPPORT_MATRIX.contains(expression, method))
+ return SPATIAL_SUPPORT_MATRIX.get(expression, method).isSupported(geometryOfProperty, geometryOfFilter, orderBy);
+ else
+ return false;
+ }
+
+ private void supports (Class expression, Class<? extends TGeometry> geometryOfProperty,Class<? extends TGeometry> geometryOfFilter, Boolean orderBy, INDEX_MAPPING_POINT_METHOD method)
+ {
+ supports
+ (
+ expression,
+ (Class < ?extends TGeometry >[])Array.newInstance(geometryOfProperty, 1),
+ (Class<? extends TGeometry>[]) Array.newInstance(geometryOfFilter, 1),
+ orderBy, method
+ );
+ }
+
+ private void supports (Class expression, Class<? extends TGeometry>[] geometriesOfProperty,Class<? extends TGeometry>[] geometriesOfFilter, Boolean orderBy, INDEX_MAPPING_POINT_METHOD method)
+ {
+ SPATIAL_SUPPORT_MATRIX.put(expression, method, new ConfigurationEntry(geometriesOfProperty, geometriesOfFilter,orderBy, method));
+ }
+
+
+
+ private Class not(Class clazz)
+ {
+ return Object.class;
+ }
+
+ private Boolean not(Boolean bool)
+ {
+ return false;
+ }
+
+
+ private Class<? extends TGeometry>[] filterOf(Class<? extends TGeometry>... geometryOfFilters)
+ {
+ return geometryOfFilters;
+ }
+
+ private Class<? extends TGeometry>[] propertyOf(Class<? extends TGeometry>... geometryOfProperty)
+ {
+ return geometryOfProperty;
+ }
+}
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/c93be181/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/extensions/spatial/index/ElasticSearchSpatialExtensionFinder.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/extensions/spatial/index/ElasticSearchSpatialExtensionFinder.java b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/extensions/spatial/index/ElasticSearchSpatialExtensionFinder.java
new file mode 100644
index 0000000..c1ec059
--- /dev/null
+++ b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/extensions/spatial/index/ElasticSearchSpatialExtensionFinder.java
@@ -0,0 +1,129 @@
+package org.qi4j.index.elasticsearch.extensions.spatial.index;
+
+/*
+ * Copyright 2014 Jiri Jetmar.
+ *
+ * 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.
+ */
+
+import org.elasticsearch.index.query.*;
+import org.qi4j.api.query.grammar.ComparisonSpecification;
+import org.qi4j.api.query.grammar.ContainsAllSpecification;
+import org.qi4j.api.query.grammar.ContainsSpecification;
+import org.qi4j.api.query.grammar.extensions.spatial.convert.SpatialConvertSpecification;
+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.ElasticSearchSupport;
+import org.qi4j.index.elasticsearch.extensions.spatial.functions.convert.ElasticSearchSpatialConvertFinderSupport;
+import org.qi4j.index.elasticsearch.extensions.spatial.functions.predicates.ElasticSearchSpatialPredicateFinderSupport;
+import org.qi4j.spi.query.EntityFinderException;
+import org.slf4j.Logger;
+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 ElasticSearchSpatialExtensionFinder
+{
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(ElasticSearchSpatialExtensionFinder.class);
+
+ private static final Map<Class<?>, SpatialQuerySpecSupport> SPATIAL_QUERY_EXPRESSIONS_CATALOG = new HashMap<>( 2 );
+
+ static
+ {
+ SPATIAL_QUERY_EXPRESSIONS_CATALOG.put(SpatialPredicatesSpecification.class, new ElasticSearchSpatialPredicateFinderSupport());
+ SPATIAL_QUERY_EXPRESSIONS_CATALOG.put(SpatialConvertSpecification.class, new ElasticSearchSpatialConvertFinderSupport());
+ }
+
+
+
+ public interface ModuleHelper {
+ void setModule(Module module, ElasticSearchSupport support);
+ }
+
+ public static interface SpatialQuerySpecSupport extends ModuleHelper
+ {
+ void processSpecification(FilterBuilder filterBuilder, Specification<?> spec, Map<String, Object> variables) throws EntityFinderException;
+ }
+
+
+
+ public static class SpatialSpecSupport
+ implements SpatialQuerySpecSupport {
+
+ Module module;
+ ElasticSearchSupport support;
+
+ public void setModule(Module module, ElasticSearchSupport support)
+ {
+ this.module = module;
+ this.support = support;
+ }
+
+
+ public void processSpecification(FilterBuilder filterBuilder,
+ Specification<?> spec,
+ Map<String, Object> variables) {
+
+ SpatialQuerySpecSupport spatialQuerySpecSupport = SPATIAL_QUERY_EXPRESSIONS_CATALOG.get(spec.getClass().getSuperclass());
+ spatialQuerySpecSupport.setModule(module, support);
+
+ try {
+ spatialQuerySpecSupport.processSpecification(filterBuilder, spec, variables);
+
+ } catch (Exception _ex) {
+ _ex.printStackTrace();
+ }
+
+
+ }
+
+ }
+
+
+ public static class SpatialTypeSupport
+ implements ElasticSearchFinderSupport.ComplexTypeSupport
+ {
+
+ public FilterBuilder comparison( ComparisonSpecification<?> spec, Map<String, Object> variables )
+ {
+ return null;
+ }
+
+ public FilterBuilder contains( ContainsSpecification<?> spec, Map<String, Object> variables )
+ {
+ return null;
+ }
+
+ public FilterBuilder containsAll( ContainsAllSpecification<?> spec, Map<String, Object> variables )
+ {
+ return null;
+ }
+ }
+
+
+
+
+ private ElasticSearchSpatialExtensionFinder()
+ {
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/c93be181/samples/openstreetmap/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/state/OSM.java
----------------------------------------------------------------------
diff --git a/samples/openstreetmap/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/state/OSM.java b/samples/openstreetmap/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/state/OSM.java
new file mode 100644
index 0000000..c249034
--- /dev/null
+++ b/samples/openstreetmap/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/state/OSM.java
@@ -0,0 +1,7 @@
+package org.qi4j.sample.spatial.domain.openstreetmap.model.state;
+
+/**
+ * Created by jj on 01.12.14.
+ */
+public interface OSM {
+}
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/c93be181/samples/spatial/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/MapEntity.java
----------------------------------------------------------------------
diff --git a/samples/spatial/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/MapEntity.java b/samples/spatial/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/MapEntity.java
new file mode 100644
index 0000000..fe7ddfa
--- /dev/null
+++ b/samples/spatial/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/MapEntity.java
@@ -0,0 +1,7 @@
+package org.qi4j.sample.spatial.domain.openstreetmap.model;
+
+/**
+ * Created by jj on 28.11.14.
+ */
+public interface MapEntity {
+}
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/c93be181/samples/spatial/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/TagEntity.java
----------------------------------------------------------------------
diff --git a/samples/spatial/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/TagEntity.java b/samples/spatial/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/TagEntity.java
new file mode 100644
index 0000000..1175663
--- /dev/null
+++ b/samples/spatial/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/TagEntity.java
@@ -0,0 +1,7 @@
+package org.qi4j.sample.spatial.domain.openstreetmap.model;
+
+/**
+ * Created by jj on 28.11.14.
+ */
+public class TagEntity {
+}
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/c93be181/samples/spatial/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/assembly/OpenStreetMapDomainModelAssembler.java
----------------------------------------------------------------------
diff --git a/samples/spatial/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/assembly/OpenStreetMapDomainModelAssembler.java b/samples/spatial/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/assembly/OpenStreetMapDomainModelAssembler.java
new file mode 100644
index 0000000..0c5661f
--- /dev/null
+++ b/samples/spatial/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/assembly/OpenStreetMapDomainModelAssembler.java
@@ -0,0 +1,7 @@
+package org.qi4j.sample.spatial.domain.openstreetmap.model.assembly;
+
+/**
+ * Created by jj on 28.11.14.
+ */
+public class OpenStreetMapDomainModelAssembler {
+}
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/c93be181/samples/spatial/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/state/Features.java
----------------------------------------------------------------------
diff --git a/samples/spatial/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/state/Features.java b/samples/spatial/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/state/Features.java
new file mode 100644
index 0000000..b6c5908
--- /dev/null
+++ b/samples/spatial/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/state/Features.java
@@ -0,0 +1,7 @@
+package org.qi4j.sample.spatial.domain.openstreetmap.model.state;
+
+/**
+ * Created by jj on 28.11.14.
+ */
+public interface Features {
+}
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/c93be181/samples/spatial/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/state/Identifiable.java
----------------------------------------------------------------------
diff --git a/samples/spatial/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/state/Identifiable.java b/samples/spatial/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/state/Identifiable.java
new file mode 100644
index 0000000..763cc9d
--- /dev/null
+++ b/samples/spatial/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/state/Identifiable.java
@@ -0,0 +1,7 @@
+package org.qi4j.sample.spatial.domain.openstreetmap.model.state;
+
+/**
+ * Created by jj on 28.11.14.
+ */
+public interface Identifiable {
+}
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/c93be181/samples/spatial/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/state/Properties.java
----------------------------------------------------------------------
diff --git a/samples/spatial/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/state/Properties.java b/samples/spatial/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/state/Properties.java
new file mode 100644
index 0000000..9dca43d
--- /dev/null
+++ b/samples/spatial/src/main/java/org/qi4j/sample/spatial/domain/openstreetmap/model/state/Properties.java
@@ -0,0 +1,7 @@
+package org.qi4j.sample.spatial.domain.openstreetmap.model.state;
+
+/**
+ * Created by jj on 28.11.14.
+ */
+public interface Properties {
+}
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/c93be181/samples/spatial/src/test/java/org/qi4j/sample/spatial/domain/openstreetmap/model/test/TestOpenStreetMapModel.java
----------------------------------------------------------------------
diff --git a/samples/spatial/src/test/java/org/qi4j/sample/spatial/domain/openstreetmap/model/test/TestOpenStreetMapModel.java b/samples/spatial/src/test/java/org/qi4j/sample/spatial/domain/openstreetmap/model/test/TestOpenStreetMapModel.java
new file mode 100644
index 0000000..c220823
--- /dev/null
+++ b/samples/spatial/src/test/java/org/qi4j/sample/spatial/domain/openstreetmap/model/test/TestOpenStreetMapModel.java
@@ -0,0 +1,26 @@
+package org.qi4j.sample.spatial.domain.openstreetmap.model.test;
+
+import org.junit.Test;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.sample.spatial.domain.openstreetmap.model.assembly.OpenStreetMapDomainModelAssembler;
+import org.qi4j.test.AbstractQi4jTest;
+
+/**
+ * Created by jj on 28.11.14.
+ */
+public class TestOpenStreetMapModel extends AbstractQi4jTest {
+
+ @Override
+ public void assemble( ModuleAssembly module )
+ throws AssemblyException
+ {
+ new OpenStreetMapDomainModelAssembler().assemble(module);
+ }
+
+ @Test
+ public void foo()
+ {
+ System.out.println("foo");
+ }
+}