Skip to content
This repository was archived by the owner on Feb 15, 2024. It is now read-only.

Commit fc60b17

Browse files
committed
Encapsulates xml list (de)serializer
1 parent e96184a commit fc60b17

11 files changed

Lines changed: 278 additions & 226 deletions

File tree

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package io.adminshell.aas.v3.dataformat.xml.deserialization;
2+
3+
import com.fasterxml.jackson.databind.JsonNode;
4+
5+
public interface CustomJsonNodeDeserializer<T extends Object> {
6+
public T readValue(JsonNode node);
7+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package io.adminshell.aas.v3.dataformat.xml.deserialization;
2+
3+
import com.fasterxml.jackson.databind.JsonNode;
4+
5+
import io.adminshell.aas.v3.model.LangString;
6+
7+
public class LangStringNodeDeserializer implements CustomJsonNodeDeserializer<LangString> {
8+
@Override
9+
public LangString readValue(JsonNode node) {
10+
String lang = node.get("lang").asText();
11+
String text = node.get("").asText();
12+
return new LangString(text, lang);
13+
}
14+
}
Lines changed: 3 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,9 @@
1-
/*
2-
* Copyright (c) 2021 Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e. V.
3-
*
4-
* Licensed under the Apache License, Version 2.0 (the "License");
5-
* you may not use this file except in compliance with the License.
6-
* You may obtain a copy of the License at
7-
*
8-
* http://www.apache.org/licenses/LICENSE-2.0
9-
*
10-
* Unless required by applicable law or agreed to in writing, software
11-
* distributed under the License is distributed on an "AS IS" BASIS,
12-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13-
* See the License for the specific language governing permissions and
14-
* limitations under the License.
15-
*/
161
package io.adminshell.aas.v3.dataformat.xml.deserialization;
172

18-
import java.io.IOException;
19-
import java.util.ArrayList;
20-
import java.util.Collections;
21-
import java.util.List;
22-
23-
import com.fasterxml.jackson.core.JsonParser;
24-
import com.fasterxml.jackson.core.JsonProcessingException;
25-
import com.fasterxml.jackson.databind.DeserializationContext;
26-
import com.fasterxml.jackson.databind.JsonDeserializer;
27-
import com.fasterxml.jackson.databind.JsonNode;
28-
import com.fasterxml.jackson.databind.node.ArrayNode;
29-
import com.fasterxml.jackson.databind.node.ObjectNode;
30-
313
import io.adminshell.aas.v3.model.LangString;
324

33-
public class LangStringsDeserializer extends JsonDeserializer<List<LangString>> {
34-
35-
@Override
36-
public List<LangString> deserialize(JsonParser parser, DeserializationContext ctxt) throws IOException, JsonProcessingException {
37-
ObjectNode node = DeserializationHelper.getRootObjectNode(parser);
38-
JsonNode langStringNode = node.get("langString");
39-
if (langStringNode.isObject()) {
40-
return createLangStringsFromObjectNode(langStringNode);
41-
} else {
42-
return createLangStringsFromArrayNode((ArrayNode) langStringNode);
43-
}
44-
}
45-
46-
private List<LangString> createLangStringsFromArrayNode(ArrayNode langStringsNode) {
47-
List<LangString> langStrings = new ArrayList<>();
48-
for (int i = 0; i < langStringsNode.size(); i++) {
49-
langStrings.add(constructLangString(langStringsNode.get(i)));
50-
}
51-
return langStrings;
5+
public class LangStringsDeserializer extends NoEntryWrapperListDeserializer<LangString> {
6+
public LangStringsDeserializer() {
7+
super("langString", new LangStringNodeDeserializer());
528
}
53-
54-
private List<LangString> createLangStringsFromObjectNode(JsonNode langStringNode) {
55-
LangString langString = constructLangString(langStringNode);
56-
return Collections.singletonList(langString);
57-
}
58-
59-
private LangString constructLangString(JsonNode langStringNode) {
60-
String lang = langStringNode.get("lang").asText();
61-
String text = langStringNode.get("").asText();
62-
return new LangString(text, lang);
63-
}
64-
659
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/*
2+
* Copyright (c) 2021 Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e. V.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package io.adminshell.aas.v3.dataformat.xml.deserialization;
17+
18+
import java.io.IOException;
19+
import java.util.ArrayList;
20+
import java.util.Collections;
21+
import java.util.List;
22+
23+
import com.fasterxml.jackson.core.JsonParser;
24+
import com.fasterxml.jackson.core.JsonProcessingException;
25+
import com.fasterxml.jackson.databind.DeserializationContext;
26+
import com.fasterxml.jackson.databind.JsonDeserializer;
27+
import com.fasterxml.jackson.databind.JsonNode;
28+
import com.fasterxml.jackson.databind.node.ArrayNode;
29+
import com.fasterxml.jackson.databind.node.ObjectNode;
30+
31+
/**
32+
* Custom deserializer for lists without individual list entry wrappers for parametrized classes.
33+
*
34+
* @param <T> deserialized class within the list
35+
*/
36+
public class NoEntryWrapperListDeserializer<T extends Object> extends JsonDeserializer<List<T>> {
37+
protected final String elementName;
38+
private CustomJsonNodeDeserializer<T> nodeDeserializer;
39+
40+
public NoEntryWrapperListDeserializer(String elementName, CustomJsonNodeDeserializer<T> nodeDeserializer) {
41+
this.elementName = elementName;
42+
this.nodeDeserializer = nodeDeserializer;
43+
}
44+
45+
@Override
46+
public List<T> deserialize(JsonParser parser, DeserializationContext ctxt) throws IOException, JsonProcessingException {
47+
ObjectNode node = DeserializationHelper.getRootObjectNode(parser);
48+
JsonNode langStringNode = node.get(elementName);
49+
if (langStringNode.isObject()) {
50+
return createEntriesFromObjectNode(langStringNode);
51+
} else {
52+
return createEntriesFromArrayNode((ArrayNode) langStringNode);
53+
}
54+
}
55+
56+
private List<T> createEntriesFromArrayNode(ArrayNode langStringsNode) {
57+
List<T> entries = new ArrayList<>();
58+
for (int i = 0; i < langStringsNode.size(); i++) {
59+
JsonNode nextNode = langStringsNode.get(i);
60+
entries.add(nodeDeserializer.readValue(nextNode));
61+
}
62+
return entries;
63+
}
64+
65+
private List<T> createEntriesFromObjectNode(JsonNode langStringNode) {
66+
T entry = nodeDeserializer.readValue(langStringNode);
67+
return Collections.singletonList(entry);
68+
}
69+
}

dataformat-xml/src/main/java/io/adminshell/aas/v3/dataformat/xml/serialization/NamespaceIndependentReferenceSerializer.java renamed to dataformat-xml/src/main/java/io/adminshell/aas/v3/dataformat/xml/serialization/KeySerializer.java

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -23,35 +23,30 @@
2323
import com.fasterxml.jackson.databind.JsonSerializer;
2424
import com.fasterxml.jackson.databind.SerializerProvider;
2525
import com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator;
26-
import io.adminshell.aas.v3.dataformat.core.serialization.EnumSerializer;
2726

27+
import io.adminshell.aas.v3.dataformat.core.serialization.EnumSerializer;
2828
import io.adminshell.aas.v3.model.Key;
29-
import io.adminshell.aas.v3.model.Reference;
3029

31-
public class NamespaceIndependentReferenceSerializer extends JsonSerializer<Reference> {
30+
public class KeySerializer extends JsonSerializer<Key> {
3231

3332
@Override
34-
public void serialize(Reference value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
33+
public void serialize(Key key, JsonGenerator gen, SerializerProvider serializers) throws IOException {
3534
ToXmlGenerator xgen = (ToXmlGenerator) gen;
36-
xgen.writeStartObject();
37-
xgen.writeObjectFieldStart("keys");
38-
for (Key key : value.getKeys()) {
39-
xgen.writeObjectFieldStart("key");
40-
try {
41-
String idTypeValue = EnumSerializer.translate(key.getIdType().toString());
42-
xgen.getStaxWriter().writeAttribute("idType", idTypeValue);
43-
String keyTypeValue = EnumSerializer.translate(key.getType().toString());
44-
xgen.getStaxWriter().writeAttribute("type", keyTypeValue);
45-
} catch (XMLStreamException e) {
46-
e.printStackTrace();
47-
}
48-
xgen.setNextIsAttribute(false);
49-
xgen.setNextIsUnwrapped(true);
50-
xgen.writeFieldName("value");
51-
xgen.writeString(key.getValue());
52-
xgen.writeEndObject();
35+
xgen.writeObjectFieldStart("key");
36+
37+
try {
38+
String idTypeValue = EnumSerializer.translate(key.getIdType().toString());
39+
xgen.getStaxWriter().writeAttribute("idType", idTypeValue);
40+
String keyTypeValue = EnumSerializer.translate(key.getType().toString());
41+
xgen.getStaxWriter().writeAttribute("type", keyTypeValue);
42+
} catch (XMLStreamException e) {
43+
e.printStackTrace();
5344
}
54-
xgen.writeEndObject();
45+
xgen.setNextIsAttribute(false);
46+
xgen.setNextIsUnwrapped(true);
47+
xgen.writeFieldName("value");
48+
xgen.writeString(key.getValue());
49+
5550
xgen.writeEndObject();
5651
}
5752
}

dataformat-xml/src/main/java/io/adminshell/aas/v3/dataformat/xml/serialization/LangStringsAASSerializer.java renamed to dataformat-xml/src/main/java/io/adminshell/aas/v3/dataformat/xml/serialization/LangStringSerializer.java

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
package io.adminshell.aas.v3.dataformat.xml.serialization;
1717

1818
import java.io.IOException;
19-
import java.util.List;
19+
20+
import javax.xml.stream.XMLStreamException;
2021

2122
import com.fasterxml.jackson.core.JsonGenerator;
2223
import com.fasterxml.jackson.databind.JsonSerializer;
@@ -25,33 +26,24 @@
2526

2627
import io.adminshell.aas.v3.model.LangString;
2728

28-
public class LangStringsAASSerializer extends JsonSerializer<List<LangString>> {
29-
30-
@Override
31-
public void serialize(List<LangString> value, JsonGenerator gen, SerializerProvider serializers)
32-
throws IOException {
33-
34-
ToXmlGenerator xgen = (ToXmlGenerator) gen;
35-
xgen.writeStartObject();
36-
37-
if(value.size() == 0) {
38-
value.add(new LangString());
29+
public class LangStringSerializer extends JsonSerializer<LangString> {
30+
31+
@Override
32+
public void serialize(LangString langString, JsonGenerator gen, SerializerProvider serializers) throws IOException {
33+
ToXmlGenerator xgen = (ToXmlGenerator) gen;
34+
xgen.writeObjectFieldStart("langString");
35+
36+
try {
37+
xgen.getStaxWriter().writeAttribute("lang", langString.getLanguage());
38+
} catch (XMLStreamException e) {
39+
e.printStackTrace();
3940
}
40-
41-
for (LangString langString : value) {
42-
xgen.writeObjectFieldStart("aas:langString");
43-
xgen.setNextIsAttribute(true);
44-
xgen.writeFieldName("lang");
45-
xgen.writeString(langString.getLanguage());
46-
xgen.setNextIsAttribute(false);
47-
xgen.setNextIsUnwrapped(true);
48-
xgen.writeFieldName("value");
49-
xgen.writeString(langString.getValue());
50-
xgen.writeEndObject();
51-
}
52-
41+
xgen.setNextIsAttribute(false);
42+
xgen.setNextIsUnwrapped(true);
43+
xgen.writeFieldName("value");
44+
xgen.writeString(langString.getValue());
45+
5346
xgen.writeEndObject();
54-
55-
}
47+
}
5648

5749
}

dataformat-xml/src/main/java/io/adminshell/aas/v3/dataformat/xml/serialization/LangStringsIEC61360Serializer.java

Lines changed: 0 additions & 57 deletions
This file was deleted.

0 commit comments

Comments
 (0)