use of org.springframework.sync.MoveOperation in project spring-sync by spring-projects.
the class DiffSyncTest method patchEntity_moveProperty.
@Test
public void patchEntity_moveProperty() throws Exception {
DiffSync<Person> sync = new DiffSync<Person>(new MapBasedShadowStore("x"), Person.class);
List<PatchOperation> ops = new ArrayList<PatchOperation>();
ops.add(new MoveOperation("/firstName", "/lastName"));
Patch patch = new Patch(ops);
Person person = new Person("Edmund", "Blackadder");
Person patched = sync.apply(person, patch);
assertEquals("Blackadder", patched.getFirstName());
assertNull(patched.getLastName());
}
use of org.springframework.sync.MoveOperation in project spring-sync by spring-projects.
the class JsonPatchPatchConverter method convert.
/**
* Constructs a {@link Patch} object given a JsonNode.
* @param jsonNode a JsonNode containing the JSON Patch
* @return a {@link Patch}
*/
public Patch convert(JsonNode jsonNode) {
if (!(jsonNode instanceof ArrayNode)) {
throw new IllegalArgumentException("JsonNode must be an instance of ArrayNode");
}
ArrayNode opNodes = (ArrayNode) jsonNode;
List<PatchOperation> ops = new ArrayList<PatchOperation>(opNodes.size());
for (Iterator<JsonNode> elements = opNodes.elements(); elements.hasNext(); ) {
JsonNode opNode = elements.next();
String opType = opNode.get("op").textValue();
String path = opNode.get("path").textValue();
JsonNode valueNode = opNode.get("value");
Object value = valueFromJsonNode(path, valueNode);
String from = opNode.has("from") ? opNode.get("from").textValue() : null;
if (opType.equals("test")) {
ops.add(new TestOperation(path, value));
} else if (opType.equals("replace")) {
ops.add(new ReplaceOperation(path, value));
} else if (opType.equals("remove")) {
ops.add(new RemoveOperation(path));
} else if (opType.equals("add")) {
ops.add(new AddOperation(path, value));
} else if (opType.equals("copy")) {
ops.add(new CopyOperation(path, from));
} else if (opType.equals("move")) {
ops.add(new MoveOperation(path, from));
} else {
throw new PatchException("Unrecognized operation type: " + opType);
}
}
return new Patch(ops);
}
use of org.springframework.sync.MoveOperation in project spring-sync by spring-projects.
the class DiffSyncTest method patchEntity_moveProperty_lostReturnPacket.
@Test
public void patchEntity_moveProperty_lostReturnPacket() throws Exception {
DiffSync<Person> sync = new DiffSync<Person>(new MapBasedShadowStore("x"), Person.class);
Person person = new Person("Edmund", "Blackadder");
List<PatchOperation> ops1 = new ArrayList<PatchOperation>();
ops1.add(new MoveOperation("/firstName", "/lastName"));
VersionedPatch vPatch1 = new VersionedPatch(ops1, 0, 0);
Person patched = sync.apply(person, vPatch1);
assertEquals("Blackadder", patched.getFirstName());
assertNull(patched.getLastName());
VersionedPatch lostDiff = sync.diff(patched);
assertEquals(1, lostDiff.getClientVersion());
assertEquals(0, lostDiff.getServerVersion());
List<PatchOperation> ops2 = new ArrayList<PatchOperation>();
ops2.add(new MoveOperation("/lastName", "/firstName"));
VersionedPatch vPatch2 = new VersionedPatch(ops2, 0, 1);
patched = sync.apply(patched, vPatch1, vPatch2);
VersionedPatch diff = sync.diff(patched);
assertEquals(2, diff.getClientVersion());
assertEquals(0, diff.getServerVersion());
assertNull(patched.getFirstName());
assertEquals("Blackadder", patched.getLastName());
}
use of org.springframework.sync.MoveOperation in project spring-sync by spring-projects.
the class DiffSyncTest method patchEntity_moveProperty_duplicate.
@Test
public void patchEntity_moveProperty_duplicate() throws Exception {
DiffSync<Person> sync = new DiffSync<Person>(new MapBasedShadowStore("x"), Person.class);
List<PatchOperation> ops = new ArrayList<PatchOperation>();
ops.add(new MoveOperation("/firstName", "/lastName"));
VersionedPatch vPatch1 = new VersionedPatch(ops, 0, 0);
VersionedPatch vPatch2 = new VersionedPatch(ops, 0, 0);
Person person = new Person("Edmund", "Blackadder");
Person patched = sync.apply(person, vPatch1, vPatch2);
VersionedPatch diff = sync.diff(patched);
// the server is acknowledge client version 1 (the client should be at that version by this time)
assertEquals(1, diff.getClientVersion());
// the server created the patch against server version 0 (but it will be 1 after the patch is created)
assertEquals(0, diff.getServerVersion());
assertEquals("Blackadder", patched.getFirstName());
assertNull(patched.getLastName());
}
use of org.springframework.sync.MoveOperation in project spring-sync by spring-projects.
the class DiffSyncTest method patchEntity_moveProperty_normal.
@Test
public void patchEntity_moveProperty_normal() throws Exception {
DiffSync<Person> sync = new DiffSync<Person>(new MapBasedShadowStore("x"), Person.class);
List<PatchOperation> ops = new ArrayList<PatchOperation>();
ops.add(new MoveOperation("/firstName", "/lastName"));
VersionedPatch vPatch1 = new VersionedPatch(ops, 0, 0);
Person person = new Person("Edmund", "Blackadder");
Person patched = sync.apply(person, vPatch1);
VersionedPatch diff = sync.diff(patched);
// the server is acknowledge client version 1 (the client should be at that version by this time)
assertEquals(1, diff.getClientVersion());
// the server created the patch against server version 0 (but it will be 1 after the patch is created)
assertEquals(0, diff.getServerVersion());
assertEquals("Blackadder", patched.getFirstName());
assertNull(patched.getLastName());
}
Aggregations