Esempio n. 1
0
  public void rebuildModelInputs(List<? extends IConnection> inputConn, PigMapData mapData) {
    // remove no used input table
    if (mapData.getInputTables().size() != inputConn.size()) {
      List tableToRemove = new ArrayList();
      for (InputTable inputTable : mapData.getInputTables()) {
        boolean found = false;
        for (IConnection connection : inputConn) {
          if (inputTable.getName().equals(connection.getName())) {
            found = true;
          }
        }
        if (!found) {
          for (TableNode tableNode : inputTable.getNodes()) {
            PigMapUtil.detachNodeConnections(tableNode, mapData);
          }
          tableToRemove.add(inputTable);
          PigMapUtil.detachFilterSource(inputTable, mapData);
        }
      }
      mapData.getInputTables().removeAll(tableToRemove);
    }

    for (IConnection inData : inputConn) {
      String name = inData.getName();
      InputTable inputTable = null;
      for (InputTable in : mapData.getInputTables()) {
        if (in.getName() != null && in.getName().equals(name)) {
          inputTable = in;
          break;
        }
      }
      if (inputTable == null) {
        inputTable = PigmapFactory.eINSTANCE.createInputTable();
        inputTable.setName(name);
        inputTable.setLookup(EConnectionType.FLOW_MAIN != inData.getLineStyle());
        mapData
            .getInputTables()
            .add(inputTable.isLookup() ? mapData.getInputTables().size() : 0, inputTable);
      } else {
        inputTable.setLookup(EConnectionType.FLOW_MAIN != inData.getLineStyle());
      }
      // by default
      if (inputTable.isLookup() && inputTable.getJoinModel() == null) {
        inputTable.setJoinModel(TableSettingsConstant.LEFT_OUTER_JOIN);
      }
      if (inputTable.isLookup() && inputTable.getJoinOptimization() == null) {
        inputTable.setJoinOptimization(PIG_MAP_JOIN_OPTIMIZATION.NONE.toString());
      }
      rebuildInputTable(inputTable, inData.getMetadataTable(), mapData);
    }
  }
  public String generate(Object argument) {
    final StringBuffer stringBuffer = new StringBuffer();
    stringBuffer.append(TEXT_1);

    class BasicLogUtil {
      protected String cid = "";
      protected org.talend.core.model.process.INode node = null;
      protected boolean log4jEnabled = false;
      private String logID = "";

      private BasicLogUtil() {}

      public BasicLogUtil(org.talend.core.model.process.INode node) {
        this.node = node;
        String cidx = this.node.getUniqueName();
        if (cidx.matches("^.*?tAmazonAuroraOutput_\\d+_out$")) {
          cidx = cidx.substring(0, cidx.length() - 4); // 4 ==> "_out".length();
        }
        this.cid = cidx;
        this.log4jEnabled =
            ("true")
                .equals(
                    org.talend.core.model.process.ElementParameterParser.getValue(
                        this.node.getProcess(), "__LOG4J_ACTIVATE__"));
        this.log4jEnabled =
            this.log4jEnabled
                && this.node.getComponent().isLog4JEnabled()
                && !"JOBLET".equals(node.getComponent().getComponentType().toString());
        this.logID = this.cid;
      }

      public String var(String varName) {
        return varName + "_" + this.cid;
      }

      public String str(String content) {
        return "\"" + content + "\"";
      }

      public void info(String... message) {
        log4j("info", message);
      }

      public void debug(String... message) {
        log4j("debug", message);
      }

      public void warn(String... message) {
        log4j("warn", message);
      }

      public void error(String... message) {
        log4j("error", message);
      }

      public void fatal(String... message) {
        log4j("fatal", message);
      }

      public void trace(String... message) {
        log4j("trace", message);
      }

      java.util.List<String> checkableList =
          java.util.Arrays.asList(new String[] {"info", "debug", "trace"});

      public void log4j(String level, String... messages) {
        if (this.log4jEnabled) {
          if (checkableList.contains(level)) {

            stringBuffer.append(TEXT_2);
            stringBuffer.append(level.substring(0, 1).toUpperCase() + level.substring(1));
            stringBuffer.append(TEXT_3);
          }

          stringBuffer.append(TEXT_4);
          stringBuffer.append(level);
          stringBuffer.append(TEXT_5);
          stringBuffer.append(logID);
          stringBuffer.append(TEXT_6);
          for (String message : messages) {
            stringBuffer.append(TEXT_7);
            stringBuffer.append(message);
            stringBuffer.append(TEXT_8);
          }
          stringBuffer.append(TEXT_9);
        }
      }

      public boolean isActive() {
        return this.log4jEnabled;
      }
    }

    class LogUtil extends BasicLogUtil {

      private LogUtil() {}

      public LogUtil(org.talend.core.model.process.INode node) {
        super(node);
      }

      public void startWork() {
        info(str("Start to work."));
      }

      public void endWork() {
        info(str("Done."));
      }

      public void logIgnoredException(String exception) {
        warn(exception);
      }

      public void logPrintedException(String exception) {
        error(exception);
      }

      public void logException(String exception) {
        fatal(exception);
      }

      public void logCompSetting() {
        if (log4jEnabled) {

          stringBuffer.append(TEXT_10);
          stringBuffer.append(var("log4jParamters"));
          stringBuffer.append(TEXT_11);
          stringBuffer.append(TEXT_12);
          stringBuffer.append(var("log4jParamters"));
          stringBuffer.append(TEXT_13);

          java.util.Set<org.talend.core.model.process.EParameterFieldType> ignoredParamsTypes =
              new java.util.HashSet<org.talend.core.model.process.EParameterFieldType>();
          ignoredParamsTypes.addAll(
              java.util.Arrays.asList(
                  org.talend.core.model.process.EParameterFieldType.SCHEMA_TYPE,
                  org.talend.core.model.process.EParameterFieldType.LABEL,
                  org.talend.core.model.process.EParameterFieldType.EXTERNAL,
                  org.talend.core.model.process.EParameterFieldType.MAPPING_TYPE,
                  org.talend.core.model.process.EParameterFieldType.IMAGE,
                  org.talend.core.model.process.EParameterFieldType.TNS_EDITOR,
                  org.talend.core.model.process.EParameterFieldType.WSDL2JAVA,
                  org.talend.core.model.process.EParameterFieldType.GENERATEGRAMMARCONTROLLER,
                  org.talend.core.model.process.EParameterFieldType
                      .GENERATE_SURVIVORSHIP_RULES_CONTROLLER,
                  org.talend.core.model.process.EParameterFieldType.REFRESH_REPORTS,
                  org.talend.core.model.process.EParameterFieldType.BROWSE_REPORTS,
                  org.talend.core.model.process.EParameterFieldType.PALO_DIM_SELECTION,
                  org.talend.core.model.process.EParameterFieldType.GUESS_SCHEMA,
                  org.talend.core.model.process.EParameterFieldType.MATCH_RULE_IMEX_CONTROLLER,
                  org.talend.core.model.process.EParameterFieldType.MEMO_PERL,
                  org.talend.core.model.process.EParameterFieldType.DBTYPE_LIST,
                  org.talend.core.model.process.EParameterFieldType.VERSION,
                  org.talend.core.model.process.EParameterFieldType.TECHNICAL,
                  org.talend.core.model.process.EParameterFieldType.ICON_SELECTION,
                  org.talend.core.model.process.EParameterFieldType.JAVA_COMMAND,
                  org.talend.core.model.process.EParameterFieldType.TREE_TABLE,
                  org.talend.core.model.process.EParameterFieldType.VALIDATION_RULE_TYPE,
                  org.talend.core.model.process.EParameterFieldType.DCSCHEMA,
                  org.talend.core.model.process.EParameterFieldType.SURVIVOR_RELATION,
                  org.talend.core.model.process.EParameterFieldType.REST_RESPONSE_SCHEMA_TYPE));
          for (org.talend.core.model.process.IElementParameter ep :
              org.talend.core.model.utils.NodeUtil.getDisplayedParameters(node)) {
            if (!ep.isLog4JEnabled() || ignoredParamsTypes.contains(ep.getFieldType())) {
              continue;
            }
            String name = ep.getName();
            if (org.talend.core.model.process.EParameterFieldType.PASSWORD.equals(
                ep.getFieldType())) {
              String epName = "__" + name + "__";
              String password = "";
              if (org.talend.core.model.process.ElementParameterParser.canEncrypt(node, epName)) {
                password =
                    org.talend.core.model.process.ElementParameterParser.getEncryptedValue(
                        node, epName);
              } else {
                String passwordValue =
                    org.talend.core.model.process.ElementParameterParser.getValue(node, epName);
                if (passwordValue == null
                    || "".equals(passwordValue.trim())) { // for the value which empty
                  passwordValue = "\"\"";
                }
                password =
                    "******" + passwordValue + ")";
              }

              stringBuffer.append(TEXT_14);
              stringBuffer.append(var("log4jParamters"));
              stringBuffer.append(TEXT_15);
              stringBuffer.append(name);
              stringBuffer.append(TEXT_16);
              stringBuffer.append(password);
              stringBuffer.append(TEXT_17);

            } else {
              String value =
                  org.talend.core.model.utils.NodeUtil.getNormalizeParameterValue(node, ep);

              stringBuffer.append(TEXT_18);
              stringBuffer.append(var("log4jParamters"));
              stringBuffer.append(TEXT_19);
              stringBuffer.append(name);
              stringBuffer.append(TEXT_20);
              stringBuffer.append(value);
              stringBuffer.append(TEXT_21);
            }

            stringBuffer.append(TEXT_22);
            stringBuffer.append(var("log4jParamters"));
            stringBuffer.append(TEXT_23);
          }
        }
        debug(var("log4jParamters"));
      }

      // no use for now, because we log the data by rowStruct
      public void traceData(
          String rowStruct,
          java.util.List<org.talend.core.model.metadata.IMetadataColumn> columnList,
          String nbline) {
        if (log4jEnabled) {

          stringBuffer.append(TEXT_24);
          stringBuffer.append(var("log4jSb"));
          stringBuffer.append(TEXT_25);

          for (org.talend.core.model.metadata.IMetadataColumn column : columnList) {
            org.talend.core.model.metadata.types.JavaType javaType =
                org.talend.core.model.metadata.types.JavaTypesManager.getJavaTypeFromId(
                    column.getTalendType());
            String columnName = column.getLabel();
            boolean isPrimit =
                org.talend.core.model.metadata.types.JavaTypesManager.isJavaPrimitiveType(
                    column.getTalendType(), column.isNullable());
            if (isPrimit) {

              stringBuffer.append(TEXT_26);
              stringBuffer.append(var("log4jSb"));
              stringBuffer.append(TEXT_27);
              stringBuffer.append(rowStruct);
              stringBuffer.append(TEXT_28);
              stringBuffer.append(columnName);
              stringBuffer.append(TEXT_29);

            } else {

              stringBuffer.append(TEXT_30);
              stringBuffer.append(rowStruct);
              stringBuffer.append(TEXT_31);
              stringBuffer.append(columnName);
              stringBuffer.append(TEXT_32);
              stringBuffer.append(TEXT_33);
              stringBuffer.append(var("log4jSb"));
              stringBuffer.append(TEXT_34);
              stringBuffer.append(TEXT_35);
              stringBuffer.append(var("log4jSb"));
              stringBuffer.append(TEXT_36);
              stringBuffer.append(rowStruct);
              stringBuffer.append(TEXT_37);
              stringBuffer.append(columnName);
              stringBuffer.append(TEXT_38);
            }

            stringBuffer.append(TEXT_39);
            stringBuffer.append(var("log4jSb"));
            stringBuffer.append(TEXT_40);
          }
        }
        trace(str("Content of the record "), nbline, str(": "), var("log4jSb"));
      }
    }

    class LogHelper {

      java.util.Map<String, String> pastDict = null;

      public LogHelper() {
        pastDict = new java.util.HashMap<String, String>();
        pastDict.put("insert", "inserted");
        pastDict.put("update", "updated");
        pastDict.put("delete", "deleted");
        pastDict.put("upsert", "upserted");
      }

      public String upperFirstChar(String data) {
        return data.substring(0, 1).toUpperCase() + data.substring(1);
      }

      public String toPastTense(String data) {
        return pastDict.get(data);
      }
    }
    LogHelper logHelper = new LogHelper();

    LogUtil log = null;

    CodeGeneratorArgument codeGenArgument = (CodeGeneratorArgument) argument;
    INode node = (INode) codeGenArgument.getArgument();
    String cid = node.getUniqueName();

    log = new LogUtil(node);
    boolean useExistingConn =
        ("true").equals(ElementParameterParser.getValue(node, "__USE_EXISTING_CONNECTION__"));

    stringBuffer.append(TEXT_41);

    List<? extends IConnection> inputConnections = node.getIncomingConnections();
    if ((inputConnections == null) || (inputConnections.size() == 0)) {
      return "";
    }

    IConnection inputConnection = inputConnections.get(0);

    if (!inputConnection.getLineStyle().hasConnectionCategory(IConnectionCategory.DATA)) {
      return "";
    }

    List<? extends IConnection> outputConnections = node.getOutgoingSortedConnections();
    if ((outputConnections == null) || (outputConnections.size() == 0)) {
      return "";
    }
    IConnection outputConnection = outputConnections.get(0);

    if (!outputConnection.getLineStyle().hasConnectionCategory(IConnectionCategory.DATA)) {
      return "";
    }

    IMetadataTable inputMetadata = inputConnection.getMetadataTable();
    if (inputMetadata == null) {
      return "";
    }

    List<IMetadataColumn> inputColumnList = inputMetadata.getListColumns();
    if ((inputColumnList == null) || (inputColumnList.size() == 0)) {
      return "";
    }

    IMetadataTable outputMetadata = outputConnection.getMetadataTable();
    if (outputMetadata == null) {
      return "";
    }

    List<IMetadataColumn> outputColumnList = outputMetadata.getListColumns();
    if ((outputColumnList == null) || (outputColumnList.size() == 0)) {
      return "";
    }

    int count = 0;
    for (IConnection inConnection : inputConnections) {
      if (inConnection.getLineStyle().hasConnectionCategory(IConnectionCategory.DATA)) {
        count++;
      }
    }

    for (IConnection outConnection : outputConnections) {
      if (outConnection.getLineStyle().hasConnectionCategory(IConnectionCategory.DATA)) {
        count++;
      }
    }

    if (count != 2) {
      return "";
    }

    stringBuffer.append(TEXT_42);
    if (!useExistingConn) {
      stringBuffer.append(TEXT_43);
      stringBuffer.append(cid);
      stringBuffer.append(TEXT_44);
      stringBuffer.append(cid);
      stringBuffer.append(TEXT_45);
      log.info(log.str("Closing the connection."));
      stringBuffer.append(TEXT_46);
      stringBuffer.append(cid);
      stringBuffer.append(TEXT_47);
      log.info(log.str("Connection has closed."));
      stringBuffer.append(TEXT_48);
    }
    stringBuffer.append(TEXT_49);
    stringBuffer.append(TEXT_50);
    return stringBuffer.toString();
  }
  public String generate(Object argument) {
    final StringBuffer stringBuffer = new StringBuffer();
    stringBuffer.append(TEXT_1);

    /* Algorithm:
     * For each procedure arguments
     *   If argument type is IN or IN OUT
     *     Bind parameter to procedure call
     *   If argument type is OUT or IN OUT
     *     Register output parameter in procedure call
     *
     * Execute procedure
     *
     * For each column in first output schema
     *   If column match a procedure argument
     *     If argument type is IN
     *       Copy argument value from input flow
     *     If argument type is OUT or IN OUT
     *       Retrieve argument value from procedure call
     *     Copy argument value from first output schema to each output schema
     *   Else
     *     If column is defined in input schema
     *       Copy column value from input schema to each output schema
     */

    CodeGeneratorArgument codeGenArgument = (CodeGeneratorArgument) argument;
    INode node = (INode) codeGenArgument.getArgument();
    String cid = node.getUniqueName();

    List<Map<String, String>> spArgs =
        (List<Map<String, String>>) ElementParameterParser.getObjectValue(node, "__SP_ARGS__");

    // Functions have an additionnal output parameter
    boolean isFunction = ("true").equals(ElementParameterParser.getValue(node, "__IS_FUNCTION__"));
    if (isFunction) {
      // Add return value at first position of parameters list
      String returnField = ElementParameterParser.getValue(node, "__RETURN__");

      HashMap<String, String> returnValue = new HashMap<String, String>();
      returnValue.put("COLUMN", returnField);
      returnValue.put("TYPE", "RETURN_FUNCTION");
      spArgs.add(returnValue);
    }

    class JavaToDbType {
      public String convert(String javaType) {
        if (("String").equals(javaType)) {
          return "VARCHAR";
        } else if (javaType.equalsIgnoreCase("char") || ("Character").equals(javaType)) {
          return "CHAR";
        } else if (("byte[]").equals(javaType)) {
          return "RAW";
        } else if (("java.util.Date").equals(javaType)) {
          return "DATE";
        } else if (javaType.equalsIgnoreCase("boolean")) {
          return "BOOLEAN";
        } else if (javaType.equalsIgnoreCase("byte")) {
          return "TINYINT";
        } else if (javaType.equalsIgnoreCase("short")) {
          return "SMALLINT";
        } else if (javaType.equalsIgnoreCase("int") || ("Integer").equals(javaType)) {
          return "INTEGER";
        } else if (javaType.equalsIgnoreCase("long")) {
          return "BIGINT";
        } else if (javaType.equalsIgnoreCase("float")) {
          return "FLOAT";
        } else if (javaType.equalsIgnoreCase("double")) {
          return "DOUBLE";
        } else {
          return "OTHER";
        }
      }
    }
    JavaToDbType converter = new JavaToDbType();

    // Search incoming schema
    IMetadataTable inMetadata = null;
    IConnection inConnection = null;
    String inConnectionName = null;

    List<? extends IConnection> inConnections = node.getIncomingConnections();
    if (inConnections != null) {
      for (int i = 0; i < inConnections.size(); i++) {
        IConnection connection = inConnections.get(i);
        if (connection.getLineStyle().hasConnectionCategory(IConnectionCategory.DATA)) {
          inConnection = connection;
          inConnectionName = inConnection.getName();
          inMetadata = inConnection.getMetadataTable();
        }
      }
    }

    // If there is an IN or an INOUT argument, the component must have an input
    // connection
    boolean canGenerate = true;
    if (inConnection == null) {
      for (int i = 0; i < spArgs.size(); i++) {
        String argType = spArgs.get(i).get("TYPE");
        if (("IN").equals(argType) || ("INOUT").equals(argType)) {

          stringBuffer.append(TEXT_2);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_3);

          canGenerate = false;
          break;
        }
      }
    }

    if (canGenerate) {
      // Search outgoing schema
      IMetadataTable metadata = null;

      List<IMetadataTable> metadatas = node.getMetadataList();
      if (metadatas != null && metadatas.size() > 0) {
        metadata = metadatas.get(0);
      }

      // We only generate output if outgoing schema is defined
      if (metadata != null) {
        List<IMetadataColumn> columnList = metadata.getListColumns();

        // Iterate over procedure arguments
        for (int i = 0; i < spArgs.size(); i++) {
          Map<String, String> spArg = spArgs.get(i);
          String argName = spArg.get("COLUMN");
          String argType = spArg.get("TYPE");

          // Search Java type of argument, based on schema column
          String typeToGenerate = null;
          boolean nullable = false;
          for (IMetadataColumn column : columnList) {
            if (column.getLabel().equals(argName)) {
              typeToGenerate =
                  JavaTypesManager.getTypeToGenerate(column.getTalendType(), column.isNullable());
              nullable = column.isNullable();
              break;
            }
          }

          if (typeToGenerate == null) continue;

          // Note: first argument in JDBC is arg #1, and for functions, arg #1 is return value
          int argIndex = i + 1;

          // Input argument
          if (("IN").equals(argType) || ("INOUT").equals(argType)) {
            if (nullable) {

              stringBuffer.append(TEXT_4);
              stringBuffer.append(inConnectionName);
              stringBuffer.append(TEXT_5);
              stringBuffer.append(argName);
              stringBuffer.append(TEXT_6);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_7);
              stringBuffer.append(argIndex);
              stringBuffer.append(TEXT_8);
              stringBuffer.append(converter.convert(typeToGenerate));
              stringBuffer.append(TEXT_9);
            }

            String method;
            if (("byte[]").equals(typeToGenerate)) {
              method = "Bytes";
            } else if (("Integer").equals(typeToGenerate)) {
              method = "Int";
            } else {
              method = typeToGenerate.substring(0, 1).toUpperCase() + typeToGenerate.substring(1);
            }

            // Bind parameter to CallableStatement
            if (("char").equals(typeToGenerate) || ("Character").equals(typeToGenerate)) {

              stringBuffer.append(TEXT_10);
              stringBuffer.append(inConnectionName);
              stringBuffer.append(TEXT_11);
              stringBuffer.append(argName);
              stringBuffer.append(TEXT_12);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_13);
              stringBuffer.append(argIndex);
              stringBuffer.append(TEXT_14);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_15);
              stringBuffer.append(argIndex);
              stringBuffer.append(TEXT_16);
              stringBuffer.append(inConnectionName);
              stringBuffer.append(TEXT_17);
              stringBuffer.append(argName);
              stringBuffer.append(TEXT_18);

            } else if (("java.util.Date").equals(typeToGenerate)) {

              stringBuffer.append(TEXT_19);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_20);
              stringBuffer.append(argIndex);
              stringBuffer.append(TEXT_21);
              stringBuffer.append(inConnectionName);
              stringBuffer.append(TEXT_22);
              stringBuffer.append(argName);
              stringBuffer.append(TEXT_23);

            } else {

              stringBuffer.append(TEXT_24);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_25);
              stringBuffer.append(method);
              stringBuffer.append(TEXT_26);
              stringBuffer.append(argIndex);
              stringBuffer.append(TEXT_27);
              stringBuffer.append(inConnectionName);
              stringBuffer.append(TEXT_28);
              stringBuffer.append(argName);
              stringBuffer.append(TEXT_29);
            }

            if (nullable) {

              stringBuffer.append(TEXT_30);
            }
          }

          // Output argument
          if (("OUT").equals(argType) || ("INOUT").equals(argType)) {

            stringBuffer.append(TEXT_31);
            stringBuffer.append(cid);
            stringBuffer.append(TEXT_32);
            stringBuffer.append(argIndex);
            stringBuffer.append(TEXT_33);
            stringBuffer.append(converter.convert(typeToGenerate));
            stringBuffer.append(TEXT_34);
          }
        }

        stringBuffer.append(TEXT_35);
        stringBuffer.append(cid);
        stringBuffer.append(TEXT_36);

        List<? extends IConnection> outConnections = node.getOutgoingConnections();
        IConnection firstOutConnection = null;

        if (outConnections != null) {
          // Search first outgoing connection, if exists
          int connectionIndex = -1;
          for (int i = 0; i < outConnections.size(); i++) {
            IConnection connection = outConnections.get(i);
            if (connection.getLineStyle().hasConnectionCategory(IConnectionCategory.DATA)) {
              firstOutConnection = connection;
              connectionIndex = i;
              break;
            }
          }

          if (firstOutConnection != null) {
            columns:
            for (IMetadataColumn column : columnList) {
              // Retrieve OUT arguments value, and copy IN arguments from input flow
              for (int i = 0; i < spArgs.size(); i++) {
                Map<String, String> spArg = spArgs.get(i);
                String argName = spArg.get("COLUMN");

                if (column.getLabel().equals(argName)) {
                  String argType = spArg.get("TYPE");
                  String typeToGenerate =
                      JavaTypesManager.getTypeToGenerate(
                          column.getTalendType(), column.isNullable());
                  boolean nullable = column.isNullable();
                  int argIndex = i + 1;

                  if (("IN").equals(argType)) {
                    // Copy parameter value from input flow

                    stringBuffer.append(TEXT_37);
                    stringBuffer.append(firstOutConnection.getName());
                    stringBuffer.append(TEXT_38);
                    stringBuffer.append(argName);
                    stringBuffer.append(TEXT_39);
                    stringBuffer.append(inConnectionName);
                    stringBuffer.append(TEXT_40);
                    stringBuffer.append(argName);
                    stringBuffer.append(TEXT_41);

                  } else if (("RECORDSET").equals(argType)) {

                    stringBuffer.append(TEXT_42);
                    stringBuffer.append(firstOutConnection.getName());
                    stringBuffer.append(TEXT_43);
                    stringBuffer.append(argName);
                    stringBuffer.append(TEXT_44);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_45);

                  } else if (("RETURN_FUNCTION").equals(argType)) {

                    stringBuffer.append(TEXT_46);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_47);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_48);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_49);

                    String method;
                    argIndex = 1;
                    if (("byte[]").equals(typeToGenerate)) {
                      method = "Bytes";
                    } else if (("java.util.Date").equals(typeToGenerate)) {
                      method = "Date";
                    } else if (("Integer").equals(typeToGenerate)) {
                      method = "Int";
                    } else {
                      method =
                          typeToGenerate.substring(0, 1).toUpperCase()
                              + typeToGenerate.substring(1);
                    }

                    if (method.equalsIgnoreCase("char") || ("Character").equals(method)) {

                      stringBuffer.append(TEXT_50);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_51);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_52);
                      stringBuffer.append(argIndex);
                      stringBuffer.append(TEXT_53);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_54);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_55);
                      stringBuffer.append(firstOutConnection.getName());
                      stringBuffer.append(TEXT_56);
                      stringBuffer.append(argName);
                      stringBuffer.append(TEXT_57);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_58);

                    } else if (("Date").equals(method)) {

                      stringBuffer.append(TEXT_59);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_60);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_61);
                      stringBuffer.append(argIndex);
                      stringBuffer.append(TEXT_62);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_63);
                      stringBuffer.append(firstOutConnection.getName());
                      stringBuffer.append(TEXT_64);
                      stringBuffer.append(argName);
                      stringBuffer.append(TEXT_65);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_66);

                    } else {

                      stringBuffer.append(TEXT_67);
                      stringBuffer.append(firstOutConnection.getName());
                      stringBuffer.append(TEXT_68);
                      stringBuffer.append(argName);
                      stringBuffer.append(TEXT_69);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_70);
                      stringBuffer.append(method);
                      stringBuffer.append(TEXT_71);
                      stringBuffer.append(argIndex);
                      stringBuffer.append(TEXT_72);
                    }

                    stringBuffer.append(TEXT_73);

                  } else {
                    // Retrieve parameter value (INOUT or OUT)
                    String method;
                    if (("byte[]").equals(typeToGenerate)) {
                      method = "Bytes";
                    } else if (("java.util.Date").equals(typeToGenerate)) {
                      method = "Date";
                    } else if (("Integer").equals(typeToGenerate)) {
                      method = "Int";
                    } else {
                      method =
                          typeToGenerate.substring(0, 1).toUpperCase()
                              + typeToGenerate.substring(1);
                    }

                    if (method.equalsIgnoreCase("char") || ("Character").equals(method)) {

                      stringBuffer.append(TEXT_74);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_75);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_76);
                      stringBuffer.append(argIndex);
                      stringBuffer.append(TEXT_77);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_78);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_79);
                      stringBuffer.append(firstOutConnection.getName());
                      stringBuffer.append(TEXT_80);
                      stringBuffer.append(argName);
                      stringBuffer.append(TEXT_81);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_82);

                    } else if (("Date").equals(method)) {

                      stringBuffer.append(TEXT_83);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_84);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_85);
                      stringBuffer.append(argIndex);
                      stringBuffer.append(TEXT_86);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_87);
                      stringBuffer.append(firstOutConnection.getName());
                      stringBuffer.append(TEXT_88);
                      stringBuffer.append(argName);
                      stringBuffer.append(TEXT_89);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_90);

                    } else {

                      stringBuffer.append(TEXT_91);
                      stringBuffer.append(firstOutConnection.getName());
                      stringBuffer.append(TEXT_92);
                      stringBuffer.append(argName);
                      stringBuffer.append(TEXT_93);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_94);
                      stringBuffer.append(method);
                      stringBuffer.append(TEXT_95);
                      stringBuffer.append(argIndex);
                      stringBuffer.append(TEXT_96);
                    }

                    if (nullable) {

                      stringBuffer.append(TEXT_97);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_98);
                      stringBuffer.append(firstOutConnection.getName());
                      stringBuffer.append(TEXT_99);
                      stringBuffer.append(argName);
                      stringBuffer.append(TEXT_100);
                    }
                  }

                  for (int j = connectionIndex + 1; j < outConnections.size(); j++) {
                    IConnection connection = outConnections.get(j);
                    if (connection.getLineStyle().hasConnectionCategory(IConnectionCategory.DATA)) {

                      stringBuffer.append(TEXT_101);
                      stringBuffer.append(connection.getName());
                      stringBuffer.append(TEXT_102);
                      stringBuffer.append(argName);
                      stringBuffer.append(TEXT_103);
                      stringBuffer.append(firstOutConnection.getName());
                      stringBuffer.append(TEXT_104);
                      stringBuffer.append(argName);
                      stringBuffer.append(TEXT_105);
                    }
                  }

                  continue columns;
                }
              }

              // Copy columns defined in input and output schema which are not arguments
              if (inMetadata != null && inMetadata.getListColumns() != null) {
                for (IMetadataColumn inColumn : inMetadata.getListColumns()) {
                  if (column.getLabel().equals(inColumn.getLabel())) {
                    for (int j = 0; j < outConnections.size(); j++) {
                      IConnection connection = outConnections.get(j);
                      if (connection
                          .getLineStyle()
                          .hasConnectionCategory(IConnectionCategory.DATA)) {

                        stringBuffer.append(TEXT_106);
                        stringBuffer.append(connection.getName());
                        stringBuffer.append(TEXT_107);
                        stringBuffer.append(column.getLabel());
                        stringBuffer.append(TEXT_108);
                        stringBuffer.append(inConnectionName);
                        stringBuffer.append(TEXT_109);
                        stringBuffer.append(column.getLabel());
                        stringBuffer.append(TEXT_110);
                      }
                    }
                  }
                }
              }
            }
          }
        }
      } else {

        stringBuffer.append(TEXT_111);
        stringBuffer.append(cid);
        stringBuffer.append(TEXT_112);
      }
    }

    stringBuffer.append(TEXT_113);
    return stringBuffer.toString();
  }
Esempio n. 4
0
  public String generate(Object argument) {
    final StringBuffer stringBuffer = new StringBuffer();
    stringBuffer.append(TEXT_1);

    CodeGeneratorArgument codeGenArgument = (CodeGeneratorArgument) argument;
    INode node = (INode) codeGenArgument.getArgument();
    String cid = node.getUniqueName();

    String dieOnError = ElementParameterParser.getValue(node, "__DIE_ON_ERROR__");
    String commitEvery = ElementParameterParser.getValue(node, "__COMMIT_EVERY__");
    String useExistingConn = ElementParameterParser.getValue(node, "__USE_EXISTING_CONNECTION__");
    String propagateRecordset = ElementParameterParser.getValue(node, "__PROPAGATE_RECORD_SET__");
    String recordsetColumn = ElementParameterParser.getValue(node, "__RECORD_SET_COLUMN__");

    boolean usePrepareStatement =
        "true".equals(ElementParameterParser.getValue(node, "__USE_PREPAREDSTATEMENT__"));
    String dbquery = ElementParameterParser.getValue(node, "__QUERY__");
    dbquery = dbquery.replaceAll("\n", " ");
    dbquery = dbquery.replaceAll("\r", " ");
    List<Map<String, String>> prepareStatementParameters =
        (List<Map<String, String>>)
            ElementParameterParser.getObjectValue(node, "__SET_PREPAREDSTATEMENT_PARAMETERS__");

    String incomingConnName = null;
    Set<String> inputCols = new HashSet<String>();

    List<IMetadataColumn> columnList = null;

    String rejectConnName = null;
    List<? extends IConnection> rejectConns = node.getOutgoingConnections("REJECT");
    if (rejectConns != null && rejectConns.size() > 0) {
      IConnection rejectConn = rejectConns.get(0);
      rejectConnName = rejectConn.getName();
    }
    List<IMetadataColumn> rejectColumnList = null;
    IMetadataTable metadataTable = node.getMetadataFromConnector("REJECT");
    if (metadataTable != null) {
      rejectColumnList = metadataTable.getListColumns();
    }

    List<? extends IConnection> outgoingConns = node.getOutgoingSortedConnections();

    boolean hasOutgoingDataConnection = false;
    for (IConnection conn : outgoingConns) {
      if (conn.getLineStyle().hasConnectionCategory(IConnectionCategory.DATA)) {
        if (!hasOutgoingDataConnection) {
          hasOutgoingDataConnection = true;
        }

        stringBuffer.append(TEXT_2);
        stringBuffer.append(conn.getName());
        stringBuffer.append(TEXT_3);
      }
    }

    stringBuffer.append(TEXT_4);
    stringBuffer.append(cid);
    stringBuffer.append(TEXT_5);
    stringBuffer.append(dbquery);
    stringBuffer.append(TEXT_6);
    stringBuffer.append(cid);
    stringBuffer.append(TEXT_7);

    List<IMetadataTable> metadatas = node.getMetadataList();
    if ((metadatas != null) && (metadatas.size() > 0)) {
      IMetadataTable metadata = metadatas.get(0);
      if (metadata != null) {
        List<? extends IConnection> inConnections = node.getIncomingConnections();
        columnList = metadata.getListColumns();
        if (inConnections != null && inConnections.size() > 0) {
          IConnection conn = inConnections.get(0);
          if (conn.getLineStyle().hasConnectionCategory(IConnectionCategory.DATA)) {
            incomingConnName = conn.getName();
            IMetadataTable inputMetadataTable = conn.getMetadataTable();
            for (IMetadataColumn inputCol : inputMetadataTable.getListColumns()) {
              inputCols.add(inputCol.getLabel());
            }
          }
        } // end of connection size.
      } // end of metadatas
    }
    if (!hasOutgoingDataConnection || columnList == null || columnList.size() < 1) {
      propagateRecordset = "false";
    }

    stringBuffer.append(TEXT_8);
    stringBuffer.append(cid);
    stringBuffer.append(TEXT_9);
    stringBuffer.append(cid);
    stringBuffer.append(TEXT_10);

    if (("true").equals(propagateRecordset)) {

      stringBuffer.append(TEXT_11);
      stringBuffer.append(cid);
      stringBuffer.append(TEXT_12);
    }

    stringBuffer.append(TEXT_13);

    if (usePrepareStatement) {

      for (Map<String, String> param : prepareStatementParameters) {

        if ("Date".equals(param.get("PARAMETER_TYPE"))) {

          stringBuffer.append(TEXT_14);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_15);
          stringBuffer.append(param.get("PARAMETER_INDEX"));
          stringBuffer.append(TEXT_16);
          stringBuffer.append(param.get("PARAMETER_VALUE"));
          stringBuffer.append(TEXT_17);

        } else {

          stringBuffer.append(TEXT_18);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_19);
          stringBuffer.append(param.get("PARAMETER_TYPE"));
          stringBuffer.append(TEXT_20);
          stringBuffer.append(param.get("PARAMETER_INDEX"));
          stringBuffer.append(TEXT_21);
          stringBuffer.append(param.get("PARAMETER_VALUE"));
          stringBuffer.append(TEXT_22);
        }
      }

      if (("true").equals(propagateRecordset)) {

        stringBuffer.append(TEXT_23);
        stringBuffer.append(cid);
        stringBuffer.append(TEXT_24);
        stringBuffer.append(cid);
        stringBuffer.append(TEXT_25);

      } else {

        stringBuffer.append(TEXT_26);
        stringBuffer.append(cid);
        stringBuffer.append(TEXT_27);
      }

    } else {
      if (("true").equals(propagateRecordset)) {

        stringBuffer.append(TEXT_28);
        stringBuffer.append(cid);
        stringBuffer.append(TEXT_29);
        stringBuffer.append(cid);
        stringBuffer.append(TEXT_30);
        stringBuffer.append(cid);
        stringBuffer.append(TEXT_31);

      } else {

        stringBuffer.append(TEXT_32);
        stringBuffer.append(cid);
        stringBuffer.append(TEXT_33);
        stringBuffer.append(cid);
        stringBuffer.append(TEXT_34);
      }
    }

    stringBuffer.append(TEXT_35);
    stringBuffer.append(cid);
    stringBuffer.append(TEXT_36);

    if (("true").equals(dieOnError)) {

      stringBuffer.append(TEXT_37);

    } else {
      if (rejectConnName != null && rejectColumnList != null && rejectColumnList.size() > 0) {

        stringBuffer.append(TEXT_38);
        stringBuffer.append(rejectConnName);
        stringBuffer.append(TEXT_39);
        stringBuffer.append(rejectConnName);
        stringBuffer.append(TEXT_40);

        if (incomingConnName != null) {
          for (IMetadataColumn column : columnList) {
            if (inputCols.contains(column.getLabel())) {

              stringBuffer.append(TEXT_41);
              stringBuffer.append(rejectConnName);
              stringBuffer.append(TEXT_42);
              stringBuffer.append(column.getLabel());
              stringBuffer.append(TEXT_43);
              stringBuffer.append(incomingConnName);
              stringBuffer.append(TEXT_44);
              stringBuffer.append(column.getLabel());
              stringBuffer.append(TEXT_45);
            }
          }
        }

        stringBuffer.append(TEXT_46);
        stringBuffer.append(rejectConnName);
        stringBuffer.append(TEXT_47);
        stringBuffer.append(TEXT_48);
        stringBuffer.append(rejectConnName);
        stringBuffer.append(TEXT_49);
        stringBuffer.append(node.getUniqueName());
        stringBuffer.append(TEXT_50);

      } else {

        stringBuffer.append(TEXT_51);
      }
    }

    stringBuffer.append(TEXT_52);

    if (outgoingConns != null && outgoingConns.size() > 0) {

      stringBuffer.append(TEXT_53);
      stringBuffer.append(cid);
      stringBuffer.append(TEXT_54);

      for (IConnection outgoingConn : outgoingConns) {
        if (rejectConnName == null
            || (rejectConnName != null && !outgoingConn.getName().equals(rejectConnName))) {
          if (outgoingConn.getLineStyle().hasConnectionCategory(IConnectionCategory.DATA)) {

            stringBuffer.append(TEXT_55);
            stringBuffer.append(outgoingConn.getName());
            stringBuffer.append(TEXT_56);
            stringBuffer.append(outgoingConn.getName());
            stringBuffer.append(TEXT_57);

            for (IMetadataColumn column : columnList) {
              if (("true").equals(propagateRecordset)
                  && column.getLabel().equals(recordsetColumn)) {

                stringBuffer.append(TEXT_58);
                stringBuffer.append(outgoingConn.getName());
                stringBuffer.append(TEXT_59);
                stringBuffer.append(column.getLabel());
                stringBuffer.append(TEXT_60);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_61);

              } else {
                if (incomingConnName != null) {
                  if (inputCols.contains(column.getLabel())) {

                    stringBuffer.append(TEXT_62);
                    stringBuffer.append(outgoingConn.getName());
                    stringBuffer.append(TEXT_63);
                    stringBuffer.append(column.getLabel());
                    stringBuffer.append(TEXT_64);
                    stringBuffer.append(incomingConnName);
                    stringBuffer.append(TEXT_65);
                    stringBuffer.append(column.getLabel());
                    stringBuffer.append(TEXT_66);
                  }
                }
              }
            }
          }
        }
      }

      stringBuffer.append(TEXT_67);
    }
    if (!("true").equals(useExistingConn)) {
      if (!("").equals(commitEvery) && !("0").equals(commitEvery)) {

        stringBuffer.append(TEXT_68);
        stringBuffer.append(cid);
        stringBuffer.append(TEXT_69);
        stringBuffer.append(cid);
        stringBuffer.append(TEXT_70);
        stringBuffer.append(cid);
        stringBuffer.append(TEXT_71);
        stringBuffer.append(cid);
        stringBuffer.append(TEXT_72);
        stringBuffer.append(cid);
        stringBuffer.append(TEXT_73);
      }
    }

    stringBuffer.append(TEXT_74);
    return stringBuffer.toString();
  }
  public String generate(Object argument) {
    final StringBuffer stringBuffer = new StringBuffer();
    stringBuffer.append(TEXT_1);
    CodeGeneratorArgument codeGenArgument = (CodeGeneratorArgument) argument;
    INode node = (INode) codeGenArgument.getArgument();
    String cid = node.getUniqueName();
    List<IMetadataTable> metadatas = node.getMetadataList();
    if ((metadatas != null) && (metadatas.size() > 0)) {
      IMetadataTable metadata = metadatas.get(0);
      List<? extends IConnection> conns = node.getIncomingConnections();
      IMetadataTable inMetadata = null;
      String connName = "";
      if (conns != null) {
        for (IConnection conn : conns) {
          if (conn.getLineStyle().hasConnectionCategory(IConnectionCategory.DATA)) {
            connName = conn.getName();
            inMetadata = conn.getMetadataTable();
            break;
          }
        }
        if (metadata != null && inMetadata != null) {
          List<IMetadataColumn> columns = inMetadata.getListColumns();
          Map<String, String> typesMap = new HashMap<String, String>();
          Map<String, String> patternsMap = new HashMap<String, String>();
          for (IMetadataColumn column : columns) {
            String type =
                JavaTypesManager.getTypeToGenerate(column.getTalendType(), column.isNullable());
            typesMap.put(column.getLabel(), type);
            String pattern =
                ((column.getPattern() == null) || (column.getPattern().trim().length() == 0))
                    ? ""
                    : column.getPattern();
            patternsMap.put(column.getLabel(), pattern);
          }
          String rowCount =
              ElementParameterParser.getValue(node, "__ROW_COUNT__"); // ?? i think we need it

          List<Map<String, String>> denormalizes =
              (List<Map<String, String>>)
                  ElementParameterParser.getObjectValue(node, "__DENORMALIZE_COLUMNS__");
          List<String> denormalizeColumns = new ArrayList<String>();
          List<String> denormalizeColumnsType = new ArrayList<String>();
          List<String> denormalizeDelimiters = new ArrayList<String>();
          List<Boolean> denormalizeMergeFlags = new ArrayList<Boolean>();
          List<IMetadataColumn> groupColumns = new ArrayList<IMetadataColumn>();
          for (Map<String, String> denormalize : denormalizes) {
            String columnName = denormalize.get("INPUT_COLUMN");
            if (denormalizeColumns.contains(columnName)) {
              continue;
            }
            denormalizeColumns.add(columnName);
            denormalizeColumnsType.add(typesMap.get(columnName));
            denormalizeDelimiters.add(denormalize.get("DELIMITER"));
            denormalizeMergeFlags.add(("true").equals(denormalize.get("MERGE")));
          }
          for (IMetadataColumn column : columns) {
            String columnName = column.getLabel();
            if (denormalizeColumns.contains(columnName)) {
              continue;
            }
            groupColumns.add(column);
          }

          stringBuffer.append(TEXT_2);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_3);

          if (groupColumns.size() > 0) {

            stringBuffer.append(TEXT_4);
            stringBuffer.append(cid);
            stringBuffer.append(TEXT_5);
          }

          stringBuffer.append(TEXT_6);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_7);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_8);

          for (IMetadataColumn column : groupColumns) {

            stringBuffer.append(TEXT_9);
            stringBuffer.append(column.getLabel());
            stringBuffer.append(TEXT_10);
            stringBuffer.append(cid);
            stringBuffer.append(TEXT_11);
            stringBuffer.append(connName);
            stringBuffer.append(TEXT_12);
            stringBuffer.append(column.getLabel());
            stringBuffer.append(TEXT_13);
          }
          for (int i = 0; i < denormalizeColumns.size(); i++) {
            String columnName = denormalizeColumns.get(i);
            String columnType = denormalizeColumnsType.get(i);
            if (denormalizeMergeFlags.get(i)) {

              stringBuffer.append(TEXT_14);
              stringBuffer.append(columnName);
              stringBuffer.append(TEXT_15);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_16);
              stringBuffer.append(connName);
              stringBuffer.append(TEXT_17);
              stringBuffer.append(columnName);
              stringBuffer.append(TEXT_18);

            } else {
              if ((("java.util.Date").equals(columnType))
                  && (patternsMap.get(columnName).length() != 0)) {

                stringBuffer.append(TEXT_19);
                stringBuffer.append(columnName);
                stringBuffer.append(TEXT_20);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_21);
                stringBuffer.append(connName);
                stringBuffer.append(TEXT_22);
                stringBuffer.append(columnName);
                stringBuffer.append(TEXT_23);
                stringBuffer.append(patternsMap.get(columnName));
                stringBuffer.append(TEXT_24);

              } else {

                stringBuffer.append(TEXT_25);
                stringBuffer.append(columnName);
                stringBuffer.append(TEXT_26);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_27);
                stringBuffer.append(connName);
                stringBuffer.append(TEXT_28);
                stringBuffer.append(columnName);
                stringBuffer.append(TEXT_29);
              }
            }
          }

          stringBuffer.append(TEXT_30);

          if (groupColumns.size() > 0) { // while loop

            stringBuffer.append(TEXT_31);
            for (int i = 0; i < groupColumns.size(); i++) {
              String columnName = groupColumns.get(i).getLabel();
              if (!JavaTypesManager.isJavaPrimitiveType(
                  groupColumns.get(i).getTalendType(), groupColumns.get(i).isNullable())) {

                stringBuffer.append(TEXT_32);
                stringBuffer.append(columnName);
                stringBuffer.append(TEXT_33);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_34);
                stringBuffer.append(connName);
                stringBuffer.append(TEXT_35);
                stringBuffer.append(columnName);
                stringBuffer.append(TEXT_36);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_37);
                stringBuffer.append(columnName);
                stringBuffer.append(TEXT_38);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_39);
                stringBuffer.append(columnName);
                stringBuffer.append(TEXT_40);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_41);
                stringBuffer.append(connName);
                stringBuffer.append(TEXT_42);
                stringBuffer.append(columnName);
                stringBuffer.append(TEXT_43);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_44);
              } else {

                stringBuffer.append(TEXT_45);
                stringBuffer.append(columnName);
                stringBuffer.append(TEXT_46);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_47);
                stringBuffer.append(connName);
                stringBuffer.append(TEXT_48);
                stringBuffer.append(columnName);
                stringBuffer.append(TEXT_49);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_50);
              }
              if (i + 1 == groupColumns.size()) {

                stringBuffer.append(TEXT_51);
              }
            }

            stringBuffer.append(TEXT_52);
            stringBuffer.append(cid);
            stringBuffer.append(TEXT_53);
          } // while loop end

          for (int i = 0; i < denormalizeColumns.size(); i++) {
            String columnName = denormalizeColumns.get(i);
            String columnType = denormalizeColumnsType.get(i);
            if (denormalizeMergeFlags.get(i)) {

              stringBuffer.append(TEXT_54);
              stringBuffer.append(columnName);
              stringBuffer.append(TEXT_55);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_56);
              stringBuffer.append(connName);
              stringBuffer.append(TEXT_57);
              stringBuffer.append(columnName);
              stringBuffer.append(TEXT_58);
              stringBuffer.append(columnName);
              stringBuffer.append(TEXT_59);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_60);
              stringBuffer.append(connName);
              stringBuffer.append(TEXT_61);
              stringBuffer.append(columnName);
              stringBuffer.append(TEXT_62);

            } else {

              stringBuffer.append(TEXT_63);
              stringBuffer.append(columnName);
              stringBuffer.append(TEXT_64);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_65);
              stringBuffer.append(denormalizeDelimiters.get(i));
              stringBuffer.append(TEXT_66);

              if ((("java.util.Date").equals(columnType))
                  && (patternsMap.get(columnName).length() != 0)) {

                stringBuffer.append(TEXT_67);
                stringBuffer.append(columnName);
                stringBuffer.append(TEXT_68);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_69);
                stringBuffer.append(connName);
                stringBuffer.append(TEXT_70);
                stringBuffer.append(columnName);
                stringBuffer.append(TEXT_71);
                stringBuffer.append(patternsMap.get(columnName));
                stringBuffer.append(TEXT_72);

              } else {

                stringBuffer.append(TEXT_73);
                stringBuffer.append(columnName);
                stringBuffer.append(TEXT_74);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_75);
                stringBuffer.append(connName);
                stringBuffer.append(TEXT_76);
                stringBuffer.append(columnName);
                stringBuffer.append(TEXT_77);
              }
            }
          }

          if (groupColumns.size() > 0) {

            stringBuffer.append(TEXT_78);
          }

          stringBuffer.append(TEXT_79);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_80);

          if (groupColumns.size() > 0) {
            // ??

            stringBuffer.append(TEXT_81);
            stringBuffer.append(cid);
            stringBuffer.append(TEXT_82);
            stringBuffer.append(cid);
            stringBuffer.append(TEXT_83);

            // do out start ...
            conns = null;
            conns = node.getOutgoingSortedConnections();
            if (conns != null) {
              if (conns.size() > 0) {
                IConnection conn = conns.get(0);
                if (conn.getLineStyle().hasConnectionCategory(IConnectionCategory.DATA)) {
                  for (IMetadataColumn column : groupColumns) {

                    stringBuffer.append(TEXT_84);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_85);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_86);
                    stringBuffer.append(column.getLabel());
                    stringBuffer.append(TEXT_87);
                    stringBuffer.append(column.getLabel());
                    stringBuffer.append(TEXT_88);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_89);
                  }

                  for (int i = 0; i < denormalizeColumns.size(); i++) {
                    String columnName = denormalizeColumns.get(i);
                    String columnType = denormalizeColumnsType.get(i);
                    if (denormalizeMergeFlags.get(i)) {

                      stringBuffer.append(TEXT_90);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_91);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_92);
                      stringBuffer.append(typesMap.get(columnName));
                      stringBuffer.append(TEXT_93);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_94);
                      stringBuffer.append(columnName);
                      stringBuffer.append(TEXT_95);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_96);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_97);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_98);
                      stringBuffer.append(denormalizeDelimiters.get(i));
                      stringBuffer.append(TEXT_99);

                      if ((("java.util.Date").equals(columnType))
                          && (patternsMap.get(columnName).length() != 0)) {

                        stringBuffer.append(TEXT_100);
                        stringBuffer.append(cid);
                        stringBuffer.append(TEXT_101);
                        stringBuffer.append(cid);
                        stringBuffer.append(TEXT_102);
                        stringBuffer.append(patternsMap.get(columnName));
                        stringBuffer.append(TEXT_103);

                      } else {

                        stringBuffer.append(TEXT_104);
                        stringBuffer.append(cid);
                        stringBuffer.append(TEXT_105);
                        stringBuffer.append(cid);
                        stringBuffer.append(TEXT_106);
                      }

                      stringBuffer.append(TEXT_107);
                      stringBuffer.append(columnName);
                      stringBuffer.append(TEXT_108);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_109);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_110);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_111);
                      stringBuffer.append(columnName);
                      stringBuffer.append(TEXT_112);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_113);

                    } else {

                      stringBuffer.append(TEXT_114);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_115);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_116);
                      stringBuffer.append(columnName);
                      stringBuffer.append(TEXT_117);
                      stringBuffer.append(columnName);
                      stringBuffer.append(TEXT_118);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_119);
                      stringBuffer.append(columnName);
                      stringBuffer.append(TEXT_120);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_121);
                      stringBuffer.append(columnName);
                      stringBuffer.append(TEXT_122);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_123);
                    }
                  }
                }
              }
            }
            // do out end ...

            // do first
            for (IMetadataColumn column : groupColumns) {

              stringBuffer.append(TEXT_124);
              stringBuffer.append(column.getLabel());
              stringBuffer.append(TEXT_125);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_126);
              stringBuffer.append(connName);
              stringBuffer.append(TEXT_127);
              stringBuffer.append(column.getLabel());
              stringBuffer.append(TEXT_128);
            }
            for (int i = 0; i < denormalizeColumns.size(); i++) {
              String columnName = denormalizeColumns.get(i);
              String columnType = denormalizeColumnsType.get(i);
              if (denormalizeMergeFlags.get(i)) {

                stringBuffer.append(TEXT_129);
                stringBuffer.append(columnName);
                stringBuffer.append(TEXT_130);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_131);
                stringBuffer.append(connName);
                stringBuffer.append(TEXT_132);
                stringBuffer.append(columnName);
                stringBuffer.append(TEXT_133);

              } else {
                if ((("java.util.Date").equals(columnType))
                    && (patternsMap.get(columnName).length() != 0)) {

                  stringBuffer.append(TEXT_134);
                  stringBuffer.append(columnName);
                  stringBuffer.append(TEXT_135);
                  stringBuffer.append(cid);
                  stringBuffer.append(TEXT_136);
                  stringBuffer.append(connName);
                  stringBuffer.append(TEXT_137);
                  stringBuffer.append(columnName);
                  stringBuffer.append(TEXT_138);
                  stringBuffer.append(patternsMap.get(columnName));
                  stringBuffer.append(TEXT_139);

                } else {

                  stringBuffer.append(TEXT_140);
                  stringBuffer.append(columnName);
                  stringBuffer.append(TEXT_141);
                  stringBuffer.append(cid);
                  stringBuffer.append(TEXT_142);
                  stringBuffer.append(connName);
                  stringBuffer.append(TEXT_143);
                  stringBuffer.append(columnName);
                  stringBuffer.append(TEXT_144);
                }
              }
            }

            stringBuffer.append(TEXT_145);
          }
          /////////////////////////////////////////////////

          stringBuffer.append(TEXT_146);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_147);
          stringBuffer.append(rowCount);
          stringBuffer.append(TEXT_148);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_149);

          // do out start ...
          conns = null;
          conns = node.getOutgoingSortedConnections();
          if (conns != null) {
            if (conns.size() > 0) {
              IConnection conn = conns.get(0);
              if (conn.getLineStyle().hasConnectionCategory(IConnectionCategory.DATA)) {
                for (IMetadataColumn column : groupColumns) {

                  stringBuffer.append(TEXT_150);
                  stringBuffer.append(cid);
                  stringBuffer.append(TEXT_151);
                  stringBuffer.append(cid);
                  stringBuffer.append(TEXT_152);
                  stringBuffer.append(column.getLabel());
                  stringBuffer.append(TEXT_153);
                  stringBuffer.append(column.getLabel());
                  stringBuffer.append(TEXT_154);
                  stringBuffer.append(cid);
                  stringBuffer.append(TEXT_155);
                }

                for (int i = 0; i < denormalizeColumns.size(); i++) {
                  String columnName = denormalizeColumns.get(i);
                  String columnType = denormalizeColumnsType.get(i);
                  if (denormalizeMergeFlags.get(i)) {

                    stringBuffer.append(TEXT_156);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_157);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_158);
                    stringBuffer.append(typesMap.get(columnName));
                    stringBuffer.append(TEXT_159);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_160);
                    stringBuffer.append(columnName);
                    stringBuffer.append(TEXT_161);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_162);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_163);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_164);
                    stringBuffer.append(denormalizeDelimiters.get(i));
                    stringBuffer.append(TEXT_165);

                    if ((("java.util.Date").equals(columnType))
                        && (patternsMap.get(columnName).length() != 0)) {

                      stringBuffer.append(TEXT_166);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_167);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_168);
                      stringBuffer.append(patternsMap.get(columnName));
                      stringBuffer.append(TEXT_169);

                    } else {

                      stringBuffer.append(TEXT_170);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_171);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_172);
                    }

                    stringBuffer.append(TEXT_173);
                    stringBuffer.append(columnName);
                    stringBuffer.append(TEXT_174);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_175);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_176);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_177);
                    stringBuffer.append(columnName);
                    stringBuffer.append(TEXT_178);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_179);

                  } else {

                    stringBuffer.append(TEXT_180);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_181);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_182);
                    stringBuffer.append(columnName);
                    stringBuffer.append(TEXT_183);
                    stringBuffer.append(columnName);
                    stringBuffer.append(TEXT_184);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_185);
                    stringBuffer.append(columnName);
                    stringBuffer.append(TEXT_186);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_187);
                    stringBuffer.append(columnName);
                    stringBuffer.append(TEXT_188);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_189);
                  }
                }
              }
            }
          }
          // do out end ...

          stringBuffer.append(TEXT_190);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_191);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_192);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_193);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_194);

          conns = null;
          conns = node.getOutgoingSortedConnections();
          if (conns != null) {
            for (int i = 0; i < conns.size(); i++) {
              IConnection conn = conns.get(i);
              if (conn.getLineStyle().hasConnectionCategory(IConnectionCategory.DATA)) {
                for (IMetadataColumn column : metadata.getListColumns()) {

                  stringBuffer.append(conn.getName());
                  stringBuffer.append(TEXT_195);
                  stringBuffer.append(column.getLabel());
                  stringBuffer.append(TEXT_196);
                  stringBuffer.append(cid);
                  stringBuffer.append(TEXT_197);
                  stringBuffer.append(cid);
                  stringBuffer.append(TEXT_198);
                  stringBuffer.append(column.getLabel());
                  stringBuffer.append(TEXT_199);
                }
              }
            }
          }

          stringBuffer.append(TEXT_200);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_201);
        }
      }
    }

    stringBuffer.append(TEXT_202);
    return stringBuffer.toString();
  }
  public String generate(Object argument) {
    final StringBuffer stringBuffer = new StringBuffer();

    CodeGeneratorArgument codeGenArgument = (CodeGeneratorArgument) argument;
    INode node = (INode) codeGenArgument.getArgument();
    String cid = node.getUniqueName();

    boolean isStaging =
        "STAGING".equalsIgnoreCase(ElementParameterParser.getValue(node, "__CONTAINER_TYPE__"));

    String destination = ElementParameterParser.getValue(node, "__DESTINATION__");
    boolean withReport = ("true").equals(ElementParameterParser.getValue(node, "__WITHREPORT__"));
    String needCheck = ElementParameterParser.getValue(node, "__ISINVOKE__");
    boolean isMassInsert =
        ("true").equals(ElementParameterParser.getValue(node, "__EXTENDINSERT__"));
    String numMassInsert = ElementParameterParser.getValue(node, "__COMMIT_LEVEL__");
    String sourceName = ElementParameterParser.getValue(node, "__SOURCE__");
    boolean dieOnError = ("true").equals(ElementParameterParser.getValue(node, "__DIE_ON_ERROR__"));
    String isUpdate = ElementParameterParser.getValue(node, "__ISUPDATE__");
    List<Map<String, String>> keysReturn =
        (List<Map<String, String>>) ElementParameterParser.getObjectValue(node, "__RETURN_IDS__");

    boolean addTaskID = ("true").equals(ElementParameterParser.getValue(node, "__ADD_TASKID__"));
    boolean isCustom = "true".equals(ElementParameterParser.getValue(node, "__CUSTOM__"));
    String taskID = ElementParameterParser.getValue(node, "__TASKID__");
    String prevColumn = ElementParameterParser.getValue(node, "__PREV_COLUMN_TASK_ID__");

    boolean usePartialUpdate =
        ("true").equals(ElementParameterParser.getValue(node, "__USE_PARTIAL_UPDATE__"));
    boolean usePartialDelete =
        ("true").equals(ElementParameterParser.getValue(node, "__PARTIAL_DELETE__"));
    String pivot = ElementParameterParser.getValue(node, "__PIVOT__");
    boolean overwrite = ("true").equals(ElementParameterParser.getValue(node, "__OVERWRITE__"));
    String key = ElementParameterParser.getValue(node, "__KEY__");
    String position = ElementParameterParser.getValue(node, "__POSITION__");
    String dataModel = ElementParameterParser.getValue(node, "__DATAMODEL__");
    String dataCluster = ElementParameterParser.getValue(node, "__DATACLUSTER__");

    String doc = ElementParameterParser.getValue(node, "__DOCUMENT__");

    List<IMetadataTable> metadatas = node.getMetadataList();

    if (destination != null && !"".equals(destination)) {
      cid = destination;
    }

    if (metadatas != null && metadatas.size() > 0) {
      IMetadataTable metadata = metadatas.get(0);
      if (metadata != null) {

        List<? extends IConnection> outputConns =
            node.getOutgoingConnections(EConnectionType.FLOW_MAIN);
        List<IMetadataColumn> inputColumnList = null;
        List<IMetadataColumn> outputColumnList = null;
        List<IMetadataColumn> columnList = metadata.getListColumns();

        String rejectConnName = null;
        List<? extends IConnection> rejectConns = node.getOutgoingConnections("REJECT");
        List<IMetadataColumn> rejectColumnList = null;
        if (rejectConns != null && rejectConns.size() > 0) {
          IConnection rejectConn = rejectConns.get(0);
          if (rejectConn != null) {
            rejectConnName = rejectConn.getName();
            IMetadataTable metadataTable = rejectConn.getMetadataTable();
            if (metadataTable != null) {
              rejectColumnList = metadataTable.getListColumns();
            }
          }
        }

        String outConnName = null;
        String inputConnName = null;
        List<? extends IConnection> outgoingConns = node.getOutgoingSortedConnections();

        for (IConnection tmpconn : outgoingConns) {
          if (tmpconn.getLineStyle().hasConnectionCategory(IConnectionCategory.DATA)) {
            if (rejectConnName == null || !rejectConnName.equals(tmpconn.getName())) {
              outConnName = tmpconn.getName();
              IMetadataTable outputMetadata = tmpconn.getMetadataTable();
              if (outputMetadata != null) {
                outputColumnList = outputMetadata.getListColumns();
              }
            }
            stringBuffer.append(TEXT_1);
            stringBuffer.append(tmpconn.getName());
            stringBuffer.append(TEXT_2);
          }
        }

        List<? extends IConnection> inputConns = node.getIncomingConnections();
        if (inputConns != null && inputConns.size() > 0) {
          IConnection inputConn = inputConns.get(0);
          if (inputConn != null) {
            inputConnName = inputConn.getName();
            IMetadataTable inputMetadata = inputConn.getMetadataTable();
            if (inputMetadata != null) {
              inputColumnList = inputMetadata.getListColumns();
            }
          }
        }

        if (outConnName != null && inputConnName != null) {

          stringBuffer.append(TEXT_3);
          stringBuffer.append(outConnName);
          stringBuffer.append(TEXT_4);
          stringBuffer.append(outConnName);
          stringBuffer.append(TEXT_5);

          for (IMetadataColumn outputColumn : outputColumnList) {
            for (IMetadataColumn inputColumn : inputColumnList) {
              if (outputColumn.getLabel().equals(inputColumn.getLabel())) {
                if (doc != null && doc.equals(outputColumn.getLabel())) {
                  if ("id_Document".equals(outputColumn.getTalendType())) {

                    stringBuffer.append(TEXT_6);
                    stringBuffer.append(outConnName);
                    stringBuffer.append(TEXT_7);
                    stringBuffer.append(doc);
                    stringBuffer.append(TEXT_8);
                    stringBuffer.append(inputConnName);
                    stringBuffer.append(TEXT_9);
                    stringBuffer.append(doc);
                    stringBuffer.append(TEXT_10);

                  } else {

                    stringBuffer.append(TEXT_11);
                    stringBuffer.append(outConnName);
                    stringBuffer.append(TEXT_12);
                    stringBuffer.append(doc);
                    stringBuffer.append(TEXT_13);
                    stringBuffer.append(inputConnName);
                    stringBuffer.append(TEXT_14);
                    stringBuffer.append(doc);
                    stringBuffer.append(TEXT_15);
                  }
                } else { // to those which do not match doc columns

                  stringBuffer.append(TEXT_16);
                  stringBuffer.append(outConnName);
                  stringBuffer.append(TEXT_17);
                  stringBuffer.append(outputColumn.getLabel());
                  stringBuffer.append(TEXT_18);
                  stringBuffer.append(inputConnName);
                  stringBuffer.append(TEXT_19);
                  stringBuffer.append(inputColumn.getLabel());
                  stringBuffer.append(TEXT_20);
                }
              } // if input column matches output column
            } // for input column
          } // for output column
        }
        stringBuffer.append(TEXT_21);
        stringBuffer.append(cid);
        stringBuffer.append(TEXT_22);
        stringBuffer.append(inputConnName);
        stringBuffer.append(TEXT_23);
        stringBuffer.append(doc);
        stringBuffer.append(TEXT_24);
        if (usePartialUpdate) { // partial

          String dataclusterString = "";
          if (isStaging) {
            dataclusterString = dataCluster + " + \"#STAGING\"";
          } else {
            dataclusterString = dataCluster;
          }

          stringBuffer.append(TEXT_25);
          stringBuffer.append(usePartialDelete);
          stringBuffer.append(TEXT_26);
          stringBuffer.append(position.equals("") ? null : position);
          stringBuffer.append(TEXT_27);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_28);
          stringBuffer.append(dataclusterString);
          stringBuffer.append(TEXT_29);
          stringBuffer.append(dataModel);
          stringBuffer.append(TEXT_30);
          stringBuffer.append(usePartialDelete);
          stringBuffer.append(TEXT_31);
          stringBuffer.append(key.equals("") ? null : key);
          stringBuffer.append(TEXT_32);
          stringBuffer.append(overwrite);
          stringBuffer.append(TEXT_33);
          stringBuffer.append(pivot);
          stringBuffer.append(TEXT_34);
          stringBuffer.append(true == isStaging ? false : withReport);
          stringBuffer.append(TEXT_35);
          stringBuffer.append(sourceName);
          stringBuffer.append(TEXT_36);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_37);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_38);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_39);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_40);

          if (outConnName != null && !isMassInsert && keysReturn.size() > 0) {
            for (int i = 0; i < keysReturn.size(); i++) {
              Map<String, String> map = keysReturn.get(i);

              stringBuffer.append(TEXT_41);
              stringBuffer.append(outConnName);
              stringBuffer.append(TEXT_42);
              stringBuffer.append(map.get("OUTPUT_COLUMN"));
              stringBuffer.append(TEXT_43);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_44);
              stringBuffer.append(i);
              stringBuffer.append(TEXT_45);
            }
          }

          stringBuffer.append(TEXT_46);
        } else { // not partial
          stringBuffer.append(TEXT_47);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_48);
          stringBuffer.append(isUpdate);
          stringBuffer.append(TEXT_49);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_50);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_51);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_52);

          if (!isStaging && withReport) {
            stringBuffer.append(TEXT_53);
            stringBuffer.append(cid);
            stringBuffer.append(TEXT_54);
            stringBuffer.append(needCheck);
            stringBuffer.append(TEXT_55);
            stringBuffer.append(sourceName);
            stringBuffer.append(TEXT_56);
            stringBuffer.append(cid);
            stringBuffer.append(TEXT_57);
            if (isMassInsert) {
              stringBuffer.append(TEXT_58);
              if (addTaskID) {
                stringBuffer.append(TEXT_59);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_60);
                stringBuffer.append(isCustom ? taskID : inputConnName + "." + prevColumn);
                stringBuffer.append(TEXT_61);
              }
              stringBuffer.append(TEXT_62);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_63);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_64);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_65);
              stringBuffer.append(numMassInsert);
              stringBuffer.append(TEXT_66);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_67);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_68);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_69);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_70);
              if (addTaskID) {
                stringBuffer.append(TEXT_71);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_72);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_73);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_74);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_75);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_76);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_77);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_78);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_79);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_80);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_81);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_82);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_83);
              }
              stringBuffer.append(TEXT_84);
            } else {
              stringBuffer.append(TEXT_85);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_86);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_87);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_88);
              if (addTaskID) {
                stringBuffer.append(TEXT_89);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_90);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_91);
                stringBuffer.append(isCustom ? taskID : inputConnName + "." + prevColumn);
                stringBuffer.append(TEXT_92);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_93);
              }
              stringBuffer.append(TEXT_94);
            }

            if (outConnName != null && !isMassInsert && keysReturn.size() > 0) {

              for (int i = 0; i < keysReturn.size(); i++) {
                Map<String, String> map = keysReturn.get(i);

                stringBuffer.append(TEXT_95);
                stringBuffer.append(outConnName);
                stringBuffer.append(TEXT_96);
                stringBuffer.append(map.get("OUTPUT_COLUMN"));
                stringBuffer.append(TEXT_97);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_98);
                stringBuffer.append(i);
                stringBuffer.append(TEXT_99);
              }
            }
          } else {

            if (isMassInsert) {

              stringBuffer.append(TEXT_100);
              if (addTaskID) {
                stringBuffer.append(TEXT_101);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_102);
                stringBuffer.append(isCustom ? taskID : inputConnName + "." + prevColumn);
                stringBuffer.append(TEXT_103);
              }
              stringBuffer.append(TEXT_104);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_105);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_106);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_107);
              stringBuffer.append(numMassInsert);
              stringBuffer.append(TEXT_108);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_109);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_110);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_111);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_112);
              if (addTaskID) {
                stringBuffer.append(TEXT_113);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_114);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_115);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_116);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_117);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_118);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_119);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_120);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_121);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_122);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_123);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_124);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_125);
              }
              stringBuffer.append(TEXT_126);

            } else {
              stringBuffer.append(TEXT_127);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_128);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_129);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_130);
              if (addTaskID) {
                stringBuffer.append(TEXT_131);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_132);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_133);
                stringBuffer.append(isCustom ? taskID : inputConnName + "." + prevColumn);
                stringBuffer.append(TEXT_134);
                stringBuffer.append(cid);
                stringBuffer.append(TEXT_135);
              }
              stringBuffer.append(TEXT_136);

              if (outConnName != null && !isMassInsert && keysReturn.size() > 0) {
                for (int i = 0; i < keysReturn.size(); i++) {
                  Map<String, String> map = keysReturn.get(i);

                  stringBuffer.append(TEXT_137);
                  stringBuffer.append(outConnName);
                  stringBuffer.append(TEXT_138);
                  stringBuffer.append(map.get("OUTPUT_COLUMN"));
                  stringBuffer.append(TEXT_139);
                  stringBuffer.append(cid);
                  stringBuffer.append(TEXT_140);
                  stringBuffer.append(i);
                  stringBuffer.append(TEXT_141);
                }
              }
            }
          }

          stringBuffer.append(TEXT_142);
        } // end partial
        stringBuffer.append(TEXT_143);
        if (dieOnError) {
          stringBuffer.append(TEXT_144);
        } else {

          if (rejectConnName != null) {
            if (outConnName != null) {
              stringBuffer.append(TEXT_145);
              stringBuffer.append(outConnName);
              stringBuffer.append(TEXT_146);
            }
            stringBuffer.append(TEXT_147);
            stringBuffer.append(rejectConnName);
            stringBuffer.append(TEXT_148);
            stringBuffer.append(rejectConnName);
            stringBuffer.append(TEXT_149);

            for (IMetadataColumn column : columnList) {
              if (!"xml".equals(column.getLabel())
                  && !"errorCode".equals(column.getLabel())
                  && !"errorMessage".equals(column.getLabel())) {
                if (column.getLabel().equals(doc) && "id_String".equals(column.getTalendType())) {

                  stringBuffer.append(TEXT_150);
                  stringBuffer.append(rejectConnName);
                  stringBuffer.append(TEXT_151);
                  stringBuffer.append(column.getLabel());
                  stringBuffer.append(TEXT_152);
                  stringBuffer.append(inputConnName);
                  stringBuffer.append(TEXT_153);
                  stringBuffer.append(column.getLabel());
                  stringBuffer.append(TEXT_154);

                } else {

                  stringBuffer.append(TEXT_155);
                  stringBuffer.append(rejectConnName);
                  stringBuffer.append(TEXT_156);
                  stringBuffer.append(column.getLabel());
                  stringBuffer.append(TEXT_157);
                  stringBuffer.append(inputConnName);
                  stringBuffer.append(TEXT_158);
                  stringBuffer.append(column.getLabel());
                  stringBuffer.append(TEXT_159);
                }
              }
              if ("xml".equals(column.getLabel())) {
                if ("id_String".equals(column.getTalendType())) {

                  stringBuffer.append(TEXT_160);
                  stringBuffer.append(rejectConnName);
                  stringBuffer.append(TEXT_161);
                  stringBuffer.append(cid);
                  stringBuffer.append(TEXT_162);

                } else {

                  stringBuffer.append(TEXT_163);
                  stringBuffer.append(rejectConnName);
                  stringBuffer.append(TEXT_164);
                  stringBuffer.append(inputConnName);
                  stringBuffer.append(TEXT_165);
                }
              }
            }

            stringBuffer.append(TEXT_166);
            stringBuffer.append(cid);
            stringBuffer.append(TEXT_167);
            stringBuffer.append(TEXT_168);
            stringBuffer.append(rejectConnName);
            stringBuffer.append(TEXT_169);
            stringBuffer.append(node.getUniqueName());
            stringBuffer.append(TEXT_170);
          } else {
            stringBuffer.append(TEXT_171);
          }
        }
        stringBuffer.append(TEXT_172);
        stringBuffer.append(cid);
        stringBuffer.append(TEXT_173);
      }
    }
    stringBuffer.append(TEXT_174);
    return stringBuffer.toString();
  }
  public String generate(Object argument) {
    final StringBuffer stringBuffer = new StringBuffer();

    CodeGeneratorArgument codeGenArgument = (CodeGeneratorArgument) argument;
    INode node = (INode) codeGenArgument.getArgument();
    String cid = node.getUniqueName();
    String incomingName = (String) codeGenArgument.getIncomingName();
    String customSetOriginalLengthStr = ElementParameterParser.getValue(node, "__NO_X2CJ_FILE__");
    String encoding = ElementParameterParser.getValue(node, "__ENCODING__");
    boolean customSetOriginalLength =
        (customSetOriginalLengthStr != null && !("").equals(customSetOriginalLengthStr))
            ? ("true").equals(customSetOriginalLengthStr)
            : true;
    if (!customSetOriginalLength) { // ------11111
      List<? extends IConnection> conns = node.getIncomingConnections();
      List<IMetadataTable> preMetadatas = null;

      for (int i = 0; i < conns.size(); i++) {
        IConnection conn = conns.get(i);
        if (conn.getLineStyle().hasConnectionCategory(IConnectionCategory.DATA)) {
          if (conn.getName() == incomingName) {
            preMetadatas = conn.getSource().getMetadataList();

            stringBuffer.append(TEXT_1);
            stringBuffer.append(cid);
            stringBuffer.append(TEXT_2);

            for (IMetadataColumn column : preMetadatas.get(0).getListColumns()) {

              stringBuffer.append(TEXT_3);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_4);
              stringBuffer.append(conn.getName());
              stringBuffer.append(TEXT_5);
              stringBuffer.append(column.getLabel());
              stringBuffer.append(TEXT_6);
            }

            stringBuffer.append(TEXT_7);
            stringBuffer.append(cid);
            stringBuffer.append(TEXT_8);
            stringBuffer.append(cid);
            stringBuffer.append(TEXT_9);
            stringBuffer.append(cid);
            stringBuffer.append(TEXT_10);
          }
        }
      }
    } else { // ------1111
      List<IMetadataTable> metadatas = node.getMetadataList();
      if ((metadatas != null) && (metadatas.size() > 0)) { // ------2222
        List<? extends IConnection> conns = node.getIncomingConnections();
        for (IConnection conn : conns) { // ------3333
          if (conn.getLineStyle().hasConnectionCategory(IConnectionCategory.DATA)) { // ------4444
            if (conn.getName() == incomingName) { // ------5555
              IMetadataTable metadata = metadatas.get(0);
              List<IMetadataColumn> columns = metadata.getListColumns();
              List<IMetadataColumn> extColumns = new java.util.ArrayList<IMetadataColumn>();
              for (IMetadataColumn tempColumn : columns) {
                extColumns.add(tempColumn);
              }
              List<IMetadataColumn> inColumns = conn.getMetadataTable().getListColumns();
              for (IMetadataColumn inColumn : inColumns) { // ------6666
                IMetadataColumn column = null;
                for (int j = 0;
                    j < extColumns.size();
                    j++) { // search the corresponding metadata column for the input column
                  if (inColumn.getLabel().equals(extColumns.get(j).getLabel())) {
                    column = extColumns.remove(j);
                    break;
                  }
                }
                // if not find, then the first one of the metadata columns is used to correspond the
                // input column
                if (column == null && !extColumns.isEmpty()) {
                  column = extColumns.remove(0);
                }
                if (column != null) { // ------77777
                  Integer orgainLength = column.getOriginalLength();
                  Integer length = column.getLength();
                  String orgainType = column.getType();
                  Integer precision = column.getPrecision();
                  if (precision == null) precision = 0;
                  if (orgainLength == null
                      || orgainLength.intValue() == 0
                      || orgainType == null
                      || "".endsWith(orgainType.trim())) {

                    stringBuffer.append(TEXT_11);
                    stringBuffer.append(column.getLabel());
                    stringBuffer.append(TEXT_12);

                    continue;
                  }

                  stringBuffer.append(TEXT_13);
                  stringBuffer.append(column.getLabel());
                  stringBuffer.append(TEXT_14);
                  stringBuffer.append(cid);
                  stringBuffer.append(TEXT_15);
                  stringBuffer.append(orgainLength);
                  stringBuffer.append(TEXT_16);

                  if (orgainType.equals("X")) {

                    stringBuffer.append(TEXT_17);
                    stringBuffer.append(length);
                    stringBuffer.append(TEXT_18);
                    stringBuffer.append(conn.getName());
                    stringBuffer.append(TEXT_19);
                    stringBuffer.append(inColumn.getLabel());
                    stringBuffer.append(TEXT_20);
                    stringBuffer.append(length);
                    stringBuffer.append(TEXT_21);
                    stringBuffer.append(conn.getName());
                    stringBuffer.append(TEXT_22);
                    stringBuffer.append(inColumn.getLabel());
                    stringBuffer.append(TEXT_23);
                    stringBuffer.append(conn.getName());
                    stringBuffer.append(TEXT_24);
                    stringBuffer.append(inColumn.getLabel());
                    stringBuffer.append(TEXT_25);
                    stringBuffer.append(conn.getName());
                    stringBuffer.append(TEXT_26);
                    stringBuffer.append(inColumn.getLabel());
                    stringBuffer.append(TEXT_27);
                    stringBuffer.append(column.getLabel());
                    stringBuffer.append(TEXT_28);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_29);
                    stringBuffer.append(conn.getName());
                    stringBuffer.append(TEXT_30);
                    stringBuffer.append(inColumn.getLabel());
                    stringBuffer.append(TEXT_31);
                    stringBuffer.append(encoding);
                    stringBuffer.append(TEXT_32);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_33);
                    stringBuffer.append(column.getLabel());
                    stringBuffer.append(TEXT_34);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_35);

                  } else if (orgainType.equals("3") || orgainType.equals("9")) {
                    String isImpliedDecimalStr = column.getAdditionalField().get("ImpliedDecimal");
                    boolean isImpliedDecimal =
                        (isImpliedDecimalStr != null && !("").equals(isImpliedDecimalStr))
                            ? ("true").equals(isImpliedDecimalStr)
                            : true;
                    String isSignedStr = column.getAdditionalField().get("Signed");
                    boolean isSigned =
                        (isSignedStr != null && !("").equals(isSignedStr))
                            ? ("true").equals(isSignedStr)
                            : true;
                    if (orgainType.equals("3")) {

                      stringBuffer.append(TEXT_36);
                      stringBuffer.append(column.getLabel());
                      stringBuffer.append(TEXT_37);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_38);
                      stringBuffer.append(conn.getName());
                      stringBuffer.append(TEXT_39);
                      stringBuffer.append(inColumn.getLabel());
                      stringBuffer.append(TEXT_40);
                      stringBuffer.append(column.getLabel());
                      stringBuffer.append(TEXT_41);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_42);
                      stringBuffer.append(orgainLength);
                      stringBuffer.append(TEXT_43);
                      stringBuffer.append(precision);
                      stringBuffer.append(TEXT_44);
                      stringBuffer.append(column.getLabel());
                      stringBuffer.append(TEXT_45);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_46);
                      stringBuffer.append(isSigned);
                      stringBuffer.append(TEXT_47);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_48);
                      stringBuffer.append(column.getLabel());
                      stringBuffer.append(TEXT_49);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_50);

                    } else {

                      stringBuffer.append(TEXT_51);
                      stringBuffer.append(column.getLabel());
                      stringBuffer.append(TEXT_52);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_53);
                      stringBuffer.append(conn.getName());
                      stringBuffer.append(TEXT_54);
                      stringBuffer.append(inColumn.getLabel());
                      stringBuffer.append(TEXT_55);
                      stringBuffer.append(column.getLabel());
                      stringBuffer.append(TEXT_56);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_57);
                      stringBuffer.append(length);
                      stringBuffer.append(TEXT_58);
                      stringBuffer.append(precision);
                      stringBuffer.append(TEXT_59);
                      stringBuffer.append(column.getLabel());
                      stringBuffer.append(TEXT_60);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_61);
                      stringBuffer.append(isSigned);
                      stringBuffer.append(TEXT_62);
                      stringBuffer.append(isImpliedDecimal);
                      stringBuffer.append(TEXT_63);
                      stringBuffer.append(encoding);
                      stringBuffer.append(TEXT_64);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_65);
                      stringBuffer.append(column.getLabel());
                      stringBuffer.append(TEXT_66);
                      stringBuffer.append(cid);
                      stringBuffer.append(TEXT_67);
                    }
                  } else if (orgainType.equals("B")) {
                    String isSignedStr = column.getAdditionalField().get("Signed");

                    stringBuffer.append(TEXT_68);
                    stringBuffer.append(column.getLabel());
                    stringBuffer.append(TEXT_69);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_70);
                    stringBuffer.append(conn.getName());
                    stringBuffer.append(TEXT_71);
                    stringBuffer.append(inColumn.getLabel());
                    stringBuffer.append(TEXT_72);
                    stringBuffer.append(column.getLabel());
                    stringBuffer.append(TEXT_73);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_74);
                    stringBuffer.append(orgainLength);
                    stringBuffer.append(TEXT_75);
                    stringBuffer.append(column.getLabel());
                    stringBuffer.append(TEXT_76);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_77);
                    stringBuffer.append(column.getLabel());
                    stringBuffer.append(TEXT_78);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_79);
                    stringBuffer.append(column.getLabel());
                    stringBuffer.append(TEXT_80);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_81);
                    stringBuffer.append(column.getLabel());
                    stringBuffer.append(TEXT_82);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_83);
                    stringBuffer.append(column.getLabel());
                    stringBuffer.append(TEXT_84);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_85);
                    stringBuffer.append(column.getLabel());
                    stringBuffer.append(TEXT_86);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_87);
                    stringBuffer.append(column.getLabel());
                    stringBuffer.append(TEXT_88);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_89);
                    stringBuffer.append(column.getLabel());
                    stringBuffer.append(TEXT_90);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_91);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_92);
                    stringBuffer.append(column.getLabel());
                    stringBuffer.append(TEXT_93);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_94);

                  } else if (orgainType.equals("T")) {

                    stringBuffer.append(TEXT_95);
                    stringBuffer.append(column.getLabel());
                    stringBuffer.append(TEXT_96);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_97);
                    stringBuffer.append(conn.getName());
                    stringBuffer.append(TEXT_98);
                    stringBuffer.append(inColumn.getLabel());
                    stringBuffer.append(TEXT_99);
                    stringBuffer.append(column.getLabel());
                    stringBuffer.append(TEXT_100);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_101);
                    stringBuffer.append(column.getLabel());
                    stringBuffer.append(TEXT_102);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_103);
                    stringBuffer.append(column.getLabel());
                    stringBuffer.append(TEXT_104);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_105);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_106);
                    stringBuffer.append(column.getLabel());
                    stringBuffer.append(TEXT_107);
                    stringBuffer.append(cid);
                    stringBuffer.append(TEXT_108);

                  } else {

                    stringBuffer.append(TEXT_109);
                    stringBuffer.append(column.getLabel());
                    stringBuffer.append(TEXT_110);
                  }

                  stringBuffer.append(TEXT_111);
                  stringBuffer.append(cid);
                  stringBuffer.append(TEXT_112);
                } // -----77777
              } // ------66666
            } // ------5555
          } // ------4444
        } // ------3333
      } // ------2222
    } // ------1111

    stringBuffer.append(TEXT_113);
    return stringBuffer.toString();
  }
Esempio n. 8
0
  public String generate(Object argument) {
    final StringBuffer stringBuffer = new StringBuffer();
    stringBuffer.append(TEXT_1);

    CodeGeneratorArgument codeGenArgument = (CodeGeneratorArgument) argument;
    INode node = (INode) codeGenArgument.getArgument();
    String cid = node.getUniqueName();

    String endpoint = ElementParameterParser.getValue(node, "__ENDPOINT__");
    String action = ElementParameterParser.getValue(node, "__ACTION__");
    String soapMessageStr = ElementParameterParser.getValue(node, "__SOAPMESSAGE__");
    soapMessageStr = soapMessageStr.replaceAll("[\r\n]", " ");

    String soapVersion = ElementParameterParser.getValue(node, "__SOAP_VERSION__");

    boolean useKerberos =
        ("true").equals(ElementParameterParser.getValue(node, "__USE_KERBEROS__"));
    String kerberosConfiguration =
        ElementParameterParser.getValue(node, "__KERBEROS_CONFIGURATION__");
    boolean useMessageFromSchema =
        "true".equals(ElementParameterParser.getValue(node, "__USE_MESSAGE_FROM_SCHEMA__"));
    boolean outputDocument =
        "true".equals(ElementParameterParser.getValue(node, "__OUTPUT_DOCUMENT__"));
    String soapMessageColumn = ElementParameterParser.getValue(node, "__SOAPMESSAGE_FROM_SCHEMA__");
    String connName = null;
    boolean schemaEmpty = false;
    if (node.getIncomingConnections().size() > 0) {
      IConnection conn = node.getIncomingConnections().get(0);
      if (conn.getLineStyle().hasConnectionCategory(IConnectionCategory.DATA)) {
        connName = conn.getName();
        schemaEmpty = conn.getMetadataTable().getListColumns().size() == 0;
      }
    }
    if (useMessageFromSchema && (connName == null || schemaEmpty)) {

      stringBuffer.append(TEXT_2);

    } else {
      if (useKerberos) {

        stringBuffer.append(TEXT_3);

        if (useMessageFromSchema) {

          stringBuffer.append(TEXT_4);
          stringBuffer.append(connName);
          stringBuffer.append(TEXT_5);
          stringBuffer.append(connName);
          stringBuffer.append(TEXT_6);
          stringBuffer.append(connName);
          stringBuffer.append(TEXT_7);
          stringBuffer.append(connName);
          stringBuffer.append(TEXT_8);

        } else {

          stringBuffer.append(TEXT_9);
        }
        if (outputDocument) {

          stringBuffer.append(TEXT_10);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_11);
          stringBuffer.append(soapVersion.toUpperCase());
          stringBuffer.append(TEXT_12);
          stringBuffer.append(endpoint);
          stringBuffer.append(TEXT_13);
          stringBuffer.append(action);
          stringBuffer.append(TEXT_14);
          stringBuffer.append(
              useMessageFromSchema
                  ? connName + "." + soapMessageColumn + ".toString()"
                  : soapMessageStr);
          stringBuffer.append(TEXT_15);

        } else {

          stringBuffer.append(TEXT_16);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_17);
          stringBuffer.append(soapVersion.toUpperCase());
          stringBuffer.append(TEXT_18);
          stringBuffer.append(endpoint);
          stringBuffer.append(TEXT_19);
          stringBuffer.append(action);
          stringBuffer.append(TEXT_20);
          stringBuffer.append(
              useMessageFromSchema
                  ? connName + "." + soapMessageColumn + ".toString()"
                  : soapMessageStr);
          stringBuffer.append(TEXT_21);
        }

        stringBuffer.append(TEXT_22);
        if ("Soap12".equals(soapVersion)) {
          stringBuffer.append(TEXT_23);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_24);
        } else {
          stringBuffer.append(TEXT_25);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_26);
        }
        stringBuffer.append(TEXT_27);
        stringBuffer.append(cid);
        stringBuffer.append(TEXT_28);
        stringBuffer.append(kerberosConfiguration);
        stringBuffer.append(TEXT_29);
        stringBuffer.append(cid);
        stringBuffer.append(TEXT_30);
        stringBuffer.append(cid);
        stringBuffer.append(TEXT_31);
        stringBuffer.append(useMessageFromSchema ? connName + ", " : "");
        stringBuffer.append(TEXT_32);
        stringBuffer.append(cid);
        stringBuffer.append(TEXT_33);
        stringBuffer.append(cid);
        stringBuffer.append(TEXT_34);
        stringBuffer.append(cid);
        stringBuffer.append(TEXT_35);

        if (outputDocument) {

          stringBuffer.append(TEXT_36);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_37);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_38);
        }

        stringBuffer.append(TEXT_39);

      } else {
        if (outputDocument) {

          stringBuffer.append(TEXT_40);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_41);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_42);
          stringBuffer.append(soapVersion.toUpperCase());
          stringBuffer.append(TEXT_43);
          stringBuffer.append(endpoint);
          stringBuffer.append(TEXT_44);
          stringBuffer.append(action);
          stringBuffer.append(TEXT_45);
          stringBuffer.append(
              useMessageFromSchema
                  ? connName + "." + soapMessageColumn + ".toString()"
                  : soapMessageStr);
          stringBuffer.append(TEXT_46);

        } else {

          stringBuffer.append(TEXT_47);
          stringBuffer.append(cid);
          stringBuffer.append(TEXT_48);
          stringBuffer.append(soapVersion.toUpperCase());
          stringBuffer.append(TEXT_49);
          stringBuffer.append(endpoint);
          stringBuffer.append(TEXT_50);
          stringBuffer.append(action);
          stringBuffer.append(TEXT_51);
          stringBuffer.append(
              useMessageFromSchema
                  ? connName + "." + soapMessageColumn + ".toString()"
                  : soapMessageStr);
          stringBuffer.append(TEXT_52);
        }
      }

      stringBuffer.append(TEXT_53);

      List<? extends IConnection> conns = node.getOutgoingSortedConnections();
      if (conns != null) { // 1
        if (conns.size() > 0) { // 2
          IConnection conn = conns.get(0); // the first connection
          if (conn.getLineStyle().hasConnectionCategory(IConnectionCategory.DATA)) { // 3

            stringBuffer.append(TEXT_54);
            stringBuffer.append(conn.getName());
            stringBuffer.append(TEXT_55);
            stringBuffer.append(conn.getName());
            stringBuffer.append(TEXT_56);
            if (outputDocument) {
              stringBuffer.append(TEXT_57);
              stringBuffer.append(conn.getName());
              stringBuffer.append(TEXT_58);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_59);
            } else {
              stringBuffer.append(TEXT_60);
              stringBuffer.append(conn.getName());
              stringBuffer.append(TEXT_61);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_62);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_63);
              stringBuffer.append(conn.getName());
              stringBuffer.append(TEXT_64);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_65);
              stringBuffer.append(conn.getName());
              stringBuffer.append(TEXT_66);
              stringBuffer.append(cid);
              stringBuffer.append(TEXT_67);
            }
          } // 3
        } // 2
      } // 1
    } // if (!useMessageFromSchema || connName!=null) {

    stringBuffer.append(TEXT_68);
    stringBuffer.append(TEXT_69);
    return stringBuffer.toString();
  }