yzeng1618 commented on code in PR #11048:
URL: https://github.com/apache/seatunnel/pull/11048#discussion_r3401332279


##########
seatunnel-api/src/main/java/org/apache/seatunnel/api/configuration/util/Condition.java:
##########
@@ -219,6 +234,9 @@ private static String conditionToString(Condition<?> cond) {
         ConditionOperator op = cond.operator;
         String key = "'" + cond.option.key() + "'";
 
+        if (op == ConditionOperator.EXTENSION) {
+            return key + " " + cond.extension.description();

Review Comment:
   If description() returns null, the concatenated string will be "option_key 
null", and NPE may occur in certain serialization scenarios.



##########
seatunnel-core/seatunnel-starter/src/main/java/org/apache/seatunnel/core/starter/seatunnel/command/MetadataExportCommand.java:
##########
@@ -420,10 +420,14 @@ private ObjectNode exportCondition(Condition<?> 
condition) {
         }
         ObjectNode node = mapper.createObjectNode();
         node.put("key", condition.getOption().key());
-        if (condition.getExpectValue() != null) {
-            node.put("expectValue", 
String.valueOf(condition.getExpectValue()));
-        }
         ConditionOperator op = condition.getOperator();
+        Object expectValue = condition.getExpectValue();
+        if (op == ConditionOperator.EXTENSION && condition.getExtension() != 
null) {
+            expectValue = condition.getExtension().description();
+        }

Review Comment:
   Code Duplication (OptionRulesService.java 286-288)



##########
seatunnel-api/src/main/java/org/apache/seatunnel/api/configuration/util/ConditionEvaluators.java:
##########
@@ -169,6 +169,14 @@ private static Map<ConditionOperator, Evaluator> 
createRegistry() {
                     return compareNumbers(v, other) >= 0;
                 });
 
+        // Extension (custom logic delegated to ConditionExtension)
+        m.put(
+                ConditionOperator.EXTENSION,
+                (v, c, cfg) -> {
+                    ConditionExtension<Object> ext = 
(ConditionExtension<Object>) c.getExtension();

Review Comment:
   The return value of getExtension() is forcibly cast to 
ConditionExtension<Object>. Creating mismatched Condition via unconventional 
methods like reflection will trigger a runtime ClassCastException and fail job 
submission. Type validation logic is recommended.



##########
seatunnel-engine/seatunnel-engine-server/src/main/java/org/apache/seatunnel/engine/server/rest/service/OptionRulesService.java:
##########
@@ -282,9 +282,13 @@ private OptionRuleResponse.ConditionNode 
toConditionNode(Condition<?> condition)
                         : null;
         String conditionOperator = (op != null) ? op.name() : null;
         String conditionOperatorCategory = (op != null) ? 
op.getCategory().name() : null;
+        Object expectValue = condition.getExpectValue();
+        if (op == ConditionOperator.EXTENSION && condition.getExtension() != 
null) {
+            expectValue = condition.getExtension().description();
+        }

Review Comment:
   ditto



##########
seatunnel-api/src/main/java/org/apache/seatunnel/api/configuration/util/ConditionEvaluators.java:
##########
@@ -169,6 +169,14 @@ private static Map<ConditionOperator, Evaluator> 
createRegistry() {
                     return compareNumbers(v, other) >= 0;
                 });
 
+        // Extension (custom logic delegated to ConditionExtension)
+        m.put(
+                ConditionOperator.EXTENSION,
+                (v, c, cfg) -> {
+                    ConditionExtension<Object> ext = 
(ConditionExtension<Object>) c.getExtension();
+                    return ext.evaluate(cfg, v);

Review Comment:
   Add a try-catch block at the call site to catch all Throwables, wrap them 
into an OptionValidationException, and ensure the error message contains the 
context "Custom validation plugin execution failed".



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to