package com.intuit.tank.harness.functions;
/*
* #%L
* Intuit Tank Agent (apiharness)
* %%
* Copyright (C) 2011 - 2015 Intuit Inc.
* %%
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
* #L%
*/
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Hashtable;
import java.util.List;
import org.apache.commons.io.IOUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.intuit.tank.harness.APITestHarness;
import com.intuit.tank.harness.logging.LogUtil;
public class CSVReader {
private static Logger logger = LogManager.getLogger(CSVReader.class);
private static Hashtable<String, CSVReader> instance = new Hashtable<String, CSVReader>();
private List<String[]> lines = null;
private int pointer = 0;
private CSVReader(String fileName) {
readCSV(fileName);
}
public static void reset() {
instance.clear();
}
public static synchronized CSVReader getInstance(String fileName) {
if (instance.get(fileName) == null)
if (instance.get(fileName) == null) {
instance.put(fileName, new CSVReader(fileName));
}
return instance.get(fileName);
}
private void readCSV(String fileName) {
DataInputStream in = null;
try {
lines = new ArrayList<String[]>();
// Open the file that is the first
// command line parameter
String datafileDir = "src/test/resources";
try {
datafileDir = APITestHarness.getInstance().getTankConfig().getAgentConfig()
.getAgentDataFileStorageDir();
} catch (Exception e) {
logger.warn("Cannot read config. Using datafileDir of " + datafileDir);
}
File csvFile = new File(datafileDir, fileName);
logger.debug(LogUtil.getLogMessage("READING CSV FILE: " + csvFile.getAbsolutePath()));
FileInputStream fstream = new FileInputStream(csvFile);
// Get the object of DataInputStream
in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
// Read File Line By Line
while ((strLine = br.readLine()) != null) {
lines.add(strLine.split(","));
}
logger.debug(LogUtil.getLogMessage("CSV file " + csvFile.getAbsolutePath() + " has " + lines.size()
+ " lines."));
} catch (Exception e) {// Catch exception if any
logger.error(LogUtil.getLogMessage("Error reading CSV file: " + e.toString()), e);
} finally {
// Close the input stream
IOUtils.closeQuietly(in);
}
}
public synchronized String[] getNextLine(boolean loop) {
String[] ret = null;
if (pointer >= lines.size()) {
if (loop) {
pointer = 0;
} else {
return null;
}
}
ret = lines.get(pointer);
pointer++;
return Arrays.copyOf(ret, ret.length);
}
}