private static RyaStatement updateRyaStatementColumnVisibility(final RyaStatement ryaStatement, final ColumnVisibility newCv) { final RyaStatement newCvRyaStatement = new RyaStatement(ryaStatement.getSubject(), ryaStatement.getPredicate(), ryaStatement.getObject(), ryaStatement.getContext(), ryaStatement.getQualifer(), newCv.getExpression(), ryaStatement.getValue(), ryaStatement.getTimestamp()); return newCvRyaStatement; }
/** * Comparison method for natural ordering. Compares based on the logical * triple (the s/p/o/context information in the underlying RyaStatement) * and then by the metadata contained in the RyaStatement if the triples are * the same. * @return Zero if both RyaStatementWritables contain equivalent statements * or both have null statements; otherwise, an integer whose sign * corresponds to a consistent ordering. */ @Override public int compareTo(RyaStatementWritable other) { CompareToBuilder builder = new CompareToBuilder(); RyaStatement rsThis = this.getRyaStatement(); RyaStatement rsOther = other.getRyaStatement(); // should throw NPE if other is null, as per Comparable contract builder.append(rsThis == null, rsOther == null); if (rsThis != null && rsOther != null) { builder.append(rsThis.getSubject(), rsOther.getSubject()); builder.append(rsThis.getPredicate(), rsOther.getPredicate()); builder.append(rsThis.getObject(), rsOther.getObject()); builder.append(rsThis.getContext(), rsOther.getContext()); builder.append(rsThis.getQualifer(), rsOther.getQualifer()); builder.append(rsThis.getColumnVisibility(), rsOther.getColumnVisibility()); builder.append(rsThis.getValue(), rsOther.getValue()); builder.append(rsThis.getTimestamp(), rsOther.getTimestamp()); } return builder.toComparison(); }
@Override public Optional<RyaStatement> merge(final Optional<RyaStatement> parent, final Optional<RyaStatement> child) throws MergerException { if(parent.isPresent()) { final RyaStatement parentStatement = parent.get(); if(child.isPresent()) { final RyaStatement childStatement = child.get(); final String pVis = new String(parentStatement.getColumnVisibility(), StandardCharsets.UTF_8); final String cVis = new String(childStatement.getColumnVisibility(), StandardCharsets.UTF_8); String visibility = ""; final Joiner join = Joiner.on(")&("); if(pVis.isEmpty() || cVis.isEmpty()) { visibility = (pVis + cVis).trim(); } else { visibility = "(" + join.join(pVis, cVis) + ")"; } parentStatement.setColumnVisibility(visibility.getBytes(StandardCharsets.UTF_8)); return Optional.of(parentStatement); } return parent; } else if(child.isPresent()) { return child; } return Optional.absent(); } }
public TriplePatternStrategy retrieveStrategy(final RyaStatement stmt) { return retrieveStrategy(stmt.getSubject(), stmt.getPredicate(), stmt.getObject(), stmt.getContext()); }
private static String prettyFormat(final RyaStatement statement) { final RyaIRI s = statement.getSubject(); final RyaIRI p = statement.getPredicate(); final RyaType o = statement.getObject(); return "<" + s.getData() + "> <"+ p.getData() + "> <" + o.getData() + ">"; }
public BasicDBObject serializeInternal(final RyaStatement statement){ String context = ""; if (statement.getContext() != null){ context = statement.getContext().getData(); final String id = statement.getSubject().getData() + " " + statement.getPredicate().getData() + " " + statement.getObject().getData() + " " + context; byte[] bytes = id.getBytes(StandardCharsets.UTF_8); try { LOG.error("Unable to perform SHA-1 on the ID, defaulting to raw bytes.", e); if (statement.getMetadata() == null){ statement.setStatementMetadata(StatementMetadata.EMPTY_METADATA); final BasicDBObject dvObject = DocumentVisibilityAdapter.toDBObject(statement.getColumnVisibility()); final BasicDBObject doc = new BasicDBObject(ID, new String(Hex.encodeHex(bytes))) .append(SUBJECT, statement.getSubject().getData()) .append(SUBJECT_HASH, hash(statement.getSubject().getData())) .append(PREDICATE, statement.getPredicate().getData()) .append(PREDICATE_HASH, hash(statement.getPredicate().getData())) .append(OBJECT, statement.getObject().getData()) .append(OBJECT_HASH, hash(statement.getObject().getData())) .append(OBJECT_TYPE, statement.getObject().getDataType().toString()) .append(CONTEXT, context) .append(STATEMENT_METADATA, statement.getMetadata().toString()) .append(DOCUMENT_VISIBILITY, dvObject.get(DOCUMENT_VISIBILITY)) .append(TIMESTAMP, statement.getTimestamp()); return doc;
@Test public void testConstructProjectionProjectSubj() throws MalformedQueryException, UnsupportedEncodingException { String query = "select ?x where { ?x <uri:talksTo> <uri:Bob> }"; SPARQLParser parser = new SPARQLParser(); ParsedQuery pq = parser.parseQuery(query, null); List<StatementPattern> patterns = StatementPatternCollector.process(pq.getTupleExpr()); ConstructProjection projection = new ConstructProjection(patterns.get(0)); QueryBindingSet bs = new QueryBindingSet(); bs.addBinding("x", VF.createIRI("uri:Joe")); VisibilityBindingSet vBs = new VisibilityBindingSet(bs, "FOUO"); RyaStatement statement = projection.projectBindingSet(vBs, new HashMap<>()); RyaStatement expected = new RyaStatement(new RyaIRI("uri:Joe"), new RyaIRI("uri:talksTo"), new RyaIRI("uri:Bob")); expected.setColumnVisibility("FOUO".getBytes("UTF-8")); expected.setTimestamp(statement.getTimestamp()); assertEquals(expected, statement); }
private Set<RyaStatement> getRyaStatements(RyaStatement statement, int numTriples) { Set<RyaStatement> statements = new HashSet<>(); final String subject = "urn:subject_"; final String predicate = "urn:predicate_"; final String object = "urn:object_"; for (int i = 0; i < numTriples; i++) { RyaStatement stmnt = new RyaStatement(statement.getSubject(), statement.getPredicate(), statement.getObject()); if (stmnt.getSubject() == null) { stmnt.setSubject(new RyaIRI(subject + i)); } if (stmnt.getPredicate() == null) { stmnt.setPredicate(new RyaIRI(predicate + i)); } if (stmnt.getObject() == null) { stmnt.setObject(new RyaIRI(object + i)); } statements.add(stmnt); } return statements; }
@Override public RyaStatement next() throws RyaDAOException { Map.Entry<RyaIRI, RyaType> subjObj = keys.nextElement(); return new RyaStatement(subjObj.getKey(), null, subjObj.getValue()); }
private boolean batchNext() throws RyaDAOException { if (!iteration.hasNext()) { return false; } Collection<Map.Entry<RyaStatement, BindingSet>> batchedResults = new ArrayList<Map.Entry<RyaStatement, BindingSet>>(); for (int i = 0; i < batch && iteration.hasNext(); i++) { RyaStatement next = iteration.next(); batchedResults.add(new RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>( new RyaStatement(next.getSubject(), pred, next.getObject()), null)); } query = ryaQueryEngine.queryWithBindingSet(batchedResults, null); return query.hasNext(); }
value = new RyaType(VF.createIRI(objectType), objectValue); RyaStatement statement = new RyaStatement(new RyaIRI(subject), new RyaIRI(predicate), value); int length = 0; boolean hasNextValue = input.readBoolean(); if (hasNextValue){ statement.setContext(new RyaIRI(input.readString())); statement.setColumnVisibility(input.readBytes(length)); statement.setQualifer(input.readString()); statement.setTimestamp(input.readLong()); statement.setValue(input.readBytes(length));
statement = new RyaStatement(new RyaURI(subject), new RyaURI(predicate), objectRya, new RyaURI(context)); } else { statement = new RyaStatement(new RyaURI(subject), new RyaURI(predicate), objectRya); statement.setColumnVisibility(documentVisibility.flatten()); if(timestamp != null) { statement.setTimestamp(timestamp); statement.setStatementMetadata(metadata);
/** * Writes a (key,value) pair to Rya. Adds the statement to a buffer, and * flushes the statement buffer to the database if full. * @param key Arbitrary Writable, not used. * @param value Contains statement to insert to Rya. * @throws IOException if writing to Accumulo fails. */ @Override public void write(final Writable key, final RyaStatementWritable value) throws IOException { final RyaStatement ryaStatement = value.getRyaStatement(); if (ryaStatement.getColumnVisibility() == null) { ryaStatement.setColumnVisibility(cv); } if (ryaStatement.getContext() == null) { ryaStatement.setContext(defaultContext); } buffer.add(ryaStatement); bufferCurrentSize += statementSize(ryaStatement); if (bufferCurrentSize >= bufferSizeLimit) { flushBuffer(); } }
public static void ryaStatementsEqualIgnoresBlankNode(Set<RyaStatement> statements1, Set<RyaStatement> statements2) { Map<String, RyaIRI> bNodeMap = new HashMap<>(); statements1.forEach(x-> bNodeMap.put(x.getPredicate().getData(), x.getSubject())); statements2.forEach(x -> x.setSubject(bNodeMap.get(x.getPredicate().getData()))); ryaStatementSetsEqualIgnoresTimestamp(statements1, statements2); }
RyaStatement statement1 = new RyaStatement(new RyaIRI("urn:Joe"), new RyaIRI("urn:talksTo"), new RyaIRI("urn:Bob")); RyaStatement statement2 = new RyaStatement(new RyaIRI("urn:Bob"), new RyaIRI("urn:livesIn"), new RyaIRI("urn:London")); RyaStatement statement3 = new RyaStatement(new RyaIRI("urn:Bob"), new RyaIRI("urn:worksAt"), new RyaIRI("urn:burgerShack")); statement1.setColumnVisibility("U&W".getBytes("UTF-8")); statement2.setColumnVisibility("V".getBytes("UTF-8")); statement3.setColumnVisibility("W".getBytes("UTF-8")); RyaStatement statement4 = new RyaStatement(new RyaIRI("urn:Joe"), new RyaIRI("urn:travelsTo"), new RyaIRI("urn:London")); RyaStatement statement5 = new RyaStatement(new RyaIRI("urn:Joe"), new RyaIRI("urn:friendsWith"), new RyaIRI("urn:Bob")); statement4.setColumnVisibility("U&V&W".getBytes("UTF-8")); statement5.setColumnVisibility("U&V&W".getBytes("UTF-8"));
@Override public String getVersion() throws RyaDAOException { String version = null; final CloseableIteration<RyaStatement, RyaDAOException> versIter = queryEngine.query(new RyaStatement(RTS_SUBJECT_RYA, RTS_VERSION_PREDICATE_RYA, null), conf); if (versIter.hasNext()) { version = versIter.next().getObject().getData(); } versIter.close(); return version; }
write(dataOutput, columnFamily); write(dataOutput, columnQualifier); write(dataOutput, ryaStatement.getColumnVisibility()); write(dataOutput, ryaStatement.getValue()); Long timestamp = ryaStatement.getTimestamp(); boolean b = timestamp != null; dataOutput.writeBoolean(b);
@Override public void delete(final Iterator<RyaStatement> statements, final StatefulMongoDBRdfConfiguration conf) throws RyaDAOException { while (statements.hasNext()){ final RyaStatement ryaStatement = statements.next(); final boolean canDelete = DocumentVisibilityUtil.doesUserHaveDocumentAccess(auths, ryaStatement.getColumnVisibility()); if (canDelete) { coll.remove(storageStrategy.getQuery(ryaStatement)); for (final RyaSecondaryIndexer index : secondaryIndexers) { try { index.deleteStatement(ryaStatement); } catch (final IOException e) { log.error("Unable to remove statement: " + ryaStatement.toString() + " from secondary indexer: " + index.getTableName(), e); } } } else { throw new RyaDAOException("User does not have the required authorizations to delete statement"); } } }
@Override public DBObject serialize(final RyaStatement ryaStatement) { final BasicDBObject base = (BasicDBObject) super.serialize(ryaStatement); base.append(text, ryaStatement.getObject().getData()); return base; } }
if(statement.getTimestamp() > metadata.getTimestamp().getTime()) { break; System.out.println(statement.toString()); childStore.removeStatement(statement); curTime = statement.getTimestamp(); if(!childStore.containsStatement(statement)) { statement.setTimestamp(statement.getTimestamp() - timeOffset); childStore.addStatement(statement);