/** * Reads RyaSubGraph from {@link Input} stream * @param input - stream that subgraph is read from * @return subgraph read from input stream */ public static RyaSubGraph read(Input input){ RyaSubGraph bundle = new RyaSubGraph(input.readString()); int numStatements = input.readInt(); for (int i=0; i < numStatements; i++){ bundle.addStatement(RyaStatementSerializer.read(input)); } return bundle; }
public VisibilityStatementSet(RyaSubGraph subgraph) { this(subgraph.getStatements()); }
/** * Use Kryo to write RyaSubGraph to {@link Output} stream * @param kryo - used to write subgraph to output stream * @param output - stream that subgraph is written to * @param object - subgraph written to output stream */ @Override public void write(Kryo kryo, Output output, RyaSubGraph object) { output.writeString(object.getId()); output.writeInt(object.getStatements().size()); for (RyaStatement statement : object.getStatements()){ RyaStatementSerializer.writeToKryo(kryo, output, statement); } }
private void simplifyVisibilities(final RyaSubGraph subgraph) throws UnsupportedEncodingException { final Set<RyaStatement> statements = subgraph.getStatements(); if (statements.size() > 0) { final byte[] visibilityBytes = statements.iterator().next().getColumnVisibility(); // Simplify the result's visibilities and cache new simplified // visibilities final String visibility = new String(visibilityBytes, "UTF-8"); if (!simplifiedVisibilities.containsKey(visibility)) { final String simplified = VisibilitySimplifier.simplify(visibility); simplifiedVisibilities.put(visibility, simplified); } for (final RyaStatement statement : statements) { statement.setColumnVisibility(simplifiedVisibilities.get(visibility).getBytes("UTF-8")); } subgraph.setStatements(statements); } }
RyaSubGraph subGraph = new RyaSubGraph(pcjId); 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")); subGraph.setStatements(stmnts); expectedResults.add(subGraph);
/** * Updates the Construct Query results by applying the {@link ConnstructGraph} to * create a {@link RyaSubGraph} and then writing the subgraph to {@link FluoQueryColumns#CONSTRUCT_STATEMENTS}. * @param tx - transaction used to write the subgraph * @param bs - BindingSet that the ConstructProjection expands into a subgraph * @param metadata - metadata that the ConstructProjection is extracted from */ public void updateConstructQueryResults(TransactionBase tx, VisibilityBindingSet bs, ConstructQueryMetadata metadata) { String nodeId = metadata.getNodeId(); VariableOrder varOrder = metadata.getVariableOrder(); Column column = FluoQueryColumns.CONSTRUCT_STATEMENTS; ConstructGraph graph = metadata.getConstructGraph(); String parentId = metadata.getParentNodeId(); // Create the Row Key for the emitted binding set. It does not contain visibilities. final Bytes resultRow = makeRowKey(nodeId, varOrder, bs); // If this is a new binding set, then emit it. if(tx.get(resultRow, column) == null || varOrder.getVariableOrders().size() < bs.size()) { Set<RyaStatement> statements = graph.createGraphFromBindingSet(bs); RyaSubGraph subgraph = new RyaSubGraph(parentId, statements); final Bytes nodeValueBytes = Bytes.of(serializer.toBytes(subgraph)); log.trace( "Transaction ID: " + tx.getStartTimestamp() + "\n" + "New Binding Set: " + subgraph + "\n"); tx.set(resultRow, column, nodeValueBytes); } }
RyaSubGraph subGraph = new RyaSubGraph(pcjId); RyaStatement statement1 = new RyaStatement(new RyaIRI("urn:Joe"), new RyaIRI("urn:travelsTo"), new RyaIRI("urn:London")); RyaStatement statement2 = new RyaStatement(new RyaIRI("urn:Joe"), new RyaIRI("urn:friendsWith"), new RyaIRI("urn:Bob")); subGraph.setStatements(stmnts); expectedResults.add(subGraph);
private void simplifyVisibilities(final RyaSubGraph subgraph) throws UnsupportedEncodingException { final Set<RyaStatement> statements = subgraph.getStatements(); if (statements.size() > 0) { final byte[] visibilityBytes = statements.iterator().next().getColumnVisibility(); // Simplify the result's visibilities and cache new simplified // visibilities final String visibility = new String(visibilityBytes, "UTF-8"); if (!simplifiedVisibilities.containsKey(visibility)) { final String simplified = VisibilitySimplifier.simplify(visibility); simplifiedVisibilities.put(visibility, simplified); } for (final RyaStatement statement : statements) { statement.setColumnVisibility(simplifiedVisibilities.get(visibility).getBytes("UTF-8")); } subgraph.setStatements(statements); } }
/** * Updates the Construct Query results by applying the {@link ConnstructGraph} to * create a {@link RyaSubGraph} and then writing the subgraph to {@link FluoQueryColumns#CONSTRUCT_STATEMENTS}. * @param tx - transaction used to write the subgraph * @param bs - BindingSet that the ConstructProjection expands into a subgraph * @param metadata - metadata that the ConstructProjection is extracted from */ public void updateConstructQueryResults(TransactionBase tx, VisibilityBindingSet bs, ConstructQueryMetadata metadata) { String nodeId = metadata.getNodeId(); VariableOrder varOrder = metadata.getVariableOrder(); Column column = FluoQueryColumns.CONSTRUCT_STATEMENTS; ConstructGraph graph = metadata.getConstructGraph(); String parentId = metadata.getParentNodeId(); // Create the Row Key for the emitted binding set. It does not contain visibilities. final Bytes resultRow = makeRowKey(nodeId, varOrder, bs); // If this is a new binding set, then emit it. if(tx.get(resultRow, column) == null || varOrder.getVariableOrders().size() < bs.size()) { Set<RyaStatement> statements = graph.createGraphFromBindingSet(bs); RyaSubGraph subgraph = new RyaSubGraph(parentId, statements); final Bytes nodeValueBytes = Bytes.of(serializer.toBytes(subgraph)); log.trace( "Transaction ID: " + tx.getStartTimestamp() + "\n" + "New Binding Set: " + subgraph + "\n"); tx.set(resultRow, column, nodeValueBytes); } }
/** * Reads RyaSubGraph from {@link Input} stream * @param input - stream that subgraph is read from * @return subgraph read from input stream */ public static RyaSubGraph read(Input input){ RyaSubGraph bundle = new RyaSubGraph(input.readString()); int numStatements = input.readInt(); for (int i=0; i < numStatements; i++){ bundle.addStatement(RyaStatementSerializer.read(input)); } return bundle; }
RyaSubGraph subGraph1 = new RyaSubGraph(pcjId); Set<RyaStatement> stmnts1 = new HashSet<>(Arrays.asList(statement7, statement8)); subGraph1.setStatements(stmnts1); expectedResults.add(subGraph1); RyaSubGraph subGraph2 = new RyaSubGraph(pcjId); Set<RyaStatement> stmnts2 = new HashSet<>(Arrays.asList(statement9, statement10)); subGraph2.setStatements(stmnts2); expectedResults.add(subGraph2);
public VisibilityStatementSet(RyaSubGraph subgraph) { this(subgraph.getStatements()); }
/** * Use Kryo to write RyaSubGraph to {@link Output} stream * @param kryo - used to write subgraph to output stream * @param output - stream that subgraph is written to * @param object - subgraph written to output stream */ @Override public void write(Kryo kryo, Output output, RyaSubGraph object) { output.writeString(object.getId()); output.writeInt(object.getStatements().size()); for (RyaStatement statement : object.getStatements()){ RyaStatementSerializer.writeToKryo(kryo, output, statement); } }
/** * Uses Kryo to read RyaSubGraph from {@link Input} stream * @param kryo - used to read subgraph from input stream * @param input - stream that subgraph is read from * @param type - class of object to be read from input stream (RyaSubgraph) * @return subgraph read from input stream */ @Override public RyaSubGraph read(Kryo kryo, Input input, Class<RyaSubGraph> type) { RyaSubGraph bundle = new RyaSubGraph(input.readString()); int numStatements = input.readInt(); for (int i=0; i < numStatements; i++){ bundle.addStatement(RyaStatementSerializer.readFromKryo(kryo, input, RyaStatement.class)); } return bundle; }
RyaSubGraph subGraph1 = new RyaSubGraph(pcjId); Set<RyaStatement> stmnts1 = new HashSet<>(Arrays.asList(statement7, statement8)); subGraph1.setStatements(stmnts1); expectedResults.add(subGraph1); RyaSubGraph subGraph2 = new RyaSubGraph(pcjId); Set<RyaStatement> stmnts2 = new HashSet<>(Arrays.asList(statement9, statement10)); subGraph2.setStatements(stmnts2); expectedResults.add(subGraph2);
@Override public void export(String constructID, RyaSubGraph subgraph) throws ResultExportException { insertTriples(fluo.newTransaction(), subgraph.getStatements()); }
/** * Exports the RyaSubGraph to a Kafka topic equivalent to the result returned by {@link RyaSubGraph#getId()} * @param subgraph - RyaSubGraph exported to Kafka * @param contructID - rowID of result that is exported. Used for logging purposes. */ @Override public void export(final String constructID, final RyaSubGraph subGraph) throws ResultExportException { checkNotNull(constructID); checkNotNull(subGraph); try { // Send the result to the topic whose name matches the PCJ ID. final ProducerRecord<String, RyaSubGraph> rec = new ProducerRecord<>(subGraph.getId(), subGraph); final Future<RecordMetadata> future = producer.send(rec); // Don't let the export return until the result has been written to the topic. Otherwise we may lose results. future.get(); log.debug("Producer successfully sent record with id: {} and statements: {}", constructID, subGraph.getStatements()); } catch (final Throwable e) { throw new ResultExportException("A result could not be exported to Kafka.", e); } }
/** * Uses Kryo to read RyaSubGraph from {@link Input} stream * @param kryo - used to read subgraph from input stream * @param input - stream that subgraph is read from * @param type - class of object to be read from input stream (RyaSubgraph) * @return subgraph read from input stream */ @Override public RyaSubGraph read(Kryo kryo, Input input, Class<RyaSubGraph> type) { RyaSubGraph bundle = new RyaSubGraph(input.readString()); int numStatements = input.readInt(); for (int i=0; i < numStatements; i++){ bundle.addStatement(RyaStatementSerializer.readFromKryo(kryo, input, RyaStatement.class)); } return bundle; }
RyaSubGraph subGraph1 = new RyaSubGraph(pcjId); Set<RyaStatement> stmnts1 = new HashSet<>(Arrays.asList(statement1, statement2, statement3, statement4)); subGraph1.setStatements(stmnts1); expectedResults.add(subGraph1); RyaSubGraph subGraph2 = new RyaSubGraph(pcjId); Set<RyaStatement> stmnts2 = new HashSet<>(Arrays.asList(statement5, statement6, statement7, statement8)); subGraph2.setStatements(stmnts2); expectedResults.add(subGraph2);
@Override public void export(String constructID, RyaSubGraph subgraph) throws ResultExportException { insertTriples(fluo.newTransaction(), subgraph.getStatements()); }