diff --git a/src/main/java/ch/psi/daq/queryrest/response/csv/QueryFieldStringifyer.java b/src/main/java/ch/psi/daq/queryrest/response/csv/QueryFieldStringifyer.java index 476c02b..7e78c11 100644 --- a/src/main/java/ch/psi/daq/queryrest/response/csv/QueryFieldStringifyer.java +++ b/src/main/java/ch/psi/daq/queryrest/response/csv/QueryFieldStringifyer.java @@ -1,9 +1,10 @@ package ch.psi.daq.queryrest.response.csv; -import java.lang.reflect.Array; import java.util.function.Function; +import ch.psi.daq.common.util.Arrays; import ch.psi.daq.domain.DataEvent; +import ch.psi.data.collection.PrimitiveList; public class QueryFieldStringifyer implements Function { public static final String OPEN_BRACKET = "["; @@ -19,6 +20,7 @@ public class QueryFieldStringifyer implements Function { this.arraySeparator = arraySeparator; } + @SuppressWarnings("rawtypes") @Override public String apply(DataEvent event) { if (event == null) { @@ -28,24 +30,35 @@ public class QueryFieldStringifyer implements Function { Object value = accessor.apply(event); if (value == null) { return nonValue; + } else if (value instanceof PrimitiveList) { + return toString((PrimitiveList) value, arraySeparator); } else if (value.getClass().isArray()) { - StringBuilder buf = new StringBuilder(); - - int length = Array.getLength(value); - buf.append(OPEN_BRACKET); - for (int i = 0; i < length;) { - buf.append(Array.get(value, i)); - - ++i; - if (i < length) { - buf.append(arraySeparator); - } - } - buf.append(CLOSE_BRACKET); - - return buf.toString(); + return Arrays.toString(value, arraySeparator); } else { return value.toString(); } } + + public static String toString(PrimitiveList value, String arraySeparator) { + int size = value.size(); + if (size < 1) { + return Arrays.NULL_STRING; + } else if (size == 1) { + // scalar + return value.getAsString(0); + } else { + int iMax = size - 1; + if (iMax == -1) + return Arrays.EMPTY_ARRAY; + + StringBuilder b = new StringBuilder(); + b.append(OPEN_BRACKET); + for (int i = 0;; i++) { + b.append(value.getAsString(i)); + if (i == iMax) + return b.append(CLOSE_BRACKET).toString(); + b.append(arraySeparator); + } + } + } } diff --git a/src/test/java/ch/psi/daq/test/queryrest/controller/CSVQueryRestControllerTest.java b/src/test/java/ch/psi/daq/test/queryrest/controller/CSVQueryRestControllerTest.java index 0f109f3..8390cd1 100644 --- a/src/test/java/ch/psi/daq/test/queryrest/controller/CSVQueryRestControllerTest.java +++ b/src/test/java/ch/psi/daq/test/queryrest/controller/CSVQueryRestControllerTest.java @@ -492,7 +492,7 @@ public class CSVQueryRestControllerTest extends AbstractDaqRestTest { assertEquals("" + TimeUtils.getMillis(TestTimeUtils.getTimeFromPulseId(pulse)), record.get(column++)); assertEquals("[8]", record.get(column++)); assertEquals("1", record.get(column++)); - assertTrue(record.get(column).startsWith("[")); + assertTrue(record.get(column).startsWith("["+pulse+",")); assertTrue(record.get(column++).endsWith("]")); } ++pulse;