View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
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   * YAML Sharding strategy configuration swapper.
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 }