This is an automated email from the ASF dual-hosted git repository.
sunnianjun 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 a80c1230324 Refactor MaskTable (#30558)
a80c1230324 is described below
commit a80c1230324e3341338688adea9e8cf225525e3a
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Mar 20 14:24:07 2024 +0800
Refactor MaskTable (#30558)
* Remove MaskAlgorithmMetaData
* Refactor MaskTable
---
.../apache/shardingsphere/mask/rule/MaskColumn.java | 3 ++-
.../org/apache/shardingsphere/mask/rule/MaskRule.java | 9 ++++-----
.../org/apache/shardingsphere/mask/rule/MaskTable.java | 16 +++++++++++-----
.../exception/AlgorithmNotFoundOnColumnException.java | 18 +++++++++---------
4 files changed, 26 insertions(+), 20 deletions(-)
diff --git
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/MaskColumn.java
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/MaskColumn.java
index d39e3482c92..1e2a093bb13 100644
---
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/MaskColumn.java
+++
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/MaskColumn.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.mask.rule;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.mask.spi.MaskAlgorithm;
/**
* Mask column.
@@ -29,5 +30,5 @@ public final class MaskColumn {
private final String logicColumn;
- private final String maskAlgorithm;
+ private final MaskAlgorithm<?, ?> maskAlgorithm;
}
diff --git
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/MaskRule.java
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/MaskRule.java
index 3122b4ade31..8cf628cf9df 100644
---
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/MaskRule.java
+++
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/MaskRule.java
@@ -41,17 +41,16 @@ public final class MaskRule implements DatabaseRule {
private final Map<String, MaskTable> tables;
- private final Map<String, MaskAlgorithm<?, ?>> maskAlgorithms;
-
@Getter
private final RuleAttributes attributes;
@SuppressWarnings("unchecked")
public MaskRule(final MaskRuleConfiguration ruleConfig) {
configuration = ruleConfig;
- tables = ruleConfig.getTables().stream().collect(Collectors.toMap(each
-> each.getName().toLowerCase(), MaskTable::new, (oldValue, currentValue) ->
oldValue, CaseInsensitiveMap::new));
- maskAlgorithms = ruleConfig.getMaskAlgorithms().entrySet().stream()
+ Map<String, MaskAlgorithm<?, ?>> maskAlgorithms =
ruleConfig.getMaskAlgorithms().entrySet().stream()
.collect(Collectors.toMap(Entry::getKey, entry ->
TypedSPILoader.getService(MaskAlgorithm.class, entry.getValue().getType(),
entry.getValue().getProps())));
+ tables = ruleConfig.getTables().stream()
+ .collect(Collectors.toMap(each ->
each.getName().toLowerCase(), each -> new MaskTable(each, maskAlgorithms),
(oldValue, currentValue) -> oldValue, CaseInsensitiveMap::new));
attributes = new RuleAttributes(new
MaskTableMapperRuleAttribute(ruleConfig.getTables()));
}
@@ -64,6 +63,6 @@ public final class MaskRule implements DatabaseRule {
*/
@SuppressWarnings("rawtypes")
public Optional<MaskAlgorithm> findAlgorithm(final String logicTable,
final String logicColumn) {
- return tables.containsKey(logicTable) ?
tables.get(logicTable).findAlgorithmName(logicColumn).map(maskAlgorithms::get)
: Optional.empty();
+ return tables.containsKey(logicTable) ?
tables.get(logicTable).findAlgorithm(logicColumn) : Optional.empty();
}
}
diff --git
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/MaskTable.java
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/MaskTable.java
index cfdcba88483..8dec9f8b5fc 100644
---
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/MaskTable.java
+++
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/MaskTable.java
@@ -18,8 +18,11 @@
package org.apache.shardingsphere.mask.rule;
import com.cedarsoftware.util.CaseInsensitiveMap;
+import
org.apache.shardingsphere.infra.algorithm.core.exception.AlgorithmNotFoundOnColumnException;
+import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
import
org.apache.shardingsphere.mask.api.config.rule.MaskColumnRuleConfiguration;
import
org.apache.shardingsphere.mask.api.config.rule.MaskTableRuleConfiguration;
+import org.apache.shardingsphere.mask.spi.MaskAlgorithm;
import java.util.Map;
import java.util.Optional;
@@ -31,20 +34,23 @@ public final class MaskTable {
private final Map<String, MaskColumn> columns;
- public MaskTable(final MaskTableRuleConfiguration config) {
+ public MaskTable(final MaskTableRuleConfiguration config, final
Map<String, MaskAlgorithm<?, ?>> maskAlgorithms) {
columns = new CaseInsensitiveMap<>();
for (MaskColumnRuleConfiguration each : config.getColumns()) {
- columns.put(each.getLogicColumn(), new
MaskColumn(each.getLogicColumn(), each.getMaskAlgorithm()));
+
ShardingSpherePreconditions.checkState(maskAlgorithms.containsKey(each.getMaskAlgorithm()),
+ () -> new AlgorithmNotFoundOnColumnException("mask",
each.getMaskAlgorithm(), config.getName(), each.getLogicColumn()));
+ columns.put(each.getLogicColumn(), new
MaskColumn(each.getLogicColumn(), maskAlgorithms.get(each.getMaskAlgorithm())));
}
}
/**
- * Find mask algorithm name.
+ * Find mask algorithm.
*
* @param logicColumn logic column name
- * @return found mask algorithm name
+ * @return found mask algorithm
*/
- public Optional<String> findAlgorithmName(final String logicColumn) {
+ @SuppressWarnings("rawtypes")
+ public Optional<MaskAlgorithm> findAlgorithm(final String logicColumn) {
return columns.containsKey(logicColumn) ?
Optional.of(columns.get(logicColumn).getMaskAlgorithm()) : Optional.empty();
}
}
diff --git
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/MaskColumn.java
b/infra/algorithm/core/src/main/java/org/apache/shardingsphere/infra/algorithm/core/exception/AlgorithmNotFoundOnColumnException.java
similarity index 50%
copy from
features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/MaskColumn.java
copy to
infra/algorithm/core/src/main/java/org/apache/shardingsphere/infra/algorithm/core/exception/AlgorithmNotFoundOnColumnException.java
index d39e3482c92..0a746b41f7a 100644
---
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/MaskColumn.java
+++
b/infra/algorithm/core/src/main/java/org/apache/shardingsphere/infra/algorithm/core/exception/AlgorithmNotFoundOnColumnException.java
@@ -15,19 +15,19 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.mask.rule;
+package org.apache.shardingsphere.infra.algorithm.core.exception;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
+import
org.apache.shardingsphere.infra.exception.core.external.sql.sqlstate.XOpenSQLState;
+import
org.apache.shardingsphere.infra.exception.core.external.sql.type.kernel.category.MetaDataSQLException;
/**
- * Mask column.
+ * Algorithm not found on column exception.
*/
-@RequiredArgsConstructor
-@Getter
-public final class MaskColumn {
+public final class AlgorithmNotFoundOnColumnException extends
MetaDataSQLException {
- private final String logicColumn;
+ private static final long serialVersionUID = -4570489906443880879L;
- private final String maskAlgorithm;
+ public AlgorithmNotFoundOnColumnException(final String algorithmType,
final String algorithmName, final String tableName, final String columnName) {
+ super(XOpenSQLState.CHECK_OPTION_VIOLATION, 12, "Can not find '%s'
algorithm '%s' on table.column '%s'.%s", algorithmType, algorithmName,
tableName, columnName);
+ }
}