Skip to content

Patch history #30

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Updating deserialization to user setters to distinguish between missi…
…ng and null in json.
  • Loading branch information
Roling, Luke committed Apr 16, 2015
commit 0055b81837b01b12a7ae6e564c1fa05c5beddeb5
9 changes: 6 additions & 3 deletions src/main/java/com/github/fge/jsonpatch/AddOperation.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
package com.github.fge.jsonpatch;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
Expand Down Expand Up @@ -71,8 +70,12 @@ public final class AddOperation
= ReferenceToken.fromRaw("-");

@JsonCreator
public AddOperation(@JsonProperty("path") final JsonPointer path,
@JsonProperty("value") final JsonNode value)
private AddOperation()
{
super("add");
}

public AddOperation(final JsonPointer path, final JsonNode value)
{
super("add", path, value);
}
Expand Down
9 changes: 6 additions & 3 deletions src/main/java/com/github/fge/jsonpatch/CopyOperation.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
package com.github.fge.jsonpatch;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.JsonNode;
import com.github.fge.jackson.jsonpointer.JsonPointer;

Expand All @@ -44,8 +43,12 @@ public final class CopyOperation
extends DualPathOperation
{
@JsonCreator
public CopyOperation(@JsonProperty("from") final JsonPointer from,
@JsonProperty("path") final JsonPointer path)
public CopyOperation()
{
super("copy");
}

public CopyOperation(final JsonPointer from, final JsonPointer path)
{
super("copy", from, path);
}
Expand Down
29 changes: 22 additions & 7 deletions src/main/java/com/github/fge/jsonpatch/DualPathOperation.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,8 @@
package com.github.fge.jsonpatch;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.github.fge.jackson.jsonpointer.JsonPointer;

import java.io.IOException;
Expand All @@ -35,8 +32,18 @@
public abstract class DualPathOperation
extends JsonPatchOperation
{
@JsonSerialize(using = ToStringSerializer.class)
protected final JsonPointer from;
protected JsonPointer from;

/**
* Constructor for deserialization. Other parameters are set through the private setters. This allows fields to
* be represented as null if missing and a default if present and set to null.
*
* @param op operation name
*/
protected DualPathOperation(final String op)
{
super(op);
}

/**
* Protected constructor
Expand All @@ -49,13 +56,21 @@ protected DualPathOperation(final String op, final JsonPointer from,
final JsonPointer path)
{
super(op, path);
setFrom(from);
}

private void setFrom(JsonPointer from) {
this.from = from;
}

public JsonPointer getFrom() {
return from;
}

@Override
public final void serialize(final JsonGenerator jgen,
final SerializerProvider provider)
throws IOException, JsonProcessingException
throws IOException
{
jgen.writeStartObject();
jgen.writeStringField("op", op);
Expand All @@ -67,7 +82,7 @@ public final void serialize(final JsonGenerator jgen,
@Override
public final void serializeWithType(final JsonGenerator jgen,
final SerializerProvider provider, final TypeSerializer typeSer)
throws IOException, JsonProcessingException
throws IOException
{
serialize(jgen, provider);
}
Expand Down
24 changes: 21 additions & 3 deletions src/main/java/com/github/fge/jsonpatch/JsonPatchOperation.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,9 @@
import com.github.fge.msgsimple.bundle.MessageBundle;
import com.github.fge.msgsimple.load.MessageBundles;

import static com.fasterxml.jackson.annotation.JsonSubTypes.*;
import static com.fasterxml.jackson.annotation.JsonTypeInfo.*;
import static com.fasterxml.jackson.annotation.JsonSubTypes.Type;
import static com.fasterxml.jackson.annotation.JsonTypeInfo.As;
import static com.fasterxml.jackson.annotation.JsonTypeInfo.Id;

@JsonTypeInfo(use = Id.NAME, include = As.PROPERTY, property = "op")

Expand Down Expand Up @@ -70,7 +71,18 @@ public abstract class JsonPatchOperation
*
* However, we need to serialize using .toString().
*/
protected final JsonPointer path;
protected JsonPointer path;

/**
* Constructor for deserialization. Other parameters are set through the private setters. This allows fields to
* be represented as null if missing and a default if present and set to null.
*
* @param op the operation name
*/
protected JsonPatchOperation(final String op)
{
this.op = op;
}

/**
* Constructor
Expand All @@ -81,9 +93,15 @@ public abstract class JsonPatchOperation
protected JsonPatchOperation(final String op, final JsonPointer path)
{
this.op = op;
setPath(path);
}

protected void setPath(JsonPointer path) {
this.path = path;
}

public JsonPointer getPath() { return path; }

/**
* Apply this operation to a JSON value
*
Expand Down
9 changes: 6 additions & 3 deletions src/main/java/com/github/fge/jsonpatch/MoveOperation.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
package com.github.fge.jsonpatch;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.JsonNode;
import com.github.fge.jackson.jsonpointer.JsonPointer;

Expand Down Expand Up @@ -66,8 +65,12 @@ public final class MoveOperation
extends DualPathOperation
{
@JsonCreator
public MoveOperation(@JsonProperty("from") final JsonPointer from,
@JsonProperty("path") final JsonPointer path)
public MoveOperation()
{
super("move");
}

public MoveOperation(final JsonPointer from, final JsonPointer path)
{
super("move", from, path);
}
Expand Down
28 changes: 22 additions & 6 deletions src/main/java/com/github/fge/jsonpatch/PathValueOperation.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,8 @@
package com.github.fge.jsonpatch;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import com.github.fge.jackson.jsonpointer.JsonPointer;

Expand All @@ -35,8 +33,18 @@
public abstract class PathValueOperation
extends JsonPatchOperation
{
@JsonSerialize
protected final JsonNode value;
protected JsonNode value;

/**
* Constructor for deserialization. Other parameters are set through the private setters. This allows fields to
* be represented as null if missing and a default if present and set to null.
*
* @param op operation name
*/
protected PathValueOperation(final String op)
{
super(op);
}

/**
* Protected constructor
Expand All @@ -49,13 +57,21 @@ protected PathValueOperation(final String op, final JsonPointer path,
final JsonNode value)
{
super(op, path);
setValue(value);
}

private void setValue(JsonNode value) {
this.value = value.deepCopy();
}

public JsonNode getValue() {
return value.deepCopy();
}

@Override
public final void serialize(final JsonGenerator jgen,
final SerializerProvider provider)
throws IOException, JsonProcessingException
throws IOException
{
jgen.writeStartObject();
jgen.writeStringField("op", op);
Expand All @@ -68,7 +84,7 @@ public final void serialize(final JsonGenerator jgen,
@Override
public final void serializeWithType(final JsonGenerator jgen,
final SerializerProvider provider, final TypeSerializer typeSer)
throws IOException, JsonProcessingException
throws IOException
{
serialize(jgen, provider);
}
Expand Down
8 changes: 6 additions & 2 deletions src/main/java/com/github/fge/jsonpatch/RemoveOperation.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
package com.github.fge.jsonpatch;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
Expand All @@ -44,7 +43,12 @@ public final class RemoveOperation
extends JsonPatchOperation
{
@JsonCreator
public RemoveOperation(@JsonProperty("path") final JsonPointer path)
private RemoveOperation()
{
super("remove");
}

public RemoveOperation(final JsonPointer path)
{
super("remove", path);
}
Expand Down
9 changes: 6 additions & 3 deletions src/main/java/com/github/fge/jsonpatch/ReplaceOperation.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
package com.github.fge.jsonpatch;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
Expand All @@ -40,8 +39,12 @@ public final class ReplaceOperation
extends PathValueOperation
{
@JsonCreator
public ReplaceOperation(@JsonProperty("path") final JsonPointer path,
@JsonProperty("value") final JsonNode value)
private ReplaceOperation()
{
super("replace");
}

public ReplaceOperation(final JsonPointer path, final JsonNode value)
{
super("replace", path, value);
}
Expand Down
9 changes: 6 additions & 3 deletions src/main/java/com/github/fge/jsonpatch/TestOperation.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
package com.github.fge.jsonpatch;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.JsonNode;
import com.github.fge.jackson.JsonNumEquals;
import com.github.fge.jackson.jsonpointer.JsonPointer;
Expand All @@ -46,8 +45,12 @@ public final class TestOperation
= JsonNumEquals.getInstance();

@JsonCreator
public TestOperation(@JsonProperty("path") final JsonPointer path,
@JsonProperty("value") final JsonNode value)
public TestOperation()
{
super("test");
}

public TestOperation(final JsonPointer path, final JsonNode value)
{
super("test", path, value);
}
Expand Down