Optimize CSV export value string conversion.
This commit is contained in:
@ -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<DataEvent, String> {
|
||||
public static final String OPEN_BRACKET = "[";
|
||||
@ -19,6 +20,7 @@ public class QueryFieldStringifyer implements Function<DataEvent, String> {
|
||||
this.arraySeparator = arraySeparator;
|
||||
}
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
@Override
|
||||
public String apply(DataEvent event) {
|
||||
if (event == null) {
|
||||
@ -28,24 +30,35 @@ public class QueryFieldStringifyer implements Function<DataEvent, String> {
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
Reference in New Issue
Block a user