Skip to content

Commit 753384e

Browse files
committed
Refactored toYaml / fromYaml into separate classes to better separate concerns and improve testability for a future custom implementation
1 parent 64444aa commit 753384e

File tree

5 files changed

+100
-21
lines changed

5 files changed

+100
-21
lines changed

src/main/java/org/javawebstack/abstractdata/AbstractElement.java

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import org.javawebstack.abstractdata.json.JsonDumper;
88
import org.javawebstack.abstractdata.json.JsonParser;
99
import org.javawebstack.abstractdata.util.QueryString;
10+
import org.javawebstack.abstractdata.yaml.YamlDumper;
11+
import org.javawebstack.abstractdata.yaml.YamlParser;
1012
import org.yaml.snakeyaml.DumperOptions;
1113
import org.yaml.snakeyaml.Yaml;
1214

@@ -110,41 +112,27 @@ default String toJsonString() {
110112
Object toObject();
111113

112114
default String toYaml(boolean pretty) {
113-
Yaml yaml;
114-
if (pretty) {
115-
DumperOptions options = new DumperOptions();
116-
options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
117-
options.setPrettyFlow(true);
118-
yaml = new Yaml(options);
119-
} else {
120-
yaml = new Yaml();
121-
}
122-
return yaml.dump(toObject());
115+
return new YamlDumper().setPretty(pretty).dump(this);
123116
}
124117

125118
default String toYaml() {
126119
return toYaml(true);
127120
}
128121

129122
static AbstractElement fromYaml(String source, boolean singleRoot) {
130-
Yaml yaml = new Yaml();
131-
Object object = yaml.load(source);
132-
if (singleRoot && object instanceof List) {
133-
List<Object> list = (List<Object>) object;
134-
if (list.size() == 0) {
135-
object = new HashMap<>();
136-
} else {
137-
object = list.get(0);
138-
}
139-
}
140-
return fromAbstractObject(object);
123+
return new YamlParser().setSingleRoot(singleRoot).parse(source);
141124
}
142125

143126
static AbstractElement fromYaml(String source) {
144127
return fromYaml(source, false);
145128
}
146129

130+
@Deprecated
147131
static AbstractElement fromAbstractObject(Object object) {
132+
return fromObject(object);
133+
}
134+
135+
static AbstractElement fromObject(Object object) {
148136
if (object == null)
149137
return AbstractNull.VALUE;
150138
if (object instanceof List) {
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.javawebstack.abstractdata.yaml;
2+
3+
import org.javawebstack.abstractdata.AbstractElement;
4+
import org.yaml.snakeyaml.DumperOptions;
5+
import org.yaml.snakeyaml.Yaml;
6+
7+
public class LegacyYamlDumper {
8+
9+
protected static String dump(AbstractElement e, boolean pretty) {
10+
Yaml yaml;
11+
if (pretty) {
12+
DumperOptions options = new DumperOptions();
13+
options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
14+
options.setPrettyFlow(true);
15+
yaml = new Yaml(options);
16+
} else {
17+
yaml = new Yaml();
18+
}
19+
return yaml.dump(e.toObject());
20+
}
21+
22+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package org.javawebstack.abstractdata.yaml;
2+
3+
import org.javawebstack.abstractdata.AbstractElement;
4+
import org.yaml.snakeyaml.Yaml;
5+
6+
import java.util.HashMap;
7+
import java.util.List;
8+
9+
public class LegacyYamlParser {
10+
11+
protected static AbstractElement parse(String source, boolean singleRoot) {
12+
Yaml yaml = new Yaml();
13+
Object object = yaml.load(source);
14+
if (singleRoot && object instanceof List) {
15+
List<Object> list = (List<Object>) object;
16+
if (list.size() == 0) {
17+
object = new HashMap<>();
18+
} else {
19+
object = list.get(0);
20+
}
21+
}
22+
return AbstractElement.fromObject(object);
23+
}
24+
25+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.javawebstack.abstractdata.yaml;
2+
3+
import org.javawebstack.abstractdata.AbstractElement;
4+
5+
public class YamlDumper {
6+
7+
private boolean pretty = false;
8+
9+
public YamlDumper setPretty(boolean pretty) {
10+
this.pretty = pretty;
11+
return this;
12+
}
13+
14+
public boolean isPretty() {
15+
return pretty;
16+
}
17+
18+
public String dump(AbstractElement e) {
19+
return LegacyYamlDumper.dump(e, pretty);
20+
}
21+
22+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.javawebstack.abstractdata.yaml;
2+
3+
import org.javawebstack.abstractdata.AbstractElement;
4+
5+
public class YamlParser {
6+
7+
boolean singleRoot = false;
8+
9+
public YamlParser setSingleRoot(boolean singleRoot) {
10+
this.singleRoot = singleRoot;
11+
return this;
12+
}
13+
14+
public boolean isSingleRoot() {
15+
return singleRoot;
16+
}
17+
18+
public AbstractElement parse(String source) {
19+
return LegacyYamlParser.parse(source, singleRoot);
20+
}
21+
22+
}

0 commit comments

Comments
 (0)