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 <zhangli...@apache.org>
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);
+    }
 }

Reply via email to