1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.traffic.yaml.swapper;
19
20 import org.apache.shardingsphere.infra.algorithm.core.yaml.YamlAlgorithmConfigurationSwapper;
21 import org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapper;
22 import org.apache.shardingsphere.traffic.api.config.TrafficRuleConfiguration;
23 import org.apache.shardingsphere.traffic.constant.TrafficOrder;
24 import org.apache.shardingsphere.traffic.yaml.config.YamlTrafficRuleConfiguration;
25 import org.apache.shardingsphere.traffic.yaml.config.YamlTrafficStrategyConfiguration;
26
27 import java.util.Map.Entry;
28
29
30
31
32 public final class YamlTrafficRuleConfigurationSwapper implements YamlRuleConfigurationSwapper<YamlTrafficRuleConfiguration, TrafficRuleConfiguration> {
33
34 private final YamlTrafficStrategyConfigurationSwapper strategySwapper = new YamlTrafficStrategyConfigurationSwapper();
35
36 private final YamlAlgorithmConfigurationSwapper algorithmSwapper = new YamlAlgorithmConfigurationSwapper();
37
38 @Override
39 public YamlTrafficRuleConfiguration swapToYamlConfiguration(final TrafficRuleConfiguration data) {
40 YamlTrafficRuleConfiguration result = new YamlTrafficRuleConfiguration();
41 data.getTrafficStrategies().forEach(each -> result.getTrafficStrategies().put(each.getName(), strategySwapper.swapToYamlConfiguration(each)));
42 setYamlAlgorithms(data, result);
43 return result;
44 }
45
46 private void setYamlAlgorithms(final TrafficRuleConfiguration data, final YamlTrafficRuleConfiguration yamlConfig) {
47 if (null != data.getTrafficAlgorithms()) {
48 data.getTrafficAlgorithms().forEach((key, value) -> yamlConfig.getTrafficAlgorithms().put(key, algorithmSwapper.swapToYamlConfiguration(value)));
49 }
50 if (null != data.getLoadBalancers()) {
51 data.getLoadBalancers().forEach((key, value) -> yamlConfig.getLoadBalancers().put(key, algorithmSwapper.swapToYamlConfiguration(value)));
52 }
53 }
54
55 @Override
56 public TrafficRuleConfiguration swapToObject(final YamlTrafficRuleConfiguration yamlConfig) {
57 TrafficRuleConfiguration result = new TrafficRuleConfiguration();
58 for (Entry<String, YamlTrafficStrategyConfiguration> entry : yamlConfig.getTrafficStrategies().entrySet()) {
59 YamlTrafficStrategyConfiguration strategyConfig = entry.getValue();
60 strategyConfig.setName(entry.getKey());
61 result.getTrafficStrategies().add(strategySwapper.swapToObject(strategyConfig));
62 }
63 setAlgorithms(yamlConfig, result);
64 return result;
65 }
66
67 private void setAlgorithms(final YamlTrafficRuleConfiguration yamlConfig, final TrafficRuleConfiguration ruleConfig) {
68 if (null != yamlConfig.getTrafficAlgorithms()) {
69 yamlConfig.getTrafficAlgorithms().forEach((key, value) -> ruleConfig.getTrafficAlgorithms().put(key, algorithmSwapper.swapToObject(value)));
70 }
71 if (null != yamlConfig.getLoadBalancers()) {
72 yamlConfig.getLoadBalancers().forEach((key, value) -> ruleConfig.getLoadBalancers().put(key, algorithmSwapper.swapToObject(value)));
73 }
74 }
75
76 @Override
77 public Class<TrafficRuleConfiguration> getTypeClass() {
78 return TrafficRuleConfiguration.class;
79 }
80
81 @Override
82 public String getRuleTagName() {
83 return "TRAFFIC";
84 }
85
86 @Override
87 public int getOrder() {
88 return TrafficOrder.ORDER;
89 }
90 }