1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.sharding.yaml.swapper.strategy;
19
20 import org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
21 import org.apache.shardingsphere.infra.util.yaml.swapper.YamlConfigurationSwapper;
22 import org.apache.shardingsphere.sharding.api.config.strategy.sharding.ComplexShardingStrategyConfiguration;
23 import org.apache.shardingsphere.sharding.api.config.strategy.sharding.HintShardingStrategyConfiguration;
24 import org.apache.shardingsphere.sharding.api.config.strategy.sharding.NoneShardingStrategyConfiguration;
25 import org.apache.shardingsphere.sharding.api.config.strategy.sharding.ShardingStrategyConfiguration;
26 import org.apache.shardingsphere.sharding.api.config.strategy.sharding.StandardShardingStrategyConfiguration;
27 import org.apache.shardingsphere.sharding.exception.metadata.InvalidShardingStrategyConfigCountException;
28 import org.apache.shardingsphere.sharding.yaml.config.strategy.sharding.YamlComplexShardingStrategyConfiguration;
29 import org.apache.shardingsphere.sharding.yaml.config.strategy.sharding.YamlHintShardingStrategyConfiguration;
30 import org.apache.shardingsphere.sharding.yaml.config.strategy.sharding.YamlNoneShardingStrategyConfiguration;
31 import org.apache.shardingsphere.sharding.yaml.config.strategy.sharding.YamlShardingStrategyConfiguration;
32 import org.apache.shardingsphere.sharding.yaml.config.strategy.sharding.YamlStandardShardingStrategyConfiguration;
33
34
35
36
37 public final class YamlShardingStrategyConfigurationSwapper implements YamlConfigurationSwapper<YamlShardingStrategyConfiguration, ShardingStrategyConfiguration> {
38
39 @Override
40 public YamlShardingStrategyConfiguration swapToYamlConfiguration(final ShardingStrategyConfiguration data) {
41 YamlShardingStrategyConfiguration result = new YamlShardingStrategyConfiguration();
42 if (data instanceof StandardShardingStrategyConfiguration) {
43 result.setStandard(createYamlStandardShardingStrategyConfiguration((StandardShardingStrategyConfiguration) data));
44 }
45 if (data instanceof ComplexShardingStrategyConfiguration) {
46 result.setComplex(createYamlComplexShardingStrategyConfiguration((ComplexShardingStrategyConfiguration) data));
47 }
48 if (data instanceof HintShardingStrategyConfiguration) {
49 result.setHint(createYamlHintShardingStrategyConfiguration((HintShardingStrategyConfiguration) data));
50 }
51 if (data instanceof NoneShardingStrategyConfiguration) {
52 result.setNone(new YamlNoneShardingStrategyConfiguration());
53 }
54 return result;
55 }
56
57 @Override
58 public ShardingStrategyConfiguration swapToObject(final YamlShardingStrategyConfiguration yamlConfig) {
59 int shardingStrategyConfigCount = 0;
60 ShardingStrategyConfiguration result = null;
61 if (null != yamlConfig.getStandard()) {
62 shardingStrategyConfigCount++;
63 result = createStandardShardingStrategyConfiguration(yamlConfig.getStandard());
64 }
65 if (null != yamlConfig.getComplex()) {
66 shardingStrategyConfigCount++;
67 result = createComplexShardingStrategyConfiguration(yamlConfig.getComplex());
68 }
69 if (null != yamlConfig.getHint()) {
70 shardingStrategyConfigCount++;
71 result = createHintShardingStrategyConfiguration(yamlConfig.getHint());
72 }
73 if (null != yamlConfig.getNone()) {
74 shardingStrategyConfigCount++;
75 result = new NoneShardingStrategyConfiguration();
76 }
77 ShardingSpherePreconditions.checkState(shardingStrategyConfigCount <= 1, InvalidShardingStrategyConfigCountException::new);
78 return result;
79 }
80
81 private YamlStandardShardingStrategyConfiguration createYamlStandardShardingStrategyConfiguration(final StandardShardingStrategyConfiguration data) {
82 YamlStandardShardingStrategyConfiguration result = new YamlStandardShardingStrategyConfiguration();
83 result.setShardingColumn(data.getShardingColumn());
84 result.setShardingAlgorithmName(data.getShardingAlgorithmName());
85 return result;
86 }
87
88 private YamlComplexShardingStrategyConfiguration createYamlComplexShardingStrategyConfiguration(final ComplexShardingStrategyConfiguration data) {
89 YamlComplexShardingStrategyConfiguration result = new YamlComplexShardingStrategyConfiguration();
90 result.setShardingColumns(data.getShardingColumns());
91 result.setShardingAlgorithmName(data.getShardingAlgorithmName());
92 return result;
93 }
94
95 private YamlHintShardingStrategyConfiguration createYamlHintShardingStrategyConfiguration(final HintShardingStrategyConfiguration data) {
96 YamlHintShardingStrategyConfiguration result = new YamlHintShardingStrategyConfiguration();
97 result.setShardingAlgorithmName(data.getShardingAlgorithmName());
98 return result;
99 }
100
101 private StandardShardingStrategyConfiguration createStandardShardingStrategyConfiguration(final YamlStandardShardingStrategyConfiguration yamlConfig) {
102 return new StandardShardingStrategyConfiguration(yamlConfig.getShardingColumn(), yamlConfig.getShardingAlgorithmName());
103 }
104
105 private ComplexShardingStrategyConfiguration createComplexShardingStrategyConfiguration(final YamlComplexShardingStrategyConfiguration yamlConfig) {
106 return new ComplexShardingStrategyConfiguration(yamlConfig.getShardingColumns(), yamlConfig.getShardingAlgorithmName());
107 }
108
109 private HintShardingStrategyConfiguration createHintShardingStrategyConfiguration(final YamlHintShardingStrategyConfiguration yamlConfig) {
110 return new HintShardingStrategyConfiguration(yamlConfig.getShardingAlgorithmName());
111 }
112 }