use of org.openrdf.model.Statement in project blueprints by tinkerpop.
the class PropertyGraphSailConnection method generateHeadStatement.
private void generateHeadStatement(final URI edgeUri, final URI headUri, final Collection<Statement> results) {
Statement s = context.valueFactory.createStatement(edgeUri, PropertyGraphSail.HEAD, headUri);
results.add(s);
}
use of org.openrdf.model.Statement in project blueprints by tinkerpop.
the class PropertyGraphSailConnection method vertexPropertiesWithValue.
private StatementGenerator<Vertex> vertexPropertiesWithValue(final Object value, final Literal object) {
return new StatementGenerator<Vertex>() {
public void generate(Vertex source, Collection<Statement> results) {
for (String key : source.getPropertyKeys()) {
Object v = source.getProperty(key);
if (null != v && v.equals(value)) {
URI predicate = predicateForPropertyKey(key);
Statement s = context.valueFactory.createStatement(uriForVertex(source), predicate, object);
results.add(s);
}
}
}
};
}
use of org.openrdf.model.Statement in project blueprints by tinkerpop.
the class PropertyGraphSailConnection method getStatements_xPO.
private CloseableIteration<Statement, SailException> getStatements_xPO(final URI predicate, final Value object) throws SailException {
if (predicate.equals(RDF.TYPE)) {
if (object.equals(PropertyGraphSail.VERTEX)) {
Source<Vertex> s = new Source<Vertex>(context.graph.getVertices().iterator(), vertexTypes);
return new StatementIteration(s);
} else if (object.equals(PropertyGraphSail.EDGE) && firstClassEdges) {
Source<Edge> s = new Source<Edge>(context.graph.getEdges().iterator(), edgeTypes);
return new StatementIteration(s);
} else {
return new StatementIteration();
}
} else if (predicate.equals(PropertyGraphSail.ID)) {
Object id = literalToObject(object);
if (null == id) {
return new StatementIteration();
} else {
Vertex v = context.graph.getVertex(id);
Edge e = firstClassEdges ? context.graph.getEdge(id) : null;
if (null == v && null == e) {
return new StatementIteration();
} else {
Collection<Statement> s = new LinkedList<Statement>();
if (null != v) {
vertexIds.generate(v, s);
}
if (null != e) {
edgeIds.generate(e, s);
}
return new SimpleCloseableIteration<Statement, SailException>(s.iterator());
}
}
} else if (predicate.equals(PropertyGraphSail.LABEL)) {
if (!firstClassEdges) {
return new StatementIteration();
}
// TODO: find edges faster using indices
Object label = literalToObject(object);
if (null == label || !(label instanceof String)) {
return new StatementIteration();
} else {
Source<Edge> edges = new Source<Edge>(context.graph.getEdges().iterator(), matchingLabels((String) label, object));
return new StatementIteration(edges);
}
} else if (predicate.equals(PropertyGraphSail.HEAD)) {
if (!firstClassEdges) {
return new StatementIteration();
}
Vertex v = object instanceof URI ? vertexForURI((URI) object) : null;
if (null == v) {
return new StatementIteration();
} else {
Iterator<Edge> edgeIterator = v.getEdges(Direction.IN).iterator();
Source<Edge> edges = new Source<Edge>(edgeIterator, heads);
return new StatementIteration(edges);
}
} else if (predicate.equals(PropertyGraphSail.TAIL)) {
if (!firstClassEdges) {
return new StatementIteration();
}
Vertex v = object instanceof URI ? vertexForURI((URI) object) : null;
if (null == v) {
return new StatementIteration();
} else {
Iterator<Edge> edgeIterator = v.getEdges(Direction.OUT).iterator();
Source<Edge> edges = new Source<Edge>(edgeIterator, tails);
return new StatementIteration(edges);
}
} else if (isPropertyPredicate(predicate)) {
Object value = literalToObject(object);
if (null == value) {
return new StatementIteration();
} else {
// TODO: lookup matching vertices and edges faster using indices
String key = keyFromPredicate(predicate);
Source<Vertex> vertices = new Source<Vertex>(context.graph.getVertices().iterator(), vertexPropertiesWithKeyAndValue(key, predicate, value, (Literal) object));
if (firstClassEdges) {
Source<Edge> edges = new Source<Edge>(context.graph.getEdges().iterator(), edgePropertiesWithKeyAndValue(key, predicate, value, (Literal) object));
return new StatementIteration(vertices, edges);
} else {
return new StatementIteration(vertices);
}
}
} else if (isRelationPredicate(predicate)) {
if (!(object instanceof URI)) {
return new StatementIteration();
} else {
String label = labelForRelationPredicate(predicate);
Vertex vObj = vertexForURI((URI) object);
if (null != vObj) {
Source<Vertex> s = new Source<Vertex>(new SingleItemIterator<Vertex>(vObj), new RelationGenerator(label, true));
return new StatementIteration(s);
} else {
return new StatementIteration();
}
}
} else {
return new StatementIteration();
}
}
use of org.openrdf.model.Statement in project blueprints by tinkerpop.
the class PropertyGraphSailConnection method generateVertexTypeStatement.
private void generateVertexTypeStatement(final URI uri, final Collection<Statement> results) {
Statement s = context.valueFactory.createStatement(uri, RDF.TYPE, PropertyGraphSail.VERTEX);
results.add(s);
}
use of org.openrdf.model.Statement in project blueprints by tinkerpop.
the class PropertyGraphSailConnection method matchingLabels.
private StatementGenerator<Edge> matchingLabels(final String label, final Value object) {
return new StatementGenerator<Edge>() {
public void generate(Edge source, Collection<Statement> results) {
if (source.getLabel().equals(label)) {
Statement s = context.valueFactory.createStatement(uriForEdge(source), PropertyGraphSail.LABEL, object);
results.add(s);
}
}
};
}
Aggregations