Skip to content

Commit b436976

Browse files
author
Mark
committed
added VPack serializer/de-serializer for java.util.UUID
1 parent 7ab00e8 commit b436976

File tree

5 files changed

+92
-15
lines changed

5 files changed

+92
-15
lines changed

ChangeLog

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
v4.1.4 (2016-11-xx)
2+
---------------------------
3+
* added VPack serializer/de-serializer for java.util.UUID
4+
15
v4.1.3 (2016-11-22)
26
---------------------------
37
* fixed error while serializing long values with VPackBuilder

src/main/java/com/arangodb/velocypack/VPack.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import java.util.Map;
3535
import java.util.Map.Entry;
3636
import java.util.Set;
37+
import java.util.UUID;
3738

3839
import com.arangodb.velocypack.VPackBuilder.BuilderOptions;
3940
import com.arangodb.velocypack.exception.VPackException;
@@ -113,6 +114,7 @@ public Builder() {
113114
serializers.put(java.sql.Date.class, VPackSerializers.SQL_DATE);
114115
serializers.put(java.sql.Timestamp.class, VPackSerializers.SQL_TIMESTAMP);
115116
serializers.put(VPackSlice.class, VPackSerializers.VPACK);
117+
serializers.put(UUID.class, VPackSerializers.UUID);
116118

117119
deserializers.put(String.class, VPackDeserializers.STRING);
118120
deserializers.put(Boolean.class, VPackDeserializers.BOOLEAN);
@@ -136,6 +138,7 @@ public Builder() {
136138
deserializers.put(java.sql.Date.class, VPackDeserializers.SQL_DATE);
137139
deserializers.put(java.sql.Timestamp.class, VPackDeserializers.SQL_TIMESTAMP);
138140
deserializers.put(VPackSlice.class, VPackDeserializers.VPACK);
141+
deserializers.put(UUID.class, VPackDeserializers.UUID);
139142
}
140143

141144
public <T> VPack.Builder registerSerializer(final Type type, final VPackSerializer<T> serializer) {

src/main/java/com/arangodb/velocypack/internal/VPackDeserializers.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.math.BigInteger;
2525
import java.sql.Timestamp;
2626
import java.util.Date;
27+
import java.util.UUID;
2728

2829
import com.arangodb.velocypack.VPackDeserializationContext;
2930
import com.arangodb.velocypack.VPackDeserializer;
@@ -175,5 +176,14 @@ public VPackSlice deserialize(
175176
return vpack;
176177
}
177178
};
179+
public static final VPackDeserializer<UUID> UUID = new VPackDeserializer<UUID>() {
180+
@Override
181+
public UUID deserialize(
182+
final VPackSlice parent,
183+
final VPackSlice vpack,
184+
final VPackDeserializationContext context) throws VPackException {
185+
return java.util.UUID.fromString(vpack.getAsString());
186+
}
187+
};
178188

179189
}

src/main/java/com/arangodb/velocypack/internal/VPackSerializers.java

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.math.BigInteger;
2525
import java.sql.Timestamp;
2626
import java.util.Date;
27+
import java.util.UUID;
2728

2829
import com.arangodb.velocypack.VPackBuilder;
2930
import com.arangodb.velocypack.VPackSerializationContext;
@@ -41,7 +42,7 @@ private VPackSerializers() {
4142
super();
4243
}
4344

44-
public static VPackSerializer<String> STRING = new VPackSerializer<String>() {
45+
public static final VPackSerializer<String> STRING = new VPackSerializer<String>() {
4546
@Override
4647
public void serialize(
4748
final VPackBuilder builder,
@@ -51,7 +52,7 @@ public void serialize(
5152
builder.add(attribute, value);
5253
}
5354
};
54-
public static VPackSerializer<Boolean> BOOLEAN = new VPackSerializer<Boolean>() {
55+
public static final VPackSerializer<Boolean> BOOLEAN = new VPackSerializer<Boolean>() {
5556
@Override
5657
public void serialize(
5758
final VPackBuilder builder,
@@ -61,7 +62,7 @@ public void serialize(
6162
builder.add(attribute, value);
6263
}
6364
};
64-
public static VPackSerializer<Integer> INTEGER = new VPackSerializer<Integer>() {
65+
public static final VPackSerializer<Integer> INTEGER = new VPackSerializer<Integer>() {
6566
@Override
6667
public void serialize(
6768
final VPackBuilder builder,
@@ -71,7 +72,7 @@ public void serialize(
7172
builder.add(attribute, value);
7273
}
7374
};
74-
public static VPackSerializer<Long> LONG = new VPackSerializer<Long>() {
75+
public static final VPackSerializer<Long> LONG = new VPackSerializer<Long>() {
7576
@Override
7677
public void serialize(
7778
final VPackBuilder builder,
@@ -81,7 +82,7 @@ public void serialize(
8182
builder.add(attribute, value);
8283
}
8384
};
84-
public static VPackSerializer<Short> SHORT = new VPackSerializer<Short>() {
85+
public static final VPackSerializer<Short> SHORT = new VPackSerializer<Short>() {
8586
@Override
8687
public void serialize(
8788
final VPackBuilder builder,
@@ -91,7 +92,7 @@ public void serialize(
9192
builder.add(attribute, value);
9293
}
9394
};
94-
public static VPackSerializer<Double> DOUBLE = new VPackSerializer<Double>() {
95+
public static final VPackSerializer<Double> DOUBLE = new VPackSerializer<Double>() {
9596
@Override
9697
public void serialize(
9798
final VPackBuilder builder,
@@ -101,7 +102,7 @@ public void serialize(
101102
builder.add(attribute, value);
102103
}
103104
};
104-
public static VPackSerializer<Float> FLOAT = new VPackSerializer<Float>() {
105+
public static final VPackSerializer<Float> FLOAT = new VPackSerializer<Float>() {
105106
@Override
106107
public void serialize(
107108
final VPackBuilder builder,
@@ -111,7 +112,7 @@ public void serialize(
111112
builder.add(attribute, value);
112113
}
113114
};
114-
public static VPackSerializer<BigInteger> BIG_INTEGER = new VPackSerializer<BigInteger>() {
115+
public static final VPackSerializer<BigInteger> BIG_INTEGER = new VPackSerializer<BigInteger>() {
115116
@Override
116117
public void serialize(
117118
final VPackBuilder builder,
@@ -121,7 +122,7 @@ public void serialize(
121122
builder.add(attribute, value);
122123
}
123124
};
124-
public static VPackSerializer<BigDecimal> BIG_DECIMAL = new VPackSerializer<BigDecimal>() {
125+
public static final VPackSerializer<BigDecimal> BIG_DECIMAL = new VPackSerializer<BigDecimal>() {
125126
@Override
126127
public void serialize(
127128
final VPackBuilder builder,
@@ -131,7 +132,7 @@ public void serialize(
131132
builder.add(attribute, value);
132133
}
133134
};
134-
public static VPackSerializer<Number> NUMBER = new VPackSerializer<Number>() {
135+
public static final VPackSerializer<Number> NUMBER = new VPackSerializer<Number>() {
135136
@Override
136137
public void serialize(
137138
final VPackBuilder builder,
@@ -141,7 +142,7 @@ public void serialize(
141142
builder.add(attribute, Double.class.cast(value));
142143
}
143144
};
144-
public static VPackSerializer<Character> CHARACTER = new VPackSerializer<Character>() {
145+
public static final VPackSerializer<Character> CHARACTER = new VPackSerializer<Character>() {
145146
@Override
146147
public void serialize(
147148
final VPackBuilder builder,
@@ -151,7 +152,7 @@ public void serialize(
151152
builder.add(attribute, value);
152153
}
153154
};
154-
public static VPackSerializer<Date> DATE = new VPackSerializer<Date>() {
155+
public static final VPackSerializer<Date> DATE = new VPackSerializer<Date>() {
155156
@Override
156157
public void serialize(
157158
final VPackBuilder builder,
@@ -161,7 +162,7 @@ public void serialize(
161162
builder.add(attribute, value);
162163
}
163164
};
164-
public static VPackSerializer<java.sql.Date> SQL_DATE = new VPackSerializer<java.sql.Date>() {
165+
public static final VPackSerializer<java.sql.Date> SQL_DATE = new VPackSerializer<java.sql.Date>() {
165166
@Override
166167
public void serialize(
167168
final VPackBuilder builder,
@@ -171,7 +172,7 @@ public void serialize(
171172
builder.add(attribute, value);
172173
}
173174
};
174-
public static VPackSerializer<java.sql.Timestamp> SQL_TIMESTAMP = new VPackSerializer<Timestamp>() {
175+
public static final VPackSerializer<java.sql.Timestamp> SQL_TIMESTAMP = new VPackSerializer<Timestamp>() {
175176
@Override
176177
public void serialize(
177178
final VPackBuilder builder,
@@ -181,7 +182,7 @@ public void serialize(
181182
builder.add(attribute, value);
182183
}
183184
};
184-
public static VPackSerializer<VPackSlice> VPACK = new VPackSerializer<VPackSlice>() {
185+
public static final VPackSerializer<VPackSlice> VPACK = new VPackSerializer<VPackSlice>() {
185186
@Override
186187
public void serialize(
187188
final VPackBuilder builder,
@@ -191,4 +192,14 @@ public void serialize(
191192
builder.add(attribute, value);
192193
}
193194
};
195+
public static final VPackSerializer<UUID> UUID = new VPackSerializer<UUID>() {
196+
@Override
197+
public void serialize(
198+
final VPackBuilder builder,
199+
final String attribute,
200+
final java.util.UUID value,
201+
final VPackSerializationContext context) throws VPackException {
202+
builder.add(attribute, value.toString());
203+
}
204+
};
194205
}

src/test/java/com/arangodb/velocypack/VPackSerializeDeserializeTest.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import java.util.Map;
4242
import java.util.Map.Entry;
4343
import java.util.Set;
44+
import java.util.UUID;
4445

4546
import org.junit.Test;
4647

@@ -3292,4 +3293,52 @@ public void toDate() throws VPackException {
32923293
assertThat(entity.timestamp, is(new java.sql.Timestamp(1475062216)));
32933294
}
32943295

3296+
protected static class TestEntityUUID {
3297+
private UUID uuid;
3298+
3299+
public UUID getUuid() {
3300+
return uuid;
3301+
}
3302+
3303+
public void setUuid(final UUID uuid) {
3304+
this.uuid = uuid;
3305+
}
3306+
}
3307+
3308+
@Test
3309+
public void fromUUID() {
3310+
final TestEntityUUID entity = new TestEntityUUID();
3311+
entity.setUuid(UUID.randomUUID());
3312+
final VPackSlice vpack = new VPack.Builder().build().serialize(entity);
3313+
assertThat(vpack, is(notNullValue()));
3314+
assertThat(vpack.isObject(), is(true));
3315+
3316+
final VPackSlice uuid = vpack.get("uuid");
3317+
assertThat(uuid.isString(), is(true));
3318+
assertThat(uuid.getAsString(), is(entity.uuid.toString()));
3319+
}
3320+
3321+
@Test
3322+
public void toUUID() {
3323+
final UUID uuid = UUID.randomUUID();
3324+
final VPackBuilder builder = new VPackBuilder();
3325+
builder.add(ValueType.OBJECT);
3326+
builder.add("uuid", uuid.toString());
3327+
builder.close();
3328+
3329+
final TestEntityUUID entity = new VPack.Builder().build().deserialize(builder.slice(), TestEntityUUID.class);
3330+
assertThat(entity, is(notNullValue()));
3331+
assertThat(entity.uuid, is(uuid));
3332+
}
3333+
3334+
@Test
3335+
public void uuid() {
3336+
final TestEntityUUID entity = new TestEntityUUID();
3337+
entity.setUuid(UUID.randomUUID());
3338+
final VPack vpacker = new VPack.Builder().build();
3339+
final VPackSlice vpack = vpacker.serialize(entity);
3340+
final TestEntityUUID entity2 = vpacker.deserialize(vpack, TestEntityUUID.class);
3341+
assertThat(entity2, is(notNullValue()));
3342+
assertThat(entity2.getUuid(), is(entity.getUuid()));
3343+
}
32953344
}

0 commit comments

Comments
 (0)