コード例 #1
0
  private synchronized Object[] getOutputRowData(Object[] row) throws KettleException {

    Object[] outputRowData = RowDataUtil.allocateRowData(data.outputRowMeta.size());
    for (int i = 0; i < data.NrPrevFields; i++) {
      outputRowData[i] = row[i];
    }
    if (first) {
      first = false;
    } else {
      for (int i = 0; i < data.inStreamNrs.length; i++) {
        outputRowData[data.NrPrevFields + i] = data.previousRow[data.inStreamNrs[i]];
      }
    }
    data.previousRow = row;
    return outputRowData;
  }
コード例 #2
0
  public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {
    meta = (GetPreviousRowFieldMeta) smi;
    data = (GetPreviousRowFieldData) sdi;

    Object[] r = getRow(); // Get row from input rowset & set row busy!
    if (r == null) { // no more input to be expected...

      setOutputDone();
      return false;
    }

    if (first) {
      data.inputRowMeta = getInputRowMeta();
      data.NrPrevFields = data.inputRowMeta.size();
      data.outputRowMeta = data.inputRowMeta.clone();
      meta.getFields(data.outputRowMeta, getStepname(), null, null, this, repository, metaStore);

      data.inStreamNrs = new int[meta.getFieldInStream().length];
      for (int i = 0; i < meta.getFieldInStream().length; i++) {
        data.inStreamNrs[i] = data.inputRowMeta.indexOfValue(meta.getFieldInStream()[i]);
        if (data.inStreamNrs[i] < 0) { // couldn't find field!

          throw new KettleException(
              BaseMessages.getString(
                  PKG, "GetPreviousRowField.Exception.FieldRequired", meta.getFieldInStream()[i]));
        }
      }

      data.outStreamNrs = new String[meta.getFieldInStream().length];
      for (int i = 0; i < meta.getFieldInStream().length; i++) {
        data.outStreamNrs[i] = meta.getFieldOutStream()[i];
        if (Const.isEmpty(data.outStreamNrs[i])) {
          throw new KettleStepException(
              BaseMessages.getString(
                  PKG, "GetPreviousRowField.Exception.OutputFieldEmpty", "" + i));
        }
      }
    } // end if first

    try {
      Object[] outputRow = getOutputRowData(r);

      putRow(data.outputRowMeta, outputRow); // copy row to output rowset(s);

      if (checkFeedback(getLinesRead())) {
        if (log.isDetailed()) {
          logDetailed(
              BaseMessages.getString(PKG, "GetPreviousRowField.Log.LineNumber") + getLinesRead());
        }
      }
    } catch (KettleException e) {
      boolean sendToErrorRow = false;
      String errorMessage = null;
      if (getStepMeta().isDoingErrorHandling()) {
        sendToErrorRow = true;
        errorMessage = e.toString();
      } else {
        logError(
            BaseMessages.getString(PKG, "GetPreviousRowField.Log.ErrorInStep", e.getMessage()));
        setErrors(1);
        stopAll();
        setOutputDone(); // signal end to receiver(s)
        return false;
      }
      if (sendToErrorRow) {
        // Simply add this row to the error row
        putError(getInputRowMeta(), r, 1, errorMessage, null, "GetPreviousRowField001");
      }
    }
    return true;
  }