/**
* The table model for csv file content
*
* @author Peter
*
*/
public class CSVTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
private String[] columnNames;
private List<Map<String, String>> tableDataList;
public CSVTableModel(int columnCount) {
if (columnCount < 1)
throw new IllegalArgumentException("columnCount is less than 1.");
columnNames = createColumnNames(columnCount);
tableDataList = createTableDataList(new String[0][0], columnNames);
}
public CSVTableModel(String[][] tableData) {
if (tableData == null)
throw new IllegalArgumentException(
"columnNames or tableData is null.");
int columnCount = -1;
for (String[] rowData : tableData) {
if (rowData != null && rowData.length > columnCount)
columnCount = rowData.length;
}
if (columnCount < 1)
throw new IllegalArgumentException(
"tableData's column number is less than 1.");
columnNames = createColumnNames(columnCount);
tableDataList = createTableDataList(tableData, columnNames);
}
public CSVTableModel(String[] columnNames) {
this(columnNames, new String[0][0]);
}
public CSVTableModel(String[] columnNames, String[][] tableData) {
if (columnNames == null || tableData == null)
throw new IllegalArgumentException(
"columnNames or tableData is null.");
this.columnNames = Arrays.copyOf(columnNames, columnNames.length);
this.tableDataList = createTableDataList(tableData, columnNames);
}
private static String[] createColumnNames(int columnCount) {
String[] columnNames = new String[columnCount];
for (int columnIndex = 0; columnIndex < columnNames.length; columnIndex++) {
String columnName = "";
if (columnIndex >= 26) {
columnName = columnNames[columnIndex - 26];
}
columnName += ((char) (columnIndex % 26) + 'A');
}
return columnNames;
}
private static List<Map<String, String>> createTableDataList(
String[][] tableData, String[] columnNames) {
List<Map<String, String>> tableDataList = new ArrayList<Map<String, String>>();
for (String[] rowData : tableData) {
tableDataList.add(toRowMap(rowData, columnNames));
}
return tableDataList;
}
private static Map<String, String> toRowMap(String[] rowData,
String[] columnNames) {
if (rowData == null)
rowData = new String[0];
Map<String, String> rowMap = new HashMap<String, String>();
for (int i = 0; i < columnNames.length; i++) {
if (i < rowData.length)
rowMap.put(columnNames[i], rowData[i]);
else
rowMap.put(columnNames[i], "");
}
return rowMap;
}
@Override
public int getRowCount() {
return tableDataList.size();
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public String getColumnName(int column) {
return columnNames[column];
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
String columnName = getColumnName(columnIndex);
return getCellAt(rowIndex, columnName);
}
public Object getCellAt(int rowIndex, String columnName) {
Map<String, String> row = getRow(rowIndex);
return row.get(columnName);
}
public Map<String, String> getRow(int rowIndex) {
return tableDataList.get(rowIndex);
}
}
CSV相关类
最新推荐文章于 2022-09-06 17:44:10 发布