@Override
	public boolean processPageOfData(List<Object> pageOfData) throws Exception {
		// If this is the first page of data we've received,
		// and log the start of the job
		if (!this.running) {
			// Set this.running = true so we know this step has been
			// started, even if start() has not been called yet.
			this.running=true;
			this.logStart();
		}
		
		
		// Prepare to process this page of data
		this.pageCount++;
		
		try {
			// Loop over the rows of data in this page
			for (int i = 0; i < pageOfData.size(); i++) {
				// Create the csv file before outputting the first row
				if (this.currentOutputFile == null && i == 0) {
					this.currentOutputFilename = this.generateNextCSVFile();
				}
				
				// Write this row to the CSV
				List row = (List)pageOfData.get(i);
				String rowStr = this.generateCSVRow(row);
				this.currentOutputFile.append(rowStr);
				this.currentOutputFile.flush();
				log.debug("Writing CSV row # :" + (i+1) +  ": " + rowStr.trim());
				// Update the counters
				this.totalRowsThisFile++;
				this.totalRowsGenerated++;
			}
			
			int pos = this.currentOutputFilename.length()-5;
			String newFilename = this.currentOutputFilename.substring(0,pos) + this.currentOutputFilename.substring(pos).replaceFirst(".tmp", ".csv");
			
			log.info("Generated CSV file: " + newFilename 
					+ " (" + this.totalRowsThisFile + " rows)");
			// Close the output file
			closeCurrentOutputFile();
			
			// Send the .tmp file to GenerateTRGStep
			this.job_manager.submitPageOfData(this.alternateOutputData, this);
			// Clear the list of generated csvs since we've generated the .tmp
			this.alternateOutputData = new ArrayList<String>();
			
		}
		catch( Exception e) {
			e.printStackTrace();
			throw e;
		}
		finally {
			
		}
		
		return true;
	}