@Override public JsonPatchEdit deserialize(final JsonParser jp, final DeserializationContext ctxt) throws IOException { final ObjectCodec oc = jp.getCodec(); final JsonNode edit = oc.readTree(jp); final Builder eb = JsonPatchEdit.withChecksum(edit.get("checksum").asText()); eb.clientVersion(edit.get("clientVersion").asLong()); eb.serverVersion(edit.get("serverVersion").asLong()); eb.checksum(edit.get("checksum").asText()); final JsonNode diffsNode = edit.get("diffs"); if (!diffsNode.isNull()) { eb.patch(JsonPatch.fromJson(diffsNode)); } return eb.build(); } }
@Override public JsonPatchMessage deserialize(final JsonParser jp, final DeserializationContext ctxt) throws IOException { final ObjectCodec oc = jp.getCodec(); final JsonNode node = oc.readTree(jp); final String documentId = node.get("id").asText(); final String clientId = node.get("clientId").asText(); final JsonNode jsonEdits = node.get("edits"); final Queue<JsonPatchEdit> edits = new ConcurrentLinkedQueue<JsonPatchEdit>(); if (jsonEdits.isArray()) { for (JsonNode edit : jsonEdits) { if (edit.isNull()) { continue; } final Builder eb = JsonPatchEdit.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.isNull()) { eb.patch(JsonPatch.fromJson(diffsNode)); } edits.add(eb.build()); } } return new JsonPatchMessage(documentId, clientId, edits); } }
@Override public JsonPatchEdit serverDiff(final Document<JsonNode> document, final ShadowDocument<JsonNode> shadowDocument) { final JsonNode shadowObject = shadowDocument.document().content(); return JsonPatchEdit.withPatch(JsonDiff.asJsonPatch(shadowObject, document.content())) .serverVersion(shadowDocument.serverVersion()) .clientVersion(shadowDocument.clientVersion()) .checksum(checksum(shadowObject)) .build(); }
@Override public JsonPatchEdit clientDiff(final Document<JsonNode> document, final ShadowDocument<JsonNode> shadowDocument) { final JsonNode shadowObject = shadowDocument.document().content(); return JsonPatchEdit.withPatch(JsonDiff.asJsonPatch(document.content(), shadowObject)) .checksum(checksum(shadowObject)) .build(); }