blob: 37cb99d3342a87de37cb5b9286fb22b291d095f1 [file] [log] [blame]
/**
* 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;
}
}
}