/* * #%L * gitools-ui-app * %% * Copyright (C) 2013 Universitat Pompeu Fabra - Biomedical Genomics group * %% * 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/gpl-3.0.html>. * #L% */ package org.gitools.ui.app.analysis.wizard; import org.gitools.api.persistence.FileFormat; import org.gitools.ui.core.utils.DocumentChangeListener; import org.gitools.ui.core.utils.FileChooserUtils; import org.gitools.ui.core.utils.FileFormatFilter; import org.gitools.ui.platform.IconUtils; import org.gitools.ui.platform.dialog.MessageStatus; import org.gitools.ui.platform.icons.IconNames; import org.gitools.ui.platform.settings.Settings; import org.gitools.ui.platform.wizard.AbstractWizardPage; import javax.swing.*; import javax.swing.event.DocumentEvent; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; public class SelectFilePage extends AbstractWizardPage { private static final FileFormat anyFileFormat = new FileFormat("Any file format", "", false, false); private static final FileFormat[] defaultFormats = new FileFormat[]{anyFileFormat}; private final FileFormat[] formats; private boolean blankFileAllowed; public SelectFilePage(FileFormat[] formats) { setTitle("Select file"); setLogo(IconUtils.getImageIconResourceScaledByHeight(IconNames.LOGO_SELECT_FILE, 96)); initComponents(); this.formats = formats != null ? formats : defaultFormats; blankFileAllowed = false; formatCb.setModel(new DefaultComboBoxModel(formats)); formatCb.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { updateState(); } }); DocumentChangeListener docCompleteListener = new DocumentChangeListener() { @Override protected void update(DocumentEvent e) { updateState(); } }; valueCb.setVisible(false); valueLabel.setVisible(false); filePath.getDocument().addDocumentListener(docCompleteListener); } void updateState() { FileFormat ff = getFileFormat(); setMessage(MessageStatus.INFO, ""); boolean complete; String path = filePath.getText().trim().toLowerCase(); if (!path.isEmpty()) { if (!ff.checkExtension(path)) { setMessage(MessageStatus.WARN, "The file extension doesn't match the selected format"); } } complete = blankFileAllowed || !filePath.getText().isEmpty(); path = filePath.getText(); if (!path.isEmpty()) { File rowsFilterFile = new File(path); if (!rowsFilterFile.exists()) { //complete = false; setMessage(MessageStatus.WARN, "File not found: " + path); } } setComplete(complete); } @Override public JComponent createControls() { return this; } public void setBlankFileAllowed(boolean allowed) { this.blankFileAllowed = allowed; updateState(); } protected String getLastPath() { return Settings.get().getLastDataPath(); } protected void setLastPath(String path) { Settings.get().setLastDataPath(path); } /** * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jLabel1 = new javax.swing.JLabel(); formatCb = new javax.swing.JComboBox(); jLabel2 = new javax.swing.JLabel(); filePath = new javax.swing.JTextField(); fileBrowseBtn = new javax.swing.JButton(); valueLabel = new javax.swing.JLabel(); valueCb = new javax.swing.JComboBox(); jLabel1.setText("Format"); formatCb.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"Binary data matrix", "Continuous data matrix"})); jLabel2.setText("File"); fileBrowseBtn.setText("Browse..."); fileBrowseBtn.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { fileBrowseBtnActionPerformed(evt); } }); valueLabel.setText("Value"); valueLabel.setEnabled(false); valueCb.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"Value1", "Value2"})); valueCb.setEnabled(false); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addComponent(jLabel1).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(formatCb, 0, 576, Short.MAX_VALUE)).addGroup(layout.createSequentialGroup().addComponent(jLabel2).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(filePath, javax.swing.GroupLayout.DEFAULT_SIZE, 519, Short.MAX_VALUE).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(fileBrowseBtn)).addGroup(layout.createSequentialGroup().addComponent(valueLabel).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(valueCb, 0, 586, Short.MAX_VALUE))).addContainerGap())); layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel1).addComponent(formatCb, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)).addGap(18, 18, 18).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(fileBrowseBtn).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(filePath, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(jLabel2))).addGap(18, 18, 18).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(valueLabel).addComponent(valueCb, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)).addContainerGap(238, Short.MAX_VALUE))); }// </editor-fold>//GEN-END:initComponents private void fileBrowseBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileBrowseBtnActionPerformed boolean anyFormat = formats.length == 1 && formats[0] == anyFileFormat; FileFormatFilter any = new FileFormatFilter(anyFileFormat.getTitle(), anyFileFormat); FileFormatFilter[] filters = null; if (anyFormat) { filters = new FileFormatFilter[]{any}; } else { filters = new FileFormatFilter[formats.length + 2]; filters[0] = any; filters[1] = new FileFormatFilter("Known formats", formats); for (int i = 0; i < formats.length; i++) filters[i + 2] = new FileFormatFilter(formats[i]); } File selPath = FileChooserUtils.selectFile("Select file", getLastPath(), FileChooserUtils.MODE_OPEN, filters).getFile(); if (selPath != null) { setFile(selPath); setLastPath(selPath.getAbsolutePath()); } }//GEN-LAST:event_fileBrowseBtnActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton fileBrowseBtn; private javax.swing.JTextField filePath; private javax.swing.JComboBox formatCb; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JComboBox valueCb; private javax.swing.JLabel valueLabel; // End of variables declaration//GEN-END:variables public FileFormat getFileFormat() { return (FileFormat) formatCb.getSelectedItem(); } public File getFile() { String path = filePath.getText(); return path.isEmpty() ? null : new File(path); } public void setFile(File file) { String fileName = file.getName(); for (FileFormat f : formats) if (f.checkExtension(fileName)) { formatCb.setSelectedItem(f); break; } filePath.setText(file.getAbsolutePath()); updateState(); } void activateValueSelection() { valueCb.setVisible(true); valueLabel.setVisible(true); valueCb.setEnabled(true); valueLabel.setEnabled(true); } void deactivateValueSelection() { valueCb.setEnabled(false); valueLabel.setEnabled(false); valueCb.setVisible(false); valueLabel.setVisible(false); } void setValues(String[] values) { valueCb.setModel(new DefaultComboBoxModel(values)); } public int getSelectedValueIndex() { if (valueCb.isEnabled() == true) { return valueCb.getSelectedIndex(); } else { return -1; /* return -1 if not enabled */ } } /** * @noinspection UnusedDeclaration */ public String[] getValues() { //if (valueCb.isEnabled() == true) //TODO: return items return new String[0]; } }