private boolean cacheInputRow() throws KettleException { /////////////////////////////// // Read from input channels // /////////////////////////////// if (data.filenr >= data.file.length) { // Switch the mode to reading back from the data cache data.caching = false; // Start back at filenr = 0 data.filenr = 0; return true; } // We need to open a new outputstream if (data.dataOutputStream[data.filenr] == null) { try { // Open the temp file data.fileOutputStream[data.filenr] = new FileOutputStream(data.file[data.filenr]); // Open the data output stream... data.dataOutputStream[data.filenr] = new DataOutputStream(data.fileOutputStream[data.filenr]); } catch (FileNotFoundException fnfe) { logError( BaseMessages.getString(PKG, "JoinRows.Log.UnableToOpenOutputstream") + data.file[data.filenr].toString() + "] : " + fnfe.toString()); // $NON-NLS-1$ //$NON-NLS-2$ stopAll(); setErrors(1); return false; } } // Read a line from the appropriate rowset... RowSet rowSet = data.rs[data.filenr]; Object[] rowData = getRowFrom(rowSet); if (rowData != null) // We read a row from one of the input streams... { if (data.fileRowMeta[data.filenr] == null) { // The first row is used as meta-data, clone it for safety data.fileRowMeta[data.filenr] = rowSet.getRowMeta().clone(); } data.fileRowMeta[data.filenr].writeData(data.dataOutputStream[data.filenr], rowData); data.size[data.filenr]++; if (log.isRowLevel()) logRowlevel(rowData.toString()); // // Perhaps we want to cache this data?? // if (data.size[data.filenr] <= meta.getCacheSize()) { if (data.cache[data.filenr] == null) data.cache[data.filenr] = new ArrayList<Object[]>(); // Add this row to the cache! data.cache[data.filenr].add(rowData); } else { // we can't cope with this many rows: reset the cache... if (log.isDetailed()) logDetailed( BaseMessages.getString( PKG, "JoinRows.Log.RowsFound", meta.getCacheSize() + "", data.rs[data.filenr] .getOriginStepName())); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ data.cache[data.filenr] = null; } } else // No more rows found on rowset!! { // Close outputstream. try { data.dataOutputStream[data.filenr].close(); data.fileOutputStream[data.filenr].close(); data.dataOutputStream[data.filenr] = null; data.fileOutputStream[data.filenr] = null; } catch (IOException ioe) { logError( BaseMessages.getString(PKG, "JoinRows.Log.ErrorInClosingOutputStream") + data.filenr + " : [" + data.file[data.filenr].toString() + "] : " + ioe.toString()); // $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } // Advance to the next file/input-stream... data.filenr++; } return true; }