Search in sources :

Example 1 with Patch

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();
}
Also used : Statement(org.openrdf.model.Statement) Collections.unmodifiableList(java.util.Collections.unmodifiableList) Getter(lombok.Getter) DiffEventData(org.wikidata.query.rdf.updater.DiffEventData) HashMap(java.util.HashMap) Collections.singletonList(java.util.Collections.singletonList) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) RDFDataChunk(org.wikidata.query.rdf.updater.RDFDataChunk) Preconditions.checkArgument(com.google.common.base.Preconditions.checkArgument) Collectors.toMap(java.util.stream.Collectors.toMap) RECONCILE_OPERATION(org.wikidata.query.rdf.updater.MutationEventData.RECONCILE_OPERATION) MutationEventData(org.wikidata.query.rdf.updater.MutationEventData) Map(java.util.Map) ConsumerPatch(org.wikidata.query.rdf.tool.rdf.ConsumerPatch) DIFF_OPERATION(org.wikidata.query.rdf.updater.MutationEventData.DIFF_OPERATION) Preconditions.checkPositionIndex(com.google.common.base.Preconditions.checkPositionIndex) Collection(java.util.Collection) Set(java.util.Set) SiteLinksReclassification(org.wikidata.query.rdf.tool.rdf.SiteLinksReclassification) Patch(org.wikidata.query.rdf.tool.rdf.Patch) Sets(com.google.common.collect.Sets) RDFChunkDeserializer(org.wikidata.query.rdf.updater.RDFChunkDeserializer) Collectors.toList(java.util.stream.Collectors.toList) List(java.util.List) IMPORT_OPERATION(org.wikidata.query.rdf.updater.MutationEventData.IMPORT_OPERATION) Function.identity(java.util.function.Function.identity) Collections.unmodifiableMap(java.util.Collections.unmodifiableMap) Optional(java.util.Optional) DELETE_OPERATION(org.wikidata.query.rdf.updater.MutationEventData.DELETE_OPERATION) NotThreadSafe(javax.annotation.concurrent.NotThreadSafe) Statement(org.openrdf.model.Statement) DiffEventData(org.wikidata.query.rdf.updater.DiffEventData) MutationEventData(org.wikidata.query.rdf.updater.MutationEventData)

Example 2 with Patch

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());
}
Also used : Statement(org.openrdf.model.Statement) ArrayList(java.util.ArrayList) DiffEventData(org.wikidata.query.rdf.updater.DiffEventData) ConsumerPatch(org.wikidata.query.rdf.tool.rdf.ConsumerPatch) Patch(org.wikidata.query.rdf.tool.rdf.Patch) MutationEventData(org.wikidata.query.rdf.updater.MutationEventData)

Example 3 with Patch

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);
}
Also used : Patch(org.wikidata.query.rdf.tool.rdf.Patch) Test(org.junit.Test)

Example 4 with Patch

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);
}
Also used : Patch(org.wikidata.query.rdf.tool.rdf.Patch) Test(org.junit.Test)

Aggregations

Patch (org.wikidata.query.rdf.tool.rdf.Patch)4 ArrayList (java.util.ArrayList)2 Test (org.junit.Test)2 Statement (org.openrdf.model.Statement)2 ConsumerPatch (org.wikidata.query.rdf.tool.rdf.ConsumerPatch)2 DiffEventData (org.wikidata.query.rdf.updater.DiffEventData)2 MutationEventData (org.wikidata.query.rdf.updater.MutationEventData)2 Preconditions.checkArgument (com.google.common.base.Preconditions.checkArgument)1 Preconditions.checkPositionIndex (com.google.common.base.Preconditions.checkPositionIndex)1 Sets (com.google.common.collect.Sets)1 Collection (java.util.Collection)1 Collections.singletonList (java.util.Collections.singletonList)1 Collections.unmodifiableList (java.util.Collections.unmodifiableList)1 Collections.unmodifiableMap (java.util.Collections.unmodifiableMap)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 List (java.util.List)1 Map (java.util.Map)1 Optional (java.util.Optional)1 Set (java.util.Set)1