001    /*
002     * $Id: AddeBasicImageChooser.java,v 1.9 2012/02/19 17:35:35 davep Exp $
003     *
004     * This file is part of McIDAS-V
005     *
006     * Copyright 2007-2012
007     * Space Science and Engineering Center (SSEC)
008     * University of Wisconsin - Madison
009     * 1225 W. Dayton Street, Madison, WI 53706, USA
010     * https://www.ssec.wisc.edu/mcidas
011     * 
012     * All Rights Reserved
013     * 
014     * McIDAS-V is built on Unidata's IDV and SSEC's VisAD libraries, and
015     * some McIDAS-V source code is based on IDV and VisAD source code.  
016     * 
017     * McIDAS-V is free software; you can redistribute it and/or modify
018     * it under the terms of the GNU Lesser Public License as published by
019     * the Free Software Foundation; either version 3 of the License, or
020     * (at your option) any later version.
021     * 
022     * McIDAS-V is distributed in the hope that it will be useful,
023     * but WITHOUT ANY WARRANTY; without even the implied warranty of
024     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
025     * GNU Lesser Public License for more details.
026     * 
027     * You should have received a copy of the GNU Lesser Public License
028     * along with this program.  If not, see http://www.gnu.org/licenses.
029     */
030    package edu.wisc.ssec.mcidasv.chooser.adde;
031    
032    import static javax.swing.GroupLayout.DEFAULT_SIZE;
033    import static javax.swing.GroupLayout.PREFERRED_SIZE;
034    import static javax.swing.GroupLayout.Alignment.BASELINE;
035    import static javax.swing.GroupLayout.Alignment.LEADING;
036    import static javax.swing.LayoutStyle.ComponentPlacement.RELATED;
037    
038    import java.util.Hashtable;
039    import java.util.List;
040    
041    import javax.swing.GroupLayout;
042    import javax.swing.JComponent;
043    import javax.swing.JLabel;
044    import javax.swing.JPanel;
045    
046    import org.w3c.dom.Element;
047    
048    import ucar.unidata.data.imagery.ImageDataset;
049    import ucar.unidata.idv.chooser.IdvChooserManager;
050    
051    import edu.wisc.ssec.mcidas.AreaDirectory;
052    import edu.wisc.ssec.mcidasv.util.McVGuiUtils;
053    
054    
055    /**
056     * Widget to select images from a remote ADDE server
057     * Displays a list of the descriptors (names) of the image datasets
058     * available for a particular ADDE group on the remote server.
059     *
060     * @author Don Murray
061     */
062    public class AddeBasicImageChooser extends AddeImageChooser {
063    
064        /**
065         * Construct an Adde image selection widget
066         *
067         *
068         * @param mgr The chooser manager
069         * @param root The chooser.xml node
070         */
071        public AddeBasicImageChooser(IdvChooserManager mgr, Element root) {
072            super(mgr, root);
073        }
074            
075        /**
076         *  Get the default value for a key
077         *
078         *  @param property      property (key type)
079         *  @param dflt        default value
080         *  @return value for key or dflt if not found
081         */
082        protected String getDefault(String property, String dflt) {
083            if (property.equals(PROP_UNIT)) return "";
084            if (property.equals(PROP_BAND)) return "ALL";
085            return super.getDefault(property, dflt);
086        }
087        
088        /**
089         * Set the available units in the  unit selector
090         *
091         * @param ad   AreaDirectory for the image
092         * @param band band to use for units
093         */
094        protected void setAvailableUnits(AreaDirectory ad, int band) {
095            super.setAvailableUnits(ad, band);
096            unitComboBox.setSelectedItem(ALLUNITS);
097        }
098        
099        /**
100         * User said go, we go. Simply get the list of images
101         * from the imageChooser and create the ADDE.IMAGE.V
102         * DataSource
103         *
104         */
105        public void doLoadInThread() {
106            if ( !getGoodToGo()) {
107                updateStatus();
108                return;
109            }
110    
111            List imageList = getImageList();
112            if(imageList==null || imageList.size()==0) return;
113            ImageDataset ids = new ImageDataset(getDatasetName(), imageList);
114    
115            Hashtable ht = new Hashtable();
116            getDataSourceProperties(ht);
117            ht.put("preview", true);
118            makeDataSource(ids, "ADDE.IMAGE.V", ht);
119            saveServerState();
120        }
121    
122        /**
123         * Make the UI for this selector.
124         * 
125         * @return The gui
126         */   
127        public JComponent doMakeContents() {
128            JPanel myPanel = new JPanel();
129    
130            JLabel timesLabel = McVGuiUtils.makeLabelRight("Times:");
131            addDescComp(timesLabel);
132    
133            JPanel timesPanel = makeTimesPanel();
134            timesPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder());
135            addDescComp(timesPanel);
136    
137            JLabel navigationLabel = McVGuiUtils.makeLabelRight("Navigation:");
138            addDescComp(navigationLabel);
139            
140            // Use processPropertyComponents to build combo boxes that we rely on
141            processPropertyComponents();
142            addDescComp(navComboBox);
143            McVGuiUtils.setComponentWidth(navComboBox, McVGuiUtils.Width.DOUBLE);
144                            
145            GroupLayout layout = new GroupLayout(myPanel);
146            myPanel.setLayout(layout);
147            layout.setHorizontalGroup(
148                    layout.createParallelGroup(LEADING)
149                    .addGroup(layout.createSequentialGroup()
150                            .addGroup(layout.createParallelGroup(LEADING)
151                                    .addGroup(layout.createSequentialGroup()
152                                            .addComponent(descriptorLabel)
153                                            .addGap(GAP_RELATED)
154                                            .addComponent(descriptorComboBox))
155                                            .addGroup(layout.createSequentialGroup()
156                                                    .addComponent(timesLabel)
157                                                    .addGap(GAP_RELATED)
158                                                    .addComponent(timesPanel, PREFERRED_SIZE, DEFAULT_SIZE, Short.MAX_VALUE))
159                                                    .addGroup(layout.createSequentialGroup()
160                                                            .addComponent(navigationLabel)
161                                                            .addGap(GAP_RELATED)
162                                                            .addComponent(navComboBox))))
163            );
164            layout.setVerticalGroup(
165                    layout.createParallelGroup(LEADING)
166                    .addGroup(layout.createSequentialGroup()
167                            .addGroup(layout.createParallelGroup(BASELINE)
168                                    .addComponent(descriptorLabel)
169                                    .addComponent(descriptorComboBox))
170                                    .addPreferredGap(RELATED)
171                                    .addGroup(layout.createParallelGroup(LEADING)
172                                            .addComponent(timesLabel)
173                                            .addComponent(timesPanel, PREFERRED_SIZE, DEFAULT_SIZE, Short.MAX_VALUE))
174                                            .addPreferredGap(RELATED)
175                                            .addGroup(layout.createParallelGroup(LEADING)
176                                                    .addComponent(navigationLabel)
177                                                    .addComponent(navComboBox)))
178            );
179            
180            setInnerPanel(myPanel);
181            return super.doMakeContents(true);
182        }
183    
184    }