You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by ji...@apache.org on 2023/06/24 16:46:30 UTC

[shardingsphere] branch master updated: Add RuleRootNodeConverter (#26525)

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

jianglongtao 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 a462eeccb14 Add RuleRootNodeConverter (#26525)
a462eeccb14 is described below

commit a462eeccb14ff1301d49f8234aeefbcf295599c8
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sun Jun 25 00:46:23 2023 +0800

    Add RuleRootNodeConverter (#26525)
---
 .../EncryptRuleConfigurationEventBuilder.java      |  2 +-
 .../metadata/converter/EncryptNodeConverter.java   | 29 +++++--------
 .../metadata/converter/RuleItemNodeConverter.java  | 20 +++++----
 .../metadata/converter/RuleRootNodeConverter.java  | 50 ++++++++++++++++++++++
 .../converter/RuleItemNodeConverterTest.java       | 14 +++---
 .../converter/RuleRootNodeConverterTest.java       | 19 +++++---
 6 files changed, 95 insertions(+), 39 deletions(-)

diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/EncryptRuleConfigurationEventBuilder.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/EncryptRuleConfigurationEventBuilder.java
index 50eb498627f..b8a4f115711 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/EncryptRuleConfigurationEventBuilder.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/event/EncryptRuleConfigurationEventBuilder.java
@@ -38,7 +38,7 @@ public final class EncryptRuleConfigurationEventBuilder implements RuleConfigura
     
     @Override
     public Optional<GovernanceEvent> build(final String databaseName, final DataChangedEvent event) {
-        if (!EncryptNodeConverter.isEncryptPath(event.getKey()) || Strings.isNullOrEmpty(event.getValue())) {
+        if (!EncryptNodeConverter.getRuleRootNodeConverter().isRulePath(event.getKey()) || Strings.isNullOrEmpty(event.getValue())) {
             return Optional.empty();
         }
         Optional<String> tableName = EncryptNodeConverter.getTableNodeConvertor().getNameByActiveVersionPath(event.getKey());
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/converter/EncryptNodeConverter.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/converter/EncryptNodeConverter.java
index eaf5245fe5a..fe0b0fa044c 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/converter/EncryptNodeConverter.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/converter/EncryptNodeConverter.java
@@ -19,8 +19,8 @@ package org.apache.shardingsphere.encrypt.metadata.converter;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-
-import java.util.regex.Pattern;
+import org.apache.shardingsphere.infra.metadata.converter.RuleItemNodeConverter;
+import org.apache.shardingsphere.infra.metadata.converter.RuleRootNodeConverter;
 
 /**
  * Encrypt node converter.
@@ -28,26 +28,19 @@ import java.util.regex.Pattern;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class EncryptNodeConverter {
     
-    public static final String ROOT_NODE_PREFIX = "/([\\w\\-]+)/([\\w\\-]+)/rules/encrypt";
-    
-    public static final String RULE_NAME = "/([\\w\\-]+)?";
-    
-    public static final String RULE_ACTIVE_VERSION = "/([\\w\\-]+)/active_version$";
-    
-    private static final Pattern ROOT_PATH_PATTERN = Pattern.compile(ROOT_NODE_PREFIX + "\\.*", Pattern.CASE_INSENSITIVE);
+    private static final RuleRootNodeConverter ROOT_NODE_CONVERTER = new RuleRootNodeConverter("encrypt");
     
-    private static final EncryptItemNodeConverter TABLE_NODE_CONVERTER = new EncryptItemNodeConverter("tables");
+    private static final RuleItemNodeConverter TABLE_NODE_CONVERTER = new RuleItemNodeConverter(ROOT_NODE_CONVERTER, "tables");
     
-    private static final EncryptItemNodeConverter ENCRYPTOR_NODE_CONVERTER = new EncryptItemNodeConverter("encryptors");
+    private static final RuleItemNodeConverter ENCRYPTOR_NODE_CONVERTER = new RuleItemNodeConverter(ROOT_NODE_CONVERTER, "encryptors");
     
     /**
-     * Is encrypt path.
+     * Get rule root node converter.
      *
-     * @param rulePath rule path
-     * @return true or false
+     * @return rule root node converter
      */
-    public static boolean isEncryptPath(final String rulePath) {
-        return ROOT_PATH_PATTERN.matcher(rulePath).find();
+    public static RuleRootNodeConverter getRuleRootNodeConverter() {
+        return ROOT_NODE_CONVERTER;
     }
     
     /**
@@ -55,7 +48,7 @@ public final class EncryptNodeConverter {
      *
      * @return table node convertor
      */
-    public static EncryptItemNodeConverter getTableNodeConvertor() {
+    public static RuleItemNodeConverter getTableNodeConvertor() {
         return TABLE_NODE_CONVERTER;
     }
     
@@ -64,7 +57,7 @@ public final class EncryptNodeConverter {
      *
      * @return encryptor node convertor
      */
-    public static EncryptItemNodeConverter getEncryptorNodeConvertor() {
+    public static RuleItemNodeConverter getEncryptorNodeConvertor() {
         return ENCRYPTOR_NODE_CONVERTER;
     }
 }
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/converter/EncryptItemNodeConverter.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/converter/RuleItemNodeConverter.java
similarity index 72%
rename from features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/converter/EncryptItemNodeConverter.java
rename to infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/converter/RuleItemNodeConverter.java
index 4a977882e20..2b3ededfed5 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/converter/EncryptItemNodeConverter.java
+++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/converter/RuleItemNodeConverter.java
@@ -15,16 +15,20 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.encrypt.metadata.converter;
+package org.apache.shardingsphere.infra.metadata.converter;
 
 import java.util.Optional;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 /**
- * Encrypt item node converter.
+ * Rule item node converter.
  */
-public final class EncryptItemNodeConverter {
+public final class RuleItemNodeConverter {
+    
+    private static final String RULE_NAME = "/([\\w\\-]+)?";
+    
+    private static final String RULE_ACTIVE_VERSION = "/([\\w\\-]+)/active_version$";
     
     private final String itemsNode;
     
@@ -34,11 +38,11 @@ public final class EncryptItemNodeConverter {
     
     private final Pattern itemVersionPathPattern;
     
-    public EncryptItemNodeConverter(final String itemsNode) {
+    public RuleItemNodeConverter(final RuleRootNodeConverter ruleRootNodeConverter, final String itemsNode) {
         this.itemsNode = itemsNode;
-        itemsPathPattern = Pattern.compile(EncryptNodeConverter.ROOT_NODE_PREFIX + "/" + itemsNode + "\\.*", Pattern.CASE_INSENSITIVE);
-        itemNamePathPattern = Pattern.compile(EncryptNodeConverter.ROOT_NODE_PREFIX + "/" + itemsNode + EncryptNodeConverter.RULE_NAME, Pattern.CASE_INSENSITIVE);
-        itemVersionPathPattern = Pattern.compile(EncryptNodeConverter.ROOT_NODE_PREFIX + "/" + itemsNode + EncryptNodeConverter.RULE_ACTIVE_VERSION, Pattern.CASE_INSENSITIVE);
+        itemsPathPattern = Pattern.compile(ruleRootNodeConverter.getRuleNodePrefix() + "/" + itemsNode + "\\.*", Pattern.CASE_INSENSITIVE);
+        itemNamePathPattern = Pattern.compile(ruleRootNodeConverter.getRuleNodePrefix() + "/" + itemsNode + RULE_NAME, Pattern.CASE_INSENSITIVE);
+        itemVersionPathPattern = Pattern.compile(ruleRootNodeConverter.getRuleNodePrefix() + "/" + itemsNode + RULE_ACTIVE_VERSION, Pattern.CASE_INSENSITIVE);
     }
     
     /**
@@ -76,7 +80,7 @@ public final class EncryptItemNodeConverter {
      * Get item name by active version path.
      *
      * @param rulePath rule path
-     * @return encrypt item version
+     * @return item version
      */
     public Optional<String> getNameByActiveVersionPath(final String rulePath) {
         Matcher matcher = itemVersionPathPattern.matcher(rulePath);
diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/converter/RuleRootNodeConverter.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/converter/RuleRootNodeConverter.java
new file mode 100644
index 00000000000..e891378ddba
--- /dev/null
+++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/converter/RuleRootNodeConverter.java
@@ -0,0 +1,50 @@
+/*
+ * 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.infra.metadata.converter;
+
+import lombok.Getter;
+
+import java.util.regex.Pattern;
+
+/**
+ * Rule root node converter.
+ */
+public final class RuleRootNodeConverter {
+    
+    private static final String RULE_NODE_PREFIX = "/([\\w\\-]+)/([\\w\\-]+)/rules/";
+    
+    @Getter
+    private final String ruleNodePrefix;
+    
+    private final Pattern rulePathPattern;
+    
+    public RuleRootNodeConverter(final String ruleType) {
+        ruleNodePrefix = RULE_NODE_PREFIX + ruleType;
+        rulePathPattern = Pattern.compile(ruleNodePrefix + "\\.*", Pattern.CASE_INSENSITIVE);
+    }
+    
+    /**
+     * Is rule path.
+     *
+     * @param rulePath rule path to be judged
+     * @return true or false
+     */
+    public boolean isRulePath(final String rulePath) {
+        return rulePathPattern.matcher(rulePath).find();
+    }
+}
diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/metadata/converter/EncryptItemNodeConverterTest.java b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/converter/RuleItemNodeConverterTest.java
similarity index 68%
rename from features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/metadata/converter/EncryptItemNodeConverterTest.java
rename to infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/converter/RuleItemNodeConverterTest.java
index 1deef0614aa..50caf0455d8 100644
--- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/metadata/converter/EncryptItemNodeConverterTest.java
+++ b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/converter/RuleItemNodeConverterTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.encrypt.metadata.converter;
+package org.apache.shardingsphere.infra.metadata.converter;
 
 import org.junit.jupiter.api.Test;
 
@@ -25,30 +25,30 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-class EncryptItemNodeConverterTest {
+class RuleItemNodeConverterTest {
     
-    private final EncryptItemNodeConverter itemNodeConverter = new EncryptItemNodeConverter("tables");
+    private final RuleItemNodeConverter converter = new RuleItemNodeConverter(new RuleRootNodeConverter("foo"), "tables");
     
     @Test
     void assertGetNamePath() {
-        assertThat(itemNodeConverter.getNamePath("foo_table"), is("tables/foo_table"));
+        assertThat(converter.getNamePath("foo_table"), is("tables/foo_table"));
     }
     
     @Test
     void assertIsPath() {
-        assertTrue(itemNodeConverter.isPath("/metadata/foo_db/rules/encrypt/tables/foo_table"));
+        assertTrue(converter.isPath("/metadata/foo_db/rules/foo/tables/foo_table"));
     }
     
     @Test
     void assertGetName() {
-        Optional<String> actual = itemNodeConverter.getName("/metadata/foo_db/rules/encrypt/tables/foo_table");
+        Optional<String> actual = converter.getName("/metadata/foo_db/rules/foo/tables/foo_table");
         assertTrue(actual.isPresent());
         assertThat(actual.get(), is("foo_table"));
     }
     
     @Test
     void assertGetNameByActiveVersionPath() {
-        Optional<String> actual = itemNodeConverter.getNameByActiveVersionPath("/metadata/foo_db/rules/encrypt/tables/foo_table/active_version");
+        Optional<String> actual = converter.getNameByActiveVersionPath("/metadata/foo_db/rules/foo/tables/foo_table/active_version");
         assertTrue(actual.isPresent());
         assertThat(actual.get(), is("foo_table"));
     }
diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/metadata/converter/EncryptNodeConverterTest.java b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/converter/RuleRootNodeConverterTest.java
similarity index 60%
rename from features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/metadata/converter/EncryptNodeConverterTest.java
rename to infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/converter/RuleRootNodeConverterTest.java
index a1d7c765fd0..077ea295f1b 100644
--- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/metadata/converter/EncryptNodeConverterTest.java
+++ b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/converter/RuleRootNodeConverterTest.java
@@ -15,18 +15,27 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.encrypt.metadata.converter;
+package org.apache.shardingsphere.infra.metadata.converter;
 
 import org.junit.jupiter.api.Test;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-class EncryptNodeConverterTest {
+class RuleRootNodeConverterTest {
+    
+    private final RuleRootNodeConverter converter = new RuleRootNodeConverter("foo");
+    
+    @Test
+    void assertGetRuleNodePrefix() {
+        assertThat(converter.getRuleNodePrefix(), is("/([\\w\\-]+)/([\\w\\-]+)/rules/foo"));
+    }
     
     @Test
-    void assertIsEncryptPath() {
-        assertTrue(EncryptNodeConverter.isEncryptPath("/metadata/foo_db/rules/encrypt/tables/foo_table"));
-        assertFalse(EncryptNodeConverter.isEncryptPath("/metadata/foo_db/rules/foo/tables/foo_table"));
+    void assertIsRulePath() {
+        assertTrue(converter.isRulePath("/metadata/foo_db/rules/foo/tables/foo_table"));
+        assertFalse(converter.isRulePath("/metadata/foo_db/rules/bar/tables/foo_table"));
     }
 }