content: /*
   *  Copyright (c) 2023-2025, Agents-Flex (fuhai999@gmail.com).
   *  <p>
   *  Licensed 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
   *  <p>
   *  http://www.apache.org/licenses/LICENSE-2.0
   *  <p>
   *  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 com.agentsflex.chain.node;
  
  import com.agentsflex.core.chain.Chain;
  import com.agentsflex.core.chain.node.CodeNode;
  import com.ql.util.express.DefaultContext;
  import com.ql.util.express.ExpressRunner;
  
  import java.util.HashMap;
  import java.util.Map;
  
  public class QLExpressExecNode extends CodeNode {
  
      @Override
      protected Map<String, Object> executeCode(String code, Chain chain) {
  
          ExpressRunner runner = new ExpressRunner();
          DefaultContext<String, Object> context = new DefaultContext<>();
  
          Map<String, Object> parameterValues = chain.getParameterValues(this);
          if (parameterValues != null) context.putAll(parameterValues);
  
          Map<String, Object> result = new HashMap<>();
          context.put("_result", result);
          context.put("_chain", chain);
          context.put("_context", chain.getNodeContext(this.id));
  
  
          try {
              runner.execute(code, context, null, true, false);
          } catch (Exception e) {
              throw new RuntimeException(e);
          }
          return result;
      }
  
      @Override
      public String toString() {
          return "QLExpressExecNode{" +
              "code='" + code + '\'' +
              ", description='" + description + '\'' +
              ", parameters=" + parameters +
              ", outputDefs=" + outputDefs +
              ", id='" + id + '\'' +
              ", name='" + name + '\'' +
              ", async=" + async +
              ", inwardEdges=" + inwardEdges +
              ", outwardEdges=" + outwardEdges +
              ", condition=" + condition +
              ", memory=" + memory +
              ", nodeStatus=" + nodeStatus +
              '}';
      }
  }
  