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

Reply via email to