Repository: incubator-rya
Updated Branches:
  refs/heads/master fe6cbccf7 -> a60208625


RYA-249 Geo Indexer precondition check; Closes #140

Mongo precondition checks to make sure the geometry type
for within and intersects is a Polygon.


Project: http://git-wip-us.apache.org/repos/asf/incubator-rya/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rya/commit/a6020862
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rya/tree/a6020862
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rya/diff/a6020862

Branch: refs/heads/master
Commit: a6020862552bdf53dd020859105d30b0b3903190
Parents: fe6cbcc
Author: isper3at <[email protected]>
Authored: Fri Feb 10 14:33:41 2017 -0500
Committer: pujav65 <[email protected]>
Committed: Mon Mar 13 10:52:16 2017 -0400

----------------------------------------------------------------------
 .../mongodb/geo/GeoMongoDBStorageStrategy.java  | 17 ++++++---
 .../indexing/mongodb/geo/MongoGeoIndexer.java   | 40 ++++++++++++++------
 2 files changed, 39 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/a6020862/extras/rya.geoindexing/src/main/java/org/apache/rya/indexing/mongodb/geo/GeoMongoDBStorageStrategy.java
----------------------------------------------------------------------
diff --git 
a/extras/rya.geoindexing/src/main/java/org/apache/rya/indexing/mongodb/geo/GeoMongoDBStorageStrategy.java
 
b/extras/rya.geoindexing/src/main/java/org/apache/rya/indexing/mongodb/geo/GeoMongoDBStorageStrategy.java
index 032f704..7dd12c2 100644
--- 
a/extras/rya.geoindexing/src/main/java/org/apache/rya/indexing/mongodb/geo/GeoMongoDBStorageStrategy.java
+++ 
b/extras/rya.geoindexing/src/main/java/org/apache/rya/indexing/mongodb/geo/GeoMongoDBStorageStrategy.java
@@ -23,21 +23,22 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.log4j.Logger;
+import org.apache.rya.api.domain.RyaStatement;
+import org.apache.rya.api.resolver.RyaToRdfConversions;
+import org.apache.rya.indexing.accumulo.geo.GeoParseUtils;
+import org.apache.rya.indexing.mongodb.IndexingMongoDBStorageStrategy;
 import org.openrdf.model.Statement;
+import org.openrdf.query.MalformedQueryException;
 
 import com.mongodb.BasicDBObject;
 import com.mongodb.DBCollection;
 import com.mongodb.DBObject;
 import com.vividsolutions.jts.geom.Coordinate;
 import com.vividsolutions.jts.geom.Geometry;
+import com.vividsolutions.jts.geom.Polygon;
 import com.vividsolutions.jts.io.ParseException;
 import com.vividsolutions.jts.io.WKTReader;
 
-import org.apache.rya.api.domain.RyaStatement;
-import org.apache.rya.api.resolver.RyaToRdfConversions;
-import org.apache.rya.indexing.accumulo.geo.GeoParseUtils;
-import org.apache.rya.indexing.mongodb.IndexingMongoDBStorageStrategy;
-
 public class GeoMongoDBStorageStrategy extends IndexingMongoDBStorageStrategy {
     private static final Logger LOG = 
Logger.getLogger(GeoMongoDBStorageStrategy.class);
 
@@ -92,9 +93,13 @@ public class GeoMongoDBStorageStrategy extends 
IndexingMongoDBStorageStrategy {
         coll.createIndex("{" + GEO + " : \"2dsphere\"" );
     }
 
-    public DBObject getQuery(final GeoQuery queryObj) {
+    public DBObject getQuery(final GeoQuery queryObj) throws 
MalformedQueryException {
         final Geometry geo = queryObj.getGeo();
         final GeoQueryType queryType = queryObj.getQueryType();
+        if(queryType != GeoQueryType.EQUALS && !(geo instanceof Polygon)) {
+            //They can also be applied to MultiPolygons, but those are not 
supported either.
+            throw new MalformedQueryException("Mongo Within operations can 
only be performed on Polygons.");
+        }
 
         BasicDBObject query;
         if (queryType.equals(GeoQueryType.EQUALS)){

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/a6020862/extras/rya.geoindexing/src/main/java/org/apache/rya/indexing/mongodb/geo/MongoGeoIndexer.java
----------------------------------------------------------------------
diff --git 
a/extras/rya.geoindexing/src/main/java/org/apache/rya/indexing/mongodb/geo/MongoGeoIndexer.java
 
b/extras/rya.geoindexing/src/main/java/org/apache/rya/indexing/mongodb/geo/MongoGeoIndexer.java
index 02389c4..aebcd4c 100644
--- 
a/extras/rya.geoindexing/src/main/java/org/apache/rya/indexing/mongodb/geo/MongoGeoIndexer.java
+++ 
b/extras/rya.geoindexing/src/main/java/org/apache/rya/indexing/mongodb/geo/MongoGeoIndexer.java
@@ -23,19 +23,20 @@ import static 
org.apache.rya.indexing.mongodb.geo.GeoMongoDBStorageStrategy.GeoQ
 import static 
org.apache.rya.indexing.mongodb.geo.GeoMongoDBStorageStrategy.GeoQueryType.WITHIN;
 
 import org.apache.log4j.Logger;
+import org.apache.rya.indexing.GeoIndexer;
+import org.apache.rya.indexing.StatementConstraints;
+import org.apache.rya.indexing.accumulo.ConfigUtils;
+import org.apache.rya.indexing.mongodb.AbstractMongoIndexer;
+import org.apache.rya.indexing.mongodb.geo.GeoMongoDBStorageStrategy.GeoQuery;
+import org.apache.rya.mongodb.MongoDBRdfConfiguration;
 import org.openrdf.model.Statement;
+import org.openrdf.query.MalformedQueryException;
 import org.openrdf.query.QueryEvaluationException;
 
 import com.mongodb.DBObject;
 import com.vividsolutions.jts.geom.Geometry;
 
 import info.aduna.iteration.CloseableIteration;
-import org.apache.rya.indexing.GeoIndexer;
-import org.apache.rya.indexing.StatementConstraints;
-import org.apache.rya.indexing.accumulo.ConfigUtils;
-import org.apache.rya.indexing.mongodb.AbstractMongoIndexer;
-import org.apache.rya.indexing.mongodb.geo.GeoMongoDBStorageStrategy.GeoQuery;
-import org.apache.rya.mongodb.MongoDBRdfConfiguration;
 
 public class MongoGeoIndexer extends 
AbstractMongoIndexer<GeoMongoDBStorageStrategy> implements GeoIndexer {
     private static final String COLLECTION_SUFFIX = "geo";
@@ -52,8 +53,13 @@ public class MongoGeoIndexer extends 
AbstractMongoIndexer<GeoMongoDBStorageStrat
     @Override
     public CloseableIteration<Statement, QueryEvaluationException> queryEquals(
             final Geometry query, final StatementConstraints constraints) {
-        final DBObject queryObj = storageStrategy.getQuery(new 
GeoQuery(EQUALS, query));
-        return withConstraints(constraints, queryObj);
+        try {
+            final DBObject queryObj = storageStrategy.getQuery(new 
GeoQuery(EQUALS, query));
+            return withConstraints(constraints, queryObj);
+        } catch (final MalformedQueryException e) {
+            logger.error(e.getMessage(), e);
+            return null;
+        }
     }
 
     @Override
@@ -66,8 +72,13 @@ public class MongoGeoIndexer extends 
AbstractMongoIndexer<GeoMongoDBStorageStrat
     @Override
     public CloseableIteration<Statement, QueryEvaluationException> 
queryIntersects(
             final Geometry query, final StatementConstraints constraints) {
-        final DBObject queryObj = storageStrategy.getQuery(new 
GeoQuery(INTERSECTS, query));
-        return withConstraints(constraints, queryObj);
+        try {
+            final DBObject queryObj = storageStrategy.getQuery(new 
GeoQuery(INTERSECTS, query));
+            return withConstraints(constraints, queryObj);
+        } catch (final MalformedQueryException e) {
+            logger.error(e.getMessage(), e);
+            return null;
+        }
     }
 
     @Override
@@ -87,8 +98,13 @@ public class MongoGeoIndexer extends 
AbstractMongoIndexer<GeoMongoDBStorageStrat
     @Override
     public CloseableIteration<Statement, QueryEvaluationException> queryWithin(
             final Geometry query, final StatementConstraints constraints) {
-        final DBObject queryObj = storageStrategy.getQuery(new 
GeoQuery(WITHIN, query));
-        return withConstraints(constraints, queryObj);
+        try {
+            final DBObject queryObj = storageStrategy.getQuery(new 
GeoQuery(WITHIN, query));
+            return withConstraints(constraints, queryObj);
+        } catch (final MalformedQueryException e) {
+            logger.error(e.getMessage(), e);
+            return null;
+        }
     }
 
     @Override

Reply via email to