Skip to content

Commit 0e0bdc1

Browse files
authored
Merge pull request #112 from epics-base/Issue_110
Issue #110
2 parents b4c549a + 4ba6cb3 commit 0e0bdc1

7 files changed

Lines changed: 729 additions & 598 deletions

File tree

epics-vtype/vtype-gson/src/main/java/org/epics/vtype/gson/VTypeToGson.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.epics.vtype.VNumber;
1717
import org.epics.vtype.VNumberArray;
1818
import org.epics.vtype.VString;
19+
import org.epics.vtype.VStringArray;
1920
import org.epics.vtype.VType;
2021

2122
import java.util.List;
@@ -56,6 +57,8 @@ static VType toVType(JsonElement json) {
5657
return toVNumberArray(json);
5758
case "VString":
5859
return toVString(json);
60+
case "VStringArray":
61+
return toVStringArray(json);
5962
case "VEnum":
6063
return toVEnum(json);
6164
default:
@@ -78,6 +81,8 @@ static JsonElement toJson(VType vType) {
7881
return toJson((VNumberArray) vType);
7982
} else if (vType instanceof VString) {
8083
return toJson((VString) vType);
84+
} else if (vType instanceof VStringArray) {
85+
return toJson((VStringArray) vType);
8186
} else if (vType instanceof VEnum) {
8287
return toJson((VEnum) vType);
8388
}
@@ -132,6 +137,12 @@ static VString toVString(JsonElement json) {
132137
VTypeGsonMapper mapper = new VTypeGsonMapper(json.getAsJsonObject());
133138
return VString.of(mapper.getString("value"), mapper.getAlarm(), mapper.getTime());
134139
}
140+
141+
static VStringArray toVStringArray(JsonElement json) {
142+
VTypeGsonMapper mapper = new VTypeGsonMapper(json.getAsJsonObject());
143+
return VStringArray.of(mapper.getListString("value"), mapper.getAlarm(), mapper.getTime());
144+
145+
}
135146

136147
static VEnum toVEnum(JsonElement json) {
137148
VTypeGsonMapper mapper = new VTypeGsonMapper(json.getAsJsonObject());
@@ -207,7 +218,16 @@ static JsonElement toJson(VString vString) {
207218
.addTime(vString.getTime())
208219
.build();
209220
}
210-
221+
222+
static JsonElement toJson(VStringArray vStringArray) {
223+
return new GsonVTypeBuilder()
224+
.addType(vStringArray)
225+
.addListString("value", vStringArray.getData())
226+
.addAlarm(vStringArray.getAlarm())
227+
.addTime(vStringArray.getTime())
228+
.build();
229+
}
230+
211231
static JsonElement toJson(VEnum vEnum) {
212232
return new GsonVTypeBuilder()
213233
.addType(vEnum)

epics-vtype/vtype-gson/src/test/java/org/epics/vtype/gson/VTypeToGsonTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.io.InputStream;
1111
import java.io.InputStreamReader;
1212
import java.time.Instant;
13+
import java.util.ArrayList;
1314
import java.util.Arrays;
1415
import java.util.List;
1516

@@ -51,6 +52,7 @@
5152
import org.epics.vtype.VShort;
5253
import org.epics.vtype.VShortArray;
5354
import org.epics.vtype.VString;
55+
import org.epics.vtype.VStringArray;
5456
import org.epics.vtype.VType;
5557
import org.epics.vtype.VUByte;
5658
import org.epics.vtype.VUByteArray;
@@ -290,6 +292,17 @@ public void vByteArray1() {
290292
testDeserialization("VByteArray1a", vByteArray1);
291293
}
292294

295+
@Test
296+
public void vStringArray1() {
297+
List<String> data = new ArrayList<String>();
298+
data.add("a");
299+
data.add("b");
300+
data.add("c");
301+
VStringArray vStringArray1 = VStringArray.of(data, Alarm.none(), Time.of(Instant.ofEpochSecond(0, 0)));
302+
testSerialization(vStringArray1, "VStringArray1");
303+
testDeserialization("VStringArray1", vStringArray1);
304+
}
305+
293306
/**
294307
* Tests serialization and de-serialization of a Double.NaN. See {@link GsonVTypeBuilder#add} and
295308
* {@link VTypeToGson#toVNumber}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"type":{
3+
"name":"VStringArray",
4+
"version":1
5+
},
6+
"value":[
7+
"a",
8+
"b",
9+
"c"
10+
],
11+
"alarm":{
12+
"severity":"NONE",
13+
"status":"NONE",
14+
"name":"None"
15+
},
16+
"time":{
17+
"unixSec":0,
18+
"nanoSec":0
19+
}
20+
}

0 commit comments

Comments
 (0)