This is an automated email from the ASF dual-hosted git repository.

zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 4e15de6a505 Add NodePathGenerator interface (#34692)
4e15de6a505 is described below

commit 4e15de6a50510398cc5a097cbc2e9287975c8330
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Feb 16 13:49:02 2025 +0800

    Add NodePathGenerator interface (#34692)
    
    * Add DatabaseRuleItemNodePathGenerator
    
    * Add NodePathGenerator interface
    
    * Add NodePathGenerator interface
    
    * Add NodePathGenerator interface
---
 .../database/DataSourceUnitPersistService.java     |  2 +-
 .../database/DatabaseRulePersistService.java       |  9 ++--
 .../config/global/GlobalRulePersistService.java    |  2 +-
 .../service/DatabaseMetaDataPersistService.java    |  4 +-
 .../service/SchemaMetaDataPersistService.java      |  2 +-
 .../service/TableMetaDataPersistService.java       |  2 +-
 .../service/ViewMetaDataPersistService.java        |  2 +-
 .../mode/manager/ContextManagerTest.java           |  2 +-
 .../mode/node/path/NodePathGenerator.java}         | 35 +++++++------
 .../global/GlobalPropertiesNodePathGenerator.java  | 14 +++---
 .../config/global/GlobalRuleNodePathGenerator.java | 22 +++------
 .../path/metadata/DatabaseNodePathGenerator.java   | 19 +++-----
 .../node/path/metadata/DatabaseNodePathParser.java |  2 +-
 .../metadata/database/SchemaNodePathGenerator.java | 22 +++------
 .../metadata/database/SchemaNodePathParser.java    |  2 +-
 .../metadata/database/TableNodePathGenerator.java  | 24 +++------
 .../metadata/database/TableNodePathParser.java     |  4 +-
 .../metadata/database/ViewNodePathGenerator.java   | 24 +++------
 .../path/metadata/database/ViewNodePathParser.java |  4 +-
 .../rule/DatabaseRuleItemNodePathGenerator.java    | 57 ++++++++++++++++++++++
 .../rule/DatabaseRuleNodePathGenerator.java        | 44 +++--------------
 .../storage/DataSourceNodePathGenerator.java       | 14 +++---
 .../storage/StorageNodeNodePathGenerator.java      | 20 +++-----
 .../storage/StorageNodeNodePathParser.java         |  2 +-
 .../storage/StorageUnitNodePathGenerator.java      | 18 ++-----
 .../storage/StorageUnitNodePathParser.java         |  2 +-
 .../global/GlobalRuleNodePathGeneratorTest.java    |  2 +-
 .../metadata/DatabaseNodePathGeneratorTest.java    |  6 +--
 .../database/SchemaNodePathGeneratorTest.java      |  2 +-
 .../database/TableNodePathGeneratorTest.java       |  4 +-
 .../database/ViewNodePathGeneratorTest.java        |  4 +-
 ... => DatabaseRuleItemNodePathGeneratorTest.java} | 18 ++-----
 .../rule/DatabaseRuleNodePathGeneratorTest.java    | 20 +-------
 .../storage/StorageNodeNodePathGeneratorTest.java  |  4 +-
 .../storage/StorageUnitNodePathGeneratorTest.java  |  4 +-
 .../type/DatabaseListenerChangedHandler.java       |  4 +-
 .../listener/DataChangedEventListenerRegistry.java |  2 +-
 37 files changed, 189 insertions(+), 235 deletions(-)

diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistService.java
index 0021abc76c5..6bb9f77595a 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistService.java
@@ -94,6 +94,6 @@ public final class DataSourceUnitPersistService {
      * @param dataSourceName data source name
      */
     public void delete(final String databaseName, final String dataSourceName) 
{
-        repository.delete(new 
StorageUnitNodePathGenerator(databaseName).getStorageUnitPath(dataSourceName));
+        repository.delete(new 
StorageUnitNodePathGenerator(databaseName).getPath(dataSourceName));
     }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java
index 8f7a21bd2db..82493a987a4 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java
@@ -24,6 +24,7 @@ import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigur
 import 
org.apache.shardingsphere.mode.metadata.persist.config.RepositoryTuplePersistService;
 import 
org.apache.shardingsphere.mode.metadata.persist.version.MetaDataVersionPersistService;
 import 
org.apache.shardingsphere.mode.node.path.config.database.item.DatabaseRuleItem;
+import 
org.apache.shardingsphere.mode.node.path.metadata.rule.DatabaseRuleItemNodePathGenerator;
 import 
org.apache.shardingsphere.mode.node.path.metadata.rule.DatabaseRuleNodePathGenerator;
 import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
 import org.apache.shardingsphere.mode.node.tuple.RepositoryTuple;
@@ -92,9 +93,9 @@ public final class DatabaseRulePersistService {
         Collection<MetaDataVersion> result = new LinkedList<>();
         for (RepositoryTuple each : repositoryTuples) {
             DatabaseRuleItem databaseRuleItem = new 
DatabaseRuleItem(each.getKey());
-            VersionNodePathGenerator versionNodePathGenerator = new 
DatabaseRuleNodePathGenerator(databaseName).getVersion(ruleType, 
databaseRuleItem);
+            VersionNodePathGenerator versionNodePathGenerator = new 
DatabaseRuleItemNodePathGenerator(databaseName, 
ruleType).getVersion(databaseRuleItem);
             int nextVersion = 
metaDataVersionPersistService.persist(versionNodePathGenerator, 
each.getValue());
-            result.add(new MetaDataVersion(new 
DatabaseRuleNodePathGenerator(databaseName).getRulePath(ruleType, 
databaseRuleItem), Math.max(MetaDataVersion.INIT_VERSION, nextVersion - 1)));
+            result.add(new MetaDataVersion(new 
DatabaseRuleItemNodePathGenerator(databaseName, 
ruleType).getPath(databaseRuleItem), Math.max(MetaDataVersion.INIT_VERSION, 
nextVersion - 1)));
         }
         return result;
     }
@@ -106,7 +107,7 @@ public final class DatabaseRulePersistService {
      * @param ruleType rule type
      */
     public void delete(final String databaseName, final String ruleType) {
-        repository.delete(new 
DatabaseRuleNodePathGenerator(databaseName).getRulePath(ruleType));
+        repository.delete(new 
DatabaseRuleNodePathGenerator(databaseName).getPath(ruleType));
     }
     
     /**
@@ -132,7 +133,7 @@ public final class DatabaseRulePersistService {
     private Collection<MetaDataVersion> delete(final String databaseName, 
final String ruleType, final Collection<RepositoryTuple> repositoryTuples) {
         Collection<MetaDataVersion> result = new LinkedList<>();
         for (RepositoryTuple each : repositoryTuples) {
-            String toBeDeletedKey = new 
DatabaseRuleNodePathGenerator(databaseName).getRulePath(ruleType, new 
DatabaseRuleItem(each.getKey()));
+            String toBeDeletedKey = new 
DatabaseRuleItemNodePathGenerator(databaseName, ruleType).getPath(new 
DatabaseRuleItem(each.getKey()));
             repository.delete(toBeDeletedKey);
             result.add(new MetaDataVersion(toBeDeletedKey));
         }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/GlobalRulePersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/GlobalRulePersistService.java
index d1754fa4b32..9e74b6f5783 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/GlobalRulePersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/GlobalRulePersistService.java
@@ -67,7 +67,7 @@ public final class GlobalRulePersistService {
      * @return global rule configuration
      */
     public Optional<RuleConfiguration> load(final String ruleType) {
-        return 
yamlRepositoryTupleSwapperEngine.swapToRuleConfiguration(ruleType, 
repositoryTuplePersistService.load(new 
GlobalRuleNodePathGenerator().getRulePath(ruleType)));
+        return 
yamlRepositoryTupleSwapperEngine.swapToRuleConfiguration(ruleType, 
repositoryTuplePersistService.load(new 
GlobalRuleNodePathGenerator().getPath(ruleType)));
     }
     
     /**
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/DatabaseMetaDataPersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/DatabaseMetaDataPersistService.java
index 82dbb753b13..a8610293c50 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/DatabaseMetaDataPersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/DatabaseMetaDataPersistService.java
@@ -37,7 +37,7 @@ public final class DatabaseMetaDataPersistService {
      * @param databaseName to be added database name
      */
     public void add(final String databaseName) {
-        repository.persist(new 
DatabaseNodePathGenerator().getDatabasePath(databaseName), "");
+        repository.persist(new 
DatabaseNodePathGenerator().getPath(databaseName), "");
     }
     
     /**
@@ -46,7 +46,7 @@ public final class DatabaseMetaDataPersistService {
      * @param databaseName to be dropped database name
      */
     public void drop(final String databaseName) {
-        repository.delete(new 
DatabaseNodePathGenerator().getDatabasePath(databaseName));
+        repository.delete(new 
DatabaseNodePathGenerator().getPath(databaseName));
     }
     
     /**
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/SchemaMetaDataPersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/SchemaMetaDataPersistService.java
index e7cfac67827..2cced9954aa 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/SchemaMetaDataPersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/SchemaMetaDataPersistService.java
@@ -62,7 +62,7 @@ public final class SchemaMetaDataPersistService {
      * @param schemaName to be dropped schema name
      */
     public void drop(final String databaseName, final String schemaName) {
-        repository.delete(new 
SchemaNodePathGenerator(databaseName).getSchemaPath(schemaName));
+        repository.delete(new 
SchemaNodePathGenerator(databaseName).getPath(schemaName));
     }
     
     /**
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/TableMetaDataPersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/TableMetaDataPersistService.java
index e1bfd5b7c57..b586e0d931e 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/TableMetaDataPersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/TableMetaDataPersistService.java
@@ -92,7 +92,7 @@ public final class TableMetaDataPersistService {
      * @param tableName to be dropped table name
      */
     public void drop(final String databaseName, final String schemaName, final 
String tableName) {
-        repository.delete(new TableNodePathGenerator(databaseName, 
schemaName).getTablePath(tableName.toLowerCase()));
+        repository.delete(new TableNodePathGenerator(databaseName, 
schemaName).getPath(tableName.toLowerCase()));
     }
     
     /**
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/ViewMetaDataPersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/ViewMetaDataPersistService.java
index 7478dad912b..18da6638862 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/ViewMetaDataPersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/service/ViewMetaDataPersistService.java
@@ -92,6 +92,6 @@ public final class ViewMetaDataPersistService {
      * @param viewName to be dropped view name
      */
     public void drop(final String databaseName, final String schemaName, final 
String viewName) {
-        repository.delete(new ViewNodePathGenerator(databaseName, 
schemaName).getViewPath(viewName.toLowerCase()));
+        repository.delete(new ViewNodePathGenerator(databaseName, 
schemaName).getPath(viewName.toLowerCase()));
     }
 }
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
index d86f3402ba0..17ffbc8b738 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
@@ -146,7 +146,7 @@ class ContextManagerTest {
         
when(metaDataContexts.getMetaData().getDatabase("foo_db").getName()).thenReturn("foo_db");
         ShardingSphereDatabase database = mockDatabase();
         contextManager.reloadSchema(database, "foo_schema", "foo_ds");
-        
verify(contextManager.getPersistServiceFacade().getRepository()).delete(new 
SchemaNodePathGenerator("foo_db").getSchemaPath("foo_schema"));
+        
verify(contextManager.getPersistServiceFacade().getRepository()).delete(new 
SchemaNodePathGenerator("foo_db").getPath("foo_schema"));
     }
     
     @Test
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathGeneratorTest.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/NodePathGenerator.java
similarity index 61%
copy from 
mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathGeneratorTest.java
copy to 
mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/NodePathGenerator.java
index 102a6cdf17f..0c30f0a46bf 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathGeneratorTest.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/NodePathGenerator.java
@@ -15,22 +15,27 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.mode.node.path.metadata;
+package org.apache.shardingsphere.mode.node.path;
 
-import org.junit.jupiter.api.Test;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-
-class DatabaseNodePathGeneratorTest {
+/**
+ * Node path generator.
+ * 
+ * @param <T> type of node
+ */
+public interface NodePathGenerator<T> {
     
-    @Test
-    void assertGetPath() {
-        assertThat(new DatabaseNodePathGenerator().getRootPath(), 
is("/metadata"));
-    }
+    /**
+     * Get root path.
+     *
+     * @return root path
+     */
+    String getRootPath();
     
-    @Test
-    void assertGetDatabasePath() {
-        assertThat(new DatabaseNodePathGenerator().getDatabasePath("foo_db"), 
is("/metadata/foo_db"));
-    }
+    /**
+     * Get path.
+     *
+     * @param node node
+     * @return path
+     */
+    String getPath(T node);
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalPropertiesNodePathGenerator.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalPropertiesNodePathGenerator.java
index e63c5ada304..679d1238bb6 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalPropertiesNodePathGenerator.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalPropertiesNodePathGenerator.java
@@ -17,24 +17,26 @@
 
 package org.apache.shardingsphere.mode.node.path.config.global;
 
+import org.apache.shardingsphere.mode.node.path.NodePathGenerator;
 import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
 
 /**
  * Global properties node path generator.
  */
-public final class GlobalPropertiesNodePathGenerator {
+public final class GlobalPropertiesNodePathGenerator implements 
NodePathGenerator<String> {
     
     private static final String ROOT_NODE = "/props";
     
-    /**
-     * Get properties path.
-     *
-     * @return properties path
-     */
+    @Override
     public String getRootPath() {
         return ROOT_NODE;
     }
     
+    @Override
+    public String getPath(final String node) {
+        throw new UnsupportedOperationException("Global properties node do not 
need path.");
+    }
+    
     /**
      * Get properties version node path generator.
      *
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathGenerator.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathGenerator.java
index f6ec2b4b5ac..e1c14867017 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathGenerator.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathGenerator.java
@@ -17,32 +17,24 @@
 
 package org.apache.shardingsphere.mode.node.path.config.global;
 
+import org.apache.shardingsphere.mode.node.path.NodePathGenerator;
 import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
 
 /**
  * Global props node path generator.
  */
-public final class GlobalRuleNodePathGenerator {
+public final class GlobalRuleNodePathGenerator implements 
NodePathGenerator<String> {
     
     private static final String ROOT_NODE = "/rules";
     
-    /**
-     * Get global rule root path.
-     *
-     * @return global rule root path
-     */
+    @Override
     public String getRootPath() {
         return ROOT_NODE;
     }
     
-    /**
-     * Get global rule path.
-     *
-     * @param ruleType rule type
-     * @return global rule path
-     */
-    public String getRulePath(final String ruleType) {
-        return String.join("/", getRootPath(), ruleType);
+    @Override
+    public String getPath(final String node) {
+        return String.join("/", getRootPath(), node);
     }
     
     /**
@@ -52,6 +44,6 @@ public final class GlobalRuleNodePathGenerator {
      * @return global rule version node path generator
      */
     public VersionNodePathGenerator getVersion(final String ruleType) {
-        return new VersionNodePathGenerator(getRulePath(ruleType));
+        return new VersionNodePathGenerator(getPath(ruleType));
     }
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathGenerator.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathGenerator.java
index b1b63141c4b..8931a80635e 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathGenerator.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathGenerator.java
@@ -17,29 +17,22 @@
 
 package org.apache.shardingsphere.mode.node.path.metadata;
 
+import org.apache.shardingsphere.mode.node.path.NodePathGenerator;
+
 /**
  * Database node path generator.
  */
-public final class DatabaseNodePathGenerator {
+public final class DatabaseNodePathGenerator implements 
NodePathGenerator<String> {
     
     private static final String ROOT_NODE = "/metadata";
     
-    /**
-     * Get database root path.
-     *
-     * @return schema root path
-     */
+    @Override
     public String getRootPath() {
         return ROOT_NODE;
     }
     
-    /**
-     * Get database path.
-     *
-     * @param databaseName database name
-     * @return database path
-     */
-    public String getDatabasePath(final String databaseName) {
+    @Override
+    public String getPath(final String databaseName) {
         return String.join("/", ROOT_NODE, databaseName);
     }
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathParser.java
index a65db5e2198..f6183663c41 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathParser.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathParser.java
@@ -31,7 +31,7 @@ import java.util.regex.Pattern;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class DatabaseNodePathParser {
     
-    private static final Pattern DATABASE_PATTERN = Pattern.compile(new 
DatabaseNodePathGenerator().getDatabasePath(NodePathPattern.IDENTIFIER) + "?", 
Pattern.CASE_INSENSITIVE);
+    private static final Pattern DATABASE_PATTERN = Pattern.compile(new 
DatabaseNodePathGenerator().getPath(NodePathPattern.IDENTIFIER) + "?", 
Pattern.CASE_INSENSITIVE);
     
     /**
      * Find database name.
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaNodePathGenerator.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaNodePathGenerator.java
index caa02577573..a898211f56f 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaNodePathGenerator.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaNodePathGenerator.java
@@ -18,34 +18,26 @@
 package org.apache.shardingsphere.mode.node.path.metadata.database;
 
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.mode.node.path.NodePathGenerator;
 import 
org.apache.shardingsphere.mode.node.path.metadata.DatabaseNodePathGenerator;
 
 /**
  * Schema node path generator.
  */
 @RequiredArgsConstructor
-public final class SchemaNodePathGenerator {
+public final class SchemaNodePathGenerator implements 
NodePathGenerator<String> {
     
     private static final String SCHEMAS_NODE = "schemas";
     
     private final String databaseName;
     
-    /**
-     * Get schema root path.
-     *
-     * @return schema root path
-     */
+    @Override
     public String getRootPath() {
-        return String.join("/", new 
DatabaseNodePathGenerator().getDatabasePath(databaseName), SCHEMAS_NODE);
+        return String.join("/", new 
DatabaseNodePathGenerator().getPath(databaseName), SCHEMAS_NODE);
     }
     
-    /**
-     * Get schema path.
-     *
-     * @param schemaName schema name
-     * @return schema path
-     */
-    public String getSchemaPath(final String schemaName) {
-        return String.join("/", getRootPath(), schemaName);
+    @Override
+    public String getPath(final String node) {
+        return String.join("/", getRootPath(), node);
     }
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaNodePathParser.java
index 67d06a5bc7e..ddff0544152 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaNodePathParser.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaNodePathParser.java
@@ -40,7 +40,7 @@ public final class SchemaNodePathParser {
      */
     public static Optional<String> findSchemaName(final String path, final 
boolean containsChildPath) {
         String endPattern = containsChildPath ? "?" : "$";
-        Pattern pattern = Pattern.compile(new 
SchemaNodePathGenerator(NodePathPattern.IDENTIFIER).getSchemaPath(NodePathPattern.IDENTIFIER)
 + endPattern, Pattern.CASE_INSENSITIVE);
+        Pattern pattern = Pattern.compile(new 
SchemaNodePathGenerator(NodePathPattern.IDENTIFIER).getPath(NodePathPattern.IDENTIFIER)
 + endPattern, Pattern.CASE_INSENSITIVE);
         Matcher matcher = pattern.matcher(path);
         return matcher.find() ? Optional.of(matcher.group(2)) : 
Optional.empty();
     }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableNodePathGenerator.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableNodePathGenerator.java
index d98ed1ee54e..1e9ad9a3d1f 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableNodePathGenerator.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableNodePathGenerator.java
@@ -17,12 +17,13 @@
 
 package org.apache.shardingsphere.mode.node.path.metadata.database;
 
+import org.apache.shardingsphere.mode.node.path.NodePathGenerator;
 import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
 
 /**
  * Table node path generator.
  */
-public final class TableNodePathGenerator {
+public final class TableNodePathGenerator implements NodePathGenerator<String> 
{
     
     private static final String TABLES_NODE = "tables";
     
@@ -35,23 +36,14 @@ public final class TableNodePathGenerator {
         this.schemaName = schemaName;
     }
     
-    /**
-     * Get table root path.
-     *
-     * @return table root path
-     */
+    @Override
     public String getRootPath() {
-        return String.join("/", 
schemaNodePathGenerator.getSchemaPath(schemaName), TABLES_NODE);
+        return String.join("/", schemaNodePathGenerator.getPath(schemaName), 
TABLES_NODE);
     }
     
-    /**
-     * Get table path.
-     *
-     * @param tableName table name
-     * @return table path
-     */
-    public String getTablePath(final String tableName) {
-        return String.join("/", getRootPath(), tableName);
+    @Override
+    public String getPath(final String node) {
+        return String.join("/", getRootPath(), node);
     }
     
     /**
@@ -61,6 +53,6 @@ public final class TableNodePathGenerator {
      * @return table version node path generator
      */
     public VersionNodePathGenerator getVersion(final String tableName) {
-        return new VersionNodePathGenerator(getTablePath(tableName));
+        return new VersionNodePathGenerator(getPath(tableName));
     }
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableNodePathParser.java
index 9ad6efa37df..071ee734f6a 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableNodePathParser.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableNodePathParser.java
@@ -33,10 +33,10 @@ import java.util.regex.Pattern;
 public final class TableNodePathParser {
     
     private static final Pattern PATTERN = Pattern.compile(
-            new TableNodePathGenerator(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER).getTablePath(NodePathPattern.IDENTIFIER) + "$", 
Pattern.CASE_INSENSITIVE);
+            new TableNodePathGenerator(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER).getPath(NodePathPattern.IDENTIFIER) + "$", 
Pattern.CASE_INSENSITIVE);
     
     private static final VersionNodePathParser VERSION_PARSER = new 
VersionNodePathParser(
-            new TableNodePathGenerator(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER).getTablePath(NodePathPattern.IDENTIFIER));
+            new TableNodePathGenerator(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER).getPath(NodePathPattern.IDENTIFIER));
     
     /**
      * Find table name.
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewNodePathGenerator.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewNodePathGenerator.java
index c9342a36074..274f7298c70 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewNodePathGenerator.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewNodePathGenerator.java
@@ -17,12 +17,13 @@
 
 package org.apache.shardingsphere.mode.node.path.metadata.database;
 
+import org.apache.shardingsphere.mode.node.path.NodePathGenerator;
 import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
 
 /**
  * View path generator.
  */
-public final class ViewNodePathGenerator {
+public final class ViewNodePathGenerator implements NodePathGenerator<String> {
     
     private static final String VIEWS_NODE = "views";
     
@@ -35,23 +36,14 @@ public final class ViewNodePathGenerator {
         this.schemaName = schemaName;
     }
     
-    /**
-     * Get view root path.
-     *
-     * @return view root path
-     */
+    @Override
     public String getRootPath() {
-        return String.join("/", 
schemaNodePathGenerator.getSchemaPath(schemaName), VIEWS_NODE);
+        return String.join("/", schemaNodePathGenerator.getPath(schemaName), 
VIEWS_NODE);
     }
     
-    /**
-     * Get view path.
-     *
-     * @param viewName view name
-     * @return view path
-     */
-    public String getViewPath(final String viewName) {
-        return String.join("/", getRootPath(), viewName);
+    @Override
+    public String getPath(final String node) {
+        return String.join("/", getRootPath(), node);
     }
     
     /**
@@ -61,6 +53,6 @@ public final class ViewNodePathGenerator {
      * @return view version node path generator
      */
     public VersionNodePathGenerator getVersion(final String viewName) {
-        return new VersionNodePathGenerator(getViewPath(viewName));
+        return new VersionNodePathGenerator(getPath(viewName));
     }
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewNodePathParser.java
index ae94e8055b0..7b370940bca 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewNodePathParser.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewNodePathParser.java
@@ -33,10 +33,10 @@ import java.util.regex.Pattern;
 public final class ViewNodePathParser {
     
     private static final Pattern PATTERN = Pattern.compile(
-            new ViewNodePathGenerator(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER).getViewPath(NodePathPattern.IDENTIFIER) + "$", 
Pattern.CASE_INSENSITIVE);
+            new ViewNodePathGenerator(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER).getPath(NodePathPattern.IDENTIFIER) + "$", 
Pattern.CASE_INSENSITIVE);
     
     private static final VersionNodePathParser VERSION_PARSER = new 
VersionNodePathParser(
-            new ViewNodePathGenerator(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER).getViewPath(NodePathPattern.IDENTIFIER));
+            new ViewNodePathGenerator(NodePathPattern.IDENTIFIER, 
NodePathPattern.IDENTIFIER).getPath(NodePathPattern.IDENTIFIER));
     
     /**
      * Get view name.
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleItemNodePathGenerator.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleItemNodePathGenerator.java
new file mode 100644
index 00000000000..97d43a9e785
--- /dev/null
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleItemNodePathGenerator.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.mode.node.path.metadata.rule;
+
+import org.apache.shardingsphere.mode.node.path.NodePathGenerator;
+import 
org.apache.shardingsphere.mode.node.path.config.database.item.DatabaseRuleItem;
+import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
+
+/**
+ * Database rule item node path generator.
+ */
+public final class DatabaseRuleItemNodePathGenerator implements 
NodePathGenerator<DatabaseRuleItem> {
+    
+    private final DatabaseRuleNodePathGenerator databaseRuleNodePathGenerator;
+    
+    private final String ruleType;
+    
+    public DatabaseRuleItemNodePathGenerator(final String databaseName, final 
String ruleType) {
+        databaseRuleNodePathGenerator = new 
DatabaseRuleNodePathGenerator(databaseName);
+        this.ruleType = ruleType;
+    }
+    
+    @Override
+    public String getRootPath() {
+        return databaseRuleNodePathGenerator.getPath(ruleType);
+    }
+    
+    @Override
+    public String getPath(final DatabaseRuleItem databaseRuleItem) {
+        return String.join("/", getRootPath(), databaseRuleItem.toString());
+    }
+    
+    /**
+     * Get database rule item version node path generator.
+     *
+     * @param databaseRuleItem database rule item
+     * @return database rule item version node path generator
+     */
+    public VersionNodePathGenerator getVersion(final DatabaseRuleItem 
databaseRuleItem) {
+        return new VersionNodePathGenerator(getPath(databaseRuleItem));
+    }
+}
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleNodePathGenerator.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleNodePathGenerator.java
index d562bcd0072..2c4a33a674a 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleNodePathGenerator.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleNodePathGenerator.java
@@ -18,58 +18,26 @@
 package org.apache.shardingsphere.mode.node.path.metadata.rule;
 
 import lombok.RequiredArgsConstructor;
-import 
org.apache.shardingsphere.mode.node.path.config.database.item.DatabaseRuleItem;
+import org.apache.shardingsphere.mode.node.path.NodePathGenerator;
 import 
org.apache.shardingsphere.mode.node.path.metadata.DatabaseNodePathGenerator;
-import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
 
 /**
  * Database rule node path generator.
  */
 @RequiredArgsConstructor
-public final class DatabaseRuleNodePathGenerator {
+public final class DatabaseRuleNodePathGenerator implements 
NodePathGenerator<String> {
     
     private static final String RULE_NODE = "rules";
     
     private final String databaseName;
     
-    /**
-     * Get database root path.
-     *
-     * @return database root path
-     */
+    @Override
     public String getRootPath() {
         return String.join("/", new DatabaseNodePathGenerator().getRootPath(), 
databaseName, RULE_NODE);
     }
     
-    /**
-     * Get database rule path.
-     *
-     * @param ruleType rule type
-     * @return database rule path
-     */
-    public String getRulePath(final String ruleType) {
-        return String.join("/", getRootPath(), ruleType);
-    }
-    
-    /**
-     * Get database rule path.
-     *
-     * @param ruleType rule type
-     * @param databaseRuleItem database rule item
-     * @return database rule path
-     */
-    public String getRulePath(final String ruleType, final DatabaseRuleItem 
databaseRuleItem) {
-        return String.join("/", getRulePath(ruleType), 
databaseRuleItem.toString());
-    }
-    
-    /**
-     * Get database rule version node path generator.
-     *
-     * @param ruleType rule type
-     * @param databaseRuleItem database rule item
-     * @return database rule version node path generator
-     */
-    public VersionNodePathGenerator getVersion(final String ruleType, final 
DatabaseRuleItem databaseRuleItem) {
-        return new VersionNodePathGenerator(getRulePath(ruleType, 
databaseRuleItem));
+    @Override
+    public String getPath(final String node) {
+        return String.join("/", getRootPath(), node);
     }
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/DataSourceNodePathGenerator.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/DataSourceNodePathGenerator.java
index e2e8be73ab2..63581827234 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/DataSourceNodePathGenerator.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/DataSourceNodePathGenerator.java
@@ -18,24 +18,26 @@
 package org.apache.shardingsphere.mode.node.path.metadata.storage;
 
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.mode.node.path.NodePathGenerator;
 import 
org.apache.shardingsphere.mode.node.path.metadata.DatabaseNodePathGenerator;
 
 /**
  * Data source node path generator.
  */
 @RequiredArgsConstructor
-public final class DataSourceNodePathGenerator {
+public final class DataSourceNodePathGenerator implements 
NodePathGenerator<String> {
     
     private static final String DATA_SOURCES_NODE = "data_sources";
     
     private final String databaseName;
     
-    /**
-     * Get data source root path.
-     *
-     * @return data source root path
-     */
+    @Override
     public String getRootPath() {
         return String.join("/", new DatabaseNodePathGenerator().getRootPath(), 
databaseName, DATA_SOURCES_NODE);
     }
+    
+    @Override
+    public String getPath(final String node) {
+        throw new UnsupportedOperationException("Data source node do not need 
path.");
+    }
 }
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathGenerator.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathGenerator.java
index 02bb68d2c63..dc1cebe3cd0 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathGenerator.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathGenerator.java
@@ -18,35 +18,27 @@
 package org.apache.shardingsphere.mode.node.path.metadata.storage;
 
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.mode.node.path.NodePathGenerator;
 import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
 
 /**
  * Storage node node path generator.
  */
 @RequiredArgsConstructor
-public final class StorageNodeNodePathGenerator {
+public final class StorageNodeNodePathGenerator implements 
NodePathGenerator<String> {
     
     private static final String NODES_NODE = "nodes";
     
     private final String databaseName;
     
-    /**
-     * Get storage node root path.
-     *
-     * @return storage node root path
-     */
+    @Override
     public String getRootPath() {
         return String.join("/", new 
DataSourceNodePathGenerator(databaseName).getRootPath(), NODES_NODE);
     }
     
-    /**
-     * Get storage node path.
-     *
-     * @param storageNodeName storage node name
-     * @return storage node path
-     */
-    public String getStorageNodePath(final String storageNodeName) {
-        return String.join("/", getRootPath(), storageNodeName);
+    @Override
+    public String getPath(final String node) {
+        return String.join("/", getRootPath(), node);
     }
     
     /**
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathParser.java
index c7df6e13273..e51de92de3d 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathParser.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathParser.java
@@ -32,7 +32,7 @@ import java.util.regex.Pattern;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class StorageNodeNodePathParser {
     
-    private static final Pattern PATTERN = Pattern.compile(new 
StorageNodeNodePathGenerator(NodePathPattern.IDENTIFIER).getStorageNodePath(NodePathPattern.IDENTIFIER)
 + "$", Pattern.CASE_INSENSITIVE);
+    private static final Pattern PATTERN = Pattern.compile(new 
StorageNodeNodePathGenerator(NodePathPattern.IDENTIFIER).getPath(NodePathPattern.IDENTIFIER)
 + "$", Pattern.CASE_INSENSITIVE);
     
     private static final VersionNodePathParser VERSION_PARSER =
             new VersionNodePathParser(String.join("/", new 
StorageNodeNodePathGenerator(NodePathPattern.IDENTIFIER).getRootPath(), 
NodePathPattern.IDENTIFIER));
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathGenerator.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathGenerator.java
index 2fc0b779e79..b828b22b8ff 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathGenerator.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathGenerator.java
@@ -18,34 +18,26 @@
 package org.apache.shardingsphere.mode.node.path.metadata.storage;
 
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.mode.node.path.NodePathGenerator;
 import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
 
 /**
  * Storage unit node path generator.
  */
 @RequiredArgsConstructor
-public final class StorageUnitNodePathGenerator {
+public final class StorageUnitNodePathGenerator implements 
NodePathGenerator<String> {
     
     private static final String UNITS_NODE = "units";
     
     private final String databaseName;
     
-    /**
-     * Get storage unit root path.
-     *
-     * @return storage unit root path
-     */
+    @Override
     public String getRootPath() {
         return String.join("/", new 
DataSourceNodePathGenerator(databaseName).getRootPath(), UNITS_NODE);
     }
     
-    /**
-     * Get storage unit path.
-     *
-     * @param storageUnitName storage unit name
-     * @return storage unit path
-     */
-    public String getStorageUnitPath(final String storageUnitName) {
+    @Override
+    public String getPath(final String storageUnitName) {
         return String.join("/", getRootPath(), storageUnitName);
     }
     
diff --git 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathParser.java
 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathParser.java
index 9745f8d97b3..6f62220050c 100644
--- 
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathParser.java
+++ 
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathParser.java
@@ -33,7 +33,7 @@ import java.util.regex.Pattern;
 public final class StorageUnitNodePathParser {
     
     private static final Pattern PATTERN = Pattern.compile(
-            new 
StorageUnitNodePathGenerator(NodePathPattern.IDENTIFIER).getStorageUnitPath(NodePathPattern.IDENTIFIER)
 + "$", Pattern.CASE_INSENSITIVE);
+            new 
StorageUnitNodePathGenerator(NodePathPattern.IDENTIFIER).getPath(NodePathPattern.IDENTIFIER)
 + "$", Pattern.CASE_INSENSITIVE);
     
     private static final VersionNodePathParser VERSION_PARSER = new 
VersionNodePathParser(
             String.join("/", new 
StorageUnitNodePathGenerator(NodePathPattern.IDENTIFIER).getRootPath(), 
NodePathPattern.IDENTIFIER));
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathGeneratorTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathGeneratorTest.java
index 8b6c4d0c581..e7f11af1a86 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathGeneratorTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/global/GlobalRuleNodePathGeneratorTest.java
@@ -32,7 +32,7 @@ class GlobalRuleNodePathGeneratorTest {
     
     @Test
     void assertGetRulePath() {
-        assertThat(new GlobalRuleNodePathGenerator().getRulePath("foo_rule"), 
is("/rules/foo_rule"));
+        assertThat(new GlobalRuleNodePathGenerator().getPath("foo_rule"), 
is("/rules/foo_rule"));
     }
     
     @Test
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathGeneratorTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathGeneratorTest.java
index 102a6cdf17f..51036d3b67c 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathGeneratorTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DatabaseNodePathGeneratorTest.java
@@ -25,12 +25,12 @@ import static org.hamcrest.MatcherAssert.assertThat;
 class DatabaseNodePathGeneratorTest {
     
     @Test
-    void assertGetPath() {
+    void assertGetRootPath() {
         assertThat(new DatabaseNodePathGenerator().getRootPath(), 
is("/metadata"));
     }
     
     @Test
-    void assertGetDatabasePath() {
-        assertThat(new DatabaseNodePathGenerator().getDatabasePath("foo_db"), 
is("/metadata/foo_db"));
+    void assertGetPath() {
+        assertThat(new DatabaseNodePathGenerator().getPath("foo_db"), 
is("/metadata/foo_db"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaNodePathGeneratorTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaNodePathGeneratorTest.java
index 7bbe3833bcd..c004cd3e913 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaNodePathGeneratorTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/SchemaNodePathGeneratorTest.java
@@ -31,6 +31,6 @@ class SchemaNodePathGeneratorTest {
     
     @Test
     void assertGetSchemaPath() {
-        assertThat(new 
SchemaNodePathGenerator("foo_db").getSchemaPath("foo_schema"), 
is("/metadata/foo_db/schemas/foo_schema"));
+        assertThat(new 
SchemaNodePathGenerator("foo_db").getPath("foo_schema"), 
is("/metadata/foo_db/schemas/foo_schema"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableNodePathGeneratorTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableNodePathGeneratorTest.java
index b4d475c1969..2242715e194 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableNodePathGeneratorTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/TableNodePathGeneratorTest.java
@@ -30,8 +30,8 @@ class TableNodePathGeneratorTest {
     }
     
     @Test
-    void assertGetTablePath() {
-        assertThat(new TableNodePathGenerator("foo_db", 
"foo_schema").getTablePath("foo_tbl"), 
is("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl"));
+    void assertGetPath() {
+        assertThat(new TableNodePathGenerator("foo_db", 
"foo_schema").getPath("foo_tbl"), 
is("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl"));
     }
     
     @Test
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewNodePathGeneratorTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewNodePathGeneratorTest.java
index 1f7de96921e..c40ced5d24c 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewNodePathGeneratorTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/ViewNodePathGeneratorTest.java
@@ -30,8 +30,8 @@ class ViewNodePathGeneratorTest {
     }
     
     @Test
-    void assertGetViewPath() {
-        assertThat(new ViewNodePathGenerator("foo_db", 
"foo_schema").getViewPath("foo_view"), 
is("/metadata/foo_db/schemas/foo_schema/views/foo_view"));
+    void assertGetPath() {
+        assertThat(new ViewNodePathGenerator("foo_db", 
"foo_schema").getPath("foo_view"), 
is("/metadata/foo_db/schemas/foo_schema/views/foo_view"));
     }
     
     @Test
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleNodePathGeneratorTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleItemNodePathGeneratorTest.java
similarity index 74%
copy from 
mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleNodePathGeneratorTest.java
copy to 
mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleItemNodePathGeneratorTest.java
index a6e42d4db43..ebf9c219ec1 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleNodePathGeneratorTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleItemNodePathGeneratorTest.java
@@ -24,27 +24,17 @@ import org.junit.jupiter.api.Test;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 
-class DatabaseRuleNodePathGeneratorTest {
+class DatabaseRuleItemNodePathGeneratorTest {
     
     @Test
-    void assertGetRootPath() {
-        assertThat(new DatabaseRuleNodePathGenerator("foo_db").getRootPath(), 
is("/metadata/foo_db/rules"));
-    }
-    
-    @Test
-    void assertGetRulePath() {
-        assertThat(new 
DatabaseRuleNodePathGenerator("foo_db").getRulePath("foo_rule"), 
is("/metadata/foo_db/rules/foo_rule"));
-    }
-    
-    @Test
-    void assertGetRulePathWithKey() {
-        assertThat(new 
DatabaseRuleNodePathGenerator("foo_db").getRulePath("foo_rule", new 
DatabaseRuleItem("foo_rule_item")), 
is("/metadata/foo_db/rules/foo_rule/foo_rule_item"));
+    void assertGetPath() {
+        assertThat(new DatabaseRuleItemNodePathGenerator("foo_db", 
"foo_rule").getPath(new DatabaseRuleItem("foo_rule_item")), 
is("/metadata/foo_db/rules/foo_rule/foo_rule_item"));
     }
     
     @Test
     void assertGetVersion() {
         DatabaseRuleItem databaseRuleItem = new 
DatabaseRuleItem("foo_rule_item");
-        VersionNodePathGenerator versionNodePathGenerator = new 
DatabaseRuleNodePathGenerator("foo_db").getVersion("foo_rule", 
databaseRuleItem);
+        VersionNodePathGenerator versionNodePathGenerator = new 
DatabaseRuleItemNodePathGenerator("foo_db", 
"foo_rule").getVersion(databaseRuleItem);
         assertThat(versionNodePathGenerator.getActiveVersionPath(), 
is("/metadata/foo_db/rules/foo_rule/foo_rule_item/active_version"));
         assertThat(versionNodePathGenerator.getVersionsPath(), 
is("/metadata/foo_db/rules/foo_rule/foo_rule_item/versions"));
         assertThat(versionNodePathGenerator.getVersionPath(0), 
is("/metadata/foo_db/rules/foo_rule/foo_rule_item/versions/0"));
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleNodePathGeneratorTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleNodePathGeneratorTest.java
index a6e42d4db43..3963b47e05d 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleNodePathGeneratorTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/rule/DatabaseRuleNodePathGeneratorTest.java
@@ -17,8 +17,6 @@
 
 package org.apache.shardingsphere.mode.node.path.metadata.rule;
 
-import 
org.apache.shardingsphere.mode.node.path.config.database.item.DatabaseRuleItem;
-import 
org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -32,21 +30,7 @@ class DatabaseRuleNodePathGeneratorTest {
     }
     
     @Test
-    void assertGetRulePath() {
-        assertThat(new 
DatabaseRuleNodePathGenerator("foo_db").getRulePath("foo_rule"), 
is("/metadata/foo_db/rules/foo_rule"));
-    }
-    
-    @Test
-    void assertGetRulePathWithKey() {
-        assertThat(new 
DatabaseRuleNodePathGenerator("foo_db").getRulePath("foo_rule", new 
DatabaseRuleItem("foo_rule_item")), 
is("/metadata/foo_db/rules/foo_rule/foo_rule_item"));
-    }
-    
-    @Test
-    void assertGetVersion() {
-        DatabaseRuleItem databaseRuleItem = new 
DatabaseRuleItem("foo_rule_item");
-        VersionNodePathGenerator versionNodePathGenerator = new 
DatabaseRuleNodePathGenerator("foo_db").getVersion("foo_rule", 
databaseRuleItem);
-        assertThat(versionNodePathGenerator.getActiveVersionPath(), 
is("/metadata/foo_db/rules/foo_rule/foo_rule_item/active_version"));
-        assertThat(versionNodePathGenerator.getVersionsPath(), 
is("/metadata/foo_db/rules/foo_rule/foo_rule_item/versions"));
-        assertThat(versionNodePathGenerator.getVersionPath(0), 
is("/metadata/foo_db/rules/foo_rule/foo_rule_item/versions/0"));
+    void assertGetPath() {
+        assertThat(new 
DatabaseRuleNodePathGenerator("foo_db").getPath("foo_rule"), 
is("/metadata/foo_db/rules/foo_rule"));
     }
 }
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathGeneratorTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathGeneratorTest.java
index f838d4d7e66..3963b8da8de 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathGeneratorTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageNodeNodePathGeneratorTest.java
@@ -31,8 +31,8 @@ class StorageNodeNodePathGeneratorTest {
     }
     
     @Test
-    void assertGetStorageNodePath() {
-        assertThat(new 
StorageNodeNodePathGenerator("foo_db").getStorageNodePath("foo_ds"), 
is("/metadata/foo_db/data_sources/nodes/foo_ds"));
+    void assertGetPath() {
+        assertThat(new 
StorageNodeNodePathGenerator("foo_db").getPath("foo_ds"), 
is("/metadata/foo_db/data_sources/nodes/foo_ds"));
     }
     
     @Test
diff --git 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathGeneratorTest.java
 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathGeneratorTest.java
index 49d240dd108..2ee7197bde8 100644
--- 
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathGeneratorTest.java
+++ 
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/storage/StorageUnitNodePathGeneratorTest.java
@@ -31,8 +31,8 @@ class StorageUnitNodePathGeneratorTest {
     }
     
     @Test
-    void assertGetStorageUnitPath() {
-        assertThat(new 
StorageUnitNodePathGenerator("foo_db").getStorageUnitPath("foo_ds"), 
is("/metadata/foo_db/data_sources/units/foo_ds"));
+    void assertGetPath() {
+        assertThat(new 
StorageUnitNodePathGenerator("foo_db").getPath("foo_ds"), 
is("/metadata/foo_db/data_sources/units/foo_ds"));
     }
     
     @Test
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/DatabaseListenerChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/DatabaseListenerChangedHandler.java
index 9f897d852f2..67ee6441fb1 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/DatabaseListenerChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/DatabaseListenerChangedHandler.java
@@ -57,10 +57,10 @@ public final class DatabaseListenerChangedHandler 
implements GlobalDataChangedEv
     private static void handle(final ContextManager contextManager, final 
String databaseName, final ClusterDatabaseListenerCoordinatorType 
clusterDatabaseListenerCoordinatorType) {
         ClusterPersistRepository repository = (ClusterPersistRepository) 
contextManager.getPersistServiceFacade().getRepository();
         if (ClusterDatabaseListenerCoordinatorType.CREATE == 
clusterDatabaseListenerCoordinatorType) {
-            repository.watch(new 
DatabaseNodePathGenerator().getDatabasePath(databaseName), new 
DatabaseMetaDataChangedListener(contextManager));
+            repository.watch(new 
DatabaseNodePathGenerator().getPath(databaseName), new 
DatabaseMetaDataChangedListener(contextManager));
             
contextManager.getMetaDataContextManager().getDatabaseMetaDataManager().addDatabase(databaseName);
         } else if (ClusterDatabaseListenerCoordinatorType.DROP == 
clusterDatabaseListenerCoordinatorType) {
-            repository.removeDataListener(new 
DatabaseNodePathGenerator().getDatabasePath(databaseName));
+            repository.removeDataListener(new 
DatabaseNodePathGenerator().getPath(databaseName));
             
contextManager.getMetaDataContextManager().getDatabaseMetaDataManager().dropDatabase(databaseName);
         }
         new 
ClusterDatabaseListenerPersistCoordinator(repository).delete(databaseName);
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/DataChangedEventListenerRegistry.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/DataChangedEventListenerRegistry.java
index 0982a667388..43f13abc724 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/DataChangedEventListenerRegistry.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/DataChangedEventListenerRegistry.java
@@ -53,7 +53,7 @@ public final class DataChangedEventListenerRegistry {
     }
     
     private void registerDatabaseListeners(final String databaseName) {
-        repository.watch(new 
DatabaseNodePathGenerator().getDatabasePath(databaseName), new 
DatabaseMetaDataChangedListener(contextManager));
+        repository.watch(new 
DatabaseNodePathGenerator().getPath(databaseName), new 
DatabaseMetaDataChangedListener(contextManager));
     }
     
     private void registerGlobalHandlers(final GlobalDataChangedEventHandler 
handler) {

Reply via email to