private void closeQuietly(ICsvMapReader mapReader) { if (mapReader != null) { try { mapReader.close(); } catch (IOException e) { LOGGER.error(e.getMessage(), e); } } }
public void executeMode() throws IOException, CoreEngineException { // ***** Get the input file String mergeCSVPath = config.getProperty(Constants.MERGE_CSV_FILE); if ((mergeCSVPath == null) || (mergeCSVPath.isEmpty())) { throw new CoreEngineException("No merge CSV file"); } File dataFile = new File(mergeCSVPath); if (dataFile.exists() == false) { throw new CoreEngineException("Invalid merge CSV file - " + mergeCSVPath); } // ***** Get the output file String modeCSVPath = config.getProperty(Constants.MODE_CSV_FILE); if ((modeCSVPath == null) || (modeCSVPath.isEmpty())) { throw new CoreEngineException("No mode CSV file path"); } // ***** Calculate mode ICsvMapReader csvReader = null; ICsvMapWriter csvWriter = null; try { logger.log( Level.INFO, "========== Calulating mode using data file - " + dataFile.getAbsolutePath()); // ***** Parse the data file csvReader = new CsvMapReader(new FileReader(dataFile), CsvPreference.STANDARD_PREFERENCE); String readHeaders[] = csvReader.getHeader(true); CellProcessor csvReadProcessors[] = getReadCellProcessors(); // ***** Iterate over each record, process each record & write to CSV Map<String, Object> record = null; while ((record = csvReader.read(readHeaders, csvReadProcessors)) != null) { populateRecordEntries(record); } logger.log(Level.INFO, recordEntryIndex.toString()); calculateBedroomModePerYear(); logger.log(Level.INFO, modeEntryList.toString()); // ***** Write records once the mode is calculated csvWriter = new CsvMapWriter(new FileWriter(modeCSVPath), CsvPreference.STANDARD_PREFERENCE); String writeHeaders[] = getHeaders(); csvWriter.writeHeader(writeHeaders); CellProcessor[] csvWriteProcessors = getWriteCellProcessors(); for (int i = 0; i < modeEntryList.size(); i++) { Map<String, Object> modeEntry = (Map<String, Object>) modeEntryList.get(i); csvWriter.write(modeEntry, writeHeaders, csvWriteProcessors); } logger.log( Level.INFO, "========== Successfully caculated mode using data file - " + dataFile.getAbsolutePath()); } catch (Exception e) { logger.log( Level.SEVERE, "========== Failed caculating mode using data file - " + dataFile.getAbsolutePath(), e); throw new CoreEngineException(e); } finally { if (csvReader != null) csvReader.close(); if (csvWriter != null) csvWriter.close(); } }