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
