CSV相干类

CSV相关类
/**
 * 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);
	}
}