Optimize CSV export value string conversion.
This commit is contained in:
@ -1,9 +1,10 @@
|
|||||||
package ch.psi.daq.queryrest.response.csv;
|
package ch.psi.daq.queryrest.response.csv;
|
||||||
|
|
||||||
import java.lang.reflect.Array;
|
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
import ch.psi.daq.common.util.Arrays;
|
||||||
import ch.psi.daq.domain.DataEvent;
|
import ch.psi.daq.domain.DataEvent;
|
||||||
|
import ch.psi.data.collection.PrimitiveList;
|
||||||
|
|
||||||
public class QueryFieldStringifyer implements Function<DataEvent, String> {
|
public class QueryFieldStringifyer implements Function<DataEvent, String> {
|
||||||
public static final String OPEN_BRACKET = "[";
|
public static final String OPEN_BRACKET = "[";
|
||||||
@ -19,6 +20,7 @@ public class QueryFieldStringifyer implements Function<DataEvent, String> {
|
|||||||
this.arraySeparator = arraySeparator;
|
this.arraySeparator = arraySeparator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("rawtypes")
|
||||||
@Override
|
@Override
|
||||||
public String apply(DataEvent event) {
|
public String apply(DataEvent event) {
|
||||||
if (event == null) {
|
if (event == null) {
|
||||||
@ -28,24 +30,35 @@ public class QueryFieldStringifyer implements Function<DataEvent, String> {
|
|||||||
Object value = accessor.apply(event);
|
Object value = accessor.apply(event);
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
return nonValue;
|
return nonValue;
|
||||||
|
} else if (value instanceof PrimitiveList) {
|
||||||
|
return toString((PrimitiveList) value, arraySeparator);
|
||||||
} else if (value.getClass().isArray()) {
|
} else if (value.getClass().isArray()) {
|
||||||
StringBuilder buf = new StringBuilder();
|
return Arrays.toString(value, arraySeparator);
|
||||||
|
|
||||||
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();
|
|
||||||
} else {
|
} else {
|
||||||
return value.toString();
|
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("" + TimeUtils.getMillis(TestTimeUtils.getTimeFromPulseId(pulse)), record.get(column++));
|
||||||
assertEquals("[8]", record.get(column++));
|
assertEquals("[8]", record.get(column++));
|
||||||
assertEquals("1", record.get(column++));
|
assertEquals("1", record.get(column++));
|
||||||
assertTrue(record.get(column).startsWith("["));
|
assertTrue(record.get(column).startsWith("["+pulse+","));
|
||||||
assertTrue(record.get(column++).endsWith("]"));
|
assertTrue(record.get(column++).endsWith("]"));
|
||||||
}
|
}
|
||||||
++pulse;
|
++pulse;
|
||||||
|
Reference in New Issue
Block a user