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