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.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   * YAML traffic rule configuration swapper.
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  }