1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.encrypt.api.config;
19
20 import lombok.Getter;
21 import org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration;
22 import org.apache.shardingsphere.encrypt.spi.EncryptAlgorithm;
23 import org.apache.shardingsphere.encrypt.spi.EncryptAlgorithmMetaData;
24 import org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
25 import org.apache.shardingsphere.infra.config.rule.function.EnhancedRuleConfiguration;
26 import org.apache.shardingsphere.infra.config.rule.scope.DatabaseRuleConfiguration;
27 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
28
29 import java.util.Collection;
30 import java.util.HashMap;
31 import java.util.Map;
32 import java.util.Map.Entry;
33 import java.util.Properties;
34
35
36
37
38 @Getter
39 public final class EncryptRuleConfiguration implements DatabaseRuleConfiguration, EnhancedRuleConfiguration {
40
41 private final Collection<EncryptTableRuleConfiguration> tables;
42
43 private final Map<String, AlgorithmConfiguration> encryptors;
44
45 public EncryptRuleConfiguration(final Collection<EncryptTableRuleConfiguration> tables, final Map<String, AlgorithmConfiguration> encryptors) {
46 this.tables = tables;
47 this.encryptors = rebuildEncryptorsWithDefaultProperties(encryptors);
48 }
49
50 private Map<String, AlgorithmConfiguration> rebuildEncryptorsWithDefaultProperties(final Map<String, AlgorithmConfiguration> encryptors) {
51 Map<String, AlgorithmConfiguration> result = new HashMap<>(encryptors.size(), 1F);
52 for (Entry<String, AlgorithmConfiguration> entry : encryptors.entrySet()) {
53
54 Properties props = new Properties();
55 props.putAll(entry.getValue().getProps());
56 Properties defaultProps = TypedSPILoader.findUninitedService(EncryptAlgorithm.class, entry.getValue().getType()).map(EncryptAlgorithm::getMetaData)
57 .map(EncryptAlgorithmMetaData::getDefaultProps).orElseGet(Properties::new);
58 defaultProps.forEach(props::putIfAbsent);
59 result.put(entry.getKey(), new AlgorithmConfiguration(entry.getValue().getType(), props));
60 }
61 return result;
62 }
63
64 @Override
65 public boolean isEmpty() {
66 return tables.isEmpty();
67 }
68 }