@Override
  public String getXML() {
    StringBuilder xml = new StringBuilder();
    xml.append(XMLHandler.addTagValue("name", name));
    xml.append(XMLHandler.addTagValue("filename", fileName));
    xml.append(XMLHandler.addTagValue("service_step", serviceStepName));
    xml.append(XMLHandler.openTag(XML_TAG_VARIABLE_MAPS));
    List<FieldVariableMapping> list = new ArrayList<FieldVariableMapping>(fieldVariableMappings);
    Collections.sort(
        list,
        new Comparator<FieldVariableMapping>() {
          @Override
          public int compare(FieldVariableMapping o1, FieldVariableMapping o2) {
            return o1.getFieldName().compareTo(o2.getFieldName());
          }
        });

    for (FieldVariableMapping mapping : list) {
      xml.append(XMLHandler.openTag(XML_TAG_VARIABLE_MAP));
      xml.append(XMLHandler.addTagValue("field", mapping.getFieldName()));
      xml.append(XMLHandler.addTagValue("variable", mapping.getVariableName()));
      xml.append(XMLHandler.addTagValue("type", mapping.getMappingType().name()));
      xml.append(XMLHandler.closeTag(XML_TAG_VARIABLE_MAP));
    }
    xml.append(XMLHandler.closeTag(XML_TAG_VARIABLE_MAPS));
    return xml.toString();
  }
  public String getXML() {
    StringBuilder xml = new StringBuilder();

    xml.append(XMLHandler.openTag(XML_TAG));

    xml.append(XMLHandler.addTagValue("name", fieldName));
    xml.append(XMLHandler.addTagValue("validation_name", name));
    xml.append(XMLHandler.addTagValue("max_length", maximumLength));
    xml.append(XMLHandler.addTagValue("min_length", minimumLength));

    xml.append(XMLHandler.addTagValue("null_allowed", nullAllowed));
    xml.append(XMLHandler.addTagValue("only_null_allowed", onlyNullAllowed));
    xml.append(XMLHandler.addTagValue("only_numeric_allowed", onlyNumericAllowed));

    xml.append(XMLHandler.addTagValue("data_type", ValueMeta.getTypeDesc(dataType)));
    xml.append(XMLHandler.addTagValue("data_type_verified", dataTypeVerified));
    xml.append(XMLHandler.addTagValue("conversion_mask", conversionMask));
    xml.append(XMLHandler.addTagValue("decimal_symbol", decimalSymbol));
    xml.append(XMLHandler.addTagValue("grouping_symbol", groupingSymbol));

    xml.append(XMLHandler.addTagValue("max_value", maximumValue));
    xml.append(XMLHandler.addTagValue("min_value", minimumValue));

    xml.append(XMLHandler.addTagValue("start_string", startString));
    xml.append(XMLHandler.addTagValue("end_string", endString));
    xml.append(XMLHandler.addTagValue("start_string_not_allowed", startStringNotAllowed));
    xml.append(XMLHandler.addTagValue("end_string_not_allowed", endStringNotAllowed));

    xml.append(XMLHandler.addTagValue("regular_expression", regularExpression));
    xml.append(
        XMLHandler.addTagValue("regular_expression_not_allowed", regularExpressionNotAllowed));

    xml.append(XMLHandler.addTagValue("error_code", errorCode));
    xml.append(XMLHandler.addTagValue("error_description", errorDescription));

    xml.append(XMLHandler.addTagValue("is_sourcing_values", sourcingValues));
    xml.append(
        XMLHandler.addTagValue(
            "sourcing_step", sourcingStep == null ? sourcingStepName : sourcingStep.getName()));
    xml.append(XMLHandler.addTagValue("sourcing_field", sourcingField));

    xml.append(XMLHandler.openTag(XML_TAG_ALLOWED));
    if (allowedValues != null) {

      for (String allowedValue : allowedValues) {
        xml.append(XMLHandler.addTagValue("value", allowedValue));
      }
    }
    xml.append(XMLHandler.closeTag(XML_TAG_ALLOWED));

    xml.append(XMLHandler.closeTag(XML_TAG));

    return xml.toString();
  }
Exemplo n.º 3
0
  public String getXML() {
    StringBuffer retval = new StringBuffer();

    retval.append(
        "    "
            + XMLHandler.addTagValue(
                "connection", databaseMeta == null ? "" : databaseMeta.getName()));

    retval.append("    ").append(XMLHandler.openTag(XML_TAG_FUNCTION)).append(Const.CR);
    if (function != null && !Const.isEmpty(function.getName())) {
      retval.append("    " + XMLHandler.addTagValue("name", function.getName()));
      retval.append("    " + XMLHandler.addTagValue("description", function.getDescription()));
      retval.append("    " + XMLHandler.addTagValue("group", function.getGroup()));
      retval.append("    " + XMLHandler.addTagValue("application", function.getApplication()));
      retval.append("    " + XMLHandler.addTagValue("host", function.getHost()));
    }
    retval.append("    ").append(XMLHandler.closeTag(XML_TAG_FUNCTION)).append(Const.CR);

    retval.append("    ").append(XMLHandler.openTag(XML_TAG_PARAMETERS)).append(Const.CR);
    for (SapParameter parameter : parameters) {
      retval.append("    ").append(XMLHandler.openTag(XML_TAG_PARAMETER));
      retval.append(XMLHandler.addTagValue("field_name", parameter.getFieldName(), false));
      retval.append(XMLHandler.addTagValue("sap_type", parameter.getSapType().getCode(), false));
      retval.append(XMLHandler.addTagValue("table_name", parameter.getTableName(), false));
      retval.append(XMLHandler.addTagValue("parameter_name", parameter.getParameterName(), false));
      retval.append(
          XMLHandler.addTagValue(
              "target_type", ValueMeta.getTypeDesc(parameter.getTargetType()), false));
      retval.append("    ").append(XMLHandler.closeTag(XML_TAG_PARAMETER)).append(Const.CR);
    }
    retval.append("    ").append(XMLHandler.closeTag(XML_TAG_PARAMETERS)).append(Const.CR);

    retval.append("    ").append(XMLHandler.openTag(XML_TAG_FIELDS)).append(Const.CR);
    for (SapOutputField parameter : outputFields) {
      retval.append("    ").append(XMLHandler.openTag(XML_TAG_FIELD));
      retval.append(XMLHandler.addTagValue("field_name", parameter.getSapFieldName(), false));
      retval.append(XMLHandler.addTagValue("sap_type", parameter.getSapType().getCode(), false));
      retval.append(XMLHandler.addTagValue("table_name", parameter.getTableName(), false));
      retval.append(XMLHandler.addTagValue("new_name", parameter.getNewName(), false));
      retval.append(
          XMLHandler.addTagValue(
              "target_type", ValueMeta.getTypeDesc(parameter.getTargetType()), false));
      retval.append("    ").append(XMLHandler.closeTag(XML_TAG_FIELD)).append(Const.CR);
    }
    retval.append("    ").append(XMLHandler.closeTag(XML_TAG_FIELDS)).append(Const.CR);

    return retval.toString();
  }
    public String getXML() {
      StringBuffer retval = new StringBuffer(100);

      retval.append("  ").append(XMLHandler.openTag(XML_TAG));
      retval.append(super.getXML());
      retval.append("    ").append(XMLHandler.addTagValue("repository_location_url", url));
      retval.append("  ").append(XMLHandler.closeTag(XML_TAG));

      return retval.toString();
    }
  public String getXML() {
    StringBuilder retval = new StringBuilder(100);

    retval.append("  ").append(XMLHandler.openTag(XML_TAG));
    retval.append(super.getXML());
    retval.append("    ").append(XMLHandler.addTagValue("base_directory", baseDirectory));
    retval.append("    ").append(XMLHandler.addTagValue("read_only", readOnly));
    retval.append("    ").append(XMLHandler.addTagValue("hides_hidden_files", hidingHiddenFiles));
    retval.append("  ").append(XMLHandler.closeTag(XML_TAG));

    return retval.toString();
  }
  public String getXML() {
    StringBuffer retval = new StringBuffer();

    retval.append("    " + XMLHandler.addTagValue("accept_field", acceptingField));
    for (SasInputField field : outputFields) {
      retval.append(XMLHandler.openTag(XML_TAG_FIELD));
      retval.append(field.getXML());
      retval.append(XMLHandler.closeTag(XML_TAG_FIELD));
    }

    return retval.toString();
  }
Exemplo n.º 7
0
  public String getXML() {
    StringBuilder retval = new StringBuilder(200);

    if (this.from != null && this.to != null) {
      retval.append("    ").append(XMLHandler.openTag(XML_TAG)).append(Const.CR);
      retval.append("      ").append(XMLHandler.addTagValue("from", this.from.getName()));
      retval.append("      ").append(XMLHandler.addTagValue("to", this.to.getName()));
      retval.append("      ").append(XMLHandler.addTagValue("enabled", enabled));
      retval.append("    ").append(XMLHandler.closeTag(XML_TAG)).append(Const.CR);
    }

    return retval.toString();
  }
  public String getXML() {
    StringBuffer retval = new StringBuffer(100);

    retval.append("  ").append(XMLHandler.openTag(XML_TAG));
    retval.append(super.getXML());
    retval
        .append("    ")
        .append(XMLHandler.addTagValue("repository_location_url", repositoryLocation.getUrl()));
    retval
        .append("    ")
        .append(XMLHandler.addTagValue("version_comment_mandatory", versionCommentMandatory));
    retval.append("  ").append(XMLHandler.closeTag(XML_TAG));

    return retval.toString();
  }
  @Override
  public String getXML() {

    StringBuilder xml = new StringBuilder();
    xml.append(XMLHandler.openTag(XML_TAG));

    xml.append(super.getXML()); // id, enabled

    xml.append(XMLHandler.addTagValue("schema_name", schemaName));
    xml.append(XMLHandler.addTagValue("table_name", tableName));
    xml.append(XMLHandler.addTagValue("connection_name", connectionName));

    xml.append(XMLHandler.closeTag(XML_TAG));
    return xml.toString();
  }
Exemplo n.º 10
0
  public void appendXML(StringBuffer buff) {
    if (Const.isEmpty(m_fieldAlias) || Const.isEmpty(m_constant) || m_comparison == null) {
      return;
    }
    buff.append("\n        ").append(XMLHandler.openTag("filter"));
    buff.append("\n            ").append(XMLHandler.addTagValue("alias", m_fieldAlias));
    buff.append("\n            ").append(XMLHandler.addTagValue("type", m_fieldType));
    buff.append("\n            ")
        .append(XMLHandler.addTagValue("comparison_opp", m_comparison.toString()));
    buff.append("\n            ").append(XMLHandler.addTagValue("signed_comp", m_signedComparison));

    buff.append("\n            ").append(XMLHandler.addTagValue("constant", m_constant));
    if (!Const.isEmpty(m_format)) {
      buff.append("\n            ").append(XMLHandler.addTagValue("format", m_format.trim()));
    }

    buff.append("\n        ").append(XMLHandler.closeTag("filter"));
  }
  public String getXML() {
    StringBuffer xml = new StringBuffer();
    xml.append(XMLHandler.openTag(XML_TAG));

    xml.append(XMLHandler.addTagValue("hostname", hostname, false));
    xml.append(XMLHandler.addTagValue("remote_hostname", remoteHostname, false));
    xml.append(XMLHandler.addTagValue("port", port, false));
    xml.append(XMLHandler.addTagValue("buffer_size", bufferSize, false));
    xml.append(XMLHandler.addTagValue("compressed_streams", compressingStreams, false));

    xml.append(XMLHandler.addTagValue("source_step_name", sourceStep, false));
    xml.append(XMLHandler.addTagValue("source_step_copy", sourceStepCopyNr, false));
    xml.append(XMLHandler.addTagValue("target_step_name", targetStep, false));
    xml.append(XMLHandler.addTagValue("target_step_copy", targetStepCopyNr, false));

    xml.append(XMLHandler.addTagValue("source_slave_server_name", sourceSlaveServerName, false));
    xml.append(XMLHandler.addTagValue("target_slave_server_name", targetSlaveServerName, false));

    xml.append(XMLHandler.closeTag(XML_TAG));
    return xml.toString();
  }
Exemplo n.º 12
0
  protected String getFieldsXML() {
    StringBuffer retval = new StringBuffer();

    for (LogTableField field : fields) {
      retval.append(XMLHandler.openTag(XML_TAG));

      retval.append(XMLHandler.addTagValue("id", field.getId(), false));
      retval.append(XMLHandler.addTagValue("enabled", field.isEnabled(), false));
      retval.append(XMLHandler.addTagValue("name", field.getFieldName(), false));
      if (field.isSubjectAllowed()) {
        retval.append(
            XMLHandler.addTagValue(
                "subject",
                field.getSubject() == null ? null : field.getSubject().toString(),
                false));
      }

      retval.append(XMLHandler.closeTag(XML_TAG));
    }

    return retval.toString();
  }
Exemplo n.º 13
0
  public String getXML() {
    StringBuffer retval = new StringBuffer(300);

    retval
        .append("    ")
        .append(
            XMLHandler.addTagValue(
                "specification_method",
                specificationMethod == null ? null : specificationMethod.getCode()));
    retval
        .append("    ")
        .append(
            XMLHandler.addTagValue(
                "trans_object_id", transObjectId == null ? null : transObjectId.toString()));
    // Export a little bit of extra information regarding the reference since it doesn't really
    // matter outside the same repository.
    //
    if (repository != null && transObjectId != null) {
      try {
        RepositoryObject objectInformation =
            repository.getObjectInformation(transObjectId, RepositoryObjectType.TRANSFORMATION);
        if (objectInformation != null) {
          transName = objectInformation.getName();
          directoryPath = objectInformation.getRepositoryDirectory().getPath();
        }
      } catch (KettleException e) {
        // Ignore object reference problems.  It simply means that the reference is no longer valid.
      }
    }
    retval.append("    ").append(XMLHandler.addTagValue("trans_name", transName)); // $NON-NLS-1$
    retval.append("    ").append(XMLHandler.addTagValue("filename", fileName)); // $NON-NLS-1$
    retval
        .append("    ")
        .append(XMLHandler.addTagValue("directory_path", directoryPath)); // $NON-NLS-1$

    retval
        .append("    ")
        .append(XMLHandler.openTag("mappings"))
        .append(Const.CR); // $NON-NLS-1$ $NON-NLS-2$

    retval
        .append("      ")
        .append(XMLHandler.openTag("input"))
        .append(Const.CR); // $NON-NLS-1$ $NON-NLS-2$
    for (int i = 0; i < inputMappings.size(); i++) {
      retval.append(inputMappings.get(i).getXML());
    }
    retval
        .append("      ")
        .append(XMLHandler.closeTag("input"))
        .append(Const.CR); // $NON-NLS-1$ $NON-NLS-2$

    retval
        .append("      ")
        .append(XMLHandler.openTag("output"))
        .append(Const.CR); // $NON-NLS-1$ $NON-NLS-2$
    for (int i = 0; i < outputMappings.size(); i++) {
      retval.append(outputMappings.get(i).getXML());
    }
    retval
        .append("      ")
        .append(XMLHandler.closeTag("output"))
        .append(Const.CR); // $NON-NLS-1$ $NON-NLS-2$

    // Add the mapping parameters too
    //
    retval.append("      ").append(mappingParameters.getXML()).append(Const.CR); // $NON-NLS-1$

    retval
        .append("    ")
        .append(XMLHandler.closeTag("mappings"))
        .append(Const.CR); // $NON-NLS-1$ $NON-NLS-2$

    retval
        .append("    ")
        .append(
            XMLHandler.addTagValue("allow_multiple_input", allowingMultipleInputs)); // $NON-NLS-1$
    retval
        .append("    ")
        .append(
            XMLHandler.addTagValue(
                "allow_multiple_output", allowingMultipleOutputs)); // $NON-NLS-1$

    return retval.toString();
  }
Exemplo n.º 14
0
  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    if (isJettyMode() && !request.getContextPath().startsWith(CONTEXT_PATH)) {
      return;
    }

    if (log.isDebug()) {
      logDebug(BaseMessages.getString(PKG, "TransStatusServlet.Log.SniffStepRequested"));
    }

    String transName = request.getParameter("trans");
    String id = request.getParameter("id");
    String stepName = request.getParameter("step");
    int copyNr = Const.toInt(request.getParameter("copynr"), 0);
    final int nrLines = Const.toInt(request.getParameter("lines"), 0);
    String type = Const.NVL(request.getParameter("type"), TYPE_OUTPUT);
    boolean useXML = "Y".equalsIgnoreCase(request.getParameter("xml"));

    response.setStatus(HttpServletResponse.SC_OK);

    if (useXML) {
      response.setContentType("text/xml");
      response.setCharacterEncoding(Const.XML_ENCODING);
    } else {
      response.setContentType("text/html;charset=UTF-8");
    }

    PrintWriter out = response.getWriter();

    // ID is optional...
    //
    Trans trans;
    CarteObjectEntry entry;
    if (Const.isEmpty(id)) {
      // get the first transformation that matches...
      //
      entry = getTransformationMap().getFirstCarteObjectEntry(transName);
      if (entry == null) {
        trans = null;
      } else {
        id = entry.getId();
        trans = getTransformationMap().getTransformation(entry);
      }
    } else {
      // Take the ID into account!
      //
      entry = new CarteObjectEntry(transName, id);
      trans = getTransformationMap().getTransformation(entry);
    }

    Encoder encoder = ESAPI.encoder();

    if (trans != null) {

      // Find the step to look at...
      //
      StepInterface step = null;
      List<StepInterface> stepInterfaces = trans.findBaseSteps(stepName);
      for (int i = 0; i < stepInterfaces.size(); i++) {
        StepInterface look = stepInterfaces.get(i);
        if (look.getCopy() == copyNr) {
          step = look;
        }
      }
      if (step != null) {

        // Add a listener to the transformation step...
        //
        final boolean read = type.equalsIgnoreCase(TYPE_INPUT);
        final boolean written = type.equalsIgnoreCase(TYPE_OUTPUT) || !read;
        final MetaAndData metaData = new MetaAndData();

        metaData.bufferRowMeta = null;
        metaData.bufferRowData = new ArrayList<Object[]>();

        RowListener rowListener =
            new RowListener() {
              public void rowReadEvent(RowMetaInterface rowMeta, Object[] row)
                  throws KettleStepException {
                if (read && metaData.bufferRowData.size() < nrLines) {
                  metaData.bufferRowMeta = rowMeta;
                  metaData.bufferRowData.add(row);
                }
              }

              public void rowWrittenEvent(RowMetaInterface rowMeta, Object[] row)
                  throws KettleStepException {
                if (written && metaData.bufferRowData.size() < nrLines) {
                  metaData.bufferRowMeta = rowMeta;
                  metaData.bufferRowData.add(row);
                }
              }

              public void errorRowWrittenEvent(RowMetaInterface rowMeta, Object[] row)
                  throws KettleStepException {}
            };

        step.addRowListener(rowListener);

        // Wait until we have enough rows...
        //
        while (metaData.bufferRowData.size() < nrLines
            && step.isRunning()
            && !trans.isFinished()
            && !trans.isStopped()) {

          try {
            Thread.sleep(100);
          } catch (InterruptedException e) {
            // Ignore
            //
            break;
          }
        }

        // Remove the row listener
        //
        step.removeRowListener(rowListener);

        // Pass along the rows of data...
        //
        if (useXML) {

          // Send the result back as XML
          //
          response.setContentType("text/xml");
          response.setCharacterEncoding(Const.XML_ENCODING);
          out.print(XMLHandler.getXMLHeader(Const.XML_ENCODING));

          out.println(XMLHandler.openTag(XML_TAG));

          if (metaData.bufferRowMeta != null) {

            // Row Meta data
            //
            out.println(metaData.bufferRowMeta.getMetaXML());

            // Nr of lines
            //
            out.println(XMLHandler.addTagValue("nr_rows", metaData.bufferRowData.size()));

            // Rows of data
            //
            for (int i = 0; i < metaData.bufferRowData.size(); i++) {
              Object[] rowData = metaData.bufferRowData.get(i);
              out.println(metaData.bufferRowMeta.getDataXML(rowData));
            }
          }

          out.println(XMLHandler.closeTag(XML_TAG));

        } else {
          response.setContentType("text/html;charset=UTF-8");

          out.println("<HTML>");
          out.println("<HEAD>");
          out.println(
              "<TITLE>"
                  + BaseMessages.getString(PKG, "SniffStepServlet.SniffResults")
                  + "</TITLE>");
          out.println(
              "<META http-equiv=\"Refresh\" content=\"10;url="
                  + convertContextPath(CONTEXT_PATH)
                  + "?name="
                  + URLEncoder.encode(transName, "UTF-8")
                  + "&id="
                  + URLEncoder.encode(id, "UTF-8")
                  + "\">");
          out.println("<META http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
          out.println("</HEAD>");
          out.println("<BODY>");
          out.println(
              "<H1>"
                  + encoder.encodeForHTML(
                      BaseMessages.getString(PKG, "SniffStepServlet.SniffResultsForStep", stepName))
                  + "</H1>");

          try {
            out.println("<table border=\"1\">");

            if (metaData.bufferRowMeta != null) {
              // Print a header row containing all the field names...
              //
              out.print("<tr><th>#</th>");
              for (ValueMetaInterface valueMeta : metaData.bufferRowMeta.getValueMetaList()) {
                out.print("<th>" + valueMeta.getName() + "</th>");
              }
              out.println("</tr>");

              // Now output the data rows...
              //
              for (int r = 0; r < metaData.bufferRowData.size(); r++) {
                Object[] rowData = metaData.bufferRowData.get(r);
                out.print("<tr>");
                out.println("<td>" + (r + 1) + "</td>");
                for (int v = 0; v < metaData.bufferRowMeta.size(); v++) {
                  ValueMetaInterface valueMeta = metaData.bufferRowMeta.getValueMeta(v);
                  Object valueData = rowData[v];
                  out.println("<td>" + valueMeta.getString(valueData) + "</td>");
                }
                out.println("</tr>");
              }
            }

            out.println("</table>");

            out.println("<p>");

          } catch (Exception ex) {
            out.println("<p>");
            out.println("<pre>");
            out.println(encoder.encodeForHTML(Const.getStackTracker(ex)));
            out.println("</pre>");
          }

          out.println("<p>");
          out.println("</BODY>");
          out.println("</HTML>");
        }
      } else {
        if (useXML) {
          out.println(
              new WebResult(
                      WebResult.STRING_ERROR,
                      BaseMessages.getString(
                          PKG, "SniffStepServlet.Log.CoundNotFindSpecStep", stepName))
                  .getXML());
        } else {
          out.println(
              "<H1>"
                  + encoder.encodeForHTML(
                      BaseMessages.getString(
                          PKG, "SniffStepServlet.Log.CoundNotFindSpecStep", stepName))
                  + "</H1>");
          out.println(
              "<a href=\""
                  + convertContextPath(GetStatusServlet.CONTEXT_PATH)
                  + "\">"
                  + BaseMessages.getString(PKG, "TransStatusServlet.BackToStatusPage")
                  + "</a><p>");
        }
      }
    } else {
      if (useXML) {
        out.println(
            new WebResult(
                    WebResult.STRING_ERROR,
                    BaseMessages.getString(
                        PKG, "SniffStepServlet.Log.CoundNotFindSpecTrans", transName))
                .getXML());
      } else {
        out.println(
            "<H1>"
                + encoder.encodeForHTML(
                    BaseMessages.getString(
                        PKG, "SniffStepServlet.Log.CoundNotFindTrans", transName))
                + "</H1>");
        out.println(
            "<a href=\""
                + convertContextPath(GetStatusServlet.CONTEXT_PATH)
                + "\">"
                + BaseMessages.getString(PKG, "TransStatusServlet.BackToStatusPage")
                + "</a><p>");
      }
    }
  }
  public String getXML() {
    StringBuffer retval = new StringBuffer();
    Indentation indent = new Indentation();

    indent.incr().incr();

    // General
    retval.append(indent.toString()).append(XMLHandler.openTag(Dom.TAG_GENERAL)).append(Const.CR);
    indent.incr();

    retval.append(indent.toString() + XMLHandler.addTagValue(Dom.TAG_INDEX, getIndex()));
    retval.append(indent.toString() + XMLHandler.addTagValue(Dom.TAG_TYPE, getType()));

    retval.append(indent.toString() + XMLHandler.addTagValue(Dom.TAG_BATCH_SIZE, batchSize));
    retval.append(indent.toString() + XMLHandler.addTagValue(Dom.TAG_TIMEOUT, timeout));
    retval
        .append(indent.toString())
        .append(XMLHandler.addTagValue(Dom.TAG_TIMEOUT_UNIT, timeoutUnit.toString()));

    retval.append(indent.toString() + XMLHandler.addTagValue(Dom.TAG_IS_JSON, isJsonInsert()));
    if (getJsonField() != null) {
      retval.append(indent.toString() + XMLHandler.addTagValue(Dom.TAG_JSON_FIELD, getJsonField()));
    }
    if (getIdOutField() != null) {
      retval.append(
          indent.toString() + XMLHandler.addTagValue(Dom.TAG_ID_OUT_FIELD, getIdOutField()));
    }

    if (getIdInField() != null) {
      retval.append(
          indent.toString() + XMLHandler.addTagValue(Dom.TAG_ID_IN_FIELD, getIdInField()));
    }

    retval.append(
        indent.toString()
            + XMLHandler.addTagValue(Dom.TAG_OVERWRITE_IF_EXISTS, isOverWriteIfSameId()));

    retval.append(indent.toString() + XMLHandler.addTagValue(Dom.TAG_USE_OUTPUT, useOutput));
    retval.append(indent.toString() + XMLHandler.addTagValue(Dom.TAG_STOP_ON_ERROR, stopOnError));

    indent.decr();
    retval.append(indent.toString()).append(XMLHandler.closeTag(Dom.TAG_GENERAL)).append(Const.CR);

    // Fields
    retval.append(indent.toString()).append(XMLHandler.openTag(Dom.TAG_FIELDS)).append(Const.CR);
    indent.incr();
    for (Field f : fields) {
      retval.append(indent.toString()).append(XMLHandler.openTag(Dom.TAG_FIELD)).append(Const.CR);
      indent.incr();
      retval.append(indent.toString()).append(XMLHandler.addTagValue(Dom.TAG_NAME, f.name));
      retval.append(indent.toString()).append(XMLHandler.addTagValue(Dom.TAG_TARGET, f.targetName));
      indent.decr();
      retval.append(indent.toString()).append(XMLHandler.closeTag(Dom.TAG_FIELD)).append(Const.CR);
    }
    indent.decr();
    retval.append(indent.toString()).append(XMLHandler.closeTag(Dom.TAG_FIELDS)).append(Const.CR);

    // Servers
    retval.append(indent.toString()).append(XMLHandler.openTag(Dom.TAG_SERVERS)).append(Const.CR);
    indent.incr();
    for (Server istAddr : servers) {
      retval.append(indent.toString()).append(XMLHandler.openTag(Dom.TAG_SERVER)).append(Const.CR);
      indent.incr();
      retval
          .append(indent.toString())
          .append(XMLHandler.addTagValue(Dom.TAG_SERVER_ADDRESS, istAddr.address));
      retval
          .append(indent.toString())
          .append(XMLHandler.addTagValue(Dom.TAG_SERVER_PORT, istAddr.port));
      indent.decr();
      retval.append(indent.toString()).append(XMLHandler.closeTag(Dom.TAG_SERVER)).append(Const.CR);
    }
    indent.decr();
    retval.append(indent.toString()).append(XMLHandler.closeTag(Dom.TAG_SERVERS)).append(Const.CR);

    // Settings
    retval.append(indent.toString()).append(XMLHandler.openTag(Dom.TAG_SETTINGS)).append(Const.CR);
    indent.incr();
    for (Setting s : settings) {
      retval.append(indent.toString()).append(XMLHandler.openTag(Dom.TAG_SETTING)).append(Const.CR);
      indent.incr();
      retval
          .append(indent.toString())
          .append(XMLHandler.addTagValue(Dom.TAG_SETTING_NAME, s.setting));
      retval
          .append(indent.toString())
          .append(XMLHandler.addTagValue(Dom.TAG_SETTING_VALUE, s.value));
      indent.decr();
      retval
          .append(indent.toString())
          .append(XMLHandler.closeTag(Dom.TAG_SETTING))
          .append(Const.CR);
    }
    indent.decr();
    retval.append(indent.toString()).append(XMLHandler.closeTag(Dom.TAG_SETTINGS)).append(Const.CR);

    return retval.toString();
  }
  public String getXML() throws IOException {
    StringBuilder xml = new StringBuilder(160);

    xml.append("  <" + XML_TAG + ">").append(Const.CR);

    xml.append("    ").append(XMLHandler.addTagValue("exec_local", executingLocally));

    xml.append("    ").append(XMLHandler.addTagValue("exec_remote", executingRemotely));
    if (remoteServer != null) {
      xml.append("    ").append(remoteServer.getXML()).append(Const.CR);
    }
    xml.append("    ").append(XMLHandler.addTagValue("pass_export", passingExport));

    // Serialize the parameters...
    //
    xml.append("    <parameters>").append(Const.CR);
    List<String> paramNames = new ArrayList<String>(params.keySet());
    Collections.sort(paramNames);
    for (String name : paramNames) {
      String value = params.get(name);
      xml.append("    <parameter>");
      xml.append(XMLHandler.addTagValue("name", name, false));
      xml.append(XMLHandler.addTagValue("value", value, false));
      xml.append("</parameter>").append(Const.CR);
    }
    xml.append("    </parameters>").append(Const.CR);

    // Serialize the variables...
    //
    xml.append("    <variables>").append(Const.CR);
    List<String> variableNames = new ArrayList<String>(variables.keySet());
    Collections.sort(variableNames);
    for (String name : variableNames) {
      String value = variables.get(name);
      xml.append("    <variable>");
      xml.append(XMLHandler.addTagValue("name", name, false));
      xml.append(XMLHandler.addTagValue("value", value, false));
      xml.append("</variable>").append(Const.CR);
    }
    xml.append("    </variables>").append(Const.CR);

    // Serialize the variables...
    //
    xml.append("    <arguments>").append(Const.CR);
    List<String> argumentNames = new ArrayList<String>(arguments.keySet());
    Collections.sort(argumentNames);
    for (String name : argumentNames) {
      String value = arguments.get(name);
      xml.append("    <argument>");
      xml.append(XMLHandler.addTagValue("name", name, false));
      xml.append(XMLHandler.addTagValue("value", value, false));
      xml.append("</argument>").append(Const.CR);
    }
    xml.append("    </arguments>").append(Const.CR);

    xml.append("    ").append(XMLHandler.addTagValue("replay_date", replayDate));
    xml.append("    ").append(XMLHandler.addTagValue("safe_mode", safeModeEnabled));
    xml.append("    ").append(XMLHandler.addTagValue("log_level", logLevel.getCode()));
    xml.append("    ").append(XMLHandler.addTagValue("clear_log", clearingLog));

    xml.append("    ").append(XMLHandler.addTagValue("start_copy_name", startCopyName));
    xml.append("    ").append(XMLHandler.addTagValue("start_copy_nr", startCopyNr));

    xml.append("    ").append(XMLHandler.addTagValue("gather_metrics", gatheringMetrics));
    xml.append("    ").append(XMLHandler.addTagValue("expand_remote_job", expandingRemoteJob));
    if (passedBatchId != null) {
      xml.append("    ").append(XMLHandler.addTagValue("passedBatchId", passedBatchId));
    }

    // The source rows...
    //
    if (previousResult != null) {
      xml.append(previousResult.getXML());
    }

    // Send the repository name and user to the remote site...
    //
    if (repository != null) {
      xml.append(XMLHandler.openTag("repository"));
      xml.append(XMLHandler.addTagValue("name", repository.getName()));
      // File base repositories doesn't have user info
      if (repository.getUserInfo() != null) {
        xml.append(XMLHandler.addTagValue("login", repository.getUserInfo().getLogin()));
        xml.append(
            XMLHandler.addTagValue(
                "password", Encr.encryptPassword(repository.getUserInfo().getPassword())));
      }
      xml.append(XMLHandler.closeTag("repository"));
    }

    xml.append("</" + XML_TAG + ">").append(Const.CR);
    return xml.toString();
  }