add time series map keys of Instant type
This commit is contained in:
parent
c07c2b82ff
commit
15adb8d9f7
3 changed files with 41 additions and 2 deletions
|
@ -762,6 +762,13 @@ public final class XContentBuilder implements ToXContent, Flushable, Closeable {
|
|||
return this;
|
||||
}
|
||||
|
||||
public XContentBuilder timeseriesMap(Map<Instant, Object> map) throws IOException {
|
||||
if (map == null) {
|
||||
return nullValue();
|
||||
}
|
||||
writeInstantMap(map);
|
||||
return this;
|
||||
}
|
||||
|
||||
public XContentBuilder flatMap(Map<String, String> map) throws IOException {
|
||||
if (map == null) {
|
||||
|
@ -827,6 +834,22 @@ public final class XContentBuilder implements ToXContent, Flushable, Closeable {
|
|||
generator.writeEndObject();
|
||||
}
|
||||
|
||||
private void writeInstantMap(Map<Instant, Object> map) throws IOException {
|
||||
generator.writeStartObject();
|
||||
for (Map.Entry<Instant, Object> entry : map.entrySet()) {
|
||||
Instant instant = entry.getKey();
|
||||
ZonedDateTime zdt = ZonedDateTime.ofInstant(instant, ZoneId.systemDefault());
|
||||
field(zdt.format(DateTimeFormatter.ISO_INSTANT));
|
||||
Object value = entry.getValue();
|
||||
if (value == null) {
|
||||
generator.writeNull();
|
||||
} else {
|
||||
writeValue(value);
|
||||
}
|
||||
}
|
||||
generator.writeEndObject();
|
||||
}
|
||||
|
||||
private void writeFlatMap(Map<String, String> map) throws IOException {
|
||||
generator.writeStartObject();
|
||||
for (Map.Entry<String, String> entry : map.entrySet()) {
|
||||
|
@ -887,6 +910,10 @@ public final class XContentBuilder implements ToXContent, Flushable, Closeable {
|
|||
generator.writeEndArray();
|
||||
} else if (type == byte[].class) {
|
||||
generator.writeBinary((byte[]) value);
|
||||
} else if (value instanceof Instant) {
|
||||
Instant instant = (Instant) value;
|
||||
ZonedDateTime zdt = ZonedDateTime.ofInstant(instant, ZoneId.systemDefault());
|
||||
generator.writeString(zdt.format(DateTimeFormatter.ISO_INSTANT));
|
||||
} else if (value instanceof Date) {
|
||||
Date date = (Date) value;
|
||||
Instant instant = Instant.ofEpochMilli(date.getTime());
|
||||
|
|
|
@ -10,6 +10,9 @@ import org.xbib.content.json.JsonXContent;
|
|||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
import java.time.ZoneOffset;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
|
@ -149,4 +152,13 @@ public class XContentBuilderTest {
|
|||
builder.field((String) null);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInstantMap() throws IOException {
|
||||
Instant instant = LocalDate.parse("2020-10-05").atStartOfDay().toInstant(ZoneOffset.UTC);
|
||||
Map<Instant, Object> map = Map.of(instant, "Hello world");
|
||||
XContentBuilder builder = contentBuilder();
|
||||
builder.timeseriesMap(map);
|
||||
assertEquals("{\"2020-10-05T00:00:00Z\":\"Hello world\"}", builder.string());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
group = org.xbib
|
||||
name = content
|
||||
version = 2.5.2
|
||||
version = 2.5.3
|
||||
|
||||
gradle.wrapper.version = 6.6.1
|
||||
xbib.net.version = 2.1.0
|
||||
|
@ -9,5 +9,5 @@ jackson.version = 2.11.2
|
|||
jackson.databind.version = 2.11.2
|
||||
woodstox.version = 6.2.1
|
||||
snakeyaml.version = 1.27
|
||||
mockito.version = 3.3.3
|
||||
mockito.version = 3.5.13
|
||||
asciidoclet.version = 1.5.6
|
||||
|
|
Loading…
Reference in a new issue