package org.esa.beam.smos.gui; import com.bc.ceres.swing.selection.Selection; import com.bc.ceres.swing.selection.SelectionChangeEvent; import com.bc.ceres.swing.selection.SelectionChangeListener; import com.bc.ceres.swing.selection.SelectionManager; import org.esa.beam.framework.datamodel.Product; import org.esa.beam.framework.datamodel.ProductManager; import org.esa.beam.framework.datamodel.ProductNodeEvent; import org.esa.beam.framework.datamodel.ProductNodeListener; import org.esa.beam.framework.ui.ModelessDialog; import org.esa.beam.framework.ui.product.tree.AbstractTN; import javax.swing.tree.TreePath; import java.awt.*; abstract public class ProductChangeAwareDialog extends ModelessDialog { protected ProductChangeAwareDialog(Window parent, String title, int buttonMask, String helpID) { super(parent, title, buttonMask, helpID); } protected void productRemoved(Product product) { } protected void productAdded() { } protected void geometryAdded() { } protected void geometryRemoved() { } protected void productSelectionChanged() { } protected static class ProductManagerListener implements ProductManager.Listener { private final ProductChangeAwareDialog dialog; public ProductManagerListener(ProductChangeAwareDialog dialog) { this.dialog = dialog; } @Override public void productAdded(ProductManager.Event event) { dialog.productAdded(); } @Override public void productRemoved(ProductManager.Event event) { dialog.productRemoved(event.getProduct()); } } public static class GeometryListener implements ProductNodeListener { private final ProductChangeAwareDialog dialog; public GeometryListener(ProductChangeAwareDialog dialog) { this.dialog = dialog; } @Override public void nodeChanged(ProductNodeEvent event) { } @Override public void nodeDataChanged(ProductNodeEvent event) { } @Override public void nodeAdded(ProductNodeEvent event) { dialog.geometryAdded(); } @Override public void nodeRemoved(ProductNodeEvent event) { dialog.geometryRemoved(); } } public static class ProductSelectionListener implements SelectionChangeListener { private final ProductChangeAwareDialog dialog; private final SelectionManager selectionManager; public ProductSelectionListener(ProductChangeAwareDialog dialog, SelectionManager selectionManager) { this.dialog = dialog; this.selectionManager = selectionManager; } @Override public void selectionChanged(SelectionChangeEvent selectionChangeEvent) { final Selection selection = selectionChangeEvent.getSelection(); if (selection != null) { final Object selectedValue = selection.getSelectedValue(); if (selectedValue != null && selectedValue instanceof TreePath) { final TreePath treePath = (TreePath) selectedValue; final Object lastPathComponent = treePath.getLastPathComponent(); if (lastPathComponent instanceof AbstractTN) { final AbstractTN treeNode = (AbstractTN) lastPathComponent; final Object content = treeNode.getContent(); if (content instanceof Product) { dialog.productSelectionChanged(); } } } } } @Override public void selectionContextChanged(SelectionChangeEvent selectionChangeEvent) { } public void dispose() { selectionManager.removeSelectionChangeListener(this); } } }