You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2023/06/24 15:13:16 UTC
[shardingsphere] branch master updated: Add EncryptItemNodeConverter to abstract EncryptNodeConverter (#26522)
This is an automated email from the ASF dual-hosted git repository.
zhaojinchao 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 b74ad281d12 Add EncryptItemNodeConverter to abstract EncryptNodeConverter (#26522)
b74ad281d12 is described below
commit b74ad281d1230e0986cff4195ed95f7dbab6ff51
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sat Jun 24 23:13:10 2023 +0800
Add EncryptItemNodeConverter to abstract EncryptNodeConverter (#26522)
---
.../EncryptRuleConfigurationEventBuilder.java | 4 +-
.../converter/EncryptItemNodeConverter.java | 85 ++++++++++++++++
.../metadata/converter/EncryptNodeConverter.java | 108 +++------------------
.../NewYamlEncryptRuleConfigurationSwapper.java | 13 +--
.../converter/EncryptItemNodeConverterTest.java | 55 +++++++++++
.../converter/EncryptNodeConverterTest.java | 48 +--------
6 files changed, 165 insertions(+), 148 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 79d5ef50d1b..132d2e57f64 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
@@ -41,11 +41,11 @@ public final class EncryptRuleConfigurationEventBuilder implements RuleConfigura
if (!EncryptNodeConverter.isEncryptPath(event.getKey()) || Strings.isNullOrEmpty(event.getValue())) {
return Optional.empty();
}
- Optional<String> tableName = EncryptNodeConverter.getTableNameByActiveVersionPath(event.getKey());
+ Optional<String> tableName = EncryptNodeConverter.getTableNodeConvertor().getItemNameByActiveVersionPath(event.getKey());
if (tableName.isPresent() && !Strings.isNullOrEmpty(event.getValue())) {
return createEncryptConfigEvent(databaseName, tableName.get(), event);
}
- Optional<String> encryptorName = EncryptNodeConverter.getEncryptorNameByActiveVersionPath(event.getKey());
+ Optional<String> encryptorName = EncryptNodeConverter.getEncryptorNodeConvertor().getItemNameByActiveVersionPath(event.getKey());
if (encryptorName.isPresent() && !Strings.isNullOrEmpty(event.getValue())) {
return createEncryptorEvent(databaseName, encryptorName.get(), event);
}
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/converter/EncryptItemNodeConverter.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/converter/EncryptItemNodeConverter.java
new file mode 100644
index 00000000000..aff434571d5
--- /dev/null
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/converter/EncryptItemNodeConverter.java
@@ -0,0 +1,85 @@
+/*
+ * 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.encrypt.metadata.converter;
+
+import java.util.Optional;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Encrypt item node converter.
+ */
+public final class EncryptItemNodeConverter {
+
+ private final String itemsNode;
+
+ private final Pattern itemsPathPattern;
+
+ private final Pattern itemNamePathPattern;
+
+ private final Pattern itemVersionPathPattern;
+
+ public EncryptItemNodeConverter(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);
+ }
+
+ /**
+ * Get item name path.
+ *
+ * @param itemName item name
+ * @return item name path
+ */
+ public String getItemNamePath(final String itemName) {
+ return String.join("/", itemsNode, itemName);
+ }
+
+ /**
+ * Is item path.
+ *
+ * @param rulePath rule path
+ * @return true or false
+ */
+ public boolean isItemPath(final String rulePath) {
+ return itemsPathPattern.matcher(rulePath).find();
+ }
+
+ /**
+ * Get item name.
+ *
+ * @param rulePath rule path
+ * @return item name
+ */
+ public Optional<String> getItemName(final String rulePath) {
+ Matcher matcher = itemNamePathPattern.matcher(rulePath);
+ return matcher.find() ? Optional.of(matcher.group(3)) : Optional.empty();
+ }
+
+ /**
+ * Get item name by active version path.
+ *
+ * @param rulePath rule path
+ * @return encrypt item version
+ */
+ public Optional<String> getItemNameByActiveVersionPath(final String rulePath) {
+ Matcher matcher = itemVersionPathPattern.matcher(rulePath);
+ return matcher.find() ? Optional.of(matcher.group(3)) : Optional.empty();
+ }
+}
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 b4304b76c57..eaf5245fe5a 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
@@ -20,8 +20,6 @@ package org.apache.shardingsphere.encrypt.metadata.converter;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
-import java.util.Optional;
-import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
@@ -30,37 +28,17 @@ import java.util.regex.Pattern;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class EncryptNodeConverter {
- private static final String ROOT_NODE = "encrypt";
+ public static final String ROOT_NODE_PREFIX = "/([\\w\\-]+)/([\\w\\-]+)/rules/encrypt";
- private static final String TABLES_NODE = "tables";
+ public static final String RULE_NAME = "/([\\w\\-]+)?";
- private static final String ENCRYPTORS_NODE = "encryptors";
+ public static final String RULE_ACTIVE_VERSION = "/([\\w\\-]+)/active_version$";
- private static final String RULES_NODE_PREFIX = "/([\\w\\-]+)/([\\w\\-]+)/rules/";
+ private static final Pattern ROOT_PATH_PATTERN = Pattern.compile(ROOT_NODE_PREFIX + "\\.*", Pattern.CASE_INSENSITIVE);
- private static final String RULE_NAME_PATTERN = "/([\\w\\-]+)?";
+ private static final EncryptItemNodeConverter TABLE_NODE_CONVERTER = new EncryptItemNodeConverter("tables");
- private static final String RULE_ACTIVE_VERSION = "/([\\w\\-]+)/active_version$";
-
- /**
- * Get table name path.
- *
- * @param tableName table name
- * @return table name path
- */
- public static String getTableNamePath(final String tableName) {
- return String.join("/", TABLES_NODE, tableName);
- }
-
- /**
- * Get encryptor path.
- *
- * @param encryptorName encryptor name
- * @return encryptor path
- */
- public static String getEncryptorPath(final String encryptorName) {
- return String.join("/", ENCRYPTORS_NODE, encryptorName);
- }
+ private static final EncryptItemNodeConverter ENCRYPTOR_NODE_CONVERTER = new EncryptItemNodeConverter("encryptors");
/**
* Is encrypt path.
@@ -69,80 +47,24 @@ public final class EncryptNodeConverter {
* @return true or false
*/
public static boolean isEncryptPath(final String rulePath) {
- Pattern pattern = Pattern.compile(RULES_NODE_PREFIX + ROOT_NODE + "\\.*", Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(rulePath);
- return matcher.find();
+ return ROOT_PATH_PATTERN.matcher(rulePath).find();
}
/**
- * Is encrypt table path.
+ * Get table node convertor.
*
- * @param rulePath rule path
- * @return true or false
- */
- public static boolean isTablePath(final String rulePath) {
- Pattern pattern = Pattern.compile(RULES_NODE_PREFIX + ROOT_NODE + "/" + TABLES_NODE + "\\.*", Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(rulePath);
- return matcher.find();
- }
-
- /**
- * Is encryptor path.
- *
- * @param rulePath rule path
- * @return true or false
- */
- public static boolean isEncryptorPath(final String rulePath) {
- Pattern pattern = Pattern.compile(RULES_NODE_PREFIX + ROOT_NODE + "/" + ENCRYPTORS_NODE + "\\.*", Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(rulePath);
- return matcher.find();
- }
-
- /**
- * Get table name.
- *
- * @param rulePath rule path
- * @return table name
- */
- public static Optional<String> getTableName(final String rulePath) {
- Pattern pattern = Pattern.compile(RULES_NODE_PREFIX + ROOT_NODE + "/" + TABLES_NODE + RULE_NAME_PATTERN, Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(rulePath);
- return matcher.find() ? Optional.of(matcher.group(3)) : Optional.empty();
- }
-
- /**
- * Get encryptor name.
- *
- * @param rulePath rule path
- * @return encryptor name
- */
- public static Optional<String> getEncryptorName(final String rulePath) {
- Pattern pattern = Pattern.compile(RULES_NODE_PREFIX + ROOT_NODE + "/" + ENCRYPTORS_NODE + RULE_NAME_PATTERN, Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(rulePath);
- return matcher.find() ? Optional.of(matcher.group(3)) : Optional.empty();
- }
-
- /**
- * Get encrypt table name by active version path.
- *
- * @param activeVersionPath active version path
- * @return table name
+ * @return table node convertor
*/
- public static Optional<String> getTableNameByActiveVersionPath(final String activeVersionPath) {
- Pattern pattern = Pattern.compile(RULES_NODE_PREFIX + ROOT_NODE + "/" + TABLES_NODE + RULE_ACTIVE_VERSION, Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(activeVersionPath);
- return matcher.find() ? Optional.of(matcher.group(3)) : Optional.empty();
+ public static EncryptItemNodeConverter getTableNodeConvertor() {
+ return TABLE_NODE_CONVERTER;
}
/**
- * Get encryptor name by active version path.
+ * Get encryptor node convertor.
*
- * @param activeVersionPath active version path
- * @return encryptor name
+ * @return encryptor node convertor
*/
- public static Optional<String> getEncryptorNameByActiveVersionPath(final String activeVersionPath) {
- Pattern pattern = Pattern.compile(RULES_NODE_PREFIX + ROOT_NODE + "/" + ENCRYPTORS_NODE + RULE_ACTIVE_VERSION, Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(activeVersionPath);
- return matcher.find() ? Optional.of(matcher.group(3)) : Optional.empty();
+ public static EncryptItemNodeConverter getEncryptorNodeConvertor() {
+ return ENCRYPTOR_NODE_CONVERTER;
}
}
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/yaml/swapper/NewYamlEncryptRuleConfigurationSwapper.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/yaml/swapper/NewYamlEncryptRuleConfigurationSwapper.java
index eb2e2ecccee..709bb79c4dd 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/yaml/swapper/NewYamlEncryptRuleConfigurationSwapper.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/yaml/swapper/NewYamlEncryptRuleConfigurationSwapper.java
@@ -51,10 +51,11 @@ public final class NewYamlEncryptRuleConfigurationSwapper implements NewYamlRule
public Collection<YamlDataNode> swapToDataNodes(final EncryptRuleConfiguration data) {
Collection<YamlDataNode> result = new LinkedHashSet<>();
for (EncryptTableRuleConfiguration each : data.getTables()) {
- result.add(new YamlDataNode(EncryptNodeConverter.getTableNamePath(each.getName()), YamlEngine.marshal(tableSwapper.swapToYamlConfiguration(each))));
+ result.add(new YamlDataNode(EncryptNodeConverter.getTableNodeConvertor().getItemNamePath(each.getName()), YamlEngine.marshal(tableSwapper.swapToYamlConfiguration(each))));
}
for (Entry<String, AlgorithmConfiguration> entry : data.getEncryptors().entrySet()) {
- result.add(new YamlDataNode(EncryptNodeConverter.getEncryptorPath(entry.getKey()), YamlEngine.marshal(algorithmSwapper.swapToYamlConfiguration(entry.getValue()))));
+ result.add(new YamlDataNode(EncryptNodeConverter.getEncryptorNodeConvertor().getItemNamePath(entry.getKey()),
+ YamlEngine.marshal(algorithmSwapper.swapToYamlConfiguration(entry.getValue()))));
}
return result;
}
@@ -64,11 +65,11 @@ public final class NewYamlEncryptRuleConfigurationSwapper implements NewYamlRule
Collection<EncryptTableRuleConfiguration> tables = new LinkedList<>();
Map<String, AlgorithmConfiguration> encryptors = new HashMap<>();
for (YamlDataNode each : dataNodes) {
- if (EncryptNodeConverter.isTablePath(each.getKey())) {
- EncryptNodeConverter.getTableName(each.getKey())
+ if (EncryptNodeConverter.getTableNodeConvertor().isItemPath(each.getKey())) {
+ EncryptNodeConverter.getTableNodeConvertor().getItemName(each.getKey())
.ifPresent(tableName -> tables.add(tableSwapper.swapToObject(YamlEngine.unmarshal(each.getValue(), YamlEncryptTableRuleConfiguration.class))));
- } else if (EncryptNodeConverter.isEncryptorPath(each.getKey())) {
- EncryptNodeConverter.getEncryptorName(each.getKey())
+ } else if (EncryptNodeConverter.getEncryptorNodeConvertor().isItemPath(each.getKey())) {
+ EncryptNodeConverter.getEncryptorNodeConvertor().getItemName(each.getKey())
.ifPresent(encryptorName -> encryptors.put(encryptorName, algorithmSwapper.swapToObject(YamlEngine.unmarshal(each.getValue(), YamlAlgorithmConfiguration.class))));
}
}
diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/metadata/converter/EncryptItemNodeConverterTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/metadata/converter/EncryptItemNodeConverterTest.java
new file mode 100644
index 00000000000..e99f12cb73f
--- /dev/null
+++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/metadata/converter/EncryptItemNodeConverterTest.java
@@ -0,0 +1,55 @@
+/*
+ * 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.encrypt.metadata.converter;
+
+import org.junit.jupiter.api.Test;
+
+import java.util.Optional;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+class EncryptItemNodeConverterTest {
+
+ private final EncryptItemNodeConverter itemNodeConverter = new EncryptItemNodeConverter("tables");
+
+ @Test
+ void assertGetItemNamePath() {
+ assertThat(itemNodeConverter.getItemNamePath("foo_table"), is("tables/foo_table"));
+ }
+
+ @Test
+ void assertIsItemPath() {
+ assertTrue(itemNodeConverter.isItemPath("/metadata/foo_db/rules/encrypt/tables/foo_table"));
+ }
+
+ @Test
+ void assertGetItemName() {
+ Optional<String> actual = itemNodeConverter.getItemName("/metadata/foo_db/rules/encrypt/tables/foo_table");
+ assertTrue(actual.isPresent());
+ assertThat(actual.get(), is("foo_table"));
+ }
+
+ @Test
+ void assertGetItemNameByActiveVersionPath() {
+ Optional<String> actual = itemNodeConverter.getItemNameByActiveVersionPath("/metadata/foo_db/rules/encrypt/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/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/metadata/converter/EncryptNodeConverterTest.java
index bc896fee888..a1d7c765fd0 100644
--- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/metadata/converter/EncryptNodeConverterTest.java
+++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/metadata/converter/EncryptNodeConverterTest.java
@@ -19,60 +19,14 @@ package org.apache.shardingsphere.encrypt.metadata.converter;
import org.junit.jupiter.api.Test;
-import java.util.Optional;
-
-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 {
@Test
- void assertGetTableNamePath() {
- assertThat(EncryptNodeConverter.getTableNamePath("foo_table"), is("tables/foo_table"));
- }
-
- @Test
- void assertGetAlgorithmPath() {
- assertThat(EncryptNodeConverter.getEncryptorPath("AES"), is("encryptors/AES"));
- }
-
- @Test
- void assertCheckIsTargetRuleByRulePath() {
+ void assertIsEncryptPath() {
assertTrue(EncryptNodeConverter.isEncryptPath("/metadata/foo_db/rules/encrypt/tables/foo_table"));
assertFalse(EncryptNodeConverter.isEncryptPath("/metadata/foo_db/rules/foo/tables/foo_table"));
- assertTrue(EncryptNodeConverter.isTablePath("/metadata/foo_db/rules/encrypt/tables/foo_table"));
- assertFalse(EncryptNodeConverter.isTablePath("/metadata/foo_db/rules/encrypt/encryptors/AES"));
- assertTrue(EncryptNodeConverter.isEncryptorPath("/metadata/foo_db/rules/encrypt/encryptors/AES"));
- assertFalse(EncryptNodeConverter.isEncryptorPath("/metadata/foo_db/rules/encrypt/tables/foo_table"));
- }
-
- @Test
- void assertGetTableNameByRulePath() {
- Optional<String> actual = EncryptNodeConverter.getTableName("/metadata/foo_db/rules/encrypt/tables/foo_table");
- assertTrue(actual.isPresent());
- assertThat(actual.get(), is("foo_table"));
- }
-
- @Test
- void assertGetAlgorithmNameByRulePath() {
- Optional<String> actual = EncryptNodeConverter.getEncryptorName("/metadata/foo_db/rules/encrypt/encryptors/AES");
- assertTrue(actual.isPresent());
- assertThat(actual.get(), is("AES"));
- }
-
- @Test
- void assertGetEncryptTableVersion() {
- Optional<String> actual = EncryptNodeConverter.getTableNameByActiveVersionPath("/metadata/foo_db/rules/encrypt/tables/foo_table/active_version");
- assertTrue(actual.isPresent());
- assertThat(actual.get(), is("foo_table"));
- }
-
- @Test
- void assertGetEncryptAlgorithmVersion() {
- Optional<String> actual = EncryptNodeConverter.getEncryptorNameByActiveVersionPath("/metadata/foo_db/rules/encrypt/encryptors/aes_algorithm/active_version");
- assertTrue(actual.isPresent());
- assertThat(actual.get(), is("aes_algorithm"));
}
}