示例#1
0
  /*
   * Allocate input streams and create the temporary files...
   *
   */
  @SuppressWarnings("unchecked")
  public boolean init(StepMetaInterface smi, StepDataInterface sdi) {
    meta = (JoinRowsMeta) smi;
    data = (JoinRowsData) sdi;

    if (super.init(smi, sdi)) {
      try {
        // Start with the caching of the data, write later...
        data.caching = true;

        // Start at file 1, skip 0 for speed!
        data.filenr = 1;

        // See if a main step is supplied: in that case move the corresponding rowset to position 0
        for (int i = 0; i < getInputRowSets().size(); i++) {
          RowSet rs = getInputRowSets().get(i);
          if (rs.getOriginStepName().equalsIgnoreCase(meta.getMainStepname())) {
            // swap this one and position 0...
            // That means, the main stream is always stream 0 --> easy!
            //
            RowSet zero = getInputRowSets().get(0);
            getInputRowSets().set(0, rs);
            getInputRowSets().set(i, zero);
          }
        }

        // ** INPUT SIDE **
        data.file = new File[getInputRowSets().size()];
        data.fileInputStream = new FileInputStream[getInputRowSets().size()];
        data.dataInputStream = new DataInputStream[getInputRowSets().size()];
        data.size = new int[getInputRowSets().size()];
        data.fileRowMeta = new RowMetaInterface[getInputRowSets().size()];
        data.joinrow = new Object[getInputRowSets().size()][];
        data.rs = new RowSet[getInputRowSets().size()];
        data.cache = new List[getInputRowSets().size()];
        data.position = new int[getInputRowSets().size()];
        data.fileOutputStream = new FileOutputStream[getInputRowSets().size()];
        data.dataOutputStream = new DataOutputStream[getInputRowSets().size()];
        data.restart = new boolean[getInputRowSets().size()];

        for (int i = 1; i < getInputRowSets().size(); i++) {
          String directoryName = environmentSubstitute(meta.getDirectory());
          data.file[i] =
              File.createTempFile(meta.getPrefix(), ".tmp", new File(directoryName)); // $NON-NLS-1$
          data.file[i].deleteOnExit();

          data.size[i] = 0;
          data.rs[i] = getInputRowSets().get(i);
          data.cache[i] = null;
          // data.row[i]      = null;
          data.position[i] = 0;

          data.dataInputStream[i] = null;
          data.dataOutputStream[i] = null;

          data.joinrow[i] = null;
          data.restart[i] = false;
        }

        return true;
      } catch (IOException e) {
        logError(
            BaseMessages.getString(PKG, "JoinRows.Log.ErrorCreatingTemporaryFiles")
                + e.toString()); // $NON-NLS-1$
      }
    }

    return false;
  }