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));