You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rya.apache.org by mi...@apache.org on 2016/10/15 20:07:05 UTC
[45/69] [abbrv] [partial] incubator-rya git commit: RYA-198 Renaming
Files
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/main/java/org/apache/rya/api/RdfCloudTripleStoreConstants.java
----------------------------------------------------------------------
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/RdfCloudTripleStoreConstants.java b/common/rya.api/src/main/java/org/apache/rya/api/RdfCloudTripleStoreConstants.java
new file mode 100644
index 0000000..5311bd9
--- /dev/null
+++ b/common/rya.api/src/main/java/org/apache/rya/api/RdfCloudTripleStoreConstants.java
@@ -0,0 +1,151 @@
+package mvm.rya.api;
+
+/*
+ * 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.
+ */
+
+
+
+import mvm.rya.api.domain.RyaSchema;
+import mvm.rya.api.domain.RyaType;
+import mvm.rya.api.domain.RyaURI;
+import org.apache.hadoop.io.Text;
+import org.openrdf.model.Literal;
+import org.openrdf.model.URI;
+import org.openrdf.model.Value;
+import org.openrdf.model.ValueFactory;
+import org.openrdf.model.impl.ValueFactoryImpl;
+
+public class RdfCloudTripleStoreConstants {
+
+ public static final String NAMESPACE = RyaSchema.NAMESPACE;
+ public static final String AUTH_NAMESPACE = RyaSchema.AUTH_NAMESPACE;
+ public static ValueFactory VALUE_FACTORY = ValueFactoryImpl.getInstance();
+ public static URI RANGE = VALUE_FACTORY.createURI(NAMESPACE, "range");
+ public static URI PARTITION_TIMERANGE = VALUE_FACTORY.createURI("urn:mvm.mmrts.partition.rdf/08/2011#", "timeRange");
+ public static Literal EMPTY_LITERAL = VALUE_FACTORY.createLiteral(0);
+ public static final byte EMPTY_BYTES[] = new byte[0];
+ public static final Text EMPTY_TEXT = new Text();
+
+ public static final Long MAX_MEMORY = 10000000l;
+ public static final Long MAX_TIME = 60000l;
+ public static final Integer NUM_THREADS = 4;
+
+// public static final String TS = "ts";
+// public static final Text TS_TXT = new Text(TS);
+
+// public static final String INFO = "info";
+// public static final Text INFO_TXT = new Text(INFO);
+
+ public static final String SUBJECT_CF = "s";
+ public static final Text SUBJECT_CF_TXT = new Text(SUBJECT_CF);
+ public static final String PRED_CF = "p";
+ public static final Text PRED_CF_TXT = new Text(PRED_CF);
+ public static final String OBJ_CF = "o";
+ public static final Text OBJ_CF_TXT = new Text(OBJ_CF);
+ public static final String SUBJECTOBJECT_CF = "so";
+ public static final Text SUBJECTOBJECT_CF_TXT = new Text(SUBJECTOBJECT_CF);
+ public static final String SUBJECTPRED_CF = "sp";
+ public static final Text SUBJECTPRED_CF_TXT = new Text(SUBJECTPRED_CF);
+ public static final String PREDOBJECT_CF = "po";
+ public static final Text PREDOBJECT_CF_TXT = new Text(PREDOBJECT_CF);
+
+ public static final String TBL_PRFX_DEF = "rya_";
+ public static final String TBL_SPO_SUFFIX = "spo";
+ public static final String TBL_PO_SUFFIX = "po";
+ public static final String TBL_OSP_SUFFIX = "osp";
+ public static final String TBL_EVAL_SUFFIX = "eval";
+ public static final String TBL_STATS_SUFFIX = "prospects";
+ public static final String TBL_SEL_SUFFIX = "selectivity";
+ public static final String TBL_NS_SUFFIX = "ns";
+ public static String TBL_SPO = TBL_PRFX_DEF + TBL_SPO_SUFFIX;
+ public static String TBL_PO = TBL_PRFX_DEF + TBL_PO_SUFFIX;
+ public static String TBL_OSP = TBL_PRFX_DEF + TBL_OSP_SUFFIX;
+ public static String TBL_EVAL = TBL_PRFX_DEF + TBL_EVAL_SUFFIX;
+ public static String TBL_STATS = TBL_PRFX_DEF + TBL_STATS_SUFFIX;
+ public static String TBL_SEL = TBL_PRFX_DEF + TBL_SEL_SUFFIX;
+ public static String TBL_NAMESPACE = TBL_PRFX_DEF + TBL_NS_SUFFIX;
+
+ public static Text TBL_SPO_TXT = new Text(TBL_SPO);
+ public static Text TBL_PO_TXT = new Text(TBL_PO);
+ public static Text TBL_OSP_TXT = new Text(TBL_OSP);
+ public static Text TBL_EVAL_TXT = new Text(TBL_EVAL);
+ public static Text TBL_NAMESPACE_TXT = new Text(TBL_NAMESPACE);
+
+ public static void prefixTables(String prefix) {
+ if (prefix == null)
+ prefix = TBL_PRFX_DEF;
+ TBL_SPO = prefix + TBL_SPO_SUFFIX;
+ TBL_PO = prefix + TBL_PO_SUFFIX;
+ TBL_OSP = prefix + TBL_OSP_SUFFIX;
+ TBL_EVAL = prefix + TBL_EVAL_SUFFIX;
+ TBL_NAMESPACE = prefix + TBL_NS_SUFFIX;
+
+ TBL_SPO_TXT = new Text(TBL_SPO);
+ TBL_PO_TXT = new Text(TBL_PO);
+ TBL_OSP_TXT = new Text(TBL_OSP);
+ TBL_EVAL_TXT = new Text(TBL_EVAL);
+ TBL_NAMESPACE_TXT = new Text(TBL_NAMESPACE);
+ }
+
+ public static final String INFO_NAMESPACE = "namespace";
+ public static final Text INFO_NAMESPACE_TXT = new Text(INFO_NAMESPACE);
+
+ public static final byte DELIM_BYTE = 0;
+ public static final byte TYPE_DELIM_BYTE = 1;
+ public static final byte LAST_BYTE = -1; //0xff
+ public static final byte[] LAST_BYTES = new byte[]{LAST_BYTE};
+ public static final byte[] TYPE_DELIM_BYTES = new byte[]{TYPE_DELIM_BYTE};
+ public static final String DELIM = "\u0000";
+ public static final String DELIM_STOP = "\u0001";
+ public static final String LAST = "\uFFDD";
+ public static final String TYPE_DELIM = new String(TYPE_DELIM_BYTES);
+ public static final byte[] DELIM_BYTES = DELIM.getBytes();
+ public static final byte[] DELIM_STOP_BYTES = DELIM_STOP.getBytes();
+
+
+ /* RECORD TYPES */
+ public static final int URI_MARKER = 7;
+
+ public static final int BNODE_MARKER = 8;
+
+ public static final int PLAIN_LITERAL_MARKER = 9;
+
+ public static final int LANG_LITERAL_MARKER = 10;
+
+ public static final int DATATYPE_LITERAL_MARKER = 11;
+
+ public static final int EOF_MARKER = 127;
+
+ // public static final Authorizations ALL_AUTHORIZATIONS = new Authorizations(
+ // "_");
+
+ public static enum TABLE_LAYOUT {
+ SPO, PO, OSP
+ }
+
+ //TODO: This should be in a version file somewhere
+ public static URI RTS_SUBJECT = VALUE_FACTORY.createURI(NAMESPACE, "rts");
+ public static RyaURI RTS_SUBJECT_RYA = new RyaURI(RTS_SUBJECT.stringValue());
+ public static URI RTS_VERSION_PREDICATE = VALUE_FACTORY.createURI(NAMESPACE, "version");
+ public static RyaURI RTS_VERSION_PREDICATE_RYA = new RyaURI(RTS_VERSION_PREDICATE.stringValue());
+ public static final Value VERSION = VALUE_FACTORY.createLiteral("3.0.0");
+ public static RyaType VERSION_RYA = new RyaType(VERSION.stringValue());
+
+ public static String RYA_CONFIG_AUTH = "RYACONFIG";
+}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/main/java/org/apache/rya/api/RdfCloudTripleStoreStatement.java
----------------------------------------------------------------------
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/RdfCloudTripleStoreStatement.java b/common/rya.api/src/main/java/org/apache/rya/api/RdfCloudTripleStoreStatement.java
new file mode 100644
index 0000000..4a13c01
--- /dev/null
+++ b/common/rya.api/src/main/java/org/apache/rya/api/RdfCloudTripleStoreStatement.java
@@ -0,0 +1,72 @@
+package mvm.rya.api;
+
+/*
+ * 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.
+ */
+
+
+
+import org.openrdf.model.Resource;
+import org.openrdf.model.Statement;
+import org.openrdf.model.URI;
+import org.openrdf.model.Value;
+import org.openrdf.model.impl.ContextStatementImpl;
+import org.openrdf.model.impl.StatementImpl;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+public class RdfCloudTripleStoreStatement extends StatementImpl {
+
+ private Resource[] contexts; //TODO: no blank nodes
+
+ public RdfCloudTripleStoreStatement(Resource subject, URI predicate, Value object) {
+ super(subject, predicate, object);
+ }
+
+ public RdfCloudTripleStoreStatement(Resource subject, URI predicate, Value object,
+ Resource... contexts) {
+ super(subject, predicate, object);
+ this.contexts = contexts;
+ }
+
+ public Resource[] getContexts() {
+ return contexts;
+ }
+
+ public Collection<Statement> getStatements() {
+ Collection<Statement> statements = new ArrayList<Statement>();
+
+ if (getContexts() != null && getContexts().length > 1) {
+ for (Resource contxt : getContexts()) {
+ statements.add(new ContextStatementImpl(getSubject(),
+ getPredicate(), getObject(), contxt));
+ }
+ } else
+ statements.add(this);
+
+ return statements;
+ }
+
+ @Override
+ public Resource getContext() {
+ if (contexts == null || contexts.length == 0)
+ return null;
+ else return contexts[0];
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/main/java/org/apache/rya/api/RdfCloudTripleStoreUtils.java
----------------------------------------------------------------------
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/RdfCloudTripleStoreUtils.java b/common/rya.api/src/main/java/org/apache/rya/api/RdfCloudTripleStoreUtils.java
new file mode 100644
index 0000000..eeadb9b
--- /dev/null
+++ b/common/rya.api/src/main/java/org/apache/rya/api/RdfCloudTripleStoreUtils.java
@@ -0,0 +1,420 @@
+package mvm.rya.api;
+
+/*
+ * 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.
+ */
+
+
+
+import mvm.rya.api.layout.TableLayoutStrategy;
+import mvm.rya.api.layout.TablePrefixLayoutStrategy;
+import org.openrdf.model.Literal;
+import org.openrdf.model.URI;
+import org.openrdf.model.Value;
+import org.openrdf.model.ValueFactory;
+import org.openrdf.model.impl.BNodeImpl;
+import org.openrdf.model.impl.LiteralImpl;
+import org.openrdf.model.impl.URIImpl;
+import org.openrdf.model.impl.ValueFactoryImpl;
+
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static mvm.rya.api.RdfCloudTripleStoreConstants.TABLE_LAYOUT;
+
+public class RdfCloudTripleStoreUtils {
+
+ public static ValueFactory valueFactory = new ValueFactoryImpl();
+ public static final Pattern literalPattern = Pattern.compile("^\"(.*?)\"((\\^\\^<(.+?)>)$|(@(.{2}))$)");
+
+// public static byte[] writeValue(Value value) throws IOException {
+// return RdfIO.writeValue(value);
+//// if (value == null)
+//// return new byte[]{};
+//// ByteArrayDataOutput dataOut = ByteStreams.newDataOutput();
+//// if (value instanceof URI) {
+//// dataOut.writeByte(RdfCloudTripleStoreConstants.URI_MARKER);
+//// writeString(((URI) value).toString(), dataOut);
+//// } else if (value instanceof BNode) {
+//// dataOut.writeByte(RdfCloudTripleStoreConstants.BNODE_MARKER);
+//// writeString(((BNode) value).getID(), dataOut);
+//// } else if (value instanceof Literal) {
+//// Literal lit = (Literal) value;
+////
+//// String label = lit.getLabel();
+//// String language = lit.getLanguage();
+//// URI datatype = lit.getDatatype();
+////
+//// if (datatype != null) {
+//// dataOut.writeByte(RdfCloudTripleStoreConstants.DATATYPE_LITERAL_MARKER);
+//// writeString(label, dataOut);
+//// dataOut.write(writeValue(datatype));
+//// } else if (language != null) {
+//// dataOut.writeByte(RdfCloudTripleStoreConstants.LANG_LITERAL_MARKER);
+//// writeString(label, dataOut);
+//// writeString(language, dataOut);
+//// } else {
+//// dataOut.writeByte(RdfCloudTripleStoreConstants.PLAIN_LITERAL_MARKER);
+//// writeString(label, dataOut);
+//// }
+//// } else {
+//// throw new IllegalArgumentException("unexpected value type: "
+//// + value.getClass());
+//// }
+//// return dataOut.toByteArray();
+// }
+
+// public static Value readValue(ByteArrayDataInput dataIn, ValueFactory vf)
+// throws IOException, ClassCastException {
+// return RdfIO.readValue(dataIn, vf, DELIM_BYTE);
+//// int valueTypeMarker;
+//// try {
+//// valueTypeMarker = dataIn.readByte();
+//// } catch (Exception e) {
+//// return null;
+//// }
+////
+//// Value ret = null;
+//// if (valueTypeMarker == RdfCloudTripleStoreConstants.URI_MARKER) {
+//// String uriString = readString(dataIn);
+//// ret = vf.createURI(uriString);
+//// } else if (valueTypeMarker == RdfCloudTripleStoreConstants.BNODE_MARKER) {
+//// String bnodeID = readString(dataIn);
+//// ret = vf.createBNode(bnodeID);
+//// } else if (valueTypeMarker == RdfCloudTripleStoreConstants.PLAIN_LITERAL_MARKER) {
+//// String label = readString(dataIn);
+//// ret = vf.createLiteral(label);
+//// } else if (valueTypeMarker == RdfCloudTripleStoreConstants.LANG_LITERAL_MARKER) {
+//// String label = readString(dataIn);
+//// String language = readString(dataIn);
+//// ret = vf.createLiteral(label, language);
+//// } else if (valueTypeMarker == RdfCloudTripleStoreConstants.DATATYPE_LITERAL_MARKER) {
+//// String label = readString(dataIn);
+//// URI datatype = (URI) readValue(dataIn, vf);
+//// ret = vf.createLiteral(label, datatype);
+//// } else {
+//// throw new InvalidValueTypeMarkerRuntimeException(valueTypeMarker, "Invalid value type marker: "
+//// + valueTypeMarker);
+//// }
+////
+//// return ret;
+// }
+
+// public static void writeString(String s, ByteArrayDataOutput dataOut)
+// throws IOException {
+// dataOut.writeUTF(s);
+// }
+//
+// public static String readString(ByteArrayDataInput dataIn)
+// throws IOException {
+// return dataIn.readUTF();
+// }
+//
+// public static byte[] writeContexts(Resource... contexts) throws IOException {
+// if (contexts != null) {
+// ByteArrayDataOutput cntxout = ByteStreams.newDataOutput();
+// for (Resource resource : contexts) {
+// final byte[] context_bytes = RdfCloudTripleStoreUtils
+// .writeValue(resource);
+// cntxout.write(context_bytes);
+// cntxout.write(RdfCloudTripleStoreConstants.DELIM_BYTES);
+// }
+// return cntxout.toByteArray();
+// } else
+// return new byte[]{};
+// }
+//
+// public static List<Resource> readContexts(byte[] cont_arr, ValueFactory vf)
+// throws IOException {
+// List<Resource> contexts = new ArrayList<Resource>();
+// String conts_str = new String(cont_arr);
+// String[] split = conts_str.split(RdfCloudTripleStoreConstants.DELIM);
+// for (String string : split) {
+// contexts.add((Resource) RdfCloudTripleStoreUtils.readValue(ByteStreams
+// .newDataInput(string.getBytes()), vf));
+// }
+// return contexts;
+// }
+
+// public static Statement translateStatementFromRow(ByteArrayDataInput input, Text context, TABLE_LAYOUT tble, ValueFactory vf) throws IOException {
+// Resource subject;
+// URI predicate;
+// Value object;
+// if (TABLE_LAYOUT.SPO.equals(tble)) {
+// subject = (Resource) RdfCloudTripleStoreUtils.readValue(input, vf);
+// predicate = (URI) RdfCloudTripleStoreUtils.readValue(input, vf);
+// object = RdfCloudTripleStoreUtils.readValue(input, vf);
+// } else if (TABLE_LAYOUT.OSP.equals(tble)) {
+// object = RdfCloudTripleStoreUtils.readValue(input, vf);
+// subject = (Resource) RdfCloudTripleStoreUtils.readValue(input, vf);
+// predicate = (URI) RdfCloudTripleStoreUtils.readValue(input, vf);
+// } else if (TABLE_LAYOUT.PO.equals(tble)) {
+// predicate = (URI) RdfCloudTripleStoreUtils.readValue(input, vf);
+// object = RdfCloudTripleStoreUtils.readValue(input, vf);
+// subject = (Resource) RdfCloudTripleStoreUtils.readValue(input, vf);
+// } else {
+// throw new IllegalArgumentException("Table[" + tble + "] is not valid");
+// }
+// if (context == null || INFO_TXT.equals(context))
+// return new StatementImpl(subject, predicate, object); //default graph
+// else
+// return new ContextStatementImpl(subject, predicate, object, (Resource) readValue(ByteStreams.newDataInput(context.getBytes()), vf)); //TODO: Seems like a perf hog
+// }
+
+// public static byte[] buildRowWith(byte[] bytes_one, byte[] bytes_two, byte[] bytes_three) throws IOException {
+// ByteArrayDataOutput rowidout = ByteStreams.newDataOutput();
+// rowidout.write(bytes_one);
+// rowidout.writeByte(DELIM_BYTE);
+//// rowidout.write(RdfCloudTripleStoreConstants.DELIM_BYTES);
+// rowidout.write(bytes_two);
+// rowidout.writeByte(DELIM_BYTE);
+//// rowidout.write(RdfCloudTripleStoreConstants.DELIM_BYTES);
+// rowidout.write(bytes_three);
+// return truncateRowId(rowidout.toByteArray());
+// }
+
+// public static byte[] truncateRowId(byte[] byteArray) {
+// if (byteArray.length > 32000) {
+// ByteArrayDataOutput stream = ByteStreams.newDataOutput();
+// stream.write(byteArray, 0, 32000);
+// return stream.toByteArray();
+// }
+// return byteArray;
+// }
+
+
+ public static class CustomEntry<T, U> implements Map.Entry<T, U> {
+
+ private T key;
+ private U value;
+
+ public CustomEntry(T key, U value) {
+ this.key = key;
+ this.value = value;
+ }
+
+ @Override
+ public T getKey() {
+ return key;
+ }
+
+ @Override
+ public U getValue() {
+ return value;
+ }
+
+ public T setKey(T key) {
+ this.key = key;
+ return this.key;
+ }
+
+ @Override
+ public U setValue(U value) {
+ this.value = value;
+ return this.value;
+ }
+
+ @Override
+ public String toString() {
+ return "CustomEntry{" +
+ "key=" + key +
+ ", value=" + value +
+ '}';
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ CustomEntry that = (CustomEntry) o;
+
+ if (key != null ? !key.equals(that.key) : that.key != null) return false;
+ if (value != null ? !value.equals(that.value) : that.value != null) return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = key != null ? key.hashCode() : 0;
+ result = 31 * result + (value != null ? value.hashCode() : 0);
+ return result;
+ }
+ }
+
+ /**
+ * If value is a URI, then return as URI, otherwise return namespace/value as the URI
+ *
+ * @param namespace
+ * @param value
+ * @return
+ */
+ public static URI convertToUri(String namespace, String value) {
+ if (value == null)
+ return null;
+ URI subjUri;
+ try {
+ subjUri = valueFactory.createURI(value);
+ } catch (Exception e) {
+ //not uri
+ if (namespace == null)
+ return null;
+ subjUri = valueFactory.createURI(namespace, value);
+ }
+ return subjUri;
+ }
+
+ public static Literal convertToDataTypeLiteral(String s) {
+ int i = s.indexOf("^^");
+ if (i != -1) {
+ String val = s.substring(1, i - 1);
+ int dt_i_start = i + 2;
+ int dt_i_end = s.length();
+ if (s.charAt(dt_i_start) == '<') {
+ dt_i_start = dt_i_start + 1;
+ dt_i_end = dt_i_end - 1;
+ }
+
+ String dataType = s.substring(dt_i_start, dt_i_end);
+ return valueFactory.createLiteral(val, valueFactory.createURI(dataType));
+ }
+ return null;
+ }
+
+ public static boolean isDataTypeLiteral(String lit) {
+ return lit != null && lit.indexOf("^^") != -1;
+ }
+
+ public static boolean isUri(String uri) {
+ if (uri == null) return false;
+ try {
+ valueFactory.createURI(uri);
+ } catch (Exception e) {
+ return false;
+ }
+ return true;
+ }
+
+
+// public static boolean isQueryTimeBased(Configuration conf) {
+// return (conf != null && conf.getBoolean(RdfCloudTripleStoreConfiguration.CONF_ISQUERYTIMEBASED, false));
+// }
+//
+// public static void setQueryTimeBased(Configuration conf, boolean timeBased) {
+// if (conf != null)
+// conf.setBoolean(RdfCloudTripleStoreConfiguration.CONF_ISQUERYTIMEBASED, isQueryTimeBased(conf) || timeBased);
+// }
+
+
+// public static void addTimeIndexUri(Configuration conf, URI timeUri, Class<? extends TtlValueConverter> ttlValueConvClass) {
+// String[] timeIndexUris = conf.getStrings(RdfCloudTripleStoreConfiguration.CONF_TIMEINDEXURIS);
+// if (timeIndexUris == null)
+// timeIndexUris = new String[0];
+// List<String> stringList = new ArrayList<String>(Arrays.asList(timeIndexUris));
+// String timeUri_s = timeUri.stringValue();
+// if (!stringList.contains(timeUri_s))
+// stringList.add(timeUri_s);
+// conf.setStrings(RdfCloudTripleStoreConfiguration.CONF_TIMEINDEXURIS, stringList.toArray(new String[stringList.size()]));
+// conf.set(timeUri_s, ttlValueConvClass.getName());
+// }
+
+// public static Class<? extends TtlValueConverter> getTtlValueConverter(Configuration conf, URI predicate) throws ClassNotFoundException {
+// if (predicate == null)
+// return null;
+//
+// String[] s = conf.getStrings(RdfCloudTripleStoreConfiguration.CONF_TIMEINDEXURIS);
+// if (s == null)
+// return null;
+//
+// for (String uri : s) {
+// if (predicate.stringValue().equals(uri)) {
+// return (Class<? extends TtlValueConverter>) RdfCloudTripleStoreUtils.class.getClassLoader().loadClass(conf.get(uri));
+// }
+// }
+// return null;
+// }
+
+ public static String layoutToTable(TABLE_LAYOUT layout, RdfCloudTripleStoreConfiguration conf) {
+ TableLayoutStrategy tableLayoutStrategy = conf.getTableLayoutStrategy();
+ return layoutToTable(layout, tableLayoutStrategy);
+ }
+
+ public static String layoutToTable(TABLE_LAYOUT layout, TableLayoutStrategy tableLayoutStrategy) {
+ if (tableLayoutStrategy == null) {
+ tableLayoutStrategy = new TablePrefixLayoutStrategy();
+ }
+ switch (layout) {
+ case SPO: {
+ return tableLayoutStrategy.getSpo();
+ }
+ case PO: {
+ return tableLayoutStrategy.getPo();
+ }
+ case OSP: {
+ return tableLayoutStrategy.getOsp();
+ }
+ }
+ return null;
+ }
+
+ public static String layoutPrefixToTable(TABLE_LAYOUT layout, String prefix) {
+ return layoutToTable(layout, new TablePrefixLayoutStrategy(prefix));
+ }
+
+ //helper methods to createValue
+ public static Value createValue(String resource) {
+ if (isBNode(resource))
+ return new BNodeImpl(resource.substring(2));
+ Literal literal;
+ if ((literal = makeLiteral(resource)) != null)
+ return literal;
+ if (resource.contains(":") || resource.contains("/") || resource.contains("#")) {
+ return new URIImpl(resource);
+ } else {
+ throw new RuntimeException((new StringBuilder()).append(resource).append(" is not a valid URI, blank node, or literal value").toString());
+ }
+ }
+
+ public static boolean isBNode(String resource) {
+ return resource.length() > 2 && resource.startsWith("_:");
+ }
+
+ public static boolean isLiteral(String resource) {
+ return literalPattern.matcher(resource).matches() || resource.startsWith("\"") && resource.endsWith("\"") && resource.length() > 1;
+ }
+
+ public static boolean isURI(String resource) {
+ return !isBNode(resource) && !isLiteral(resource) && (resource.contains(":") || resource.contains("/") || resource.contains("#"));
+ }
+
+ public static Literal makeLiteral(String resource) {
+ Matcher matcher = literalPattern.matcher(resource);
+ if (matcher.matches())
+ if (null != matcher.group(4))
+ return new LiteralImpl(matcher.group(1), new URIImpl(matcher.group(4)));
+ else
+ return new LiteralImpl(matcher.group(1), matcher.group(6));
+ if (resource.startsWith("\"") && resource.endsWith("\"") && resource.length() > 1)
+ return new LiteralImpl(resource.substring(1, resource.length() - 1));
+ else
+ return null;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/main/java/org/apache/rya/api/client/BatchUpdatePCJ.java
----------------------------------------------------------------------
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/client/BatchUpdatePCJ.java b/common/rya.api/src/main/java/org/apache/rya/api/client/BatchUpdatePCJ.java
new file mode 100644
index 0000000..d6f3454
--- /dev/null
+++ b/common/rya.api/src/main/java/org/apache/rya/api/client/BatchUpdatePCJ.java
@@ -0,0 +1,40 @@
+/*
+ * 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 mvm.rya.api.client;
+
+import javax.annotation.ParametersAreNonnullByDefault;
+
+/**
+ * Batch update a PCJ index.
+ */
+@ParametersAreNonnullByDefault
+public interface BatchUpdatePCJ {
+
+ /**
+ * Batch update a specific PCJ index using the {@link Statement}s that are
+ * currently in the Rya instance.
+ *
+ * @param ryaInstanceName - The Rya instance whose PCJ will be updated. (not null)
+ * @param pcjId - Identifies the PCJ index to update. (not null)
+ * @throws InstanceDoesNotExistException No instance of Rya exists for the provided name.
+ * @throws PCJDoesNotExistException No PCJ exists for the provided PCJ ID.
+ * @throws RyaClientException Something caused the command to fail.
+ */
+ public void batchUpdate(String ryaInstanceName, String pcjId) throws InstanceDoesNotExistException, PCJDoesNotExistException, RyaClientException;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/main/java/org/apache/rya/api/client/CreatePCJ.java
----------------------------------------------------------------------
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/client/CreatePCJ.java b/common/rya.api/src/main/java/org/apache/rya/api/client/CreatePCJ.java
new file mode 100644
index 0000000..ae22ffe
--- /dev/null
+++ b/common/rya.api/src/main/java/org/apache/rya/api/client/CreatePCJ.java
@@ -0,0 +1,40 @@
+/**
+ * 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 mvm.rya.api.client;
+
+import javax.annotation.ParametersAreNonnullByDefault;
+
+/**
+ * Create a new PCJ within the target instance of Rya.
+ */
+@ParametersAreNonnullByDefault
+public interface CreatePCJ {
+
+ /**
+ * Designate a new PCJ that will be maintained by the target instance of Rya.
+ *
+ * @param instanceName - Indicates which Rya instance will create and maintain
+ * the PCJ. (not null)
+ * @param sparql - The SPARQL query that will be maintained. (not null)
+ * @return The ID that was assigned to this newly created PCJ.
+ * @throws InstanceDoesNotExistException No instance of Rya exists for the provided name.
+ * @throws RyaClientException Something caused the command to fail.
+ */
+ public String createPCJ(final String instanceName, String sparql) throws InstanceDoesNotExistException, RyaClientException;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/main/java/org/apache/rya/api/client/DeletePCJ.java
----------------------------------------------------------------------
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/client/DeletePCJ.java b/common/rya.api/src/main/java/org/apache/rya/api/client/DeletePCJ.java
new file mode 100644
index 0000000..92b6b71
--- /dev/null
+++ b/common/rya.api/src/main/java/org/apache/rya/api/client/DeletePCJ.java
@@ -0,0 +1,38 @@
+/**
+ * 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 mvm.rya.api.client;
+
+import javax.annotation.ParametersAreNonnullByDefault;
+
+/**
+ * Deletes a PCJ from an instance of Rya.
+ */
+@ParametersAreNonnullByDefault
+public interface DeletePCJ {
+
+ /**
+ * Deletes a PCJ from an instance of Rya.
+ *
+ * @param instanceName - Indicates which Rya instance is maintaining the PCJ. (not null)
+ * @param pcjId - The ID of the PCJ that will be deleted. (not null)
+ * @throws InstanceDoesNotExistException No instance of Rya exists for the provided name.
+ * @throws RyaClientException Something caused the command to fail.
+ */
+ public void deletePCJ(String instanceName, final String pcjId) throws InstanceDoesNotExistException, RyaClientException;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/main/java/org/apache/rya/api/client/GetInstanceDetails.java
----------------------------------------------------------------------
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/client/GetInstanceDetails.java b/common/rya.api/src/main/java/org/apache/rya/api/client/GetInstanceDetails.java
new file mode 100644
index 0000000..536b5a8
--- /dev/null
+++ b/common/rya.api/src/main/java/org/apache/rya/api/client/GetInstanceDetails.java
@@ -0,0 +1,44 @@
+/**
+ * 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 mvm.rya.api.client;
+
+import javax.annotation.ParametersAreNonnullByDefault;
+
+import com.google.common.base.Optional;
+
+import mvm.rya.api.instance.RyaDetails;
+
+/**
+ * Get configuration and maintenance information about a specific instance of Rya.
+ */
+@ParametersAreNonnullByDefault
+public interface GetInstanceDetails {
+
+ /**
+ * Get configuration and maintenance information about a specific instance of Rya.
+ *
+ * @param instanceName - Indicates which Rya instance to fetch the details from. (not null)
+ * @return The {@link RyaDetails} that describe the instance of Rya. If this is
+ * an older version of Rya, then there may not be any details to fetch. If
+ * this is the case, empty is returned.
+ * @throws InstanceDoesNotExistException No instance of Rya exists for the provided name.
+ * @throws RyaClientException Something caused the command to fail.
+ */
+ public Optional<RyaDetails> getDetails(final String instanceName) throws InstanceDoesNotExistException, RyaClientException;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/main/java/org/apache/rya/api/client/Install.java
----------------------------------------------------------------------
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/client/Install.java b/common/rya.api/src/main/java/org/apache/rya/api/client/Install.java
new file mode 100644
index 0000000..28a0dc5
--- /dev/null
+++ b/common/rya.api/src/main/java/org/apache/rya/api/client/Install.java
@@ -0,0 +1,268 @@
+/**
+ * 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 mvm.rya.api.client;
+
+import static java.util.Objects.requireNonNull;
+
+import java.util.Objects;
+
+import javax.annotation.Nullable;
+import javax.annotation.ParametersAreNonnullByDefault;
+import javax.annotation.concurrent.Immutable;
+
+import com.google.common.base.Optional;
+
+/**
+ * Installs a new instance of Rya.
+ */
+@ParametersAreNonnullByDefault
+public interface Install {
+
+ /**
+ * Install a new instance of Rya.
+ *
+ * @param instanceName - Indicates the name of the Rya instance to install. (not null)
+ * @param installConfig - Configures how the Rya instance will operate. The
+ * instance name that is in this variable must match the {@code instanceName}. (not null)
+ * @throws DuplicateInstanceNameException A Rya instance already exists for the provided name.
+ * @throws RyaClientException Something caused the command to fail.
+ */
+ public void install(final String instanceName, final InstallConfiguration installConfig) throws DuplicateInstanceNameException, RyaClientException;
+
+ /**
+ * A Rya instance already exists for the provided name.
+ */
+ public static class DuplicateInstanceNameException extends RyaClientException {
+ private static final long serialVersionUID = 1L;
+
+ public DuplicateInstanceNameException(final String message) {
+ super(message);
+ }
+ }
+
+ /**
+ * Configures how an instance of Rya will be configured when it is installed.
+ */
+ @Immutable
+ @ParametersAreNonnullByDefault
+ public static class InstallConfiguration {
+
+ private final boolean enableTableHashPrefix;
+ private final boolean enableFreeTextIndex;
+ private final boolean enableGeoIndex;
+ private final boolean enableEntityCentricIndex;
+ private final boolean enableTemporalIndex;
+ private final boolean enablePcjIndex;
+ private final Optional<String> fluoPcjAppName;
+
+ /**
+ * Use a {@link Builder} to create instances of this class.
+ */
+ private InstallConfiguration(
+ final boolean enableTableHashPrefix,
+ final boolean enableFreeTextIndex,
+ final boolean enableGeoIndex,
+ final boolean enableEntityCentricIndex,
+ final boolean enableTemporalIndex,
+ final boolean enablePcjIndex,
+ final Optional<String> fluoPcjAppName) {
+ this.enableTableHashPrefix = requireNonNull(enableTableHashPrefix);
+ this.enableFreeTextIndex = requireNonNull(enableFreeTextIndex);
+ this.enableGeoIndex = requireNonNull(enableGeoIndex);
+ this.enableEntityCentricIndex = requireNonNull(enableEntityCentricIndex);
+ this.enableTemporalIndex = requireNonNull(enableTemporalIndex);
+ this.enablePcjIndex = requireNonNull(enablePcjIndex);
+ this.fluoPcjAppName = requireNonNull(fluoPcjAppName);
+ }
+
+ /**
+ * @return Whether or not the installed instance of Rya will include table prefix hashing.
+ */
+ public boolean isTableHashPrefixEnabled() {
+ return enableTableHashPrefix;
+ }
+
+ /**
+ * @return Whether or not the installed instance of Rya will maintain a Free Text index.
+ */
+ public boolean isFreeTextIndexEnabled() {
+ return enableFreeTextIndex;
+ }
+
+ /**
+ * @return Whether or not the installed instance of Rya will maintain a Geospatial index.
+ */
+ public boolean isGeoIndexEnabled() {
+ return enableGeoIndex;
+ }
+
+ /**
+ * @return Whether or not the installed instance of Rya will maintain an Entity Centric index.
+ */
+ public boolean isEntityCentrixIndexEnabled() {
+ return enableEntityCentricIndex;
+ }
+
+ /**
+ * @return Whether or not the installed instance of Rya will maintain a Temporal index.
+ */
+ public boolean isTemporalIndexEnabled() {
+ return enableTemporalIndex;
+ }
+
+ /**
+ * @return Whether or not the installed instance of Rya will maintain a PCJ index.
+ */
+ public boolean isPcjIndexEnabled() {
+ return enablePcjIndex;
+ }
+
+ /**
+ * @return The name of the Fluo application that updates this instance of Rya's PCJs.
+ * Optional because this does not have to be the update paradigm used.
+ */
+ public Optional<String> getFluoPcjAppName() {
+ return fluoPcjAppName;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(
+ enableTableHashPrefix,
+ enableFreeTextIndex,
+ enableGeoIndex,
+ enableEntityCentricIndex,
+ enableTemporalIndex,
+ enablePcjIndex,
+ fluoPcjAppName);
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+ if(this == obj) {
+ return true;
+ }
+ if(obj instanceof InstallConfiguration) {
+ final InstallConfiguration config = (InstallConfiguration) obj;
+ return enableTableHashPrefix == config.enableTableHashPrefix &&
+ enableFreeTextIndex == config.enableFreeTextIndex &&
+ enableGeoIndex == config.enableGeoIndex &&
+ enableEntityCentricIndex == config.enableEntityCentricIndex &&
+ enableTemporalIndex == config.enableTemporalIndex &&
+ enablePcjIndex == config.enablePcjIndex &&
+ Objects.equals(fluoPcjAppName, config.fluoPcjAppName);
+ }
+ return false;
+ }
+
+ /**
+ * @return An empty instance of {@link Builder}.
+ */
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ /**
+ * Builds instances of {@link InstallConfiguration}.
+ */
+ @ParametersAreNonnullByDefault
+ public static class Builder {
+ private boolean enableTableHashPrefix = false;
+ private boolean enableFreeTextIndex = false;
+ private boolean enableGeoIndex = false;
+ private boolean enableEntityCentricIndex = false;
+ private boolean enableTemporalIndex = false;
+ private boolean enablePcjIndex = false;
+ private String fluoPcjAppName = null;
+
+ /**
+ * @param enabled - Whether or not the installed instance of Rya will include table prefix hashing.
+ * @return This {@link Builder} so that method invocations may be chained.
+ */
+ public Builder setEnableTableHashPrefix(final boolean enabled) {
+ enableTableHashPrefix = enabled;
+ return this;
+ }
+
+ /**
+ * @param enabled - Whether or not the installed instance of Rya will maintain a Free Text index.
+ * @return This {@link Builder} so that method invocations may be chained.
+ */
+ public Builder setEnableFreeTextIndex(final boolean enabled) {
+ enableFreeTextIndex = enabled;
+ return this;
+ }
+
+ /**
+ * @param enabled - Whether or not the installed instance of Rya will maintain a Geospatial index.
+ * @return This {@link Builder} so that method invocations may be chained.
+ */
+ public Builder setEnableGeoIndex(final boolean enabled) {
+ enableGeoIndex = enabled;
+ return this;
+ }
+
+ /**
+ * @param enabled - Whether or not the installed instance of Rya will maintain an Entity Centric index.
+ * @return This {@link Builder} so that method invocations may be chained.
+ */
+ public Builder setEnableEntityCentricIndex(final boolean enabled) {
+ enableEntityCentricIndex = enabled;
+ return this;
+ }
+
+ /**
+ * @param enabled - Whether or not the installed instance of Rya will maintain a Temporal index.
+ * @return This {@link Builder} so that method invocations may be chained.
+ */
+ public Builder setEnableTemporalIndex(final boolean enabled) {
+ enableTemporalIndex = enabled;
+ return this;
+ }
+
+ /**
+ * @param enabled - Whether or not the installed instance of Rya will maintain a PCJ index.
+ * @return This {@link Builder} so that method invocations may be chained.
+ */
+ public Builder setEnablePcjIndex(final boolean enabled) {
+ enablePcjIndex = enabled;
+ return this;
+ }
+
+ public Builder setFluoPcjAppName(@Nullable final String fluoPcjAppName) {
+ this.fluoPcjAppName = fluoPcjAppName;
+ return this;
+ }
+
+ /**
+ * @return Builds an instance of {@link InstallConfiguration} using this builder's values.
+ */
+ public InstallConfiguration build() {
+ return new InstallConfiguration(
+ enableTableHashPrefix,
+ enableFreeTextIndex,
+ enableGeoIndex,
+ enableEntityCentricIndex,
+ enableTemporalIndex,
+ enablePcjIndex,
+ Optional.fromNullable(fluoPcjAppName));
+ }
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/main/java/org/apache/rya/api/client/InstanceDoesNotExistException.java
----------------------------------------------------------------------
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/client/InstanceDoesNotExistException.java b/common/rya.api/src/main/java/org/apache/rya/api/client/InstanceDoesNotExistException.java
new file mode 100644
index 0000000..c8cc0aa
--- /dev/null
+++ b/common/rya.api/src/main/java/org/apache/rya/api/client/InstanceDoesNotExistException.java
@@ -0,0 +1,38 @@
+/**
+ * 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 mvm.rya.api.client;
+
+import javax.annotation.ParametersAreNonnullByDefault;
+
+/**
+ * One of the {@link RyaClient} commands could not execute because the connected
+ * instance of Rya does not exist.
+ */
+@ParametersAreNonnullByDefault
+public class InstanceDoesNotExistException extends RyaClientException {
+ private static final long serialVersionUID = 1L;
+
+ public InstanceDoesNotExistException(final String message) {
+ super(message);
+ }
+
+ public InstanceDoesNotExistException(final String message, final Throwable cause) {
+ super(message, cause);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/main/java/org/apache/rya/api/client/InstanceExists.java
----------------------------------------------------------------------
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/client/InstanceExists.java b/common/rya.api/src/main/java/org/apache/rya/api/client/InstanceExists.java
new file mode 100644
index 0000000..6f26fc6
--- /dev/null
+++ b/common/rya.api/src/main/java/org/apache/rya/api/client/InstanceExists.java
@@ -0,0 +1,37 @@
+/**
+ * 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 mvm.rya.api.client;
+
+import javax.annotation.ParametersAreNonnullByDefault;
+
+/**
+ * Checks if an instance of Rya has been installed.
+ */
+@ParametersAreNonnullByDefault
+public interface InstanceExists {
+
+ /**
+ * Checks if an instance of Rya has been installed.
+ *
+ * @param instanceName - The name to check. (not null)
+ * @return {@code true} If an instance of Rya exists with the provided name; otherwise {@code false}.
+ * @throws RyaClientException Something caused the command to fail.
+ */
+ public boolean exists(String instanceName) throws RyaClientException;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/main/java/org/apache/rya/api/client/ListInstances.java
----------------------------------------------------------------------
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/client/ListInstances.java b/common/rya.api/src/main/java/org/apache/rya/api/client/ListInstances.java
new file mode 100644
index 0000000..5edfbc4
--- /dev/null
+++ b/common/rya.api/src/main/java/org/apache/rya/api/client/ListInstances.java
@@ -0,0 +1,38 @@
+/**
+ * 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 mvm.rya.api.client;
+
+import java.util.List;
+
+import javax.annotation.ParametersAreNonnullByDefault;
+
+/**
+ * List the names of the installed Rya instances.
+ */
+@ParametersAreNonnullByDefault
+public interface ListInstances {
+
+ /**
+ * List the names of the installed Rya instances.
+ *
+ * @return The names of the installed Rya Instances.
+ * @throws RyaClientException Something caused the command to fail.
+ */
+ public List<String> listInstances() throws RyaClientException;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/main/java/org/apache/rya/api/client/PCJDoesNotExistException.java
----------------------------------------------------------------------
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/client/PCJDoesNotExistException.java b/common/rya.api/src/main/java/org/apache/rya/api/client/PCJDoesNotExistException.java
new file mode 100644
index 0000000..89f095f
--- /dev/null
+++ b/common/rya.api/src/main/java/org/apache/rya/api/client/PCJDoesNotExistException.java
@@ -0,0 +1,38 @@
+/*
+ * 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 mvm.rya.api.client;
+
+import javax.annotation.ParametersAreNonnullByDefault;
+
+/**
+ * One of the {@link RyaClient} commands could not execute because the connected
+ * instance of Rya does not have a PCJ matching the provided PCJ ID.
+ */
+@ParametersAreNonnullByDefault
+public class PCJDoesNotExistException extends RyaClientException {
+ private static final long serialVersionUID = 1L;
+
+ public PCJDoesNotExistException(final String message) {
+ super(message);
+ }
+
+ public PCJDoesNotExistException(final String message, final Throwable cause) {
+ super(message, cause);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/main/java/org/apache/rya/api/client/RyaClient.java
----------------------------------------------------------------------
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/client/RyaClient.java b/common/rya.api/src/main/java/org/apache/rya/api/client/RyaClient.java
new file mode 100644
index 0000000..851a273
--- /dev/null
+++ b/common/rya.api/src/main/java/org/apache/rya/api/client/RyaClient.java
@@ -0,0 +1,112 @@
+/**
+ * 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 mvm.rya.api.client;
+
+import static java.util.Objects.requireNonNull;
+
+import javax.annotation.ParametersAreNonnullByDefault;
+import javax.annotation.concurrent.Immutable;
+
+/**
+ * Provides access to a set of Rya functions.
+ */
+@Immutable
+@ParametersAreNonnullByDefault
+public class RyaClient {
+ // Administrative functions.
+ private final Install install;
+ private final CreatePCJ createPcj;
+ private final DeletePCJ deletePcj;
+ private final BatchUpdatePCJ batchUpdatePcj;
+ private final GetInstanceDetails getInstanceDetails;
+ private final InstanceExists instanceExists;
+ private final ListInstances listInstances;
+
+ /**
+ * Constructs an instance of {@link RyaClient}.
+ */
+ public RyaClient(
+ final Install install,
+ final CreatePCJ createPcj,
+ final DeletePCJ deletePcj,
+ final BatchUpdatePCJ batchUpdatePcj,
+ final GetInstanceDetails getInstanceDetails,
+ final InstanceExists instanceExists,
+ final ListInstances listInstances) {
+ this.install = requireNonNull(install);
+ this.createPcj = requireNonNull(createPcj);
+ this.deletePcj = requireNonNull(deletePcj);
+ this.batchUpdatePcj = requireNonNull(batchUpdatePcj);
+ this.getInstanceDetails = requireNonNull(getInstanceDetails);
+ this.instanceExists = requireNonNull(instanceExists);
+ this.listInstances = requireNonNull(listInstances);
+ }
+
+ /**
+ * @return An instance of {@link Install} that is connected to a Rya storage.
+ */
+ public Install getInstall() {
+ return install;
+ }
+
+ /**
+ * @return An instance of {@link CreatePCJ} that is connected to a Rya storage
+ * if the Rya instance supports PCJ indexing.
+ */
+ public CreatePCJ getCreatePCJ() {
+ return createPcj;
+ }
+
+ /**
+ * @return An instance of {@link DeletePCJ} that is connected to a Rya storage
+ * if the Rya instance supports PCJ indexing.
+ */
+ public DeletePCJ getDeletePCJ() {
+ return deletePcj;
+ }
+
+ /**
+ * @return An instnace of {@link BatchUpdatePCJ} that is connected to a Rya storage
+ * if the Rya instance supports PCJ indexing.
+ */
+ public BatchUpdatePCJ getBatchUpdatePCJ() {
+ return batchUpdatePcj;
+ }
+
+ /**
+ * @return An instance of {@link GetInstanceDetails} that is connected to a Rya storage.
+ */
+ public GetInstanceDetails getGetInstanceDetails() {
+ return getInstanceDetails;
+ }
+
+ /**
+ * @return An instance of {@link ListInstances} that is connected to a Rya storage.
+ */
+ public ListInstances getListInstances() {
+ return listInstances;
+ }
+
+ /**
+ * @return An instance of {@link InstanceExists} that is connected to a Rya storage.
+ */
+ public InstanceExists getInstanceExists() {
+ return instanceExists;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/main/java/org/apache/rya/api/client/RyaClientException.java
----------------------------------------------------------------------
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/client/RyaClientException.java b/common/rya.api/src/main/java/org/apache/rya/api/client/RyaClientException.java
new file mode 100644
index 0000000..28c78aa
--- /dev/null
+++ b/common/rya.api/src/main/java/org/apache/rya/api/client/RyaClientException.java
@@ -0,0 +1,37 @@
+/**
+ * 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 mvm.rya.api.client;
+
+import javax.annotation.ParametersAreNonnullByDefault;
+
+/**
+ * One of the {@link RyaClient} functions failed.
+ */
+@ParametersAreNonnullByDefault
+public class RyaClientException extends Exception {
+ private static final long serialVersionUID = 1L;
+
+ public RyaClientException(final String message) {
+ super(message);
+ }
+
+ public RyaClientException(final String message, final Throwable cause) {
+ super(message, cause);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/main/java/org/apache/rya/api/date/DateTimeTtlValueConverter.java
----------------------------------------------------------------------
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/date/DateTimeTtlValueConverter.java b/common/rya.api/src/main/java/org/apache/rya/api/date/DateTimeTtlValueConverter.java
new file mode 100644
index 0000000..199b63d
--- /dev/null
+++ b/common/rya.api/src/main/java/org/apache/rya/api/date/DateTimeTtlValueConverter.java
@@ -0,0 +1,80 @@
+package mvm.rya.api.date;
+
+/*
+ * 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.
+ */
+
+
+
+import org.openrdf.model.Value;
+
+import javax.xml.datatype.DatatypeConfigurationException;
+import javax.xml.datatype.DatatypeFactory;
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
+
+/**
+ * Class DateTimeTtlValueConverter
+ * @deprecated 2
+ */
+public class DateTimeTtlValueConverter implements TtlValueConverter {
+
+ private Value start, stop;
+ private TimeZone timeZone = TimeZone.getTimeZone("Zulu");
+
+ @Override
+ public void convert(String ttl, String startTime) {
+ try {
+ long start_l, stop_l;
+ long ttl_l = Long.parseLong(ttl);
+ stop_l = System.currentTimeMillis();
+ if (startTime != null)
+ stop_l = Long.parseLong(startTime);
+ start_l = stop_l - ttl_l;
+
+ GregorianCalendar cal = (GregorianCalendar) GregorianCalendar.getInstance();
+ cal.setTimeZone(getTimeZone());
+ cal.setTimeInMillis(start_l);
+ DatatypeFactory factory = DatatypeFactory.newInstance();
+ start = vf.createLiteral(factory.newXMLGregorianCalendar(cal));
+
+ cal.setTimeInMillis(stop_l);
+ stop = vf.createLiteral(factory.newXMLGregorianCalendar(cal));
+ } catch (DatatypeConfigurationException e) {
+ throw new RuntimeException("Exception occurred creating DataTypeFactory", e);
+ }
+ }
+
+ @Override
+ public Value getStart() {
+ return start;
+ }
+
+ @Override
+ public Value getStop() {
+ return stop;
+ }
+
+ public TimeZone getTimeZone() {
+ return timeZone;
+ }
+
+ public void setTimeZone(TimeZone timeZone) {
+ this.timeZone = timeZone;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/main/java/org/apache/rya/api/date/TimestampTtlStrValueConverter.java
----------------------------------------------------------------------
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/date/TimestampTtlStrValueConverter.java b/common/rya.api/src/main/java/org/apache/rya/api/date/TimestampTtlStrValueConverter.java
new file mode 100644
index 0000000..de4ff8b
--- /dev/null
+++ b/common/rya.api/src/main/java/org/apache/rya/api/date/TimestampTtlStrValueConverter.java
@@ -0,0 +1,56 @@
+package mvm.rya.api.date;
+
+/*
+ * 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.
+ */
+
+
+
+import org.openrdf.model.Value;
+
+/**
+ * Class TimestampTtlValueConverter
+ * @deprecated
+ */
+public class TimestampTtlStrValueConverter implements TtlValueConverter {
+
+ private Value start, stop;
+
+ @Override
+ public void convert(String ttl, String startTime) {
+ long start_l, stop_l;
+ long ttl_l = Long.parseLong(ttl);
+ stop_l = System.currentTimeMillis();
+ if (startTime != null)
+ stop_l = Long.parseLong(startTime);
+ start_l = stop_l - ttl_l;
+
+ start = vf.createLiteral(start_l + "");
+ stop = vf.createLiteral(stop_l + "");
+ }
+
+ @Override
+ public Value getStart() {
+ return start;
+ }
+
+ @Override
+ public Value getStop() {
+ return stop;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/main/java/org/apache/rya/api/date/TimestampTtlValueConverter.java
----------------------------------------------------------------------
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/date/TimestampTtlValueConverter.java b/common/rya.api/src/main/java/org/apache/rya/api/date/TimestampTtlValueConverter.java
new file mode 100644
index 0000000..75366dc
--- /dev/null
+++ b/common/rya.api/src/main/java/org/apache/rya/api/date/TimestampTtlValueConverter.java
@@ -0,0 +1,56 @@
+package mvm.rya.api.date;
+
+/*
+ * 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.
+ */
+
+
+
+import org.openrdf.model.Value;
+
+/**
+ * Class TimestampTtlValueConverter
+ * @deprecated
+ */
+public class TimestampTtlValueConverter implements TtlValueConverter {
+
+ private Value start, stop;
+
+ @Override
+ public void convert(String ttl, String startTime) {
+ long start_l, stop_l;
+ long ttl_l = Long.parseLong(ttl);
+ stop_l = System.currentTimeMillis();
+ if (startTime != null)
+ stop_l = Long.parseLong(startTime);
+ start_l = stop_l - ttl_l;
+
+ start = vf.createLiteral(start_l);
+ stop = vf.createLiteral(stop_l);
+ }
+
+ @Override
+ public Value getStart() {
+ return start;
+ }
+
+ @Override
+ public Value getStop() {
+ return stop;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/main/java/org/apache/rya/api/date/TtlValueConverter.java
----------------------------------------------------------------------
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/date/TtlValueConverter.java b/common/rya.api/src/main/java/org/apache/rya/api/date/TtlValueConverter.java
new file mode 100644
index 0000000..1ba9841
--- /dev/null
+++ b/common/rya.api/src/main/java/org/apache/rya/api/date/TtlValueConverter.java
@@ -0,0 +1,41 @@
+package mvm.rya.api.date;
+
+/*
+ * 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.
+ */
+
+
+
+import org.openrdf.model.Value;
+import org.openrdf.model.ValueFactory;
+import org.openrdf.model.impl.ValueFactoryImpl;
+
+/**
+ * Class TtlValueConverter
+ * @deprecated
+ */
+public interface TtlValueConverter {
+
+ ValueFactory vf = ValueFactoryImpl.getInstance();
+
+ public void convert(String ttl, String startTime);
+
+ public Value getStart();
+
+ public Value getStop();
+}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/main/java/org/apache/rya/api/domain/Node.java
----------------------------------------------------------------------
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/domain/Node.java b/common/rya.api/src/main/java/org/apache/rya/api/domain/Node.java
new file mode 100644
index 0000000..f5ca08c
--- /dev/null
+++ b/common/rya.api/src/main/java/org/apache/rya/api/domain/Node.java
@@ -0,0 +1,38 @@
+package mvm.rya.api.domain;
+
+/*
+ * 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.
+ */
+
+
+
+import org.openrdf.model.impl.URIImpl;
+
+/**
+ * A Node is an expected node in the global graph. This typing of the URI allows us to dictate the difference between a
+ * URI that is just an Attribute on the subject vs. a URI that is another subject Node in the global graph. It does not
+ * guarantee that the subject exists, just that there is an Edge to it.
+ */
+public class Node extends URIImpl {
+ public Node() {
+ }
+
+ public Node(String uriString) {
+ super(uriString);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/main/java/org/apache/rya/api/domain/RangeURI.java
----------------------------------------------------------------------
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/domain/RangeURI.java b/common/rya.api/src/main/java/org/apache/rya/api/domain/RangeURI.java
new file mode 100644
index 0000000..67d5742
--- /dev/null
+++ b/common/rya.api/src/main/java/org/apache/rya/api/domain/RangeURI.java
@@ -0,0 +1,52 @@
+package mvm.rya.api.domain;
+
+/*
+ * 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.
+ */
+
+
+
+import org.openrdf.model.URI;
+import org.openrdf.model.Value;
+
+/**
+ * Created by IntelliJ IDEA.
+ * Date: 4/11/12
+ * Time: 1:03 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class RangeURI extends RangeValue<URI> implements URI {
+
+ public RangeURI(URI start, URI end) {
+ super(start, end);
+ }
+
+ public RangeURI(RangeValue rangeValue) {
+ super((URI) rangeValue.getStart(), (URI) rangeValue.getEnd());
+ }
+
+ @Override
+ public String getNamespace() {
+ throw new UnsupportedOperationException("Ranges do not have a namespace");
+ }
+
+ @Override
+ public String getLocalName() {
+ throw new UnsupportedOperationException("Ranges do not have a localname");
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/main/java/org/apache/rya/api/domain/RangeValue.java
----------------------------------------------------------------------
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/domain/RangeValue.java b/common/rya.api/src/main/java/org/apache/rya/api/domain/RangeValue.java
new file mode 100644
index 0000000..c27edfd
--- /dev/null
+++ b/common/rya.api/src/main/java/org/apache/rya/api/domain/RangeValue.java
@@ -0,0 +1,72 @@
+package mvm.rya.api.domain;
+
+/*
+ * 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.
+ */
+
+
+
+import org.openrdf.model.Value;
+
+/**
+ * Created by IntelliJ IDEA.
+ * Date: 4/10/12
+ * Time: 3:57 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class RangeValue<T extends Value> implements Value {
+
+ private T start;
+ private T end;
+
+ public RangeValue(T start, T end) {
+ this.start = start;
+ this.end = end;
+ }
+
+ @Override
+ public String stringValue() {
+ throw new UnsupportedOperationException("Range is only supported at query time");
+ }
+
+ public T getStart() {
+ return start;
+ }
+
+ public void setStart(T start) {
+ this.start = start;
+ }
+
+ public T getEnd() {
+ return end;
+ }
+
+ public void setEnd(T end) {
+ this.end = end;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("RangeValue");
+ sb.append("{start=").append(start);
+ sb.append(", end=").append(end);
+ sb.append('}');
+ return sb.toString();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/main/java/org/apache/rya/api/domain/RyaRange.java
----------------------------------------------------------------------
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/domain/RyaRange.java b/common/rya.api/src/main/java/org/apache/rya/api/domain/RyaRange.java
new file mode 100644
index 0000000..e99f451
--- /dev/null
+++ b/common/rya.api/src/main/java/org/apache/rya/api/domain/RyaRange.java
@@ -0,0 +1,32 @@
+package mvm.rya.api.domain;
+
+/*
+ * 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.
+ */
+
+
+
+/**
+ * Date: 7/17/12
+ * Time: 10:02 AM
+ */
+public interface RyaRange {
+ public RyaType getStart();
+
+ public RyaType getStop();
+}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/common/rya.api/src/main/java/org/apache/rya/api/domain/RyaSchema.java
----------------------------------------------------------------------
diff --git a/common/rya.api/src/main/java/org/apache/rya/api/domain/RyaSchema.java b/common/rya.api/src/main/java/org/apache/rya/api/domain/RyaSchema.java
new file mode 100644
index 0000000..6744d20
--- /dev/null
+++ b/common/rya.api/src/main/java/org/apache/rya/api/domain/RyaSchema.java
@@ -0,0 +1,43 @@
+package mvm.rya.api.domain;
+
+/*
+ * 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.
+ */
+
+
+
+import mvm.rya.api.RdfCloudTripleStoreConstants;
+import org.openrdf.model.URI;
+
+/**
+ * Date: 7/16/12
+ * Time: 11:59 AM
+ */
+public class RyaSchema {
+
+ public static final String NAMESPACE = "urn:mvm.rya/2012/05#";
+ public static final String AUTH_NAMESPACE = "urn:mvm.rya/auth/2012/05#";
+ public static final String BNODE_NAMESPACE = "urn:mvm.rya/bnode/2012/07#";
+
+ //datatypes
+ public static final URI NODE = RdfCloudTripleStoreConstants.VALUE_FACTORY.createURI(NAMESPACE, "node");
+ public static final URI LANGUAGE = RdfCloudTripleStoreConstants.VALUE_FACTORY.createURI(NAMESPACE, "lang");
+
+ //functions
+ public static final URI RANGE = RdfCloudTripleStoreConstants.VALUE_FACTORY.createURI(NAMESPACE, "range");
+}