1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.sharding.rule.changed;
19
20 import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
21 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
22 import org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
23 import org.apache.shardingsphere.mode.spi.rule.RuleChangedItemType;
24 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
25 import org.apache.shardingsphere.sharding.api.config.strategy.sharding.ShardingStrategyConfiguration;
26 import org.apache.shardingsphere.sharding.rule.ShardingRule;
27 import org.apache.shardingsphere.sharding.yaml.config.strategy.sharding.YamlShardingStrategyConfiguration;
28 import org.apache.shardingsphere.sharding.yaml.swapper.strategy.YamlShardingStrategyConfigurationSwapper;
29
30
31
32
33 public final class DefaultTableShardingStrategyChangedProcessor implements RuleItemConfigurationChangedProcessor<ShardingRuleConfiguration, ShardingStrategyConfiguration> {
34
35 @Override
36 public ShardingStrategyConfiguration swapRuleItemConfiguration(final String itemName, final String yamlContent) {
37 return new YamlShardingStrategyConfigurationSwapper().swapToObject(YamlEngine.unmarshal(yamlContent, YamlShardingStrategyConfiguration.class));
38 }
39
40 @Override
41 public ShardingRuleConfiguration findRuleConfiguration(final ShardingSphereDatabase database) {
42 return database.getRuleMetaData().findSingleRule(ShardingRule.class).map(ShardingRule::getConfiguration).orElseGet(ShardingRuleConfiguration::new);
43 }
44
45 @Override
46 public void changeRuleItemConfiguration(final String itemName, final ShardingRuleConfiguration currentRuleConfig, final ShardingStrategyConfiguration toBeChangedItemConfig) {
47 currentRuleConfig.setDefaultTableShardingStrategy(toBeChangedItemConfig);
48 }
49
50 @Override
51 public void dropRuleItemConfiguration(final String itemName, final ShardingRuleConfiguration currentRuleConfig) {
52 currentRuleConfig.setDefaultTableShardingStrategy(null);
53 }
54
55 @Override
56 public RuleChangedItemType getType() {
57 return new RuleChangedItemType("sharding", "default_table_strategy");
58 }
59 }