/******************************************************************************* * Copyright (c) 2014 Open Door Logistics (www.opendoorlogistics.com) * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v3 * which accompanies this distribution, and is available at http://www.gnu.org/licenses/lgpl.txt ******************************************************************************/ package com.opendoorlogistics.core.utils.io; import java.io.File; import java.io.FileReader; import java.util.List; import org.apache.commons.io.FilenameUtils; import com.opendoorlogistics.api.tables.ODLColumnType; import com.opendoorlogistics.api.tables.ODLDatastoreAlterable; import com.opendoorlogistics.api.tables.ODLTableAlterable; import com.opendoorlogistics.core.tables.memory.ODLDatastoreImpl; import com.opendoorlogistics.core.tables.utils.TableUtils; import com.opendoorlogistics.core.utils.strings.Strings; import au.com.bytecode.opencsv.CSVReader; final public class TextIO { private final static String DEFAULT_COLUMN_NAME = "Column"; public static ODLDatastoreAlterable<ODLTableAlterable> importCSV(File file) { try { CSVReader reader = new CSVReader(new FileReader(file)); return importFile(reader, getTableName(file)); } catch (Throwable e) { throw new RuntimeException(e); } } private static String getTableName(File file) { String tableName = FilenameUtils.getBaseName(file.getAbsolutePath()); if (Strings.isEmptyWhenStandardised(tableName)) { tableName = "Table"; } return tableName; } public static ODLDatastoreAlterable<ODLTableAlterable> importTabbed(File file) { try { CSVReader reader = new CSVReader(new FileReader(file), '\t'); return importFile(reader, getTableName(file)); } catch (Throwable e) { throw new RuntimeException(e); } } private static ODLDatastoreAlterable<ODLTableAlterable> importFile(CSVReader reader, String tableName) { try { List<String[]> list = reader.readAll(); int n = list.size(); if (n > 0) { ODLDatastoreAlterable<ODLTableAlterable> ret = ODLDatastoreImpl.alterableFactory.create(); ODLTableAlterable table = ret.createTable(tableName, -1); // create all columns for (String col : list.get(0)) { // give default name if invalid if (col == null || Strings.isEmptyWhenStandardised(col) || TableUtils.findColumnIndx(table, col, true) != -1) { col = TableUtils.getUniqueNumberedColumnName(DEFAULT_COLUMN_NAME, table); } table.addColumn(-1,col, ODLColumnType.STRING, 0); } for (int line = 1; line < n; line++) { String[] row = list.get(line); if (row.length != table.getColumnCount()) { throw new RuntimeException("Line found with different number of columns to header line: " + line); } int rowIndx = table.createEmptyRow(line); for (int col = 0; col < row.length; col++) { table.setValueAt(row[col], rowIndx, col); } } return ret; } return null; } catch (Throwable e) { throw new RuntimeException(e); } } }