1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package gov.nist.secauto.swid.builder.output;
28
29 import com.fasterxml.jackson.core.JsonGenerator;
30
31 import java.io.IOException;
32 import java.math.BigInteger;
33 import java.time.ZonedDateTime;
34 import java.time.format.DateTimeFormatter;
35 import java.util.regex.Pattern;
36
37 public class JsonSupport {
38
39 private static final Pattern INTEGER_PATTERN = Pattern.compile("[-]?[1-9]\\d*");
40
41 protected void writeField(JsonGenerator generator, long fieldId) throws IOException {
42 generator.writeFieldId(fieldId);
43 }
44
45 protected void writeField(JsonGenerator generator, long fieldId, JsonWritable value) throws IOException {
46 writeField(generator, fieldId);
47 value.write(generator);
48
49 }
50
51 protected void writeTextField(JsonGenerator generator, long fieldId, String text) throws IOException {
52 writeField(generator, fieldId);
53 generator.writeString(text);
54 }
55
56 protected void writeBooleanField(JsonGenerator generator, long fieldId, boolean state) throws IOException {
57 writeField(generator, fieldId);
58 generator.writeBoolean(state);
59
60 }
61
62 protected void writeLongField(JsonGenerator generator, long fieldId, long value) throws IOException {
63 writeField(generator, fieldId);
64 generator.writeNumber(value);
65 }
66
67 protected void writeIntegerField(JsonGenerator generator, long fieldId, int value) throws IOException {
68 writeField(generator, fieldId);
69 generator.writeNumber(value);
70 }
71
72 protected void writeIntegerField(JsonGenerator generator, long fieldId, BigInteger value) throws IOException {
73 writeField(generator, fieldId);
74 generator.writeNumber(value);
75 }
76
77 protected void writeDateTimeField(JsonGenerator generator, long fieldId, ZonedDateTime dateTime) throws IOException {
78 writeField(generator, fieldId);
79 generator.writeString(dateTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
80 }
81
82 protected void writeIntegerOrTextField(JsonGenerator generator, long fieldId, String value) throws IOException {
83 if (INTEGER_PATTERN.matcher(value).matches()) {
84 BigInteger intValue = new BigInteger(value);
85 writeIntegerField(generator, fieldId, intValue);
86 } else {
87 writeTextField(generator, fieldId, value);
88 }
89 }
90
91 protected void writeBinaryField(JsonGenerator generator, long fieldId, byte[] value) throws IOException {
92 writeField(generator, fieldId);
93 generator.writeBinary(value);
94 }
95 }