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/26 09:40:51 UTC
[shardingsphere] branch master updated: Add RuleDefaultItemNodeConverter (#26579)
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 77d6908e5f4 Add RuleDefaultItemNodeConverter (#26579)
77d6908e5f4 is described below
commit 77d6908e5f46742b407fecaf4ca0c60fe1f6a097
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Mon Jun 26 17:40:45 2023 +0800
Add RuleDefaultItemNodeConverter (#26579)
* Add RuleDefaultItemNodeConverter
* Refactor ShadowNodeConverter
* Refactor SingleNodeConverter
* Refactor ShardingNodeConverter
---
.../event/ShadowRuleConfigurationEventBuilder.java | 2 +-
.../metadata/converter/ShadowNodeConverter.java | 44 +---
.../NewYamlShadowRuleConfigurationSwapper.java | 4 +-
.../ShardingRuleConfigurationEventBuilder.java | 12 +-
.../metadata/converter/ShardingNodeConverter.java | 228 ++++-----------------
.../NewYamlShardingRuleConfigurationSwapper.java | 25 +--
.../converter/RuleDefaultItemNodeConverter.java | 83 ++++++++
.../event/SingleRuleConfigurationEventBuilder.java | 4 +-
.../metadata/converter/SingleNodeConverter.java | 38 ++--
.../NewYamlSingleRuleConfigurationSwapper.java | 2 +-
10 files changed, 168 insertions(+), 274 deletions(-)
diff --git a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/event/ShadowRuleConfigurationEventBuilder.java b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/event/ShadowRuleConfigurationEventBuilder.java
index 544fb0a19b0..87abf9f15f1 100644
--- a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/event/ShadowRuleConfigurationEventBuilder.java
+++ b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/event/ShadowRuleConfigurationEventBuilder.java
@@ -58,7 +58,7 @@ public final class ShadowRuleConfigurationEventBuilder implements RuleConfigurat
if (algorithmName.isPresent() && !Strings.isNullOrEmpty(event.getValue())) {
return createShadowAlgorithmEvent(databaseName, algorithmName.get(), event);
}
- if (ShadowNodeConverter.isDefaultAlgorithmNameWithActiveVersionPath(event.getKey()) && !Strings.isNullOrEmpty(event.getValue())) {
+ if (ShadowNodeConverter.getDefaultAlgorithmNameNodeConverter().isActiveVersionPath(event.getKey()) && !Strings.isNullOrEmpty(event.getValue())) {
return createDefaultShadowAlgorithmNameEvent(databaseName, event);
}
return Optional.empty();
diff --git a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/metadata/converter/ShadowNodeConverter.java b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/metadata/converter/ShadowNodeConverter.java
index 57edaf75740..b2104f2a57a 100644
--- a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/metadata/converter/ShadowNodeConverter.java
+++ b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/metadata/converter/ShadowNodeConverter.java
@@ -19,24 +19,16 @@ package org.apache.shardingsphere.shadow.metadata.converter;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.infra.metadata.converter.RuleDefaultItemNodeConverter;
import org.apache.shardingsphere.infra.metadata.converter.RuleItemNodeConverter;
import org.apache.shardingsphere.infra.metadata.converter.RuleRootNodeConverter;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
/**
* Shadow node converter.
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class ShadowNodeConverter {
- private static final String DEFAULT_ALGORITHM_NAME = "default_algorithm_name";
-
- private static final String VERSIONS = "/versions/\\d+$";
-
- private static final String ACTIVE_VERSION = "/active_version$";
-
private static final RuleRootNodeConverter ROOT_NODE_CONVERTER = new RuleRootNodeConverter("shadow");
private static final RuleItemNodeConverter DATA_SOURCE_NODE_CONVERTER = new RuleItemNodeConverter(ROOT_NODE_CONVERTER, "data_sources");
@@ -45,6 +37,8 @@ public final class ShadowNodeConverter {
private static final RuleItemNodeConverter ALGORITHM_NODE_CONVERTER = new RuleItemNodeConverter(ROOT_NODE_CONVERTER, "algorithms");
+ private static final RuleDefaultItemNodeConverter DEFAULT_ALGORITHM_NAME_NODE_CONVERTER = new RuleDefaultItemNodeConverter(ROOT_NODE_CONVERTER, "default_algorithm_name");
+
/**
* Get rule root node converter.
*
@@ -82,35 +76,11 @@ public final class ShadowNodeConverter {
}
/**
- * Get default shadow algorithm path.
- *
- * @return default shadow algorithm path
- */
- public static String getDefaultShadowAlgorithmPath() {
- return String.join("/", DEFAULT_ALGORITHM_NAME);
- }
-
- /**
- * Is default algorithm name path.
- *
- * @param rulePath rule path
- * @return true or false
- */
- public static boolean isDefaultAlgorithmNamePath(final String rulePath) {
- Pattern pattern = Pattern.compile(ROOT_NODE_CONVERTER.getRuleNodePrefix() + "/" + DEFAULT_ALGORITHM_NAME + VERSIONS, Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(rulePath);
- return matcher.find();
- }
-
- /**
- * Is default algorithm name with active version path.
+ * Get default algorithm name node converter.
*
- * @param rulePath rule path
- * @return true or false
+ * @return default algorithm name node converter
*/
- public static boolean isDefaultAlgorithmNameWithActiveVersionPath(final String rulePath) {
- Pattern pattern = Pattern.compile(ROOT_NODE_CONVERTER.getRuleNodePrefix() + "/" + DEFAULT_ALGORITHM_NAME + ACTIVE_VERSION, Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(rulePath);
- return matcher.find();
+ public static RuleDefaultItemNodeConverter getDefaultAlgorithmNameNodeConverter() {
+ return DEFAULT_ALGORITHM_NAME_NODE_CONVERTER;
}
}
diff --git a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/yaml/swapper/NewYamlShadowRuleConfigurationSwapper.java b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/yaml/swapper/NewYamlShadowRuleConfigurationSwapper.java
index d9a37509ee2..92bb9537459 100644
--- a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/yaml/swapper/NewYamlShadowRuleConfigurationSwapper.java
+++ b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/yaml/swapper/NewYamlShadowRuleConfigurationSwapper.java
@@ -54,7 +54,7 @@ public final class NewYamlShadowRuleConfigurationSwapper implements NewYamlRuleC
result.add(new YamlDataNode(ShadowNodeConverter.getAlgorithmNodeConverter().getNamePath(entry.getKey()), YamlEngine.marshal(algorithmSwapper.swapToYamlConfiguration(entry.getValue()))));
}
if (!Strings.isNullOrEmpty(data.getDefaultShadowAlgorithmName())) {
- result.add(new YamlDataNode(ShadowNodeConverter.getDefaultShadowAlgorithmPath(), data.getDefaultShadowAlgorithmName()));
+ result.add(new YamlDataNode(ShadowNodeConverter.getDefaultAlgorithmNameNodeConverter().getPath(), data.getDefaultShadowAlgorithmName()));
}
for (ShadowDataSourceConfiguration each : data.getDataSources()) {
result.add(new YamlDataNode(ShadowNodeConverter.getDataSourceNodeConvertor().getNamePath(each.getName()), YamlEngine.marshal(swapToDataSourceYamlConfiguration(each))));
@@ -86,7 +86,7 @@ public final class NewYamlShadowRuleConfigurationSwapper implements NewYamlRuleC
ShadowNodeConverter.getAlgorithmNodeConverter().getName(each.getKey())
.ifPresent(algorithmName -> result.getShadowAlgorithms().put(algorithmName,
algorithmSwapper.swapToObject(YamlEngine.unmarshal(each.getValue(), YamlAlgorithmConfiguration.class))));
- } else if (ShadowNodeConverter.isDefaultAlgorithmNamePath(each.getKey())) {
+ } else if (ShadowNodeConverter.getDefaultAlgorithmNameNodeConverter().isPath(each.getKey())) {
result.setDefaultShadowAlgorithmName(each.getValue());
}
}
diff --git a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/event/ShardingRuleConfigurationEventBuilder.java b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/event/ShardingRuleConfigurationEventBuilder.java
index 81f645949aa..16c74cf2d88 100644
--- a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/event/ShardingRuleConfigurationEventBuilder.java
+++ b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/event/ShardingRuleConfigurationEventBuilder.java
@@ -78,19 +78,19 @@ public final class ShardingRuleConfigurationEventBuilder implements RuleConfigur
if (bindingTableName.isPresent() && !Strings.isNullOrEmpty(event.getValue())) {
return createShardingTableReferenceConfigEvent(databaseName, bindingTableName.get(), event);
}
- if (ShardingNodeConverter.isDefaultDatabaseStrategyWithActiveVersionPath(event.getKey()) && !Strings.isNullOrEmpty(event.getValue())) {
+ if (ShardingNodeConverter.getDefaultDatabaseStrategyNodeConverter().isActiveVersionPath(event.getKey()) && !Strings.isNullOrEmpty(event.getValue())) {
return createDefaultDatabaseStrategyConfigEvent(databaseName, event);
}
- if (ShardingNodeConverter.isDefaultTableStrategyWithActiveVersionPath(event.getKey()) && !Strings.isNullOrEmpty(event.getValue())) {
+ if (ShardingNodeConverter.getDefaultTableStrategyNodeConverter().isActiveVersionPath(event.getKey()) && !Strings.isNullOrEmpty(event.getValue())) {
return createDefaultTableStrategyConfigEvent(databaseName, event);
}
- if (ShardingNodeConverter.isDefaultKeyGenerateStrategyWithActiveVersionPath(event.getKey()) && !Strings.isNullOrEmpty(event.getValue())) {
+ if (ShardingNodeConverter.getDefaultKeyGenerateStrategyNodeConverter().isActiveVersionPath(event.getKey()) && !Strings.isNullOrEmpty(event.getValue())) {
return createDefaultKeyGenerateStrategyConfigEvent(databaseName, event);
}
- if (ShardingNodeConverter.isDefaultAuditStrategyWithActiveVersionPath(event.getKey()) && !Strings.isNullOrEmpty(event.getValue())) {
+ if (ShardingNodeConverter.getDefaultAuditStrategyNodeConverter().isActiveVersionPath(event.getKey()) && !Strings.isNullOrEmpty(event.getValue())) {
return createDefaultShardingAuditorStrategyConfigEvent(databaseName, event);
}
- if (ShardingNodeConverter.isDefaultShardingColumnWithActiveVersionPath(event.getKey()) && !Strings.isNullOrEmpty(event.getValue())) {
+ if (ShardingNodeConverter.getDefaultShardingColumnNodeConverter().isActiveVersionPath(event.getKey()) && !Strings.isNullOrEmpty(event.getValue())) {
return createDefaultShardingColumnEvent(databaseName, event);
}
Optional<String> algorithmName = ShardingNodeConverter.getAlgorithmNodeConverter().getNameByActiveVersionPath(event.getKey());
@@ -105,7 +105,7 @@ public final class ShardingRuleConfigurationEventBuilder implements RuleConfigur
if (auditorName.isPresent() && !Strings.isNullOrEmpty(event.getValue())) {
return createAuditorEvent(databaseName, auditorName.get(), event);
}
- if (ShardingNodeConverter.isShardingCacheWithActiveVersionPath(event.getKey()) && !Strings.isNullOrEmpty(event.getValue())) {
+ if (ShardingNodeConverter.getShardingCacheNodeConverter().isActiveVersionPath(event.getKey()) && !Strings.isNullOrEmpty(event.getValue())) {
return createShardingCacheEvent(databaseName, event);
}
return Optional.empty();
diff --git a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/converter/ShardingNodeConverter.java b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/converter/ShardingNodeConverter.java
index f4a6acbabaa..4fff77b8c61 100644
--- a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/converter/ShardingNodeConverter.java
+++ b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/converter/ShardingNodeConverter.java
@@ -19,12 +19,10 @@ package org.apache.shardingsphere.sharding.metadata.converter;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.infra.metadata.converter.RuleDefaultItemNodeConverter;
import org.apache.shardingsphere.infra.metadata.converter.RuleItemNodeConverter;
import org.apache.shardingsphere.infra.metadata.converter.RuleRootNodeConverter;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
/**
* Sharding node converter.
*/
@@ -33,22 +31,6 @@ public final class ShardingNodeConverter {
private static final String DEFAULT_STRATEGIES_NODE = "default_strategies";
- private static final String DEFAULT_DATABASE_STRATEGY_NODE = "default_database_strategy";
-
- private static final String DEFAULT_TABLE_STRATEGY_NODE = "default_table_strategy";
-
- private static final String DEFAULT_KEY_GENERATE_STRATEGY_NODE = "default_key_generate_strategy";
-
- private static final String DEFAULT_AUDIT_STRATEGY_NODE = "default_audit_strategy";
-
- private static final String DEFAULT_SHARDING_COLUMN_NODE = "default_sharding_column";
-
- private static final String SHARDING_CACHE_NODE = "sharding_cache";
-
- private static final String VERSIONS = "/versions/\\d+$";
-
- private static final String ACTIVE_VERSION = "/active_version$";
-
private static final RuleRootNodeConverter ROOT_NODE_CONVERTER = new RuleRootNodeConverter("sharding");
private static final RuleItemNodeConverter TABLE_NODE_CONVERTER = new RuleItemNodeConverter(ROOT_NODE_CONVERTER, "tables");
@@ -63,6 +45,21 @@ public final class ShardingNodeConverter {
private static final RuleItemNodeConverter AUDITOR_NODE_CONVERTER = new RuleItemNodeConverter(ROOT_NODE_CONVERTER, "auditors");
+ private static final RuleDefaultItemNodeConverter DEFAULT_DATABASE_STRATEGY_NODE_CONVERTER =
+ new RuleDefaultItemNodeConverter(ROOT_NODE_CONVERTER, DEFAULT_STRATEGIES_NODE, "default_database_strategy");
+
+ private static final RuleDefaultItemNodeConverter DEFAULT_TABLE_STRATEGY_NODE_CONVERTER = new RuleDefaultItemNodeConverter(ROOT_NODE_CONVERTER, DEFAULT_STRATEGIES_NODE, "default_table_strategy");
+
+ private static final RuleDefaultItemNodeConverter DEFAULT_KEY_GENERATE_STRATEGY_NODE_CONVERTER =
+ new RuleDefaultItemNodeConverter(ROOT_NODE_CONVERTER, DEFAULT_STRATEGIES_NODE, "default_key_generate_strategy");
+
+ private static final RuleDefaultItemNodeConverter DEFAULT_AUDIT_STRATEGY_NODE_CONVERTER = new RuleDefaultItemNodeConverter(ROOT_NODE_CONVERTER, DEFAULT_STRATEGIES_NODE, "default_audit_strategy");
+
+ private static final RuleDefaultItemNodeConverter DEFAULT_SHARDING_COLUMN_NODE_CONVERTER =
+ new RuleDefaultItemNodeConverter(ROOT_NODE_CONVERTER, DEFAULT_STRATEGIES_NODE, "default_sharding_column");
+
+ private static final RuleDefaultItemNodeConverter SHARDING_CACHE_NODE_CONVERTER = new RuleDefaultItemNodeConverter(ROOT_NODE_CONVERTER, "sharding_cache");
+
/**
* Get rule root node converter.
*
@@ -127,201 +124,56 @@ public final class ShardingNodeConverter {
}
/**
- * Get default database strategy path.
- *
- * @return default database strategy path
- */
- public static String getDefaultDatabaseStrategyPath() {
- return String.join("/", DEFAULT_STRATEGIES_NODE, DEFAULT_DATABASE_STRATEGY_NODE);
- }
-
- /**
- * Get default table strategy path.
- *
- * @return default table strategy path
- */
- public static String getDefaultTableStrategyPath() {
- return String.join("/", DEFAULT_STRATEGIES_NODE, DEFAULT_TABLE_STRATEGY_NODE);
- }
-
- /**
- * Get default key generate strategy path.
- *
- * @return default key generate path
- */
- public static String getDefaultKeyGenerateStrategyPath() {
- return String.join("/", DEFAULT_STRATEGIES_NODE, DEFAULT_KEY_GENERATE_STRATEGY_NODE);
- }
-
- /**
- * Get default audit strategy path.
- *
- * @return default audit strategy path
- */
- public static String getDefaultAuditStrategyPath() {
- return String.join("/", DEFAULT_STRATEGIES_NODE, DEFAULT_AUDIT_STRATEGY_NODE);
- }
-
- /**
- * Get default sharding column path.
- *
- * @return default sharding column path
- */
- public static String getDefaultShardingColumnPath() {
- return String.join("/", DEFAULT_STRATEGIES_NODE, DEFAULT_SHARDING_COLUMN_NODE);
- }
-
- /**
- * Get sharding cache path.
- *
- * @return sharding cache path
- */
- public static String getShardingCachePath() {
- return String.join("/", SHARDING_CACHE_NODE);
- }
-
- /**
- * Is default database strategy path.
- *
- * @param rulePath rule path
- * @return true or false
- */
- public static boolean isDefaultDatabaseStrategyPath(final String rulePath) {
- Pattern pattern = Pattern.compile(ROOT_NODE_CONVERTER.getRuleNodePrefix() + "/" + DEFAULT_STRATEGIES_NODE + "/" + DEFAULT_DATABASE_STRATEGY_NODE + VERSIONS, Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(rulePath);
- return matcher.find();
- }
-
- /**
- * Is default table strategy path.
- *
- * @param rulePath rule path
- * @return true or false
- */
- public static boolean isDefaultTableStrategyPath(final String rulePath) {
- Pattern pattern = Pattern.compile(ROOT_NODE_CONVERTER.getRuleNodePrefix() + "/" + DEFAULT_STRATEGIES_NODE + "/" + DEFAULT_TABLE_STRATEGY_NODE + VERSIONS, Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(rulePath);
- return matcher.find();
- }
-
- /**
- * Is default key generate strategy path.
- *
- * @param rulePath rule path
- * @return true or false
- */
- public static boolean isDefaultKeyGenerateStrategyPath(final String rulePath) {
- Pattern pattern = Pattern.compile(ROOT_NODE_CONVERTER.getRuleNodePrefix() + "/" + DEFAULT_STRATEGIES_NODE + "/" + DEFAULT_KEY_GENERATE_STRATEGY_NODE + VERSIONS, Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(rulePath);
- return matcher.find();
- }
-
- /**
- * Is default audit strategy path.
- *
- * @param rulePath rule path
- * @return true or false
- */
- public static boolean isDefaultAuditStrategyPath(final String rulePath) {
- Pattern pattern = Pattern.compile(ROOT_NODE_CONVERTER.getRuleNodePrefix() + "/" + DEFAULT_STRATEGIES_NODE + "/" + DEFAULT_AUDIT_STRATEGY_NODE + VERSIONS, Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(rulePath);
- return matcher.find();
- }
-
- /**
- * Is default sharding column path.
- *
- * @param rulePath rule path
- * @return true or false
- */
- public static boolean isDefaultShardingColumnPath(final String rulePath) {
- Pattern pattern = Pattern.compile(ROOT_NODE_CONVERTER.getRuleNodePrefix() + "/" + DEFAULT_STRATEGIES_NODE + "/" + DEFAULT_SHARDING_COLUMN_NODE + VERSIONS, Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(rulePath);
- return matcher.find();
- }
-
- /**
- * Is sharding cache path.
- *
- * @param rulePath rule path
- * @return true or false
- */
- public static boolean isShardingCachePath(final String rulePath) {
- Pattern pattern = Pattern.compile(ROOT_NODE_CONVERTER.getRuleNodePrefix() + "/" + SHARDING_CACHE_NODE + VERSIONS, Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(rulePath);
- return matcher.find();
- }
-
- /**
- * Is sharding algorithm with active version path.
+ * Get default database strategy node converter.
*
- * @param activeVersionPath active version path
- * @return true or false
+ * @return default database strategy node converter
*/
- public static boolean isDefaultDatabaseStrategyWithActiveVersionPath(final String activeVersionPath) {
- Pattern pattern = Pattern.compile(ROOT_NODE_CONVERTER.getRuleNodePrefix() + "/" + DEFAULT_STRATEGIES_NODE + "/" + DEFAULT_DATABASE_STRATEGY_NODE + ACTIVE_VERSION, Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(activeVersionPath);
- return matcher.find();
+ public static RuleDefaultItemNodeConverter getDefaultDatabaseStrategyNodeConverter() {
+ return DEFAULT_DATABASE_STRATEGY_NODE_CONVERTER;
}
/**
- * Is default table strategy with active version path.
+ * Get default table strategy node converter.
*
- * @param activeVersionPath active version path
- * @return true or false
+ * @return default table strategy node converter
*/
- public static boolean isDefaultTableStrategyWithActiveVersionPath(final String activeVersionPath) {
- Pattern pattern = Pattern.compile(ROOT_NODE_CONVERTER.getRuleNodePrefix() + "/" + DEFAULT_STRATEGIES_NODE + "/" + DEFAULT_TABLE_STRATEGY_NODE + ACTIVE_VERSION, Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(activeVersionPath);
- return matcher.find();
+ public static RuleDefaultItemNodeConverter getDefaultTableStrategyNodeConverter() {
+ return DEFAULT_TABLE_STRATEGY_NODE_CONVERTER;
}
/**
- * Is default key generate strategy with active version path.
+ * Get default key generate strategy node converter.
*
- * @param activeVersionPath active version path
- * @return true or false
+ * @return default key generate strategy node converter
*/
- public static boolean isDefaultKeyGenerateStrategyWithActiveVersionPath(final String activeVersionPath) {
- Pattern pattern = Pattern.compile(
- ROOT_NODE_CONVERTER.getRuleNodePrefix() + "/" + DEFAULT_STRATEGIES_NODE + "/" + DEFAULT_KEY_GENERATE_STRATEGY_NODE + ACTIVE_VERSION, Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(activeVersionPath);
- return matcher.find();
+ public static RuleDefaultItemNodeConverter getDefaultKeyGenerateStrategyNodeConverter() {
+ return DEFAULT_KEY_GENERATE_STRATEGY_NODE_CONVERTER;
}
/**
- * Is default audit strategy with active version path.
+ * Get default audit strategy node converter.
*
- * @param activeVersionPath active version path
- * @return true or false
+ * @return default table strategy node converter
*/
- public static boolean isDefaultAuditStrategyWithActiveVersionPath(final String activeVersionPath) {
- Pattern pattern = Pattern.compile(ROOT_NODE_CONVERTER.getRuleNodePrefix() + "/" + DEFAULT_STRATEGIES_NODE + "/" + DEFAULT_AUDIT_STRATEGY_NODE + ACTIVE_VERSION, Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(activeVersionPath);
- return matcher.find();
+ public static RuleDefaultItemNodeConverter getDefaultAuditStrategyNodeConverter() {
+ return DEFAULT_AUDIT_STRATEGY_NODE_CONVERTER;
}
/**
- * Is default sharding column with active version path.
+ * Get default sharding column node converter.
*
- * @param activeVersionPath active version path
- * @return true or false
+ * @return default sharding column node converter
*/
- public static boolean isDefaultShardingColumnWithActiveVersionPath(final String activeVersionPath) {
- Pattern pattern = Pattern.compile(ROOT_NODE_CONVERTER.getRuleNodePrefix() + "/" + DEFAULT_STRATEGIES_NODE + "/" + DEFAULT_SHARDING_COLUMN_NODE + ACTIVE_VERSION, Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(activeVersionPath);
- return matcher.find();
+ public static RuleDefaultItemNodeConverter getDefaultShardingColumnNodeConverter() {
+ return DEFAULT_SHARDING_COLUMN_NODE_CONVERTER;
}
/**
- * Is sharding cache with active version path.
+ * Get sharding cache node converter.
*
- * @param activeVersionPath active version path
- * @return true or false
+ * @return sharding cache node converter
*/
- public static boolean isShardingCacheWithActiveVersionPath(final String activeVersionPath) {
- Pattern pattern = Pattern.compile(ROOT_NODE_CONVERTER.getRuleNodePrefix() + "/" + SHARDING_CACHE_NODE + ACTIVE_VERSION, Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(activeVersionPath);
- return matcher.find();
+ public static RuleDefaultItemNodeConverter getShardingCacheNodeConverter() {
+ return SHARDING_CACHE_NODE_CONVERTER;
}
}
diff --git a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/NewYamlShardingRuleConfigurationSwapper.java b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/NewYamlShardingRuleConfigurationSwapper.java
index 96158416a5c..9e5e36f4e67 100644
--- a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/NewYamlShardingRuleConfigurationSwapper.java
+++ b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/NewYamlShardingRuleConfigurationSwapper.java
@@ -74,10 +74,11 @@ public final class NewYamlShardingRuleConfigurationSwapper implements NewYamlRul
swapStrategies(data, result);
swapTableRules(data, result);
if (null != data.getDefaultShardingColumn()) {
- result.add(new YamlDataNode(ShardingNodeConverter.getDefaultShardingColumnPath(), data.getDefaultShardingColumn()));
+ result.add(new YamlDataNode(ShardingNodeConverter.getDefaultShardingColumnNodeConverter().getPath(), data.getDefaultShardingColumn()));
}
if (null != data.getShardingCache()) {
- result.add(new YamlDataNode(ShardingNodeConverter.getShardingCachePath(), YamlEngine.marshal(shardingCacheYamlSwapper.swapToYamlConfiguration(data.getShardingCache()))));
+ result.add(new YamlDataNode(ShardingNodeConverter.getShardingCacheNodeConverter().getPath(),
+ YamlEngine.marshal(shardingCacheYamlSwapper.swapToYamlConfiguration(data.getShardingCache()))));
}
return result;
}
@@ -97,19 +98,19 @@ public final class NewYamlShardingRuleConfigurationSwapper implements NewYamlRul
private void swapStrategies(final ShardingRuleConfiguration data, final Collection<YamlDataNode> result) {
if (null != data.getDefaultDatabaseShardingStrategy()) {
- result.add(new YamlDataNode(ShardingNodeConverter.getDefaultDatabaseStrategyPath(),
+ result.add(new YamlDataNode(ShardingNodeConverter.getDefaultDatabaseStrategyNodeConverter().getPath(),
YamlEngine.marshal(shardingStrategySwapper.swapToYamlConfiguration(data.getDefaultDatabaseShardingStrategy()))));
}
if (null != data.getDefaultTableShardingStrategy()) {
- result.add(new YamlDataNode(ShardingNodeConverter.getDefaultTableStrategyPath(),
+ result.add(new YamlDataNode(ShardingNodeConverter.getDefaultTableStrategyNodeConverter().getPath(),
YamlEngine.marshal(shardingStrategySwapper.swapToYamlConfiguration(data.getDefaultTableShardingStrategy()))));
}
if (null != data.getDefaultKeyGenerateStrategy()) {
- result.add(new YamlDataNode(ShardingNodeConverter.getDefaultKeyGenerateStrategyPath(),
+ result.add(new YamlDataNode(ShardingNodeConverter.getDefaultKeyGenerateStrategyNodeConverter().getPath(),
YamlEngine.marshal(keyGenerateStrategySwapper.swapToYamlConfiguration(data.getDefaultKeyGenerateStrategy()))));
}
if (null != data.getDefaultAuditStrategy()) {
- result.add(new YamlDataNode(ShardingNodeConverter.getDefaultAuditStrategyPath(),
+ result.add(new YamlDataNode(ShardingNodeConverter.getDefaultAuditStrategyNodeConverter().getPath(),
YamlEngine.marshal(auditStrategySwapper.swapToYamlConfiguration(data.getDefaultAuditStrategy()))));
}
}
@@ -140,15 +141,15 @@ public final class NewYamlShardingRuleConfigurationSwapper implements NewYamlRul
} else if (ShardingNodeConverter.getBindingTableNodeConverter().isPath(each.getKey())) {
ShardingNodeConverter.getBindingTableNodeConverter().getName(each.getKey())
.ifPresent(bindingTableName -> result.getBindingTableGroups().add(YamlShardingTableReferenceRuleConfigurationConverter.convertToObject(each.getValue())));
- } else if (ShardingNodeConverter.isDefaultDatabaseStrategyPath(each.getKey())) {
+ } else if (ShardingNodeConverter.getDefaultDatabaseStrategyNodeConverter().isPath(each.getKey())) {
result.setDefaultDatabaseShardingStrategy(shardingStrategySwapper.swapToObject(YamlEngine.unmarshal(each.getValue(), YamlShardingStrategyConfiguration.class)));
- } else if (ShardingNodeConverter.isDefaultTableStrategyPath(each.getKey())) {
+ } else if (ShardingNodeConverter.getDefaultTableStrategyNodeConverter().isPath(each.getKey())) {
result.setDefaultTableShardingStrategy(shardingStrategySwapper.swapToObject(YamlEngine.unmarshal(each.getValue(), YamlShardingStrategyConfiguration.class)));
- } else if (ShardingNodeConverter.isDefaultKeyGenerateStrategyPath(each.getKey())) {
+ } else if (ShardingNodeConverter.getDefaultKeyGenerateStrategyNodeConverter().isPath(each.getKey())) {
result.setDefaultKeyGenerateStrategy(keyGenerateStrategySwapper.swapToObject(YamlEngine.unmarshal(each.getValue(), YamlKeyGenerateStrategyConfiguration.class)));
- } else if (ShardingNodeConverter.isDefaultAuditStrategyPath(each.getKey())) {
+ } else if (ShardingNodeConverter.getDefaultAuditStrategyNodeConverter().isPath(each.getKey())) {
result.setDefaultAuditStrategy(auditStrategySwapper.swapToObject(YamlEngine.unmarshal(each.getValue(), YamlShardingAuditStrategyConfiguration.class)));
- } else if (ShardingNodeConverter.isDefaultShardingColumnPath(each.getKey())) {
+ } else if (ShardingNodeConverter.getDefaultShardingColumnNodeConverter().isPath(each.getKey())) {
result.setDefaultShardingColumn(each.getValue());
} else if (ShardingNodeConverter.getAlgorithmNodeConverter().isPath(each.getKey())) {
ShardingNodeConverter.getAlgorithmNodeConverter().getName(each.getKey())
@@ -161,7 +162,7 @@ public final class NewYamlShardingRuleConfigurationSwapper implements NewYamlRul
} else if (ShardingNodeConverter.getAuditorNodeConverter().isPath(each.getKey())) {
ShardingNodeConverter.getAuditorNodeConverter().getName(each.getKey())
.ifPresent(auditorName -> result.getAuditors().put(auditorName, algorithmSwapper.swapToObject(YamlEngine.unmarshal(each.getValue(), YamlAlgorithmConfiguration.class))));
- } else if (ShardingNodeConverter.isShardingCachePath(each.getKey())) {
+ } else if (ShardingNodeConverter.getShardingCacheNodeConverter().isPath(each.getKey())) {
result.setShardingCache(shardingCacheYamlSwapper.swapToObject(YamlEngine.unmarshal(each.getValue(), YamlShardingCacheConfiguration.class)));
}
}
diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/converter/RuleDefaultItemNodeConverter.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/converter/RuleDefaultItemNodeConverter.java
new file mode 100644
index 00000000000..d7319bbac8a
--- /dev/null
+++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/converter/RuleDefaultItemNodeConverter.java
@@ -0,0 +1,83 @@
+/*
+ * 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 java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Rule default item node converter.
+ */
+public final class RuleDefaultItemNodeConverter {
+
+ private static final String VERSIONS = "/versions/\\d+$";
+
+ private static final String ACTIVE_VERSION = "/active_version$";
+
+ private final String parentNode;
+
+ private final String itemsNode;
+
+ private final Pattern itemsPathPattern;
+
+ private final Pattern activeVersionPathPattern;
+
+ public RuleDefaultItemNodeConverter(final RuleRootNodeConverter ruleRootNodeConverter, final String itemsNode) {
+ parentNode = null;
+ this.itemsNode = itemsNode;
+ itemsPathPattern = Pattern.compile(ruleRootNodeConverter.getRuleNodePrefix() + "/" + itemsNode + VERSIONS, Pattern.CASE_INSENSITIVE);
+ activeVersionPathPattern = Pattern.compile(ruleRootNodeConverter.getRuleNodePrefix() + "/" + itemsNode + ACTIVE_VERSION, Pattern.CASE_INSENSITIVE);
+ }
+
+ public RuleDefaultItemNodeConverter(final RuleRootNodeConverter ruleRootNodeConverter, final String parentNode, final String itemsNode) {
+ this.parentNode = parentNode;
+ this.itemsNode = itemsNode;
+ itemsPathPattern = Pattern.compile(ruleRootNodeConverter.getRuleNodePrefix() + "/" + parentNode + "/" + itemsNode + VERSIONS, Pattern.CASE_INSENSITIVE);
+ activeVersionPathPattern = Pattern.compile(ruleRootNodeConverter.getRuleNodePrefix() + "/" + parentNode + "/" + itemsNode + ACTIVE_VERSION, Pattern.CASE_INSENSITIVE);
+ }
+
+ /**
+ * Get path.
+ *
+ * @return path
+ */
+ public String getPath() {
+ return null == parentNode ? String.join("/", itemsNode) : String.join("/", parentNode, itemsNode);
+ }
+
+ /**
+ * Is item path.
+ *
+ * @param rulePath rule path
+ * @return true or false
+ */
+ public boolean isPath(final String rulePath) {
+ return itemsPathPattern.matcher(rulePath).find();
+ }
+
+ /**
+ * Judge whether active version path.
+ *
+ * @param path path to be judged
+ * @return is active version path or not
+ */
+ public boolean isActiveVersionPath(final String path) {
+ Matcher matcher = activeVersionPathPattern.matcher(path);
+ return matcher.find();
+ }
+}
diff --git a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/event/SingleRuleConfigurationEventBuilder.java b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/event/SingleRuleConfigurationEventBuilder.java
index 69d9da5c3ea..4574e8b25f5 100644
--- a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/event/SingleRuleConfigurationEventBuilder.java
+++ b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/event/SingleRuleConfigurationEventBuilder.java
@@ -36,10 +36,10 @@ public final class SingleRuleConfigurationEventBuilder implements RuleConfigurat
@Override
public Optional<GovernanceEvent> build(final String databaseName, final DataChangedEvent event) {
- if (!SingleNodeConverter.isSinglePath(event.getKey()) || Strings.isNullOrEmpty(event.getValue())) {
+ if (!SingleNodeConverter.getTableNodeConverter().isPath(event.getKey()) || Strings.isNullOrEmpty(event.getValue())) {
return Optional.empty();
}
- if (SingleNodeConverter.isTablesActiveVersionPath(event.getKey()) && !Strings.isNullOrEmpty(event.getValue())) {
+ if (SingleNodeConverter.getTableNodeConverter().isActiveVersionPath(event.getKey()) && !Strings.isNullOrEmpty(event.getValue())) {
return createSingleConfigEvent(databaseName, event);
}
return Optional.empty();
diff --git a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/converter/SingleNodeConverter.java b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/converter/SingleNodeConverter.java
index 14de346003d..d05e4b8a577 100644
--- a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/converter/SingleNodeConverter.java
+++ b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/converter/SingleNodeConverter.java
@@ -19,9 +19,8 @@ package org.apache.shardingsphere.single.metadata.converter;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import org.apache.shardingsphere.infra.metadata.converter.RuleDefaultItemNodeConverter;
+import org.apache.shardingsphere.infra.metadata.converter.RuleRootNodeConverter;
/**
* Single node converter.
@@ -37,36 +36,25 @@ public final class SingleNodeConverter {
private static final String RULE_ACTIVE_VERSION = "/active_version$";
- /**
- * Get tables path.
- *
- * @return tables path
- */
- public static String getTablesPath() {
- return TABLES_NODE;
- }
+ private static final RuleRootNodeConverter ROOT_NODE_CONVERTER = new RuleRootNodeConverter("single");
+
+ private static final RuleDefaultItemNodeConverter TABLE_NODE_CONVERTER = new RuleDefaultItemNodeConverter(ROOT_NODE_CONVERTER, "tables");
/**
- * Is single path.
+ * Get table node converter.
*
- * @param rulePath rule path
- * @return true or false
+ * @return table node converter
*/
- public static boolean isSinglePath(final String rulePath) {
- Pattern pattern = Pattern.compile(RULES_NODE_PREFIX + ROOT_NODE + "/.*", Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(rulePath);
- return matcher.find();
+ public static RuleDefaultItemNodeConverter getTableNodeConverter() {
+ return TABLE_NODE_CONVERTER;
}
/**
- * Is tables active version path.
+ * Get tables path.
*
- * @param rulePath rule path
- * @return true or false
+ * @return tables path
*/
- public static boolean isTablesActiveVersionPath(final String rulePath) {
- Pattern pattern = Pattern.compile(RULES_NODE_PREFIX + ROOT_NODE + "/" + TABLES_NODE + RULE_ACTIVE_VERSION, Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(rulePath);
- return matcher.find();
+ public static String getTablesPath() {
+ return TABLES_NODE;
}
}
diff --git a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/swapper/NewYamlSingleRuleConfigurationSwapper.java b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/swapper/NewYamlSingleRuleConfigurationSwapper.java
index 99a7867cfc8..6da3b76e0af 100644
--- a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/swapper/NewYamlSingleRuleConfigurationSwapper.java
+++ b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/swapper/NewYamlSingleRuleConfigurationSwapper.java
@@ -49,7 +49,7 @@ public final class NewYamlSingleRuleConfigurationSwapper implements NewYamlRuleC
@Override
public SingleRuleConfiguration swapToObject(final Collection<YamlDataNode> dataNodes) {
for (YamlDataNode each : dataNodes) {
- if (SingleNodeConverter.isSinglePath(each.getKey())) {
+ if (SingleNodeConverter.getTableNodeConverter().isPath(each.getKey())) {
return swapToObject(YamlEngine.unmarshal(each.getValue(), YamlSingleRuleConfiguration.class));
}
}