/*
* Copyright (C) 2010 Brockmann Consult GmbH (info@brockmann-consult.de)
*
* 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 org.esa.beam.smos.visat;
import com.bc.ceres.binio.CompoundMember;
import com.bc.ceres.binio.CompoundType;
import com.jidesoft.grid.AutoResizePopupMenuCustomizer;
import com.jidesoft.grid.TableColumnChooser;
import com.jidesoft.grid.TableColumnChooserPopupMenuCustomizer;
import com.jidesoft.grid.TableHeaderPopupMenuInstaller;
import org.esa.beam.dataio.smos.L1cSmosFile;
import org.esa.beam.framework.ui.product.ProductSceneView;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.TableColumnModel;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
public class GridPointBtDataTableToolView extends GridPointBtDataToolView {
public static final String ID = GridPointBtDataTableToolView.class.getName();
private JTable table;
private JButton columnsButton;
private JButton exportButton;
private GridPointBtDataTableModel gridPointBtDataTableModel;
public GridPointBtDataTableToolView() {
gridPointBtDataTableModel = new GridPointBtDataTableModel();
table = new JTable(gridPointBtDataTableModel);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
}
@Override
protected void updateClientComponent(ProductSceneView smosView) {
boolean enabled = smosView != null;
L1cSmosFile smosFile = null;
if (enabled) {
smosFile = getL1cSmosFile();
if (smosFile == null) {
enabled = false;
}
}
table.setEnabled(enabled);
columnsButton.setEnabled(enabled);
exportButton.setEnabled(enabled);
if (enabled) {
String[] names = getColumnNames(smosFile);
TableColumnModel columnModel = new DefaultTableColumnModel();
gridPointBtDataTableModel.setColumnNames(names);
table.setColumnModel(columnModel);
table.createDefaultColumnsFromModel();
}
}
private String[] getColumnNames(L1cSmosFile smosFile) {
final CompoundType btDataType = smosFile.getBtDataType();
final CompoundMember[] members = btDataType.getMembers();
String[] names = new String[members.length];
for (int i = 0; i < members.length; i++) {
CompoundMember member = members[i];
names[i] = member.getName();
}
return names;
}
@Override
protected JComponent createGridPointComponent() {
final TableHeaderPopupMenuInstaller installer = new TableHeaderPopupMenuInstaller(table);
installer.addTableHeaderPopupMenuCustomizer(new AutoResizePopupMenuCustomizer());
installer.addTableHeaderPopupMenuCustomizer(new TableColumnChooserPopupMenuCustomizer());
return new JScrollPane(table);
}
@Override
protected JComponent createGridPointComponentOptionsComponent() {
Action action = TableColumnChooser.getTableColumnChooserButton(table).getAction();
action.putValue(Action.NAME, "Columns...");
columnsButton = new JButton(action);
exportButton = new JButton("Export...");
exportButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
final TableModelExportRunner modelExportRunner = new TableModelExportRunner(
getPaneWindow(), getTitle(), table.getModel(), table.getColumnModel());
modelExportRunner.run();
}
});
final JPanel optionsPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 2, 2));
optionsPanel.add(columnsButton);
optionsPanel.add(exportButton);
return optionsPanel;
}
@Override
protected void updateGridPointBtDataComponent(GridPointBtDataset ds) {
gridPointBtDataTableModel.setGridPointBtDataset(ds);
}
@Override
protected void updateGridPointBtDataComponent(IOException e) {
gridPointBtDataTableModel.setGridPointBtDataset(null);
}
@Override
protected void clearGridPointBtDataComponent() {
gridPointBtDataTableModel.setGridPointBtDataset(null);
}
}