Skip to content

Commit 4a53219

Browse files
authored
Merge pull request #2723 from joeshannon/table-types
Add missing types to PVA table decoding
2 parents 8567a08 + 7554fde commit 4a53219

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

core/pv/src/main/java/org/phoebus/pv/pva/PVAStructureHelper.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,21 @@
77
******************************************************************************/
88
package org.phoebus.pv.pva;
99

10+
import static java.util.stream.Collectors.toList;
11+
import static java.util.stream.IntStream.range;
1012
import static org.phoebus.pv.pva.Decoders.decodeAlarm;
1113
import static org.phoebus.pv.pva.Decoders.decodeTime;
1214

1315
import java.util.ArrayList;
1416
import java.util.Arrays;
1517
import java.util.List;
1618
import java.util.Optional;
19+
import java.util.stream.Collectors;
20+
import java.util.stream.IntStream;
1721

1822
import org.epics.pva.data.PVAArray;
1923
import org.epics.pva.data.PVABool;
24+
import org.epics.pva.data.PVABoolArray;
2025
import org.epics.pva.data.PVAByteArray;
2126
import org.epics.pva.data.PVAData;
2227
import org.epics.pva.data.PVADoubleArray;
@@ -30,10 +35,17 @@
3035
import org.epics.pva.data.PVAStructure;
3136
import org.epics.pva.data.PVAStructureArray;
3237
import org.epics.pva.data.PVAUnion;
38+
import org.epics.util.array.ArrayBoolean;
39+
import org.epics.util.array.ArrayByte;
3340
import org.epics.util.array.ArrayDouble;
3441
import org.epics.util.array.ArrayFloat;
3542
import org.epics.util.array.ArrayInteger;
43+
import org.epics.util.array.ArrayLong;
44+
import org.epics.util.array.ArrayShort;
45+
import org.epics.util.array.ArrayUByte;
3646
import org.epics.util.array.ArrayUInteger;
47+
import org.epics.util.array.ArrayULong;
48+
import org.epics.util.array.ArrayUShort;
3749
import org.epics.vtype.Alarm;
3850
import org.epics.vtype.AlarmSeverity;
3951
import org.epics.vtype.AlarmStatus;
@@ -203,6 +215,45 @@ else if (column instanceof PVAStringArray)
203215
types.add(String.class);
204216
values.add(Arrays.asList(typed.get()));
205217
}
218+
else if (column instanceof PVAShortArray)
219+
{
220+
final PVAShortArray typed = (PVAShortArray)column;
221+
types.add(Short.TYPE);
222+
if (typed.isUnsigned())
223+
values.add(ArrayUShort.of(typed.get()));
224+
else
225+
values.add(ArrayShort.of(typed.get()));
226+
}
227+
else if (column instanceof PVALongArray)
228+
{
229+
final PVALongArray typed = (PVALongArray)column;
230+
types.add(Long.TYPE);
231+
if (typed.isUnsigned())
232+
values.add(ArrayULong.of(typed.get()));
233+
else
234+
values.add(ArrayLong.of(typed.get()));
235+
}
236+
else if (column instanceof PVAByteArray)
237+
{
238+
final PVAByteArray typed = (PVAByteArray)column;
239+
types.add(Byte.TYPE);
240+
if (typed.isUnsigned())
241+
values.add(ArrayUByte.of(typed.get()));
242+
else
243+
values.add(ArrayByte.of(typed.get()));
244+
}
245+
else if (column instanceof PVABoolArray)
246+
{
247+
final PVABoolArray typed = (PVABoolArray)column;
248+
types.add(Boolean.TYPE);
249+
boolean[] data = typed.get();
250+
// Convert to boxed Integer to add to List
251+
values.add(range(0, data.length).mapToObj(i -> data[i]).collect(toList()));
252+
}
253+
else
254+
{
255+
throw new RuntimeException("Could not decode table column of type: " + column.getClass());
256+
}
206257
}
207258

208259
return VTable.of(types, names, values);

0 commit comments

Comments
 (0)