summaryrefslogtreecommitdiffstats
path: root/utils/src/main/java/org/onap/policy/common/utils/coder/StandardYamlCoder.java
diff options
context:
space:
mode:
Diffstat (limited to 'utils/src/main/java/org/onap/policy/common/utils/coder/StandardYamlCoder.java')
-rw-r--r--utils/src/main/java/org/onap/policy/common/utils/coder/StandardYamlCoder.java217
1 files changed, 6 insertions, 211 deletions
diff --git a/utils/src/main/java/org/onap/policy/common/utils/coder/StandardYamlCoder.java b/utils/src/main/java/org/onap/policy/common/utils/coder/StandardYamlCoder.java
index 357b106e..36f15b96 100644
--- a/utils/src/main/java/org/onap/policy/common/utils/coder/StandardYamlCoder.java
+++ b/utils/src/main/java/org/onap/policy/common/utils/coder/StandardYamlCoder.java
@@ -20,245 +20,40 @@
package org.onap.policy.common.utils.coder;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonNull;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonPrimitive;
-import java.io.IOException;
import java.io.Reader;
-import java.io.StringReader;
-import java.io.StringWriter;
import java.io.Writer;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map.Entry;
-import org.yaml.snakeyaml.DumperOptions;
-import org.yaml.snakeyaml.Yaml;
-import org.yaml.snakeyaml.emitter.Emitter;
-import org.yaml.snakeyaml.error.YAMLException;
-import org.yaml.snakeyaml.nodes.MappingNode;
-import org.yaml.snakeyaml.nodes.Node;
-import org.yaml.snakeyaml.nodes.NodeTuple;
-import org.yaml.snakeyaml.nodes.ScalarNode;
-import org.yaml.snakeyaml.nodes.SequenceNode;
-import org.yaml.snakeyaml.nodes.Tag;
-import org.yaml.snakeyaml.resolver.Resolver;
-import org.yaml.snakeyaml.serializer.Serializer;
/**
* YAML encoder and decoder using the "standard" mechanism, which is currently gson. All
* of the methods perform conversion to/from YAML (instead of JSON).
*/
public class StandardYamlCoder extends StandardCoder {
+ private final YamlJsonTranslator translator;
/**
* Constructs the object.
*/
public StandardYamlCoder() {
- super();
+ translator = new YamlJsonTranslator(getGSON());
}
@Override
protected String toJson(Object object) {
- StringWriter output = new StringWriter();
- toJson(output, object);
- return output.toString();
+ return translator.toYaml(object);
}
@Override
protected void toJson(Writer target, Object object) {
- DumperOptions dumper = new DumperOptions();
- Serializer serializer = new Serializer(new Emitter(target, dumper), new Resolver(), dumper, null);
-
- try {
- serializer.open();
- serializer.serialize(makeYaml(toJsonTree(object)));
- serializer.close();
-
- } catch (IOException e) {
- throw new YAMLException(e);
- }
+ translator.toYaml(target, object);
}
@Override
protected <T> T fromJson(String yaml, Class<T> clazz) {
- Node node = new Yaml().compose(new StringReader(yaml));
- return fromJson(makeGson(node), clazz);
+ return translator.fromYaml(yaml, clazz);
}
@Override
protected <T> T fromJson(Reader source, Class<T> clazz) {
- Node node = new Yaml().compose(source);
- return fromJson(makeGson(node), clazz);
- }
-
- /**
- * Converts an arbitrary gson element into a corresponding Yaml node.
- *
- * @param jel gson element to be converted
- * @return a yaml node corresponding to the element
- */
- private Node makeYaml(JsonElement jel) {
- if (jel.isJsonArray()) {
- return makeYamlSequence((JsonArray) jel);
-
- } else if (jel.isJsonObject()) {
- return makeYamlMap((JsonObject) jel);
-
- } else if (jel.isJsonPrimitive()) {
- return makeYamlPrim((JsonPrimitive) jel);
-
- } else {
- return new ScalarNode(Tag.NULL, "", null, null, DumperOptions.ScalarStyle.PLAIN);
- }
- }
-
- /**
- * Converts an arbitrary gson array into a corresponding Yaml sequence.
- *
- * @param jel gson element to be converted
- * @return a yaml node corresponding to the element
- */
- private Node makeYamlSequence(JsonArray jel) {
- List<Node> nodes = new ArrayList<>(jel.size());
- jel.forEach(item -> nodes.add(makeYaml(item)));
-
- return new SequenceNode(Tag.SEQ, true, nodes, null, null, DumperOptions.FlowStyle.AUTO);
- }
-
- /**
- * Converts an arbitrary gson object into a corresponding Yaml map.
- *
- * @param jel gson element to be converted
- * @return a yaml node corresponding to the element
- */
- private Node makeYamlMap(JsonObject jel) {
- List<NodeTuple> nodes = new ArrayList<>(jel.size());
-
- for (Entry<String, JsonElement> entry : jel.entrySet()) {
- Node key = new ScalarNode(Tag.STR, entry.getKey(), null, null, DumperOptions.ScalarStyle.PLAIN);
- Node value = makeYaml(entry.getValue());
-
- nodes.add(new NodeTuple(key, value));
- }
-
- return new MappingNode(Tag.MAP, true, nodes, null, null, DumperOptions.FlowStyle.AUTO);
- }
-
- /**
- * Converts an arbitrary gson primitive into a corresponding Yaml scalar.
- *
- * @param jel gson element to be converted
- * @return a yaml node corresponding to the element
- */
- private Node makeYamlPrim(JsonPrimitive jel) {
- Tag tag;
- if (jel.isNumber()) {
- Class<? extends Number> clazz = jel.getAsNumber().getClass();
-
- if (clazz == Double.class || clazz == Float.class) {
- tag = Tag.FLOAT;
-
- } else {
- tag = Tag.INT;
- }
-
- } else if (jel.isBoolean()) {
- tag = Tag.BOOL;
-
- } else {
- // treat anything else as a string
- tag = Tag.STR;
- }
-
- return new ScalarNode(tag, jel.getAsString(), null, null, DumperOptions.ScalarStyle.PLAIN);
- }
-
- /**
- * Converts an arbitrary Yaml node into a corresponding gson element.
- *
- * @param node node to be converted
- * @return a gson element corresponding to the node
- */
- private JsonElement makeGson(Node node) {
- if (node instanceof MappingNode) {
- return makeGsonObject((MappingNode) node);
-
- } else if (node instanceof SequenceNode) {
- return makeGsonArray((SequenceNode) node);
-
- } else {
- return makeGsonPrim((ScalarNode) node);
- }
-
- // yaml doesn't appear to use anchor nodes when decoding so ignore them for now
- }
-
- /**
- * Converts a Yaml sequence into a corresponding gson array.
- *
- * @param node node to be converted
- * @return a gson element corresponding to the node
- */
- private JsonElement makeGsonArray(SequenceNode node) {
- List<Node> nodes = node.getValue();
-
- JsonArray array = new JsonArray(nodes.size());
- nodes.forEach(subnode -> array.add(makeGson(subnode)));
-
- return array;
- }
-
- /**
- * Converts a Yaml map into a corresponding gson object.
- *
- * @param node node to be converted
- * @return a gson element corresponding to the node
- */
- private JsonElement makeGsonObject(MappingNode node) {
- JsonObject obj = new JsonObject();
-
- for (NodeTuple tuple : node.getValue()) {
- Node key = tuple.getKeyNode();
- String skey = ((ScalarNode) key).getValue();
-
- obj.add(skey, makeGson(tuple.getValueNode()));
- }
-
- return obj;
- }
-
- /**
- * Converts a Yaml scalar into a corresponding gson primitive.
- *
- * @param node node to be converted
- * @return a gson element corresponding to the node
- */
- private JsonElement makeGsonPrim(ScalarNode node) {
- try {
- Tag tag = node.getTag();
-
- if (tag == Tag.INT) {
- return new JsonPrimitive(Long.valueOf(node.getValue()));
-
- } else if (tag == Tag.FLOAT) {
- return new JsonPrimitive(Double.valueOf(node.getValue()));
-
- } else if (tag == Tag.BOOL) {
- return new JsonPrimitive(Boolean.valueOf(node.getValue()));
-
- } else if (tag == Tag.NULL) {
- return JsonNull.INSTANCE;
-
- } else {
- // treat anything else as a string
- return new JsonPrimitive(node.getValue());
- }
-
- } catch (NumberFormatException ex) {
- // just treat it as a string
- return new JsonPrimitive(node.getValue());
- }
+ return translator.fromYaml(source, clazz);
}
}