Skip to content

Commit e41c806

Browse files
author
Quintin Willison
committed
Make the API to obtain a JsonObject from a MessageExtras instance public.
Also: - some renaming for clarity - add code to the DeltaExtras constructor to ensure that a JsonObject is always available, making the asJsonObject method easier to reason about
1 parent db2a17f commit e41c806

2 files changed

Lines changed: 28 additions & 21 deletions

File tree

lib/src/main/java/io/ably/lib/types/MessageExtras.java

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ public final class MessageExtras {
2222

2323
private static final String DELTA = "delta";
2424

25-
private final DeltaExtras delta;
26-
private final JsonObject raw;
25+
private final DeltaExtras delta; // may be null
26+
private final JsonObject jsonObject; // never null
2727

2828
/**
2929
* Creates a MessageExtras instance to be sent as extra with a Message to Ably's servers.
@@ -32,41 +32,43 @@ public final class MessageExtras {
3232
*
3333
* @since 1.2.1
3434
*/
35-
public MessageExtras(final JsonObject raw) {
36-
this.raw = raw;
37-
delta = null;
35+
public MessageExtras(final JsonObject jsonObject) {
36+
this(jsonObject, null);
3837
}
3938

4039
/**
4140
* @since 1.2.0
4241
*/
4342
public MessageExtras(final DeltaExtras delta) {
44-
this.delta = delta;
45-
raw = null;
43+
this(Serializer.wrapDelta(delta), delta);
4644
}
4745

48-
private MessageExtras(final JsonObject raw, final DeltaExtras delta) {
49-
this.raw = raw;
46+
private MessageExtras(final JsonObject jsonObject, final DeltaExtras delta) {
47+
if (null == jsonObject) {
48+
throw new NullPointerException("jsonObject cannot be null.");
49+
}
50+
51+
this.jsonObject = jsonObject;
5052
this.delta = delta;
5153
}
5254

5355
public DeltaExtras getDelta() {
5456
return delta;
5557
}
5658

57-
/* package private */ JsonObject getRaw() {
58-
return raw;
59+
public JsonObject asJsonObject() {
60+
return jsonObject;
5961
}
6062

6163
/* package private */ void write(MessagePacker packer) throws IOException {
62-
if (null == raw) {
64+
if (null == jsonObject) {
6365
// raw is null, so delta is not null
6466
packer.packMapHeader(1);
6567
packer.packString(DELTA);
6668
delta.write(packer);
6769
} else {
6870
// raw is not null, so delta can be ignored
69-
Serialisation.gsonToMsgpack(raw, packer);
71+
Serialisation.gsonToMsgpack(jsonObject, packer);
7072
}
7173
}
7274

@@ -117,31 +119,35 @@ public boolean equals(Object o) {
117119
if (this == o) return true;
118120
if (o == null || getClass() != o.getClass()) return false;
119121
MessageExtras that = (MessageExtras) o;
120-
return (null == raw) ?
122+
return (null == jsonObject) ?
121123
Objects.equals(delta, that.delta) :
122-
Objects.equals(raw, that.raw);
124+
Objects.equals(jsonObject, that.jsonObject);
123125
}
124126

125127
@Override
126128
public int hashCode() {
127-
return (null == raw) ? Objects.hashCode(delta) : Objects.hashCode(raw);
129+
return (null == jsonObject) ? Objects.hashCode(delta) : Objects.hashCode(jsonObject);
128130
}
129131

130132
@Override
131133
public String toString() {
132134
return "MessageExtras{" +
133135
DELTA + "=" + delta +
134-
", raw=" + raw +
136+
", raw=" + jsonObject +
135137
'}';
136138
}
137139

138140
public static class Serializer implements JsonSerializer<MessageExtras> {
139141
@Override
140142
public JsonElement serialize(final MessageExtras src, final Type typeOfSrc, final JsonSerializationContext context) {
141-
return (null != src.raw) ? src.raw : wrapDelta(src.getDelta());
143+
return (null != src.jsonObject) ? src.jsonObject : wrapDelta(src.getDelta());
142144
}
143145

144-
private JsonObject wrapDelta(final DeltaExtras delta) {
146+
public static JsonObject wrapDelta(final DeltaExtras delta) {
147+
if (null == delta) {
148+
throw new NullPointerException("delta cannot be null.");
149+
}
150+
145151
final JsonObject json = new JsonObject();
146152
json.add(DELTA, Serialisation.gson.toJsonTree(delta));
147153
return json;

lib/src/test/java/io/ably/lib/types/MessageExtrasTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ public void delta() {
8989
public void deltaViaMessagePack() throws IOException {
9090
final DeltaExtras deltaExtras = new DeltaExtras("tamrof", "morf");
9191
final MessageExtras messageExtras = new MessageExtras(deltaExtras);
92+
final JsonObject expectedMessageExtrasJsonObject = deltaExtrasJsonObject("tamrof", "morf");
93+
assertEquals(expectedMessageExtrasJsonObject, messageExtras.asJsonObject());
9294

9395
// Encode to MessagePack
9496
final ByteArrayOutputStream out = new ByteArrayOutputStream();
@@ -103,8 +105,7 @@ public void deltaViaMessagePack() throws IOException {
103105

104106
assertEquals(messageExtras.getDelta(), unpacked.getDelta());
105107
assertEquals(messageExtras, unpacked);
106-
assertNull(messageExtras.getRaw());
107-
assertEquals(deltaExtrasJsonObject("tamrof", "morf"), unpacked.getRaw());
108+
assertEquals(expectedMessageExtrasJsonObject, unpacked.asJsonObject());
108109
}
109110

110111
private static JsonObject deltaExtrasJsonObject(final String format, final String from) {

0 commit comments

Comments
 (0)