Refactor BroadcastRuleConfigurationRepositoryTupleSwapper (#31088)
diff --git a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/yaml/swapper/BroadcastRuleConfigurationRepositoryTupleSwapper.java b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/yaml/swapper/BroadcastRuleConfigurationRepositoryTupleSwapper.java
index 06284a8..965bf87 100644
--- a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/yaml/swapper/BroadcastRuleConfigurationRepositoryTupleSwapper.java
+++ b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/yaml/swapper/BroadcastRuleConfigurationRepositoryTupleSwapper.java
@@ -26,8 +26,8 @@
import org.apache.shardingsphere.mode.spi.RepositoryTupleSwapper;
import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
import java.util.Optional;
import java.util.stream.Collectors;
@@ -40,20 +40,27 @@
@Override
public Collection<RepositoryTuple> swapToRepositoryTuples(final YamlBroadcastRuleConfiguration yamlRuleConfig) {
- return yamlRuleConfig.getTables().isEmpty()
- ? Collections.emptyList()
- : Collections.singleton(new RepositoryTuple(BroadcastRuleNodePathProvider.TABLES, YamlEngine.marshal(yamlRuleConfig)));
+ Collection<RepositoryTuple> result = new LinkedList<>();
+ if (!yamlRuleConfig.getTables().isEmpty()) {
+ result.add(new RepositoryTuple(BroadcastRuleNodePathProvider.TABLES, YamlEngine.marshal(yamlRuleConfig.getTables())));
+ }
+ return result;
}
+ @SuppressWarnings("unchecked")
@Override
public Optional<YamlBroadcastRuleConfiguration> swapToObject(final Collection<RepositoryTuple> repositoryTuples) {
- List<RepositoryTuple> validTuples = repositoryTuples.stream().filter(each -> ruleNodePath.getRoot().isValidatedPath(each.getKey())).collect(Collectors.toList());
+ Collection<RepositoryTuple> validTuples = repositoryTuples.stream().filter(each -> ruleNodePath.getRoot().isValidatedPath(each.getKey())).collect(Collectors.toList());
+ if (validTuples.isEmpty()) {
+ return Optional.empty();
+ }
+ YamlBroadcastRuleConfiguration result = new YamlBroadcastRuleConfiguration();
for (RepositoryTuple each : validTuples) {
- if (ruleNodePath.getRoot().isValidatedPath(each.getKey())) {
- return Optional.of(YamlEngine.unmarshal(each.getValue(), YamlBroadcastRuleConfiguration.class));
+ if (ruleNodePath.getUniqueItem(BroadcastRuleNodePathProvider.TABLES).isValidatedPath(each.getKey())) {
+ result.getTables().addAll(YamlEngine.unmarshal(each.getValue(), LinkedHashSet.class));
}
}
- return Optional.empty();
+ return Optional.of(result);
}
@Override
diff --git a/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/yaml/swapper/BroadcastRuleConfigurationRepositoryTupleSwapperTest.java b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/yaml/swapper/BroadcastRuleConfigurationRepositoryTupleSwapperTest.java
index c39063b..4252ef0 100644
--- a/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/yaml/swapper/BroadcastRuleConfigurationRepositoryTupleSwapperTest.java
+++ b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/yaml/swapper/BroadcastRuleConfigurationRepositoryTupleSwapperTest.java
@@ -53,7 +53,7 @@
@Test
void assertSwapToObject() {
- RepositoryTuple repositoryTuple = new RepositoryTuple("/metadata/foo_db/rules/broadcast/tables", "tables:\n- foo_table\n- foo_table2\n");
+ RepositoryTuple repositoryTuple = new RepositoryTuple("/metadata/foo_db/rules/broadcast/tables/versions/0", "\n- foo_table\n- foo_table2\n");
Optional<YamlBroadcastRuleConfiguration> actual = swapper.swapToObject(Collections.singleton(repositoryTuple));
assertTrue(actual.isPresent());
assertThat(actual.get().getTables().size(), is(2));