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

zhangliang 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 b8cac4cabef Refactor MaskRule (#30548)
b8cac4cabef is described below

commit b8cac4cabefba5ede141fe189c0e079c063162aa
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Mar 19 20:38:49 2024 +0800

    Refactor MaskRule (#30548)
---
 .../mask/merge/dql/MaskAlgorithmMetaData.java      | 11 ++++------
 .../mask/merge/dql/MaskMergedResult.java           |  2 +-
 .../apache/shardingsphere/mask/rule/MaskRule.java  | 25 ++++++++++++----------
 .../apache/shardingsphere/mask/rule/MaskTable.java |  6 +++---
 .../mask/merge/dql/MaskAlgorithmMetaDataTest.java  |  6 +++---
 .../mask/merge/dql/MaskMergedResultTest.java       |  2 +-
 6 files changed, 26 insertions(+), 26 deletions(-)

diff --git 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaData.java
 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaData.java
index bdac706adbd..129756092cf 100644
--- 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaData.java
+++ 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaData.java
@@ -30,7 +30,6 @@ import java.util.Optional;
 /**
  * Mask algorithm meta data.
  */
-@SuppressWarnings("rawtypes")
 @RequiredArgsConstructor
 public final class MaskAlgorithmMetaData {
     
@@ -42,14 +41,12 @@ public final class MaskAlgorithmMetaData {
      * Find mask algorithm.
      *
      * @param columnIndex column index
-     * @return maskAlgorithm
+     * @return found mask algorithm
      */
-    public Optional<MaskAlgorithm> findMaskAlgorithmByColumnIndex(final int 
columnIndex) {
+    @SuppressWarnings("rawtypes")
+    public Optional<MaskAlgorithm> findMaskAlgorithm(final int columnIndex) {
         Optional<ColumnProjection> columnProjection = 
findColumnProjection(columnIndex);
-        if (!columnProjection.isPresent()) {
-            return Optional.empty();
-        }
-        return 
maskRule.findMaskAlgorithm(columnProjection.get().getOriginalTable().getValue(),
 columnProjection.get().getName().getValue());
+        return columnProjection.isPresent() ? 
maskRule.findAlgorithm(columnProjection.get().getOriginalTable().getValue(), 
columnProjection.get().getName().getValue()) : Optional.empty();
     }
     
     private Optional<ColumnProjection> findColumnProjection(final int 
columnIndex) {
diff --git 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskMergedResult.java
 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskMergedResult.java
index 8912bd3be34..80b8c753c95 100644
--- 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskMergedResult.java
+++ 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskMergedResult.java
@@ -45,7 +45,7 @@ public final class MaskMergedResult implements MergedResult {
     @SuppressWarnings({"rawtypes", "unchecked"})
     @Override
     public Object getValue(final int columnIndex, final Class<?> type) throws 
SQLException {
-        Optional<MaskAlgorithm> maskAlgorithm = 
metaData.findMaskAlgorithmByColumnIndex(columnIndex);
+        Optional<MaskAlgorithm> maskAlgorithm = 
metaData.findMaskAlgorithm(columnIndex);
         if (!maskAlgorithm.isPresent()) {
             return mergedResult.getValue(columnIndex, type);
         }
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 b22b041d4cf..3122b4ade31 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
@@ -17,38 +17,41 @@
 
 package org.apache.shardingsphere.mask.rule;
 
+import com.cedarsoftware.util.CaseInsensitiveMap;
 import lombok.Getter;
-import org.apache.shardingsphere.infra.rule.scope.DatabaseRule;
 import org.apache.shardingsphere.infra.rule.attribute.RuleAttributes;
+import org.apache.shardingsphere.infra.rule.scope.DatabaseRule;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.mask.api.config.MaskRuleConfiguration;
 import 
org.apache.shardingsphere.mask.rule.attribute.MaskTableMapperRuleAttribute;
 import org.apache.shardingsphere.mask.spi.MaskAlgorithm;
 
-import java.util.LinkedHashMap;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
 /**
  * Mask rule.
  */
-@SuppressWarnings("rawtypes")
 public final class MaskRule implements DatabaseRule {
     
     @Getter
     private final MaskRuleConfiguration configuration;
     
-    private final Map<String, MaskAlgorithm> maskAlgorithms = new 
LinkedHashMap<>();
+    private final Map<String, MaskTable> tables;
     
-    private final Map<String, MaskTable> tables = new LinkedHashMap<>();
+    private final Map<String, MaskAlgorithm<?, ?>> maskAlgorithms;
     
     @Getter
     private final RuleAttributes attributes;
     
+    @SuppressWarnings("unchecked")
     public MaskRule(final MaskRuleConfiguration ruleConfig) {
         configuration = ruleConfig;
-        ruleConfig.getMaskAlgorithms().forEach((key, value) -> 
maskAlgorithms.put(key, TypedSPILoader.getService(MaskAlgorithm.class, 
value.getType(), value.getProps())));
-        ruleConfig.getTables().forEach(each -> 
tables.put(each.getName().toLowerCase(), new MaskTable(each)));
+        tables = ruleConfig.getTables().stream().collect(Collectors.toMap(each 
-> each.getName().toLowerCase(), MaskTable::new, (oldValue, currentValue) -> 
oldValue, CaseInsensitiveMap::new));
+        maskAlgorithms = ruleConfig.getMaskAlgorithms().entrySet().stream()
+                .collect(Collectors.toMap(Entry::getKey, entry -> 
TypedSPILoader.getService(MaskAlgorithm.class, entry.getValue().getType(), 
entry.getValue().getProps())));
         attributes = new RuleAttributes(new 
MaskTableMapperRuleAttribute(ruleConfig.getTables()));
     }
     
@@ -57,10 +60,10 @@ public final class MaskRule implements DatabaseRule {
      *
      * @param logicTable logic table name
      * @param logicColumn logic column name
-     * @return maskAlgorithm
+     * @return mask algorithm
      */
-    public Optional<MaskAlgorithm> findMaskAlgorithm(final String logicTable, 
final String logicColumn) {
-        String lowerCaseLogicTable = logicTable.toLowerCase();
-        return tables.containsKey(lowerCaseLogicTable) ? 
tables.get(lowerCaseLogicTable).findMaskAlgorithmName(logicColumn).map(maskAlgorithms::get)
 : Optional.empty();
+    @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();
     }
 }
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 d65dbe0019b..cfdcba88483 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
@@ -41,10 +41,10 @@ public final class MaskTable {
     /**
      * Find mask algorithm name.
      *
-     * @param logicColumn column name
-     * @return mask algorithm name
+     * @param logicColumn logic column name
+     * @return found mask algorithm name
      */
-    public Optional<String> findMaskAlgorithmName(final String logicColumn) {
+    public Optional<String> findAlgorithmName(final String logicColumn) {
         return columns.containsKey(logicColumn) ? 
Optional.of(columns.get(logicColumn).getMaskAlgorithm()) : Optional.empty();
     }
 }
diff --git 
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaDataTest.java
 
b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaDataTest.java
index 8ad95a122c4..e094d83c979 100644
--- 
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaDataTest.java
+++ 
b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaDataTest.java
@@ -50,14 +50,14 @@ class MaskAlgorithmMetaDataTest {
     
     @SuppressWarnings("rawtypes")
     @Test
-    void assertFindMaskAlgorithmByColumnIndex() {
-        when(maskRule.findMaskAlgorithm("t_order", 
"order_id")).thenReturn(Optional.of(TypedSPILoader.getService(MaskAlgorithm.class,
 "MD5")));
+    void assertFindAlgorithmByColumnIndex() {
+        when(maskRule.findAlgorithm("t_order", 
"order_id")).thenReturn(Optional.of(TypedSPILoader.getService(MaskAlgorithm.class,
 "MD5")));
         ColumnProjection columnProjection = new ColumnProjection(null, 
"order_id", null, mock(DatabaseType.class));
         columnProjection.setOriginalColumn(new IdentifierValue("order_id"));
         columnProjection.setOriginalTable(new IdentifierValue("t_order"));
         
when(selectStatementContext.getProjectionsContext().getExpandProjections()).thenReturn(Collections.singletonList(columnProjection));
         
when(selectStatementContext.getTablesContext().getTableNames()).thenReturn(Collections.singleton("t_order"));
-        Optional<MaskAlgorithm> actual = new MaskAlgorithmMetaData(maskRule, 
selectStatementContext).findMaskAlgorithmByColumnIndex(1);
+        Optional<MaskAlgorithm> actual = new MaskAlgorithmMetaData(maskRule, 
selectStatementContext).findMaskAlgorithm(1);
         assertTrue(actual.isPresent());
         assertThat(actual.get().getType(), is("MD5"));
     }
diff --git 
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskMergedResultTest.java
 
b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskMergedResultTest.java
index 0af3e0ed0e7..3b62020b27e 100644
--- 
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskMergedResultTest.java
+++ 
b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskMergedResultTest.java
@@ -56,7 +56,7 @@ class MaskMergedResultTest {
         when(mergedResult.getValue(1, Object.class)).thenReturn("VALUE");
         MaskAlgorithm<String, String> maskAlgorithm = 
mock(MaskAlgorithm.class);
         when(maskAlgorithm.mask("VALUE")).thenReturn("MASK_VALUE");
-        
when(metaData.findMaskAlgorithmByColumnIndex(1)).thenReturn(Optional.of(maskAlgorithm));
+        
when(metaData.findMaskAlgorithm(1)).thenReturn(Optional.of(maskAlgorithm));
         assertThat(new MaskMergedResult(metaData, mergedResult).getValue(1, 
String.class), is("MASK_VALUE"));
     }
     

Reply via email to