Ejemplo n.º 1
0
  @Override
  public StatementRunnerResult execute(String aSql) throws SQLException {
    StatementRunnerResult result = new StatementRunnerResult();
    String parm = SqlUtil.stripVerb(aSql);

    cmdLine.parse(parm);

    WbFile inputFile = evaluateFileArgument(cmdLine.getValue(ARG_INPUT));
    WbFile outputFile = evaluateFileArgument(cmdLine.getValue(ARG_OUTPUT));
    WbFile xsltFile = evaluateFileArgument(cmdLine.getValue(ARG_STYLESHEET));

    if (!cmdLine.hasArguments()) {
      result.addErrorMessageByKey("ErrXsltWrongParameter");
      return result;
    }

    if (inputFile == null) {
      result.addErrorMessageByKey("ErrXsltMissingInputFile");
      return result;
    }

    if (!inputFile.exists()) {
      result.addErrorMessageByKey("ErrFileNotFound", cmdLine.getValue(ARG_INPUT));
      return result;
    }

    if (outputFile == null) {
      result.addErrorMessageByKey("ErrXsltMissingOutputFile");
      return result;
    }

    if (xsltFile == null) {
      result.addErrorMessageByKey("ErrXsltMissingStylesheet");
      return result;
    }

    if (!xsltFile.exists()) {
      result.addErrorMessageByKey("ErrFileNotFound", cmdLine.getValue(ARG_STYLESHEET));
      return result;
    }

    Map<String, String> params = getParameters(cmdLine);

    XsltTransformer transformer = new XsltTransformer();

    try {
      transformer.setSaveSystemOutMessages(true);
      transformer.setXsltBaseDir(getXsltBaseDir());

      transformer.transform(inputFile, outputFile, xsltFile, params);

      String msg = transformer.getAllOutputs();
      if (msg.length() != 0) {
        result.addMessage(msg);
        result.addMessage(""); // create newline
      }

      WbFile xsltUsed = new WbFile(transformer.getXsltUsed());
      WbFile userXslt = new WbFile(xsltFile);
      if (xsltUsed != null && !userXslt.equals(xsltUsed)) {
        // If the xslt file has been "automatically" found, inform the user about this
        result.addMessage(ResourceMgr.getFormattedString("MsgXsltUsed", xsltUsed.getFullPath()));
      }
      result.addMessage(ResourceMgr.getFormattedString("MsgXsltSuccessful", outputFile));
      result.setSuccess();
    } catch (Exception e) {
      LogMgr.logError(
          "WbXslt.execute()",
          "Error when transforming '" + inputFile + "' to '" + outputFile + "' using " + xsltFile,
          e);
      String msg = transformer.getAllOutputs(e);
      LogMgr.logError("WbXslt.execute()", msg, null);
      result.addErrorMessage(msg);
    }
    return result;
  }