Skip to content

Commit d9eaccf

Browse files
authored
DatFormat Definition, Yaml and Json Parsers (#632)
Implementing part of #594
1 parent 53d90a0 commit d9eaccf

File tree

15 files changed

+546
-1
lines changed

15 files changed

+546
-1
lines changed

TODO.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
* [x] Criar vo que serve para parsear do json e yaml ao mesmo tempo
2+
* [ ] Criar os parsers
3+
* [x] YAML
4+
* [x] JSON
5+
* [ ] ENV
6+
* [ ] Testar o merge dos 3 parsers no `ConfigParseService`
7+
* [ ] Parsers precisam saber ler arquivo do diretorio de configuração e só ler se a versão for 3, senão retornar nulo
8+
* [ ] Testar que ConfigService vai tentar ler a v1,v2,v3 e usar o que achar primeiro nessa ordem
9+
* [ ] Criar a config na v3 se não encontrar nenhuma, caso encontre, mantém na versão encontrada
10+
* [ ] Update the docs
11+
* [ ] Env
12+
* [ ] JSON
13+
* [ ] Yaml support
14+
15+
.

build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ dependencies {
7272
implementation('com.github.docker-java:docker-java-transport-httpclient5:3.3.4')
7373

7474
implementation('info.picocli:picocli:4.7.6')
75-
implementation('com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.17.1')
75+
implementation('com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.3')
76+
implementation('com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.18.3')
7677

7778
implementation('com.github.ben-manes.caffeine:caffeine:3.1.8')
7879

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.mageddo.dataformat.yaml;
2+
3+
import com.fasterxml.jackson.core.JsonProcessingException;
4+
import com.fasterxml.jackson.databind.SerializationFeature;
5+
import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
6+
7+
import java.io.UncheckedIOException;
8+
9+
public class YamlUtils {
10+
11+
public static final YAMLMapper mapper = YAMLMapper
12+
.builder()
13+
.enable(SerializationFeature.INDENT_OUTPUT)
14+
.build();
15+
16+
public static String format(String yaml) {
17+
try {
18+
return mapper.writeValueAsString(mapper.readTree(yaml));
19+
} catch (JsonProcessingException e) {
20+
throw new UncheckedIOException(e);
21+
}
22+
}
23+
24+
public static String writeValueAsString(Object o) {
25+
try {
26+
return mapper.writeValueAsString(o);
27+
} catch (JsonProcessingException e) {
28+
throw new UncheckedIOException(e);
29+
}
30+
}
31+
32+
public static <T> T readValue(String yaml, Class<T> clazz) {
33+
try {
34+
return mapper.readValue(yaml, clazz);
35+
} catch (JsonProcessingException e) {
36+
throw new UncheckedIOException(e);
37+
}
38+
}
39+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.mageddo.dnsproxyserver.config.provider.dataformatv3;
2+
3+
import com.mageddo.dnsproxyserver.config.Config;
4+
import com.mageddo.dnsproxyserver.config.dataprovider.ConfigDAO;
5+
6+
public class ConfigDAODataFormatV3 implements ConfigDAO {
7+
@Override
8+
public Config find() {
9+
return null;
10+
}
11+
12+
@Override
13+
public int priority() {
14+
return 0;
15+
}
16+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.mageddo.dnsproxyserver.config.provider.dataformatv3;
2+
3+
import com.mageddo.dnsproxyserver.config.Config;
4+
import com.mageddo.dnsproxyserver.config.mapper.ConfigMapper;
5+
import com.mageddo.dnsproxyserver.config.provider.dataformatv3.mapper.ConfigV3Mapper;
6+
import com.mageddo.dnsproxyserver.config.provider.dataformatv3.parser.Converter;
7+
import lombok.RequiredArgsConstructor;
8+
9+
import javax.inject.Inject;
10+
import javax.inject.Singleton;
11+
import java.util.List;
12+
13+
@Singleton
14+
@RequiredArgsConstructor(onConstructor_ = @Inject)
15+
public class ConfigParseService {
16+
17+
private final List<Converter> unorderedConverters;
18+
private final ConfigMapper configMapper;
19+
20+
public Config parseMerging(){
21+
final var parsers = this.findParsersInOrder();
22+
final var configs = this.findConfigs(parsers);
23+
return this.configMapper.mapFrom(configs);
24+
}
25+
26+
private List<Config> findConfigs(List<Converter> converters) {
27+
return converters.stream()
28+
.map(Converter::parse)
29+
.map(ConfigV3Mapper::toConfig)
30+
.toList();
31+
}
32+
33+
public List<Converter> findParsersInOrder() {
34+
throw new UnsupportedOperationException();
35+
}
36+
37+
}
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
package com.mageddo.dnsproxyserver.config.provider.dataformatv3;
2+
3+
import lombok.Data;
4+
5+
import java.util.List;
6+
7+
@Data
8+
public class ConfigV3 {
9+
10+
public int version;
11+
public Server server;
12+
public Solver solver;
13+
public DefaultDns defaultDns;
14+
public Log log;
15+
16+
@Data
17+
public static class CircuitBreaker {
18+
public String name;
19+
}
20+
21+
@Data
22+
public static class DefaultDns {
23+
public Boolean active;
24+
public ResolvConf resolvConf;
25+
}
26+
27+
@Data
28+
public static class Dns {
29+
public Integer port;
30+
public Integer noEntriesResponseCode;
31+
}
32+
33+
@Data
34+
public static class Docker {
35+
public Boolean registerContainerNames;
36+
public String domain;
37+
public Boolean hostMachineFallback;
38+
public DpsNetwork dpsNetwork;
39+
// public Networks networks;
40+
public String dockerDaemonUri;
41+
}
42+
43+
@Data
44+
public static class DpsNetwork {
45+
public String name;
46+
public Boolean autoCreate;
47+
public Boolean autoConnect;
48+
}
49+
50+
@Data
51+
public static class Env {
52+
public String name;
53+
public List<Hostname> hostnames;
54+
}
55+
56+
@Data
57+
public static class Hostname {
58+
public String type;
59+
public String hostname;
60+
public String ip;
61+
public Integer ttl;
62+
}
63+
64+
@Data
65+
public static class Local {
66+
public String activeEnv;
67+
public List<Env> envs;
68+
}
69+
70+
@Data
71+
public static class Log {
72+
public String level;
73+
public String file;
74+
}
75+
76+
@Data
77+
public static class Networks {
78+
public List<String> preferredNetworkNames;
79+
}
80+
81+
@Data
82+
public static class Remote {
83+
public Boolean active;
84+
public List<String> dnsServers;
85+
public CircuitBreaker circuitBreaker;
86+
}
87+
88+
@Data
89+
public static class ResolvConf {
90+
public String paths;
91+
public Boolean overrideNameServers;
92+
}
93+
94+
@Data
95+
public static class Server {
96+
public Dns dns;
97+
public Web web;
98+
public String protocol;
99+
}
100+
101+
@Data
102+
public static class Solver {
103+
public Remote remote;
104+
public Docker docker;
105+
public System system;
106+
public Local local;
107+
public Stub stub;
108+
}
109+
110+
@Data
111+
public static class Stub {
112+
public String domainName;
113+
}
114+
115+
@Data
116+
public static class System {
117+
public String hostMachineHostname;
118+
}
119+
120+
@Data
121+
public static class Web {
122+
public Integer port;
123+
}
124+
125+
126+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.mageddo.dnsproxyserver.config.provider.dataformatv3.mapper;
2+
3+
import com.mageddo.dnsproxyserver.config.Config;
4+
import com.mageddo.dnsproxyserver.config.provider.dataformatv3.ConfigV3;
5+
6+
public class ConfigV3Mapper {
7+
public static Config toConfig(ConfigV3 configV3) {
8+
throw new UnsupportedOperationException();
9+
}
10+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.mageddo.dnsproxyserver.config.provider.dataformatv3.parser;
2+
3+
import com.mageddo.dnsproxyserver.config.provider.dataformatv3.ConfigV3;
4+
5+
public interface Converter {
6+
7+
ConfigV3 parse();
8+
9+
String serialize(ConfigV3 config);
10+
11+
int priority();
12+
13+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.mageddo.dnsproxyserver.config.provider.dataformatv3.parser;
2+
3+
import com.mageddo.dnsproxyserver.config.provider.dataformatv3.ConfigV3;
4+
5+
public class EnvConverter implements Converter {
6+
@Override
7+
public ConfigV3 parse() {
8+
return null;
9+
}
10+
11+
@Override
12+
public String serialize(ConfigV3 config) {
13+
return "";
14+
}
15+
16+
@Override
17+
public int priority() {
18+
return 0;
19+
}
20+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.mageddo.dnsproxyserver.config.provider.dataformatv3.parser;
2+
3+
import com.mageddo.dnsproxyserver.config.provider.dataformatv3.ConfigV3;
4+
import com.mageddo.json.JsonUtils;
5+
import lombok.NoArgsConstructor;
6+
7+
import javax.inject.Inject;
8+
import javax.inject.Singleton;
9+
10+
@Singleton
11+
@NoArgsConstructor(onConstructor_ = @Inject)
12+
public class JsonConverter implements Converter {
13+
14+
@Override
15+
public ConfigV3 parse() {
16+
return parse("");
17+
}
18+
19+
public ConfigV3 parse(String json) {
20+
return JsonUtils.readValue(json, ConfigV3.class);
21+
}
22+
23+
@Override
24+
public String serialize(ConfigV3 config) {
25+
return JsonUtils.prettyWriteValueAsString(config);
26+
}
27+
28+
@Override
29+
public int priority() {
30+
return 1;
31+
}
32+
}

0 commit comments

Comments
 (0)