| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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.apache.rya.indexing.geotemporal; |
| |
| import org.apache.rya.api.persist.index.RyaSecondaryIndexer; |
| import org.apache.rya.indexing.GeoConstants; |
| import org.apache.rya.indexing.geotemporal.storage.EventStorage; |
| import org.eclipse.rdf4j.model.IRI; |
| import org.eclipse.rdf4j.model.Statement; |
| import org.eclipse.rdf4j.model.impl.SimpleValueFactory; |
| |
| /** |
| * A repository to store, index, and retrieve {@link Statement}s based on geotemporal features. |
| */ |
| public interface GeoTemporalIndexer extends RyaSecondaryIndexer { |
| /** |
| * initialize after setting configuration. |
| */ |
| @Override |
| public void init(); |
| |
| /** |
| * Creates the {@link EventStorage} that will be used by the indexer. |
| * NOTE: {@link #setConf(org.apache.hadoop.conf.Configuration)} must be called before calling this. |
| * @return The {@link EventStorage} that will be used by this indexer. |
| */ |
| public abstract EventStorage getEventStorage(); |
| |
| /** |
| * Used to indicate which geo filter functions to use in a query. |
| */ |
| public static enum GeoPolicy { |
| /** |
| * The provided geo object equals the geo object where the event took place. |
| */ |
| EQUALS(GeoConstants.GEO_SF_EQUALS), |
| |
| /** |
| * The provided geo object does not share any space with the event. |
| */ |
| DISJOINT(GeoConstants.GEO_SF_DISJOINT), |
| |
| /** |
| * The provided geo object shares some amount of space with the event. |
| */ |
| INTERSECTS(GeoConstants.GEO_SF_INTERSECTS), |
| |
| /** |
| * The provided geo object shares a point with the event, but only on the edge. |
| */ |
| TOUCHES(GeoConstants.GEO_SF_TOUCHES), |
| |
| /** |
| * The provided geo object shares some, but not all space with the event. |
| */ |
| CROSSES(GeoConstants.GEO_SF_CROSSES), |
| |
| /** |
| * The provided geo object exists completely within the event. |
| */ |
| WITHIN(GeoConstants.GEO_SF_WITHIN), |
| |
| /** |
| * The event took place completely within the provided geo object. |
| */ |
| CONTAINS(GeoConstants.GEO_SF_CONTAINS), |
| |
| /** |
| * The provided geo object has some but not all points in common with the event, |
| * are of the same dimension, and the intersection of the interiors has the |
| * same dimension as the geometries themselves. |
| */ |
| OVERLAPS(GeoConstants.GEO_SF_OVERLAPS); |
| |
| private final IRI uri; |
| |
| private GeoPolicy(final IRI uri) { |
| this.uri = uri; |
| } |
| |
| public IRI getURI() { |
| return uri; |
| } |
| |
| public static GeoPolicy fromURI(final IRI uri) { |
| for(final GeoPolicy policy : GeoPolicy.values()) { |
| if(policy.getURI().equals(uri)) { |
| return policy; |
| } |
| } |
| return null; |
| } |
| } |
| |
| static final String TEMPORAL_NS = "tag:rya-rdf.org,2015:temporal#"; |
| |
| /** |
| * Used to indicate which temporal filter functions to use in a query. |
| */ |
| public enum TemporalPolicy { |
| /** |
| * The provided instant in time equals the instant the event took place. |
| */ |
| INSTANT_EQUALS_INSTANT(true, SimpleValueFactory.getInstance().createIRI(TEMPORAL_NS+"equals")), |
| |
| /** |
| * The provided instant in time was before when the event took place. |
| */ |
| INSTANT_BEFORE_INSTANT(true, SimpleValueFactory.getInstance().createIRI(TEMPORAL_NS+"before")), |
| |
| /** |
| * The provided instant in time was after when the event took place. |
| */ |
| INSTANT_AFTER_INSTANT(true, SimpleValueFactory.getInstance().createIRI(TEMPORAL_NS+"after")), |
| |
| /** |
| * The provided instant in time was before a time period. |
| */ |
| INSTANT_BEFORE_INTERVAL(false, SimpleValueFactory.getInstance().createIRI(TEMPORAL_NS+"beforeInterval")), |
| |
| /** |
| * The provided instant in time took place within a set of time. |
| */ |
| INSTANT_IN_INTERVAL(false, SimpleValueFactory.getInstance().createIRI(TEMPORAL_NS+"insideInterval")), |
| |
| /** |
| * The provided instant in time took place after a time period. |
| */ |
| INSTANT_AFTER_INTERVAL(false, SimpleValueFactory.getInstance().createIRI(TEMPORAL_NS+"afterInterval")), |
| |
| /** |
| * The provided instant in time equals the start of the interval in which the event took place. |
| */ |
| INSTANT_START_INTERVAL(false, SimpleValueFactory.getInstance().createIRI(TEMPORAL_NS+"hasBeginningInterval")), |
| |
| /** |
| * The provided instant in time equals the end of the interval in which the event took place. |
| */ |
| INSTANT_END_INTERVAL(false, SimpleValueFactory.getInstance().createIRI(TEMPORAL_NS+"hasEndInterval")), |
| |
| /** |
| * The provided interval equals the interval in which the event took place. |
| */ |
| INTERVAL_EQUALS(false, SimpleValueFactory.getInstance().createIRI(TEMPORAL_NS+"intervalEquals")), |
| |
| /** |
| * The provided interval is before the interval in which the event took place. |
| */ |
| INTERVAL_BEFORE(false, SimpleValueFactory.getInstance().createIRI(TEMPORAL_NS+"intervalBefore")), |
| |
| /** |
| * The provided interval is after the interval in which the event took place. |
| */ |
| INTERVAL_AFTER(false, SimpleValueFactory.getInstance().createIRI(TEMPORAL_NS+"intervalAfter")); |
| |
| private final boolean isInstant; |
| private final IRI uri; |
| |
| TemporalPolicy(final boolean isInstant, final IRI uri) { |
| this.isInstant = isInstant; |
| this.uri = uri; |
| } |
| |
| public boolean isInstant(){ |
| return isInstant; |
| } |
| |
| public IRI getURI() { |
| return uri; |
| } |
| |
| public static TemporalPolicy fromURI(final IRI uri) { |
| for(final TemporalPolicy policy : TemporalPolicy.values()) { |
| if(policy.getURI().equals(uri)) { |
| return policy; |
| } |
| } |
| return null; |
| } |
| } |
| } |