Skip to content

Commit 16276f9

Browse files
authored
Merge pull request #556 from CycloneDX/polish_code
2 parents 08a9448 + ae500ce commit 16276f9

11 files changed

+82
-107
lines changed

src/main/java/org/cyclonedx/util/deserializer/AbstractDataTypeDeserializer.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,12 @@
2222
import java.util.List;
2323

2424
import com.fasterxml.jackson.core.JsonProcessingException;
25+
import com.fasterxml.jackson.core.type.TypeReference;
2526
import com.fasterxml.jackson.databind.JsonDeserializer;
2627
import com.fasterxml.jackson.databind.JsonNode;
2728
import com.fasterxml.jackson.databind.ObjectMapper;
2829
import com.fasterxml.jackson.databind.node.ArrayNode;
30+
import org.cyclonedx.model.Property;
2931
import org.cyclonedx.model.formulation.common.AbstractType;
3032
import org.cyclonedx.model.formulation.common.EnvVariableChoice;
3133
import org.cyclonedx.model.formulation.common.ResourceReferenceChoice;
@@ -67,4 +69,18 @@ protected void setSourceAndTarget(JsonNode node, AbstractType type) throws JsonP
6769
setReference(node, "source", type);
6870
setReference(node, "target", type);
6971
}
72+
73+
protected void setResource(JsonNode node, AbstractType type) throws JsonProcessingException {
74+
JsonNode resourceNode = node.get("resource");
75+
ResourceReferenceChoice resource = objectMapper.treeToValue(resourceNode, ResourceReferenceChoice.class);
76+
type.setResource(resource);
77+
}
78+
79+
protected void setProperties(JsonNode node, AbstractType type) throws JsonProcessingException {
80+
if(node.has("properties")) {
81+
JsonNode propertiesNode = node.get("properties");
82+
List<Property> properties = objectMapper.convertValue(propertiesNode, new TypeReference<List<Property>>() {});
83+
type.setProperties(properties);
84+
}
85+
}
7086
}

src/main/java/org/cyclonedx/util/deserializer/InputTypeDeserializer.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,7 @@ public InputType deserialize(JsonParser jsonParser, DeserializationContext deser
4242

4343
setSourceAndTarget(node, inputType);
4444
createInputDataInfo(node, inputType);
45-
46-
if(node.has("properties")) {
47-
JsonNode propertiesNode = node.get("properties");
48-
List<Property> properties = objectMapper.convertValue(propertiesNode, new TypeReference<List<Property>>() {});
49-
inputType.setProperties(properties);
50-
}
45+
setProperties(node, inputType);
5146

5247
return inputType;
5348
}
@@ -56,9 +51,7 @@ private void createInputDataInfo(JsonNode node, InputType inputType)
5651
throws IOException
5752
{
5853
if (node.has("resource")) {
59-
JsonNode resourceNode = node.get("resource");
60-
ResourceReferenceChoice resource = objectMapper.treeToValue(resourceNode, ResourceReferenceChoice.class);
61-
inputType.setResource(resource);
54+
setResource(node, inputType);
6255
} else if (node.has("parameters")) {
6356
JsonNode parametersNode = node.get("parameters");
6457
List<Parameter> parameters = objectMapper.convertValue(parametersNode, new TypeReference<List<Parameter>>() {});

src/main/java/org/cyclonedx/util/deserializer/MetadataDeserializer.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import java.util.List;
1010

1111
import com.fasterxml.jackson.core.JsonParser;
12-
import com.fasterxml.jackson.core.JsonProcessingException;
1312
import com.fasterxml.jackson.core.type.TypeReference;
1413
import com.fasterxml.jackson.databind.DeserializationContext;
1514
import com.fasterxml.jackson.databind.JsonDeserializer;

src/main/java/org/cyclonedx/util/deserializer/OutputTypeDeserializer.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,7 @@ public OutputType deserialize(JsonParser jsonParser, DeserializationContext dese
4444

4545
setSourceAndTarget(node, outputType);
4646
createOutputDataInfo(node, outputType);
47-
48-
if(node.has("properties")) {
49-
JsonNode propertiesNode = node.get("properties");
50-
List<Property> properties = objectMapper.convertValue(propertiesNode, new TypeReference<List<Property>>() {});
51-
outputType.setProperties(properties);
52-
}
47+
setProperties(node, outputType);
5348

5449
if(node.has("type")) {
5550
JsonNode typeNode = node.get("type");
@@ -62,9 +57,7 @@ public OutputType deserialize(JsonParser jsonParser, DeserializationContext dese
6257

6358
private void createOutputDataInfo(JsonNode node, OutputType outputType) throws JsonProcessingException {
6459
if (node.has("resource")) {
65-
JsonNode resourceNode = node.get("resource");
66-
ResourceReferenceChoice resource = objectMapper.treeToValue(resourceNode, ResourceReferenceChoice.class);
67-
outputType.setResource(resource);
60+
setResource(node, outputType);
6861
}
6962
else if (node.has("environmentVars")) {
7063
setEnvironmentVars(node, outputType);

src/main/java/org/cyclonedx/util/deserializer/SignatoryDeserializer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public Signatory deserialize(JsonParser jsonParser, DeserializationContext deser
4343
return parseSignatory(node);
4444
}
4545

46-
private Signatory parseSignatory(JsonNode node) throws IOException {
46+
private Signatory parseSignatory(JsonNode node) {
4747
Signatory signatory = new Signatory();
4848

4949
if (node.has("name")) {

src/main/java/org/cyclonedx/util/serializer/EvidenceSerializer.java

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.cyclonedx.util.serializer;
22

33
import java.io.IOException;
4-
import java.lang.reflect.Field;
54

65
import com.fasterxml.jackson.core.JsonGenerator;
76
import com.fasterxml.jackson.databind.SerializerProvider;
@@ -11,10 +10,11 @@
1110
import org.cyclonedx.Version;
1211
import org.cyclonedx.model.Copyright;
1312
import org.cyclonedx.model.Evidence;
14-
import org.cyclonedx.model.VersionFilter;
1513
import org.cyclonedx.model.component.evidence.Identity;
1614
import org.cyclonedx.model.component.evidence.Occurrence;
1715

16+
import static org.cyclonedx.util.serializer.SerializerUtils.shouldSerializeField;
17+
1818
public class EvidenceSerializer
1919
extends StdSerializer<Evidence>
2020
{
@@ -45,7 +45,7 @@ public void serialize(Evidence value, JsonGenerator jsonGenerator, SerializerPro
4545

4646
private void serializeXml(final ToXmlGenerator xmlGenerator, final Evidence evidence, SerializerProvider serializerProvider) throws IOException {
4747
xmlGenerator.writeStartObject();
48-
if (CollectionUtils.isNotEmpty(evidence.getIdentities()) && shouldSerializeField(evidence, "identities")) {
48+
if (CollectionUtils.isNotEmpty(evidence.getIdentities()) && shouldSerializeField(evidence, version, "identities")) {
4949
if (version.getVersion() >= Version.VERSION_16.getVersion()) {
5050
xmlGenerator.writeFieldName("identity");
5151
xmlGenerator.writeStartArray();
@@ -59,7 +59,7 @@ private void serializeXml(final ToXmlGenerator xmlGenerator, final Evidence evid
5959
}
6060
}
6161

62-
if (CollectionUtils.isNotEmpty(evidence.getOccurrences()) && shouldSerializeField(evidence, "occurrences")) {
62+
if (CollectionUtils.isNotEmpty(evidence.getOccurrences()) && shouldSerializeField(evidence, version, "occurrences")) {
6363
xmlGenerator.writeFieldName("occurrences");
6464
xmlGenerator.writeStartObject(); // Start the occurrences object
6565
for (Occurrence occurrence : evidence.getOccurrences()) {
@@ -71,7 +71,7 @@ private void serializeXml(final ToXmlGenerator xmlGenerator, final Evidence evid
7171

7272
serializeCommonInfo(xmlGenerator, evidence, serializerProvider);
7373

74-
if (CollectionUtils.isNotEmpty(evidence.getCopyright()) && shouldSerializeField(evidence, "copyright")) {
74+
if (CollectionUtils.isNotEmpty(evidence.getCopyright()) && shouldSerializeField(evidence, version, "copyright")) {
7575
xmlGenerator.writeFieldName("copyright");
7676
xmlGenerator.writeStartObject();
7777
for (Copyright item : evidence.getCopyright()) {
@@ -84,7 +84,7 @@ private void serializeXml(final ToXmlGenerator xmlGenerator, final Evidence evid
8484

8585
private void serializeJson(final JsonGenerator gen, final Evidence evidence, SerializerProvider serializerProvider) throws IOException {
8686
gen.writeStartObject();
87-
if (CollectionUtils.isNotEmpty(evidence.getIdentities()) && shouldSerializeField(evidence, "identities")) {
87+
if (CollectionUtils.isNotEmpty(evidence.getIdentities()) && shouldSerializeField(evidence, version, "identities")) {
8888
if (version.getVersion() >= Version.VERSION_16.getVersion()) {
8989
gen.writeObjectField("identity", evidence.getIdentities());
9090
}
@@ -93,13 +93,13 @@ private void serializeJson(final JsonGenerator gen, final Evidence evidence, Ser
9393
}
9494
}
9595

96-
if (CollectionUtils.isNotEmpty(evidence.getOccurrences()) && shouldSerializeField(evidence, "occurrences")) {
96+
if (CollectionUtils.isNotEmpty(evidence.getOccurrences()) && shouldSerializeField(evidence, version, "occurrences")) {
9797
gen.writeObjectField("occurrences", evidence.getOccurrences());
9898
}
9999

100100
serializeCommonInfo(gen, evidence, serializerProvider);
101101

102-
if (CollectionUtils.isNotEmpty(evidence.getCopyright()) && shouldSerializeField(evidence, "copyright")) {
102+
if (CollectionUtils.isNotEmpty(evidence.getCopyright()) && shouldSerializeField(evidence, version, "copyright")) {
103103
gen.writeFieldName("copyright");
104104
gen.writeStartArray();
105105
for (Copyright item : evidence.getCopyright()) {
@@ -117,27 +117,16 @@ private void serializeCommonInfo(
117117
final Evidence evidence,
118118
final SerializerProvider serializerProvider) throws IOException
119119
{
120-
if (evidence.getCallstack() != null && shouldSerializeField(evidence, "callstack")) {
120+
if (evidence.getCallstack() != null && shouldSerializeField(evidence, version, "callstack")) {
121121
gen.writeObjectField("callstack", evidence.getCallstack());
122122
}
123123

124-
if (evidence.getLicenses() != null && shouldSerializeField(evidence, "licenses")) {
124+
if (evidence.getLicenses() != null && shouldSerializeField(evidence, version, "licenses")) {
125125
gen.writeFieldName("licenses");
126126
new LicenseChoiceSerializer(isXml, version).serialize(evidence.getLicenses(), gen, serializerProvider);
127127
}
128128
}
129129

130-
private boolean shouldSerializeField(Object obj, String fieldName) {
131-
try {
132-
Field field = obj.getClass().getDeclaredField(fieldName);
133-
VersionFilter filter = field.getAnnotation(VersionFilter.class);
134-
return filter == null || filter.value().getVersion() <= version.getVersion();
135-
} catch (NoSuchFieldException e) {
136-
// If the field does not exist, assume it should be serialized
137-
return true;
138-
}
139-
}
140-
141130
@Override
142131
public Class<Evidence> handledType() {
143132
return Evidence.class;

src/main/java/org/cyclonedx/util/serializer/ExternalReferenceSerializer.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
import org.cyclonedx.model.VersionFilter;
3434
import org.cyclonedx.util.BomUtils;
3535

36+
import static org.cyclonedx.util.serializer.SerializerUtils.serializeHashJson;
37+
3638
public class ExternalReferenceSerializer
3739
extends StdSerializer<ExternalReference>
3840
{
@@ -105,10 +107,7 @@ private void serializeJson(final JsonGenerator gen, final ExternalReference extR
105107
gen.writeFieldName("hashes");
106108
gen.writeStartArray();
107109
for (Hash hash : extRef.getHashes()) {
108-
gen.writeStartObject();
109-
gen.writeStringField("alg", hash.getAlgorithm());
110-
gen.writeStringField("content", hash.getValue());
111-
gen.writeEndObject();
110+
serializeHashJson(gen, hash);
112111
}
113112
gen.writeEndArray();
114113
}

src/main/java/org/cyclonedx/util/serializer/HashSerializer.java

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
import org.cyclonedx.model.Hash.Algorithm;
3030
import org.cyclonedx.model.VersionFilter;
3131

32+
import static org.cyclonedx.util.serializer.SerializerUtils.serializeHashJson;
33+
3234
public class HashSerializer
3335
extends StdSerializer<Hash>
3436
{
@@ -55,19 +57,10 @@ public void serialize(
5557
SerializerUtils.serializeHashXml((ToXmlGenerator) gen, hash);
5658
}
5759
else {
58-
serializeJson(gen, hash);
60+
serializeHashJson(gen, hash);
5961
}
6062
}
6163

62-
private void serializeJson(final JsonGenerator gen, final Hash hash)
63-
throws IOException
64-
{
65-
gen.writeStartObject();
66-
gen.writeStringField("alg", hash.getAlgorithm());
67-
gen.writeStringField("content", hash.getValue());
68-
gen.writeEndObject();
69-
}
70-
7164
@Override
7265
public Class<Hash> handledType() {
7366
return Hash.class;

src/main/java/org/cyclonedx/util/serializer/LicenseChoiceSerializer.java

Lines changed: 8 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
package org.cyclonedx.util.serializer;
2020

2121
import java.io.IOException;
22-
import java.lang.reflect.Field;
2322

2423
import com.fasterxml.jackson.core.JsonGenerator;
2524
import com.fasterxml.jackson.databind.SerializerProvider;
@@ -31,9 +30,10 @@
3130
import org.cyclonedx.model.License;
3231
import org.cyclonedx.model.LicenseChoice;
3332
import org.cyclonedx.model.Property;
34-
import org.cyclonedx.model.VersionFilter;
3533
import org.cyclonedx.model.license.Expression;
3634

35+
import static org.cyclonedx.util.serializer.SerializerUtils.shouldSerializeField;
36+
3737
public class LicenseChoiceSerializer
3838
extends StdSerializer<LicenseChoice>
3939
{
@@ -86,7 +86,7 @@ else if (StringUtils.isNotBlank(l.getName())) {
8686
toXmlGenerator.writeStringField("name", l.getName());
8787
}
8888

89-
if (l.getLicensing() != null && shouldSerializeField(l, "licensing")) {
89+
if (l.getLicensing() != null && shouldSerializeField(l, version,"licensing")) {
9090
toXmlGenerator.writeObjectField("licensing", l.getLicensing());
9191
}
9292

@@ -98,7 +98,7 @@ else if (StringUtils.isNotBlank(l.getName())) {
9898
toXmlGenerator.writeStringField("url", l.getUrl());
9999
}
100100

101-
if (CollectionUtils.isNotEmpty(l.getProperties()) && shouldSerializeField(l, "properties")) {
101+
if (CollectionUtils.isNotEmpty(l.getProperties()) && shouldSerializeField(l, version, "properties")) {
102102
toXmlGenerator.writeFieldName("properties");
103103
toXmlGenerator.writeStartObject();
104104

@@ -134,13 +134,13 @@ private void serializeXmlAttributes(
134134
{
135135
toXmlGenerator.writeStartObject();
136136

137-
if (StringUtils.isNotBlank(bomRef) && shouldSerializeField(object, "bomRef")) {
137+
if (StringUtils.isNotBlank(bomRef) && shouldSerializeField(object, version, "bomRef")) {
138138
toXmlGenerator.setNextIsAttribute(true);
139139
toXmlGenerator.writeFieldName("bom-ref");
140140
toXmlGenerator.writeString(bomRef);
141141
toXmlGenerator.setNextIsAttribute(false);
142142
}
143-
if (StringUtils.isNotBlank(acknowledgement) && shouldSerializeField(object, "acknowledgement")) {
143+
if (StringUtils.isNotBlank(acknowledgement) && shouldSerializeField(object, version, "acknowledgement")) {
144144
toXmlGenerator.setNextIsAttribute(true);
145145
toXmlGenerator.writeFieldName("acknowledgement");
146146
toXmlGenerator.writeString(acknowledgement);
@@ -198,34 +198,13 @@ private void serializeExpressionToJson(final LicenseChoice licenseChoice, final
198198
gen.writeStartObject();
199199
gen.writeStringField("expression", expression.getValue());
200200
if (StringUtils.isNotBlank(expression.getAcknowledgement()) &&
201-
shouldSerializeField(expression, "acknowledgement")) {
201+
shouldSerializeField(expression, version, "acknowledgement")) {
202202
gen.writeStringField("acknowledgement", expression.getAcknowledgement());
203203
}
204-
if (StringUtils.isNotBlank(expression.getBomRef()) && shouldSerializeField(expression, "bomRef")) {
204+
if (StringUtils.isNotBlank(expression.getBomRef()) && shouldSerializeField(expression, version, "bomRef")) {
205205
gen.writeStringField("bom-ref", expression.getBomRef());
206206
}
207207
gen.writeEndObject();
208208
gen.writeEndArray();
209209
}
210-
211-
private boolean shouldSerialize(Object obj) {
212-
for (Field field : obj.getClass().getDeclaredFields()) {
213-
VersionFilter filter = field.getAnnotation(VersionFilter.class);
214-
if (filter != null && filter.value().getVersion() > version.getVersion()) {
215-
return false;
216-
}
217-
}
218-
return true;
219-
}
220-
221-
private boolean shouldSerializeField(Object obj, String fieldName) {
222-
try {
223-
Field field = obj.getClass().getDeclaredField(fieldName);
224-
VersionFilter filter = field.getAnnotation(VersionFilter.class);
225-
return filter == null || filter.value().getVersion() <= version.getVersion();
226-
} catch (NoSuchFieldException e) {
227-
// If the field does not exist, assume it should be serialized
228-
return true;
229-
}
230-
}
231210
}

0 commit comments

Comments
 (0)