package org.hadatac.metadata.loader;
import java.util.Iterator;
import java.util.Vector;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.hadatac.metadata.loader.ValueCellProcessing;
import org.hadatac.metadata.model.SpreadsheetParsingResult;
import org.hadatac.utils.Feedback;
public class SheetProcessing {
public static SpreadsheetParsingResult generateTTL(int mode, XSSFSheet sheet) {
String shttl = "";
String message = "";
boolean firstRow = true;
Vector<String> predicates = new Vector<String>();
// Iterate through each row in the sheet
Iterator<Row> rowIterator = sheet.iterator();
//System.out.println("#of rows: " + sheet.getLastRowNum());
boolean blankRow = false;
int processedRows = 0;
while (rowIterator.hasNext() & !blankRow) {
Row row = rowIterator.next();
//System.out.println("Row number: " + row.getRowNum());
processedRows++;
//Cell firstCell = row.getCell(0);
//System.out.println("First cell: " + firstCell.getStringCellValue() + " " + firstCell.getCellType());
//For each row, iterate through all the columns
Iterator<Cell> cellIterator = row.cellIterator();
boolean hasOutput = false;
blankRow = true;
// Iterate through each cell in a row, one by one
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
//Check the cell type and format accordingly
//System.out.println(currentCell + " " + cell.getCellType());
switch (cell.getCellType()) {
case Cell.CELL_TYPE_NUMERIC:
//System.out.println("NUMERIC");
if (predicates.elementAt(cell.getColumnIndex()).equals("vstoi:hasSerialNumber")) {
shttl = shttl + " " + predicates.elementAt(cell.getColumnIndex()) + " \"";
shttl = shttl + String.format("%.0f", cell.getNumericCellValue());
shttl = shttl + "\";\n";
} else {
shttl = shttl + " " + predicates.elementAt(cell.getColumnIndex()) + " " + cell.getNumericCellValue() + ";\n";
}
blankRow = false;
hasOutput = true;
break;
case Cell.CELL_TYPE_STRING:
case Cell.CELL_TYPE_FORMULA:
//System.out.println("STRING");
if (firstRow) {
String newPredicate = cell.getStringCellValue();
ValueCellProcessing.validateNameSpace(newPredicate);
predicates.add(cell.getColumnIndex(), newPredicate);
} else {
shttl = shttl + ValueCellProcessing.exec(cell, predicates);
hasOutput = true;
}
blankRow = false;
break;
/* default:
System.out.println("NEITHER NUMERIC NOR STRING");
break; */
}
}
if (hasOutput) {
shttl = shttl + ".\n";
}
if (firstRow) {
// after processing all the cells in the first row, prints all identified predicates as a turtle comment
shttl = shttl + "# properties: ";
for (String pred : predicates) {
shttl = shttl + "[" + pred + "] ";
}
shttl = shttl + "\n";
}
firstRow = false;
}
message += Feedback.println(mode, "processed " + processedRows + " row(s).");
SpreadsheetParsingResult result = new SpreadsheetParsingResult(message, shttl);
return result;
}
}