/******************************************************************************* * GenPlay, Einstein Genome Analyzer * Copyright (C) 2009, 2014 Albert Einstein College of Medicine * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * Authors: Julien Lajugie <julien.lajugie@einstein.yu.edu> * Nicolas Fourel <nicolas.fourel@einstein.yu.edu> * Eric Bouhassira <eric.bouhassira@einstein.yu.edu> * * Website: <http://genplay.einstein.yu.edu> ******************************************************************************/ package edu.yu.einstein.genplay.gui.dialog.multiGenomeDialog.vcfLoader; import java.io.File; import java.util.ArrayList; import java.util.List; import javax.swing.table.AbstractTableModel; import edu.yu.einstein.genplay.gui.customComponent.customComboBox.CustomComboBox; /** * This class is the table model for {@link VCFLoaderTable} * * @author Nicolas Fourel * @version 0.1 */ public class VCFLoaderModel extends AbstractTableModel { /** * Generated serial version ID */ private static final long serialVersionUID = 3478197435828366331L; private String[] columnNames; // column names private List<VCFData> data; // list of data /** * Constructor of {@link VCFLoaderModel} */ public VCFLoaderModel () { initializeColumnNames(); data = new ArrayList<VCFData>(); } /** * Adds an empty row */ protected void addEmptyRow() { VCFData newData = new VCFData(); data.add(newData); fireTableRowsInserted( data.size() - 1, data.size() - 1); fireTableRowsUpdated(data.size() - 1, data.size() - 1); } /** * Deletes a row * @param row the row number */ public void deleteRow(int row) { data.remove(row); fireTableRowsDeleted(row, row); } @Override public Class<?> getColumnClass(int column) { switch (column) { case VCFData.FILE_INDEX: return File.class; case VCFData.RAW_INDEX: return String.class; case VCFData.NICKNAME_INDEX: return String.class; case VCFData.GROUP_INDEX: return String.class; default: return Object.class; } } @Override public int getColumnCount() { return columnNames.length; } @Override public String getColumnName(int col) { return columnNames[col]; } /** * @return the data */ public List<VCFData> getData() { return data; } @Override public int getRowCount() { return data.size(); } @Override public Object getValueAt(int row, int col) { VCFData vCFData = data.get(row); switch (col) { case VCFData.FILE_INDEX: return vCFData.getFile(); case VCFData.RAW_INDEX: return vCFData.getRaw(); case VCFData.NICKNAME_INDEX: return vCFData.getNickname(); case VCFData.GROUP_INDEX: return vCFData.getGroup(); default: return new Object(); } } /** * Initializes the column names */ private void initializeColumnNames () { columnNames = new String[4]; columnNames[0] = VCFData.FILE_NAME; columnNames[1] = VCFData.RAW_NAME; columnNames[2] = VCFData.NICKNAME; columnNames[3] = VCFData.GROUP_NAME; } @Override public boolean isCellEditable(int row, int col) { if (col == VCFData.RAW_INDEX) { Object value = getValueAt(row, VCFData.FILE_INDEX); if (value == null) { return false; } else if (value.toString().equals("") || value.toString().equals(CustomComboBox.ADD_TEXT)) { return false; } } return true; } /** * @param data the data to set */ public void setData(List<VCFData> data) { this.data = data; for (int row = 0; row <data.size(); row++) { fireTableCellUpdated(row, VCFData.FILE_INDEX); fireTableCellUpdated(row, VCFData.RAW_INDEX); fireTableCellUpdated(row, VCFData.NICKNAME_INDEX); fireTableCellUpdated(row, VCFData.GROUP_INDEX); } } @Override public void setValueAt(Object value, int row, int col) { if (value != null) { if (row < getRowCount()) { VCFData vCFData = data.get(row); switch (col) { case VCFData.FILE_INDEX: vCFData.setFile(new File(value.toString())); break; case VCFData.RAW_INDEX: vCFData.setRaw(value.toString()); break; case VCFData.NICKNAME_INDEX: vCFData.setNickname(value.toString()); break; case VCFData.GROUP_INDEX: vCFData.setGroup(value.toString()); break; default: System.out.println("Invalid column index"); } } else { System.out.println("Invalid row index"); } fireTableCellUpdated(row, col); } } }