1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.sharding.rule.attribute;
19
20 import com.cedarsoftware.util.CaseInsensitiveSet;
21 import org.apache.shardingsphere.infra.datanode.DataNode;
22 import org.apache.shardingsphere.infra.rule.attribute.table.TableMapperRuleAttribute;
23 import org.apache.shardingsphere.sharding.rule.ShardingTable;
24
25 import java.util.Collection;
26
27
28
29
30 public final class ShardingTableNamesRuleAttribute implements TableMapperRuleAttribute {
31
32 private final CaseInsensitiveSet<String> logicalTableNames;
33
34 private final CaseInsensitiveSet<String> actualTableNames;
35
36 public ShardingTableNamesRuleAttribute(final Collection<ShardingTable> shardingTables) {
37 logicalTableNames = createLogicalTableNames(shardingTables);
38 actualTableNames = createActualTableNames(shardingTables);
39 }
40
41 private CaseInsensitiveSet<String> createLogicalTableNames(final Collection<ShardingTable> shardingTables) {
42 CaseInsensitiveSet<String> result = new CaseInsensitiveSet<>();
43 shardingTables.forEach(each -> result.add(each.getLogicTable()));
44 return result;
45 }
46
47 private CaseInsensitiveSet<String> createActualTableNames(final Collection<ShardingTable> shardingTables) {
48 CaseInsensitiveSet<String> result = new CaseInsensitiveSet<>();
49 shardingTables.stream().flatMap(each -> each.getActualDataNodes().stream()).map(DataNode::getTableName).forEach(result::add);
50 return result;
51 }
52
53 @Override
54 public Collection<String> getLogicTableNames() {
55 return logicalTableNames;
56 }
57
58 @Override
59 public Collection<String> getActualTableNames() {
60 return actualTableNames;
61 }
62
63 @Override
64 public Collection<String> getDistributedTableNames() {
65 return logicalTableNames;
66 }
67
68 @Override
69 public Collection<String> getEnhancedTableNames() {
70 return logicalTableNames;
71 }
72 }