content: /*
   * 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 com.alibaba.compileflow.engine.core.builder.generator.action.java;
  
  import com.alibaba.compileflow.engine.core.builder.generator.GeneratorContext;
  import com.alibaba.compileflow.engine.core.builder.generator.action.AbstractActionGenerator;
  import com.alibaba.compileflow.engine.core.builder.generator.code.CodeTargetSupport;
  import com.alibaba.compileflow.engine.core.definition.action.IAction;
  import com.alibaba.compileflow.engine.core.definition.action.impl.JavaActionHandle;
  import com.alibaba.compileflow.engine.core.infrastructure.ClassWrapper;
  import com.alibaba.compileflow.engine.core.infrastructure.utils.JavaIdentifierUtils;
  
  /**
   * @author wuxiang
   * @author yusu
   */
  public class JavaActionGenerator extends AbstractActionGenerator {
  
      public JavaActionGenerator(GeneratorContext context,
                                 IAction action) {
          super(context, action);
      }
  
      @Override
      public String getActionType() {
          return "java";
      }
  
      @Override
      public void generateCode(CodeTargetSupport codeTargetSupport) {
          String clazz = getClazz();
          addImportedType(codeTargetSupport, clazz);
          ClassWrapper classWrapper = ClassWrapper.of(clazz);
          codeTargetSupport.addBodyLine(
                  getReturnVarCode() + "((" + classWrapper.getShortName()
                          + ")ClassUtils.newInstance(\"" + clazz + "\"))"
                          + "." + getMethod() + "(" + generateParameterCode(codeTargetSupport) + ");");
      }
  
      private String getClazz() {
          return ((JavaActionHandle) actionHandle).getClazz();
      }
  
      private String getMethod() {
          return ((JavaActionHandle) actionHandle).getMethod();
      }
  
      @Override
      public String generateActionMethodName(CodeTargetSupport codeTargetSupport) {
          String clazz = getClazz();
          String className = clazz.substring(clazz.lastIndexOf(".") + 1);
          String left = JavaIdentifierUtils.toFieldName(className);
          String right = JavaIdentifierUtils.toClassName(getMethod());
          return left + right;
      }
  
  }
  