001/*
002 * This file is part of McIDAS-V
003 *
004 * Copyright 2007-2024
005 * Space Science and Engineering Center (SSEC)
006 * University of Wisconsin - Madison
007 * 1225 W. Dayton Street, Madison, WI 53706, USA
008 * https://www.ssec.wisc.edu/mcidas/
009 * 
010 * All Rights Reserved
011 * 
012 * McIDAS-V is built on Unidata's IDV and SSEC's VisAD libraries, and
013 * some McIDAS-V source code is based on IDV and VisAD source code.  
014 * 
015 * McIDAS-V is free software; you can redistribute it and/or modify
016 * it under the terms of the GNU Lesser Public License as published by
017 * the Free Software Foundation; either version 3 of the License, or
018 * (at your option) any later version.
019 * 
020 * McIDAS-V is distributed in the hope that it will be useful,
021 * but WITHOUT ANY WARRANTY; without even the implied warranty of
022 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
023 * GNU Lesser Public License for more details.
024 * 
025 * You should have received a copy of the GNU Lesser Public License
026 * along with this program.  If not, see https://www.gnu.org/licenses/.
027 */
028package edu.wisc.ssec.mcidasv.chooser;
029
030import java.awt.Component;
031import java.awt.Container;
032import java.io.File;
033
034import javax.swing.JFileChooser;
035import javax.swing.JLabel;
036
037/**
038 * An extension of JFileChooser, particular to Suomi NPP data.
039 * Mostly that means check for presence of separate HDF5 geolocation
040 * files when needed to bless granules for selection.
041 *
042 * @author Tommy Jasmin
043 */
044
045public class SuomiNPPFileChooser extends JFileChooser {
046
047    /**
048         * default for serializable class
049         */
050        private static final long serialVersionUID = 1L;
051        
052        /**
053         * ref to caller
054         */
055        private SuomiNPPChooser snppc = null;
056
057        /**
058     * Create the file chooser
059     *
060     * @param path   the initial path
061     * @param snppc  the enclosing Suomi Chooser
062     */
063        
064    public SuomiNPPFileChooser(String path, SuomiNPPChooser snppc) {
065        super(path);
066        this.snppc = snppc;
067        setControlButtonsAreShown(false);
068        setMultiSelectionEnabled(true);
069        setAcceptAllFileFilterUsed(false);
070        processChildren(this);
071    }
072
073    private void processChildren(Container c) {
074        Component [] components = c.getComponents();
075        if (components != null) {
076                // loop through all components, looking for the JLabel children of 
077                // components we want to remove
078                for (int i = 0; i < components.length; i++) {
079                        if (components[i] instanceof JLabel) {
080                                String text = ((JLabel) components[i]).getText();
081                                if (text.equals("File Name:")) {
082                                        hideChildren((Container) components[i].getParent());
083                                        continue;
084                                }
085                                if (text.equals("Files of Type:")) {
086                                        hideChildren((Container) components[i].getParent());
087                                        continue;
088                                }
089                        }
090                        // now check this component for any children
091                        processChildren((Container) components[i]);
092                }
093        }
094    }
095    
096    private void hideChildren(Container c) {
097        Component [] components = c.getComponents();
098        for (int i = 0; i < components.length; i++) {
099                components[i].setVisible(false);
100        }
101        c.setVisible(false);
102    }
103
104    /**
105     * Approve the selection
106     */
107    public void approveSelection() {
108        snppc.doLoad();
109    }
110
111    /**
112     * Set the selected files
113     *
114     * @param selectedFiles  the selected files
115     */
116    public void setSelectedFiles(File[] selectedFiles) {
117        super.setSelectedFiles(selectedFiles);
118        snppc.setHaveData( !((selectedFiles == null) || (selectedFiles.length == 0)));
119    }
120}