@Override public void serialize(final DiffMatchPatchEdit edit, final JsonGenerator jgen, final SerializerProvider provider) throws IOException { jgen.writeStartObject(); jgen.writeStringField("msgType", "patch"); jgen.writeNumberField("clientVersion", edit.clientVersion()); jgen.writeNumberField("serverVersion", edit.serverVersion()); jgen.writeStringField("checksum", edit.checksum()); jgen.writeArrayFieldStart("diffs"); if (edit.diff() != null) { for (DiffMatchPatchDiff diff : edit.diff().diffs()) { jgen.writeStartObject(); jgen.writeStringField("operation", diff.operation().toString()); jgen.writeStringField("text", diff.text()); jgen.writeEndObject(); } } jgen.writeEndArray(); } }
@Override public DiffMatchPatchEdit deserialize(final JsonParser jp, final DeserializationContext ctxt) throws IOException { final ObjectCodec oc = jp.getCodec(); final JsonNode edit = oc.readTree(jp); final Builder eb = DiffMatchPatchEdit.withChecksum(edit.get("checksum").asText()); eb.clientVersion(edit.get("clientVersion").asLong()); eb.serverVersion(edit.get("serverVersion").asLong()); final JsonNode diffsNode = edit.get("diffs"); if (diffsNode.isArray()) { for (JsonNode d : diffsNode) { eb.diff(new DiffMatchPatchDiff(Operation.valueOf(d.get("operation").asText()), d.get("text").asText())); } } return eb.build(); } }
public DiffMatchPatchEdit build() { return new DiffMatchPatchEdit(this); } }
private LinkedList<Patch> patchesFrom(final DiffMatchPatchEdit edit) { return diffMatchPatch.patchMake(asDiffUtilDiffs(edit.diff().diffs())); }
@Override public ShadowDocument<String> patchShadow(final DiffMatchPatchEdit edit, final ShadowDocument<String> shadowDocument) { final LinkedList<Patch> patches = patchesFrom(edit); final ClientDocument<String> doc = shadowDocument.document(); //TODO: results also contains a boolean array. Not sure what we should do with it. final Object[] results = diffMatchPatch.patchApply(patches, doc.content()); final ClientDocument<String> patchedDocument = new DefaultClientDocument<String>(doc.id(), doc.clientId(), (String) results[0]); return new DefaultShadowDocument<String>(shadowDocument.serverVersion(), edit.clientVersion(), patchedDocument); }
jgen.writeNumberField("clientVersion", edit.clientVersion()); jgen.writeNumberField("serverVersion", edit.serverVersion()); jgen.writeStringField("checksum", edit.checksum()); jgen.writeArrayFieldStart("diffs"); if (edit.diff() != null) { for (DiffMatchPatchDiff diff : edit.diff().diffs()) { jgen.writeStartObject(); jgen.writeStringField("operation", diff.operation().toString());
continue; final Builder eb = DiffMatchPatchEdit.withChecksum(edit.get("checksum").asText()); eb.clientVersion(edit.get("clientVersion").asLong()); eb.serverVersion(edit.get("serverVersion").asLong());
@Override public DiffMatchPatchEdit clientDiff(final Document<String> document, final ShadowDocument<String> shadowDocument) { final String shadowText = shadowDocument.document().content(); final LinkedList<DiffMatchPatch.Diff> diffs = diffMatchPatch.diffMain(document.content(), shadowText); return DiffMatchPatchEdit.withChecksum(checksum(shadowText)).diffs(asAeroGearDiffs(diffs)).build(); }
@Override public DiffMatchPatchEdit serverDiff(final Document<String> document, final ShadowDocument<String> shadowDocument) { final String shadowText = shadowDocument.document().content(); final LinkedList<DiffMatchPatch.Diff> diffs = diffMatchPatch.diffMain(shadowText, document.content()); return DiffMatchPatchEdit.withChecksum(checksum(shadowText)) .serverVersion(shadowDocument.serverVersion()) .clientVersion(shadowDocument.clientVersion()) .diffs(asAeroGearDiffs(diffs)) .build(); }