/* * 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.snap.rcp.mask; import org.esa.snap.core.datamodel.Product; import org.esa.snap.core.datamodel.ProductNodeEvent; import org.esa.snap.core.datamodel.ProductNodeListenerAdapter; import org.esa.snap.core.datamodel.RasterDataNode; import org.esa.snap.ui.GridLayout2; import org.junit.Ignore; import org.junit.Test; import javax.swing.AbstractAction; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.border.EmptyBorder; import java.awt.event.ActionEvent; import java.util.Locale; public class MaskApplicationTest { private final Product product; private final MaskManagerForm maskManagerForm; private final MaskViewerForm maskViewerForm; private Product selectedProduct; private RasterDataNode selectedBand; @Ignore @Test public void testNothing() { // Dummy test to make JUnit 4 runner happy } public MaskApplicationTest() { product = MaskFormTest.createTestProduct(); product.addProductNodeListener(new ProductNodeListenerAdapter() { @Override public void nodeChanged(ProductNodeEvent event) { System.out.println("event = " + event); } @Override public void nodeDataChanged(ProductNodeEvent event) { System.out.println("event = " + event); } @Override public void nodeAdded(ProductNodeEvent event) { System.out.println("event = " + event); } @Override public void nodeRemoved(ProductNodeEvent event) { System.out.println("event = " + event); } }); selectedProduct = null; selectedBand = null; maskManagerForm = new MaskManagerForm(null, null); maskManagerForm.reconfigureMaskTable(selectedProduct, selectedBand); maskViewerForm = new MaskViewerForm(null); maskViewerForm.reconfigureMaskTable(selectedProduct, selectedBand); } public static void main(String[] args) { Locale.setDefault(Locale.UK); try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception ignored) { // ignore } final MaskApplicationTest app = new MaskApplicationTest(); final JFrame maskManagerFrame = createFrame("ROI/Mask Manager", app.maskManagerForm.createContentPanel()); final JFrame maskViewerFrame = createFrame("Bitmask Overlay", app.maskViewerForm.createContentPanel()); final JFrame productManagerFrame = createFrame("Product Manager", createProductManagerPanel(app)); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { maskManagerFrame.setLocation(50, 50); maskViewerFrame.setLocation(maskManagerFrame.getX() + maskManagerFrame.getWidth(), 50); productManagerFrame.setLocation(maskViewerFrame.getX() + maskViewerFrame.getWidth(), 50); maskManagerFrame.setVisible(true); maskViewerFrame.setVisible(true); productManagerFrame.setVisible(true); } }); } private static JFrame createFrame(String name, JPanel panel) { final JFrame frame = new JFrame(name); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(panel); frame.setAlwaysOnTop(true); frame.pack(); return frame; } private static JPanel createProductManagerPanel(final MaskApplicationTest app) { JPanel panel = new JPanel(new GridLayout2(-1, 1, 2, 2)); panel.setBorder(new EmptyBorder(4, 4, 4, 4)); panel.add(new JButton(new AbstractAction("Select product") { @Override public void actionPerformed(ActionEvent e) { app.selectProduct(app.product); } })); panel.add(new JButton(new AbstractAction("Unselect product") { @Override public void actionPerformed(ActionEvent e) { app.selectProduct(null); } })); String[] bandNames = app.product.getBandNames(); for (String bandName : bandNames) { AbstractAction action = new AbstractAction("Select band '" + bandName + "'") { @Override public void actionPerformed(ActionEvent e) { app.selectBand(app.product.getBand((String) getValue("bandName"))); } }; action.putValue("bandName", bandName); panel.add(new JButton(action)); } panel.add(new JButton(new AbstractAction("Unselect band") { @Override public void actionPerformed(ActionEvent e) { app.selectBand(null); } })); return panel; } void selectProduct(Product product) { selectedProduct = product; selectedBand = null; handleSelectionStateChange(); } void selectBand(RasterDataNode band) { if (band != null) { selectedProduct = band.getProduct(); } selectedBand = band; handleSelectionStateChange(); } private void handleSelectionStateChange() { maskManagerForm.reconfigureMaskTable(selectedProduct, selectedBand); maskViewerForm.reconfigureMaskTable(selectedProduct, selectedBand); } }