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.algorithm.core.config.AlgorithmConfiguration;
21 import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
22 import org.apache.shardingsphere.infra.rule.event.rule.alter.AlterNamedRuleItemEvent;
23 import org.apache.shardingsphere.infra.rule.event.rule.alter.AlterRuleItemEvent;
24 import org.apache.shardingsphere.infra.rule.event.rule.drop.DropNamedRuleItemEvent;
25 import org.apache.shardingsphere.infra.rule.event.rule.drop.DropRuleItemEvent;
26 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
27 import org.apache.shardingsphere.infra.algorithm.core.yaml.YamlAlgorithmConfiguration;
28 import org.apache.shardingsphere.infra.algorithm.core.yaml.YamlAlgorithmConfigurationSwapper;
29 import org.apache.shardingsphere.mode.spi.RuleItemConfigurationChangedProcessor;
30 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
31 import org.apache.shardingsphere.sharding.metadata.nodepath.ShardingRuleNodePathProvider;
32 import org.apache.shardingsphere.sharding.rule.ShardingRule;
33
34
35
36
37 public final class ShardingAuditorChangedProcessor implements RuleItemConfigurationChangedProcessor<ShardingRuleConfiguration, AlgorithmConfiguration> {
38
39 @Override
40 public AlgorithmConfiguration swapRuleItemConfiguration(final AlterRuleItemEvent event, final String yamlContent) {
41 return new YamlAlgorithmConfigurationSwapper().swapToObject(YamlEngine.unmarshal(yamlContent, YamlAlgorithmConfiguration.class));
42 }
43
44 @Override
45 public ShardingRuleConfiguration findRuleConfiguration(final ShardingSphereDatabase database) {
46 return database.getRuleMetaData().findSingleRule(ShardingRule.class).map(ShardingRule::getConfiguration).orElseGet(ShardingRuleConfiguration::new);
47 }
48
49 @Override
50 public void changeRuleItemConfiguration(final AlterRuleItemEvent event, final ShardingRuleConfiguration currentRuleConfig, final AlgorithmConfiguration toBeChangedItemConfig) {
51 currentRuleConfig.getAuditors().put(((AlterNamedRuleItemEvent) event).getItemName(), toBeChangedItemConfig);
52 }
53
54 @Override
55 public void dropRuleItemConfiguration(final DropRuleItemEvent event, final ShardingRuleConfiguration currentRuleConfig) {
56 currentRuleConfig.getAuditors().remove(((DropNamedRuleItemEvent) event).getItemName());
57 }
58
59 @Override
60 public String getType() {
61 return ShardingRuleNodePathProvider.RULE_TYPE + "." + ShardingRuleNodePathProvider.AUDITORS;
62 }
63 }