1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.mask.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.mask.config.MaskRuleConfiguration;
23 import org.apache.shardingsphere.mask.config.rule.MaskTableRuleConfiguration;
24 import org.apache.shardingsphere.mask.rule.MaskRule;
25 import org.apache.shardingsphere.mask.yaml.config.rule.YamlMaskTableRuleConfiguration;
26 import org.apache.shardingsphere.mask.yaml.swapper.rule.YamlMaskTableRuleConfigurationSwapper;
27 import org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
28 import org.apache.shardingsphere.mode.spi.rule.RuleChangedItemType;
29
30 import java.util.LinkedHashMap;
31 import java.util.LinkedList;
32
33
34
35
36 public final class MaskTableChangedProcessor implements RuleItemConfigurationChangedProcessor<MaskRuleConfiguration, MaskTableRuleConfiguration> {
37
38 @Override
39 public MaskTableRuleConfiguration swapRuleItemConfiguration(final String itemName, final String yamlContent) {
40 return new YamlMaskTableRuleConfigurationSwapper().swapToObject(YamlEngine.unmarshal(yamlContent, YamlMaskTableRuleConfiguration.class));
41 }
42
43 @Override
44 public MaskRuleConfiguration findRuleConfiguration(final ShardingSphereDatabase database) {
45 return database.getRuleMetaData().findSingleRule(MaskRule.class).map(MaskRule::getConfiguration).orElseGet(() -> new MaskRuleConfiguration(new LinkedList<>(), new LinkedHashMap<>()));
46 }
47
48 @Override
49 public void changeRuleItemConfiguration(final String itemName, final MaskRuleConfiguration currentRuleConfig, final MaskTableRuleConfiguration toBeChangedItemConfig) {
50
51 currentRuleConfig.getTables().removeIf(each -> each.getName().equals(toBeChangedItemConfig.getName()));
52 currentRuleConfig.getTables().add(toBeChangedItemConfig);
53 }
54
55 @Override
56 public void dropRuleItemConfiguration(final String itemName, final MaskRuleConfiguration currentRuleConfig) {
57 currentRuleConfig.getTables().removeIf(each -> each.getName().equals(itemName));
58 }
59
60 @Override
61 public RuleChangedItemType getType() {
62 return new RuleChangedItemType("mask", "tables");
63 }
64 }