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"));
}