Search in sources :

Example 1 with MoveOperation

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());
}
Also used : MapBasedShadowStore(org.springframework.sync.diffsync.shadowstore.MapBasedShadowStore) MoveOperation(org.springframework.sync.MoveOperation) ArrayList(java.util.ArrayList) PatchOperation(org.springframework.sync.PatchOperation) Person(org.springframework.sync.Person) Patch(org.springframework.sync.Patch) Test(org.junit.Test)

Example 2 with MoveOperation

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);
}
Also used : ArrayList(java.util.ArrayList) RemoveOperation(org.springframework.sync.RemoveOperation) JsonNode(com.fasterxml.jackson.databind.JsonNode) AddOperation(org.springframework.sync.AddOperation) TestOperation(org.springframework.sync.TestOperation) CopyOperation(org.springframework.sync.CopyOperation) ReplaceOperation(org.springframework.sync.ReplaceOperation) MoveOperation(org.springframework.sync.MoveOperation) PatchOperation(org.springframework.sync.PatchOperation) ArrayNode(com.fasterxml.jackson.databind.node.ArrayNode) PatchException(org.springframework.sync.PatchException) Patch(org.springframework.sync.Patch)

Example 3 with MoveOperation

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());
}
Also used : MapBasedShadowStore(org.springframework.sync.diffsync.shadowstore.MapBasedShadowStore) MoveOperation(org.springframework.sync.MoveOperation) ArrayList(java.util.ArrayList) PatchOperation(org.springframework.sync.PatchOperation) Person(org.springframework.sync.Person) Test(org.junit.Test)

Example 4 with MoveOperation

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());
}
Also used : MapBasedShadowStore(org.springframework.sync.diffsync.shadowstore.MapBasedShadowStore) MoveOperation(org.springframework.sync.MoveOperation) ArrayList(java.util.ArrayList) PatchOperation(org.springframework.sync.PatchOperation) Person(org.springframework.sync.Person) Test(org.junit.Test)

Example 5 with MoveOperation

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());
}
Also used : MapBasedShadowStore(org.springframework.sync.diffsync.shadowstore.MapBasedShadowStore) MoveOperation(org.springframework.sync.MoveOperation) ArrayList(java.util.ArrayList) PatchOperation(org.springframework.sync.PatchOperation) Person(org.springframework.sync.Person) Test(org.junit.Test)

Aggregations

ArrayList (java.util.ArrayList)5 MoveOperation (org.springframework.sync.MoveOperation)5 PatchOperation (org.springframework.sync.PatchOperation)5 Test (org.junit.Test)4 Person (org.springframework.sync.Person)4 MapBasedShadowStore (org.springframework.sync.diffsync.shadowstore.MapBasedShadowStore)4 Patch (org.springframework.sync.Patch)2 JsonNode (com.fasterxml.jackson.databind.JsonNode)1 ArrayNode (com.fasterxml.jackson.databind.node.ArrayNode)1 AddOperation (org.springframework.sync.AddOperation)1 CopyOperation (org.springframework.sync.CopyOperation)1 PatchException (org.springframework.sync.PatchException)1 RemoveOperation (org.springframework.sync.RemoveOperation)1 ReplaceOperation (org.springframework.sync.ReplaceOperation)1 TestOperation (org.springframework.sync.TestOperation)1