/* * Copyright (C) 2014 by Array Systems Computing Inc. http://www.array.ca * * 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.s1tbx.insar.gpf.ui; import org.esa.snap.core.dataop.dem.ElevationModelDescriptor; import org.esa.snap.core.dataop.dem.ElevationModelRegistry; import org.esa.snap.core.dataop.resamp.ResamplingFactory; import org.esa.snap.dem.dataio.DEMFactory; import org.esa.snap.graphbuilder.gpf.ui.BaseOperatorUI; import org.esa.snap.graphbuilder.gpf.ui.OperatorUIUtils; import org.esa.snap.graphbuilder.gpf.ui.UIValidation; import org.esa.snap.graphbuilder.rcp.utils.DialogUtils; import org.esa.snap.rcp.util.Dialogs; import org.esa.snap.ui.AppContext; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.io.File; import java.util.Map; /** * User interface for PhaseToElevationOp */ public class PhaseToElevationOpUI extends BaseOperatorUI { private final JList bandList = new JList(); private final JComboBox<String> demName = new JComboBox<>(); private static final String externalDEMStr = "External DEM"; private final JComboBox<String> demResamplingMethod = new JComboBox<>(ResamplingFactory.resamplingNames); private final JTextField externalDEMFile = new JTextField(""); private final JTextField externalDEMNoDataValue = new JTextField(""); private final JButton externalDEMBrowseButton = new JButton("..."); private final JLabel externalDEMFileLabel = new JLabel("External DEM:"); private final JLabel externalDEMNoDataValueLabel = new JLabel("DEM No Data Value:"); private Double extNoDataValue = 0.0; private final DialogUtils.TextAreaKeyListener textAreaKeyListener = new DialogUtils.TextAreaKeyListener(); @Override public JComponent CreateOpTab(String operatorName, Map<String, Object> parameterMap, AppContext appContext) { final String[] demNames = DEMFactory.getDEMNameList(); for (String name : demNames) { demName.addItem(name); } demName.addItem(externalDEMStr); initializeOperatorUI(operatorName, parameterMap); final JComponent panel = createPanel(); initParameters(); demName.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent event) { if (((String) demName.getSelectedItem()).startsWith(externalDEMStr)) { enableExternalDEM(true); } else { externalDEMFile.setText(""); enableExternalDEM(false); } } }); externalDEMFile.setColumns(30); enableExternalDEM(((String) demName.getSelectedItem()).startsWith(externalDEMStr)); externalDEMBrowseButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { final File file = Dialogs.requestFileForOpen("External DEM File", false, null, DEMFactory.LAST_EXTERNAL_DEM_DIR_KEY); externalDEMFile.setText(file.getAbsolutePath()); extNoDataValue = OperatorUIUtils.getNoDataValue(file); externalDEMNoDataValue.setText(String.valueOf(extNoDataValue)); } }); externalDEMNoDataValue.addKeyListener(textAreaKeyListener); return new JScrollPane(panel); } @Override public void initParameters() { OperatorUIUtils.initParamList(bandList, getBandNames()); final String demNameParam = (String) paramMap.get("demName"); if (demNameParam != null) { ElevationModelDescriptor descriptor = ElevationModelRegistry.getInstance().getDescriptor(demNameParam); if(descriptor != null) { demName.setSelectedItem(DEMFactory.getDEMDisplayName(descriptor)); } else { demName.setSelectedItem(demNameParam); } } demResamplingMethod.setSelectedItem(paramMap.get("demResamplingMethod")); final File extFile = (File) paramMap.get("externalDEMFile"); if (extFile != null) { externalDEMFile.setText(extFile.getAbsolutePath()); extNoDataValue = (Double) paramMap.get("externalDEMNoDataValue"); if (extNoDataValue != null && !textAreaKeyListener.isChangedByUser()) { externalDEMNoDataValue.setText(String.valueOf(extNoDataValue)); } } } @Override public UIValidation validateParameters() { return new UIValidation(UIValidation.State.OK, ""); } @Override public void updateParameters() { OperatorUIUtils.updateParamList(bandList, paramMap, OperatorUIUtils.SOURCE_BAND_NAMES); paramMap.put("demName", (DEMFactory.getProperDEMName((String) demName.getSelectedItem()))); paramMap.put("demResamplingMethod", demResamplingMethod.getSelectedItem()); final String extFileStr = externalDEMFile.getText(); if (!extFileStr.isEmpty()) { paramMap.put("externalDEMFile", new File(extFileStr)); paramMap.put("externalDEMNoDataValue", Double.parseDouble(externalDEMNoDataValue.getText())); } } private JComponent createPanel() { final JPanel contentPane = new JPanel(new GridBagLayout()); final GridBagConstraints gbc = DialogUtils.createGridBagConstraints(); gbc.gridx = 0; gbc.gridy++; DialogUtils.addComponent(contentPane, gbc, "Digital Elevation Model:", demName); gbc.gridy++; DialogUtils.addComponent(contentPane, gbc, externalDEMFileLabel, externalDEMFile); gbc.gridx = 2; contentPane.add(externalDEMBrowseButton, gbc); gbc.gridy++; DialogUtils.addComponent(contentPane, gbc, externalDEMNoDataValueLabel, externalDEMNoDataValue); gbc.gridy++; DialogUtils.addComponent(contentPane, gbc, "DEM Resampling Method:", demResamplingMethod); DialogUtils.fillPanel(contentPane, gbc); return contentPane; } private void enableExternalDEM(boolean flag) { DialogUtils.enableComponents(externalDEMFileLabel, externalDEMFile, flag); DialogUtils.enableComponents(externalDEMNoDataValueLabel, externalDEMNoDataValue, flag); externalDEMBrowseButton.setVisible(flag); } }