private static LinkedList<DiffMatchPatchDiff> asAeroGearDiffs(final LinkedList<DiffMatchPatch.Diff> diffs) { final LinkedList<DiffMatchPatchDiff> syncDiffs = new LinkedList<DiffMatchPatchDiff>(); for (DiffMatchPatch.Diff diff : diffs) { syncDiffs.add(new DiffMatchPatchDiff(aerogearOp(diff.operation), diff.text)); } return syncDiffs; }
private static LinkedList<DiffMatchPatch.Diff> asDiffUtilDiffs(final LinkedList<DiffMatchPatchDiff> diffs) { final LinkedList<DiffMatchPatch.Diff> dsf = new LinkedList<DiffMatchPatch.Diff>(); for (DiffMatchPatchDiff d : diffs) { dsf.add(DiffMatchPatch.diff(diffutilOp(d.operation()), d.text())); } return dsf; }
private LinkedList<Patch> patchesFrom(final DiffMatchPatchEdit edit) { return diffMatchPatch.patchMake(asDiffUtilDiffs(edit.diff().diffs())); }
@Override public Document<String> patchDocument(final DiffMatchPatchEdit edit, final Document<String> document) { final LinkedList<Patch> patches = patchesFrom(edit); final Object[] results = diffMatchPatch.patchApply(patches, document.content()); //TODO: results also contains a boolean array. Not sure what we should do with it. return new DefaultDocument<String>(document.id(), (String) results[0]); }
@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 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); }
@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(); }