@@ -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 ;
0 commit comments