use of org.wikidata.query.rdf.tool.rdf.Patch in project wikidata-query-rdf by wikimedia.
the class PatchAccumulator method accumulateReconciliation.
private void accumulateReconciliation(List<MutationEventData> sequence) {
checkPositionIndex(0, sequence.size(), "Received empty sequence");
MutationEventData head = sequence.get(0);
Optional<MutationEventData> inconsistentBlock = sequence.stream().filter(m -> {
if (!head.getEntity().equals(m.getEntity())) {
return true;
} else if (!m.getMeta().requestId().equals(head.getMeta().requestId())) {
return true;
} else
return !head.getOperation().equals(m.getOperation());
}).findFirst();
if (inconsistentBlock.isPresent()) {
throw new IllegalArgumentException("Inconsistent sequence of events: " + inconsistentBlock.get() + " does not belong to " + head);
}
List<Statement> allStmts = sequence.stream().map(DiffEventData.class::cast).map(DiffEventData::getRdfAddedData).flatMap(c -> deserChunk(c).stream()).collect(toList());
reconciliations.put(head.getEntity(), allStmts);
// Drop patch data from this entity since we are reconciling it we will reset all that anyways
removeDataFromEntity(head.getEntity());
totalAccumulated += allStmts.size();
}
use of org.wikidata.query.rdf.tool.rdf.Patch in project wikidata-query-rdf by wikimedia.
the class PatchAccumulator method accumulateDiff.
private void accumulateDiff(List<MutationEventData> sequence) {
MutationEventData head = sequence.get(0);
List<Statement> added = new ArrayList<>();
List<Statement> removed = new ArrayList<>();
List<Statement> linkedShared = new ArrayList<>();
List<Statement> unlinkedShared = new ArrayList<>();
for (MutationEventData data : sequence) {
if (!head.getClass().equals(data.getClass())) {
throw new IllegalArgumentException("Inconsistent chunks provided, head class " + head.getClass() + " does not match " + data.getClass());
}
if (!head.getMeta().requestId().equals(data.getMeta().requestId())) {
throw new IllegalArgumentException("Inconsistent chunks provided, head requestId " + head.getMeta().requestId() + " does not match " + data.getMeta().requestId());
}
DiffEventData diff = (DiffEventData) data;
if (diff.getRdfAddedData() != null) {
added.addAll(deserChunk(diff.getRdfAddedData()));
}
if (diff.getRdfDeletedData() != null) {
removed.addAll(deserChunk(diff.getRdfDeletedData()));
}
if (diff.getRdfLinkedSharedData() != null) {
linkedShared.addAll(deserChunk(diff.getRdfLinkedSharedData()));
}
if (diff.getRdfUnlinkedSharedData() != null) {
unlinkedShared.addAll(deserChunk(diff.getRdfUnlinkedSharedData()));
}
}
Patch patch = SiteLinksReclassification.reclassify(new Patch(added, linkedShared, removed, unlinkedShared));
accumulate(head.getEntity(), patch.getAdded(), patch.getRemoved(), patch.getLinkedSharedElements(), patch.getUnlinkedSharedElements());
}
use of org.wikidata.query.rdf.tool.rdf.Patch in project wikidata-query-rdf by wikimedia.
the class RDFPatchSerializerUnitTest method testNullAndEmpty.
@Test
public void testNullAndEmpty() {
Patch p = new Patch(null, emptyList(), null, emptyList());
assertThat(readSerializedBytes(getSerializedBytes(p))).isEqualTo(p);
p = new Patch(emptyList(), null, emptyList(), null);
assertThat(readSerializedBytes(getSerializedBytes(p))).isEqualTo(p);
}
use of org.wikidata.query.rdf.tool.rdf.Patch in project wikidata-query-rdf by wikimedia.
the class RDFPatchSerializerUnitTest method testSerDeser.
@Test
public void testSerDeser() {
Patch p = new Patch(statements("uri:added"), statements("uri:linked"), statements("uri:deleted"), statements("uri:unlinked"));
assertThat(readSerializedBytes(getSerializedBytes(p))).isEqualTo(p);
}
Aggregations