package org.aksw.sparqlify.csv;
import java.io.IOException;
import com.google.common.base.Joiner;
import au.com.bytecode.opencsv.CSVReader;
/**
* Wraps a opencsv CSVReader as a java Reader object.
* User for passing the data into H2 CSV utils.
*
* @author raven
*
*/
public class ReaderCSVReader
extends ReaderStringBase
{
//private static final Logger logger = LoggerFactory.getLogger(ReaderCSVReader.class);
private static final String newLine = "\n";
private static final Joiner joiner = Joiner.on("\",\"");
private CSVReader csvReader;
//CSVWriter writer = new CSVWriter(
public ReaderCSVReader(CSVReader csvReader) {
this.csvReader = csvReader;
}
public static String encodeCell(String cell) {
String result; // = cell.replace("\\", "\\\\");
result = cell.replace("\"", "\\\"");
return result;
}
public static String[] encodeCells(String[] cells) {
String[] result = new String[cells.length];
for(int i = 0; i < cells.length; ++i) {
String rawCell = cells[i];
result[i] = encodeCell(rawCell);
}
return result;
}
public static String createLine(String[] cells) {
String[] encodedCells = encodeCells(cells);
String result = "\"" + joiner.join(encodedCells) + "\"" + newLine;
return result;
}
@Override
protected String nextString() {
try {
String[] strs = csvReader.readNext();
String result;
if(strs == null) {
result = null;
} else if(strs.length == 0) {
result = newLine;
} else if(strs.length == 1) {
String str = strs[0];
if(str.isEmpty()) {
result = newLine;
} else {
result = createLine(strs);
}
}
else {
result = createLine(strs);
}
//logger.trace("Constructed line: " + result);
return result;
} catch(Exception e) {
throw new RuntimeException(e);
}
}
@Override
public void close() throws IOException {
csvReader.close();
}
}