This is an automated email from the ASF dual-hosted git repository.
terrymanu 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 2a5e966aae0 Refactor MCP Encrypt workflow feature state (#39304)
2a5e966aae0 is described below
commit 2a5e966aae0c6a71b0495b34b2a0a918dca7ce43
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Aug 1 16:36:07 2026 +0800
Refactor MCP Encrypt workflow feature state (#39304)
Reuse RuleWorkflowFeatureData in Encrypt workflow planning and validation.
Remove the duplicate EncryptWorkflowState model and its redundant test.
---
.../encrypt/tool/model/EncryptWorkflowState.java | 80 ----------------------
.../service/EncryptWorkflowPlanningService.java | 12 ++--
.../service/EncryptWorkflowValidationService.java | 4 --
.../handler/PlanEncryptRuleToolHandlerTest.java | 2 -
.../tool/model/EncryptWorkflowStateTest.java | 44 ------------
5 files changed, 6 insertions(+), 136 deletions(-)
diff --git
a/mcp/features/encrypt/src/main/java/org/apache/shardingsphere/mcp/feature/encrypt/tool/model/EncryptWorkflowState.java
b/mcp/features/encrypt/src/main/java/org/apache/shardingsphere/mcp/feature/encrypt/tool/model/EncryptWorkflowState.java
deleted file mode 100644
index 713d6313067..00000000000
---
a/mcp/features/encrypt/src/main/java/org/apache/shardingsphere/mcp/feature/encrypt/tool/model/EncryptWorkflowState.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.mcp.feature.encrypt.tool.model;
-
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import
org.apache.shardingsphere.mcp.support.workflow.model.WorkflowFeatureData;
-
-import java.util.LinkedHashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Encrypt workflow state.
- */
-@Getter
-@NoArgsConstructor
-public final class EncryptWorkflowState implements WorkflowFeatureData {
-
- private final List<Map<String, Object>> beforeRules = new LinkedList<>();
-
- private final List<Map<String, Object>> expectedRules = new LinkedList<>();
-
- public EncryptWorkflowState(final List<Map<String, Object>> beforeRules,
final List<Map<String, Object>> expectedRules) {
- this.beforeRules.addAll(copyRules(beforeRules));
- this.expectedRules.addAll(copyRules(expectedRules));
- }
-
- @Override
- public Map<String, String> getAlgorithmProperties(final String
algorithmRole) {
- return Map.of();
- }
-
- @Override
- public EncryptWorkflowState copy() {
- return new EncryptWorkflowState(beforeRules, expectedRules);
- }
-
- private List<Map<String, Object>> copyRules(final List<Map<String,
Object>> rules) {
- List<Map<String, Object>> result = new LinkedList<>();
- for (Map<String, Object> each : rules) {
- result.add(copyMap(each));
- }
- return result;
- }
-
- private Map<String, Object> copyMap(final Map<String, Object> original) {
- Map<String, Object> result = new LinkedHashMap<>(original.size(), 1F);
- original.forEach((key, value) -> result.put(key, copyValue(value)));
- return result;
- }
-
- private Object copyValue(final Object original) {
- if (original instanceof final Map<?, ?> originalMap) {
- Map<String, Object> result = new
LinkedHashMap<>(originalMap.size(), 1F);
- originalMap.forEach((key, value) ->
result.put(String.valueOf(key), copyValue(value)));
- return result;
- }
- if (original instanceof List) {
- return ((List<?>) original).stream().map(this::copyValue).toList();
- }
- return original;
- }
-}
diff --git
a/mcp/features/encrypt/src/main/java/org/apache/shardingsphere/mcp/feature/encrypt/tool/service/EncryptWorkflowPlanningService.java
b/mcp/features/encrypt/src/main/java/org/apache/shardingsphere/mcp/feature/encrypt/tool/service/EncryptWorkflowPlanningService.java
index bbf14107d42..5e26e025b41 100644
---
a/mcp/features/encrypt/src/main/java/org/apache/shardingsphere/mcp/feature/encrypt/tool/service/EncryptWorkflowPlanningService.java
+++
b/mcp/features/encrypt/src/main/java/org/apache/shardingsphere/mcp/feature/encrypt/tool/service/EncryptWorkflowPlanningService.java
@@ -20,13 +20,13 @@ package
org.apache.shardingsphere.mcp.feature.encrypt.tool.service;
import
org.apache.shardingsphere.database.connector.core.metadata.identifier.IdentifierScope;
import org.apache.shardingsphere.mcp.feature.encrypt.EncryptFeatureDefinition;
import
org.apache.shardingsphere.mcp.feature.encrypt.tool.model.EncryptWorkflowRequest;
-import
org.apache.shardingsphere.mcp.feature.encrypt.tool.model.EncryptWorkflowState;
import
org.apache.shardingsphere.mcp.support.database.spi.MCPFeatureQueryFacade;
import
org.apache.shardingsphere.mcp.support.database.spi.MCPMetadataQueryFacade;
import org.apache.shardingsphere.mcp.support.workflow.WorkflowSessionContext;
import org.apache.shardingsphere.mcp.support.workflow.model.AlgorithmCandidate;
import
org.apache.shardingsphere.mcp.support.workflow.model.AlgorithmPropertyRequirement;
import org.apache.shardingsphere.mcp.support.workflow.model.ClarifiedIntent;
+import
org.apache.shardingsphere.mcp.support.workflow.model.RuleWorkflowFeatureData;
import
org.apache.shardingsphere.mcp.support.workflow.model.WorkflowContextSnapshot;
import org.apache.shardingsphere.mcp.support.workflow.model.WorkflowFieldNames;
import org.apache.shardingsphere.mcp.support.workflow.model.WorkflowIssue;
@@ -113,13 +113,13 @@ public final class EncryptWorkflowPlanningService {
private EncryptWorkflowRequest prepareSnapshot(final
WorkflowContextSnapshot snapshot, final EncryptWorkflowRequest request) {
EncryptWorkflowRequest result =
EncryptWorkflowRequest.merge(snapshot.getRequest(), request);
- EncryptWorkflowState workflowState = getWorkflowState(snapshot);
+ RuleWorkflowFeatureData workflowState = getWorkflowState(snapshot);
return planningSupport.prepareSnapshot(snapshot,
EncryptFeatureDefinition.WORKFLOW_KIND, result, workflowState,
intentResolver.resolve(result), "Encrypt workflow plan.",
INTERACTION_STEPS, VALIDATION_LAYERS);
}
- private EncryptWorkflowState getWorkflowState(final
WorkflowContextSnapshot snapshot) {
- return snapshot.getFeatureData() instanceof EncryptWorkflowState ?
(EncryptWorkflowState) snapshot.getFeatureData() : new EncryptWorkflowState();
+ private RuleWorkflowFeatureData getWorkflowState(final
WorkflowContextSnapshot snapshot) {
+ return snapshot.getFeatureData() instanceof RuleWorkflowFeatureData ?
(RuleWorkflowFeatureData) snapshot.getFeatureData() : new
RuleWorkflowFeatureData();
}
private boolean ensureLifecycleState(final ClarifiedIntent
clarifiedIntent, final EncryptWorkflowRequest request,
@@ -136,7 +136,7 @@ public final class EncryptWorkflowPlanningService {
private void planDrop(final EncryptWorkflowRequest request, final
List<Map<String, Object>> existingRules, final WorkflowContextSnapshot
snapshot) {
addDropLifecycleWarnings(snapshot);
snapshot.getRuleArtifacts().addAll(ruleDistSQLPlanningService.planEncryptDropRule(request));
- snapshot.setFeatureData(new EncryptWorkflowState(existingRules,
List.of()));
+ snapshot.setFeatureData(new RuleWorkflowFeatureData(existingRules,
List.of()));
}
private boolean planNonDrop(final MCPFeatureQueryFacade queryFacade, final
ClarifiedIntent clarifiedIntent, final EncryptWorkflowRequest request,
@@ -153,7 +153,7 @@ public final class EncryptWorkflowPlanningService {
return false;
}
planEncryptArtifacts(request, snapshot);
- snapshot.setFeatureData(new EncryptWorkflowState(existingRules,
List.of(createExpectedTargetRule(request))));
+ snapshot.setFeatureData(new RuleWorkflowFeatureData(existingRules,
List.of(createExpectedTargetRule(request))));
return true;
}
diff --git
a/mcp/features/encrypt/src/main/java/org/apache/shardingsphere/mcp/feature/encrypt/tool/service/EncryptWorkflowValidationService.java
b/mcp/features/encrypt/src/main/java/org/apache/shardingsphere/mcp/feature/encrypt/tool/service/EncryptWorkflowValidationService.java
index 8bc59c5b4ab..4037f74749c 100644
---
a/mcp/features/encrypt/src/main/java/org/apache/shardingsphere/mcp/feature/encrypt/tool/service/EncryptWorkflowValidationService.java
+++
b/mcp/features/encrypt/src/main/java/org/apache/shardingsphere/mcp/feature/encrypt/tool/service/EncryptWorkflowValidationService.java
@@ -20,7 +20,6 @@ package
org.apache.shardingsphere.mcp.feature.encrypt.tool.service;
import
org.apache.shardingsphere.database.connector.core.metadata.identifier.IdentifierScope;
import org.apache.shardingsphere.mcp.feature.encrypt.EncryptFeatureDefinition;
import
org.apache.shardingsphere.mcp.feature.encrypt.tool.model.EncryptWorkflowRequest;
-import
org.apache.shardingsphere.mcp.feature.encrypt.tool.model.EncryptWorkflowState;
import
org.apache.shardingsphere.mcp.support.database.spi.MCPFeatureExecutionFacade;
import
org.apache.shardingsphere.mcp.support.database.spi.MCPFeatureQueryFacade;
import
org.apache.shardingsphere.mcp.support.database.spi.MCPMetadataQueryFacade;
@@ -139,9 +138,6 @@ public final class EncryptWorkflowValidationService
implements MCPWorkflowRuntim
}
private Optional<List<Map<String, Object>>> getExpectedRules(final
WorkflowContextSnapshot snapshot) {
- if (snapshot.getFeatureData() instanceof EncryptWorkflowState) {
- return Optional.of(((EncryptWorkflowState)
snapshot.getFeatureData()).getExpectedRules());
- }
return snapshot.getFeatureData() instanceof RuleWorkflowFeatureData ?
Optional.of(((RuleWorkflowFeatureData)
snapshot.getFeatureData()).getExpectedRules()) : Optional.empty();
}
diff --git
a/mcp/features/encrypt/src/test/java/org/apache/shardingsphere/mcp/feature/encrypt/tool/handler/PlanEncryptRuleToolHandlerTest.java
b/mcp/features/encrypt/src/test/java/org/apache/shardingsphere/mcp/feature/encrypt/tool/handler/PlanEncryptRuleToolHandlerTest.java
index 84b075a2996..27788cadac2 100644
---
a/mcp/features/encrypt/src/test/java/org/apache/shardingsphere/mcp/feature/encrypt/tool/handler/PlanEncryptRuleToolHandlerTest.java
+++
b/mcp/features/encrypt/src/test/java/org/apache/shardingsphere/mcp/feature/encrypt/tool/handler/PlanEncryptRuleToolHandlerTest.java
@@ -22,7 +22,6 @@ import
org.apache.shardingsphere.mcp.api.payload.MCPSuccessPayload;
import org.apache.shardingsphere.mcp.feature.encrypt.EncryptFeatureDefinition;
import
org.apache.shardingsphere.mcp.feature.encrypt.TestWorkflowSessionContext;
import
org.apache.shardingsphere.mcp.feature.encrypt.tool.model.EncryptWorkflowRequest;
-import
org.apache.shardingsphere.mcp.feature.encrypt.tool.model.EncryptWorkflowState;
import
org.apache.shardingsphere.mcp.feature.encrypt.tool.service.EncryptWorkflowPlanningService;
import
org.apache.shardingsphere.mcp.support.database.spi.MCPFeatureExecutionFacade;
import
org.apache.shardingsphere.mcp.support.database.spi.MCPFeatureQueryFacade;
@@ -152,7 +151,6 @@ class PlanEncryptRuleToolHandlerTest {
result.setStatus(status);
result.setRequest(new EncryptWorkflowRequest());
result.setClarifiedIntent(new ClarifiedIntent());
- result.setFeatureData(new EncryptWorkflowState());
result.setInteractionPlan(createInteractionPlan());
return result;
}
diff --git
a/mcp/features/encrypt/src/test/java/org/apache/shardingsphere/mcp/feature/encrypt/tool/model/EncryptWorkflowStateTest.java
b/mcp/features/encrypt/src/test/java/org/apache/shardingsphere/mcp/feature/encrypt/tool/model/EncryptWorkflowStateTest.java
deleted file mode 100644
index b41502c00cc..00000000000
---
a/mcp/features/encrypt/src/test/java/org/apache/shardingsphere/mcp/feature/encrypt/tool/model/EncryptWorkflowStateTest.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.mcp.feature.encrypt.tool.model;
-
-import org.junit.jupiter.api.Test;
-
-import java.util.List;
-import java.util.Map;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.is;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-class EncryptWorkflowStateTest {
-
- @Test
- void assertCopy() {
- EncryptWorkflowState state = new
EncryptWorkflowState(List.of(Map.of("logic_column", "email")),
List.of(Map.of("logic_column", "phone")));
- EncryptWorkflowState actual = state.copy();
- state.getExpectedRules().getFirst().put("logic_column", "mutated");
- assertThat(actual.getBeforeRules().getFirst().get("logic_column"),
is("email"));
- assertThat(actual.getExpectedRules().getFirst().get("logic_column"),
is("phone"));
- }
-
- @Test
- void assertGetAlgorithmProperties() {
- assertTrue(new
EncryptWorkflowState().getAlgorithmProperties("primary").isEmpty());
- }
-}