1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.yaml.snakeyaml.emitter;
18
19 import java.util.HashMap;
20 import java.util.List;
21 import java.util.Map;
22
23 import org.yaml.snakeyaml.constructor.AbstractConstruct;
24 import org.yaml.snakeyaml.constructor.Constructor;
25 import org.yaml.snakeyaml.events.AliasEvent;
26 import org.yaml.snakeyaml.events.DocumentEndEvent;
27 import org.yaml.snakeyaml.events.DocumentStartEvent;
28 import org.yaml.snakeyaml.events.Event;
29 import org.yaml.snakeyaml.events.ImplicitTuple;
30 import org.yaml.snakeyaml.events.MappingEndEvent;
31 import org.yaml.snakeyaml.events.MappingStartEvent;
32 import org.yaml.snakeyaml.events.ScalarEvent;
33 import org.yaml.snakeyaml.events.SequenceEndEvent;
34 import org.yaml.snakeyaml.events.SequenceStartEvent;
35 import org.yaml.snakeyaml.events.StreamEndEvent;
36 import org.yaml.snakeyaml.events.StreamStartEvent;
37 import org.yaml.snakeyaml.nodes.MappingNode;
38 import org.yaml.snakeyaml.nodes.Node;
39 import org.yaml.snakeyaml.nodes.ScalarNode;
40
41 public class EventConstructor extends Constructor {
42
43 public EventConstructor() {
44 this.yamlConstructors.put(null, new ConstructEvent());
45 }
46
47 private class ConstructEvent extends AbstractConstruct {
48
49 @SuppressWarnings("unchecked")
50 public Object construct(Node node) {
51 Map<Object, Object> mapping;
52 if (node instanceof ScalarNode) {
53 mapping = new HashMap<Object, Object>();
54 } else {
55 mapping = constructMapping((MappingNode) node);
56 }
57 String className = node.getTag().getValue().substring(1) + "Event";
58 Event value;
59 if (className.equals("AliasEvent")) {
60 value = new AliasEvent((String) mapping.get("anchor"), null, null);
61 } else if (className.equals("ScalarEvent")) {
62 String tag = (String) mapping.get("tag");
63 String v = (String) mapping.get("value");
64 if (v == null) {
65 v = "";
66 }
67 List<Boolean> implicitList = (List<Boolean>) mapping.get("implicit");
68 ImplicitTuple implicit;
69 if (implicitList == null) {
70 implicit = new ImplicitTuple(false, true);
71 } else {
72 implicit = new ImplicitTuple((Boolean) implicitList.get(0),
73 (Boolean) implicitList.get(1));
74 }
75 value = new ScalarEvent((String) mapping.get("anchor"), tag, implicit, v, null,
76 null, null);
77 } else if (className.equals("SequenceStartEvent")) {
78 String tag = (String) mapping.get("tag");
79 Boolean implicit = (Boolean) mapping.get("implicit");
80 if (implicit == null) {
81 implicit = true;
82 }
83 value = new SequenceStartEvent((String) mapping.get("anchor"), tag, implicit, null,
84 null, false);
85 } else if (className.equals("MappingStartEvent")) {
86 String tag = (String) mapping.get("tag");
87 Boolean implicit = (Boolean) mapping.get("implicit");
88 if (implicit == null) {
89 implicit = true;
90 }
91 value = new MappingStartEvent((String) mapping.get("anchor"), tag, implicit, null,
92 null, false);
93 } else if (className.equals("DocumentEndEvent")) {
94 value = new DocumentEndEvent(null, null, false);
95 } else if (className.equals("DocumentStartEvent")) {
96 Map<String, String> tags = (Map<String, String>) mapping.get("tags");
97 List<Integer> versionList = (List<Integer>) mapping.get("version");
98 Integer[] version = null;
99 if (versionList != null) {
100 version = new Integer[2];
101 version[0] = versionList.get(0).intValue();
102 version[1] = versionList.get(1).intValue();
103 }
104 value = new DocumentStartEvent(null, null, false, version, tags);
105 } else if (className.equals("MappingEndEvent")) {
106 value = new MappingEndEvent(null, null);
107 } else if (className.equals("SequenceEndEvent")) {
108 value = new SequenceEndEvent(null, null);
109 } else if (className.equals("StreamEndEvent")) {
110 value = new StreamEndEvent(null, null);
111 } else if (className.equals("StreamStartEvent")) {
112 value = new StreamStartEvent(null, null);
113 } else {
114 throw new UnsupportedOperationException();
115 }
116 return value;
117 }
118 }
119 }