VOTableView.java 3.56 KB
/*
 * This file is a part of EpnTAPClient.
 * This program aims to provide EPN-TAP support for software clients, like CASSIS spectrum analyzer.
 * See draft specifications: https://voparis-confluence.obspm.fr/pages/viewpage.action?pageId=559861
 * Copyright (C) 2016 Institut de Recherche en Astrophysique et Planétologie.
 *
 * 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/>.
 */

package eu.omp.irap.vespa.votable.view;

import java.awt.BorderLayout;

import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

import eu.omp.irap.vespa.votable.votabledata.VOTableData;

/**
 * The main class of the View of the application.
 *
 * @author N. Jourdane
 */
public class VOTableView extends JPanel implements TableModelListener {

	/** The serial version UID. */
	private static final long serialVersionUID = 1L;

	/** The JTable component where the data are displayed. */
	private JTable table;

	/** The DataModel representing the VOTable data in the JTable element. */
	private DefaultTableModel tableData;


	/**
	 * Method constructor
	 */
	// TODO public VOTableView(VOTableViewListener listener) -> listen for select events
	public VOTableView() {
		tableData = new DefaultTableModel() {

			/** The serial version UID. */
			private static final long serialVersionUID = 1L;


			@Override
			public boolean isCellEditable(int row, int column) {
				return false;
			}
		};

		table = new JTable(tableData);
		table.setAutoCreateColumnsFromModel(true);
		buildVOTableView();
	}

	private void buildVOTableView() {
		setLayout(new BorderLayout());

		table.setRowSorter(new TableRowSorter<TableModel>(tableData));

		add(new JScrollPane(table,
				ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
				ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED), BorderLayout.CENTER);
	}

	/**
	 * Fill the JTable.
	 *
	 * @param columns the column names
	 * @param data The VoTable data displayed on the JTable
	 */
	public void fillTable(VOTableData data) {
		String[] columns = data.getColumnsName();
		Object[][] rows = data.getDataArray();
		tableData.setDataVector(rows, columns);

		if (rows.length != 0) {
			table.setRowSelectionInterval(0, 0);
		}
		if (columns.length >= 10) {
			table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
		}
	}

	/**
	 * @return The JTable element.
	 */
	public JTable getTable() {
		return table;
	}

	/**
	 * @param column The column index of the data to get.
	 * @param row The row index of the data to get.
	 * @return The element, can be a String, a integer or something else, according to the voTable
	 *         content.
	 */
	public Object getValueAt(int column, int row) {
		return tableData.getValueAt(row, column);
	}

	@Override
	public void tableChanged(TableModelEvent e) {
		if (e.getType() != TableModelEvent.UPDATE) {
			return;
		}
	}

}