/* * Copyright (c) 2010 The Jackson Laboratory * * This 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 software 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 software. If not, see <http://www.gnu.org/licenses/>. */ package org.jax.maanova.madata.gui; 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.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JDialog; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import javax.swing.SpinnerNumberModel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import org.jax.maanova.configuration.MaanovaApplicationConfigurationManager; import org.jax.maanova.madata.ArrayType; import org.jax.maanova.madata.ReadMicroarrayDataCommandBuilder; import org.jax.maanova.madata.ReplicateSummaryMethod; import org.jax.r.RCommand; import org.jax.r.RSyntaxException; import org.jax.r.RUtilities; import org.jax.r.gui.RCommandEditorPanel; import org.jax.util.TextWrapper; import org.jax.util.gui.CharacterDelimitedViewDialog; import org.jax.util.gui.SimplifiedDocumentListener; import org.jax.util.io.CommonFlatFileFormat; /** * A panel for generating the R command to read in microarray data * from the tab delimited format understood by R/maanova. * @author <A HREF="mailto:keith.sheppard@jax.org">Keith Sheppard</A> */ public class ReadMicroarrayDataPanel extends RCommandEditorPanel { /** * every {@link java.io.Serializable} is supposed to have one of these */ private static final long serialVersionUID = -3262020753972962789L; /** * our logger */ private static final Logger LOG = Logger.getLogger( ReadMicroarrayDataPanel.class.getName()); private static final int MAX_ROW_COUNT = 200; private final SpinnerNumberModel probeIdColumnSpinnerModel = new SpinnerNumberModel( 1, 1, Integer.MAX_VALUE, 1); private final SpinnerNumberModel intensityColumnSpinnerModel = new SpinnerNumberModel( 1, 1, Integer.MAX_VALUE, 1); private final SpinnerNumberModel metarowColumnSpinnerModel = new SpinnerNumberModel( 1, 1, Integer.MAX_VALUE, 1); private final SpinnerNumberModel metacolumnColumnSpinnerModel = new SpinnerNumberModel( 1, 1, Integer.MAX_VALUE, 1); private final SpinnerNumberModel rowColumnSpinnerModel = new SpinnerNumberModel( 1, 1, Integer.MAX_VALUE, 1); private final SpinnerNumberModel columnColumnSpinnerModel = new SpinnerNumberModel( 1, 1, Integer.MAX_VALUE, 1); private final SpinnerNumberModel numReplicatesSpinnerModel = new SpinnerNumberModel( 1, 1, Integer.MAX_VALUE, 1); /** * A change listener that triggers an update to the R command */ private final ChangeListener commandChangeListener = new ChangeListener() { /** * {@inheritDoc} */ public void stateChanged(ChangeEvent e) { ReadMicroarrayDataPanel.this.updateRCommand(); } }; /** * A document listener that triggers an update to the R command */ private final DocumentListener commandDocumentListener = new SimplifiedDocumentListener() { /** * {@inheritDoc} */ @Override protected void anyUpdate(DocumentEvent e) { ReadMicroarrayDataPanel.this.updateRCommand(); } }; /** * A item listener that triggers and update to the R command */ private final ItemListener commandItemListener = new ItemListener() { /** * {@inheritDoc} */ public void itemStateChanged(ItemEvent e) { ReadMicroarrayDataPanel.this.updateRCommand(); } }; /** * the command builder that we use to create a new read microarray * data command */ private final ReadMicroarrayDataCommandBuilder commandBuilder = new ReadMicroarrayDataCommandBuilder(); private final JDialog parentDialog; /** * Constructor * @param parentDialog * the parent dialog for this dialog */ public ReadMicroarrayDataPanel(JDialog parentDialog) { this.parentDialog = parentDialog; this.initComponents(); this.postGuiInit(); } /** * Take care of the initialization that isn't handled by the GUI builder */ private void postGuiInit() { // initialize probe ID stuff this.probeIdColumnCheckBox.setSelected( this.commandBuilder.isProbeIdColumnValid()); this.probeIdColumnCheckBox.addChangeListener(new ChangeListener() { /** * {@inheritDoc} */ public void stateChanged(ChangeEvent e) { ReadMicroarrayDataPanel.this.updateRCommand(); ReadMicroarrayDataPanel.this.refreshProbeIdColumnEnabled(); } }); this.probeIdColumnSpinnerModel.setValue( this.commandBuilder.getProbeIdColumn()); this.probeIdColumnSpinnerModel.addChangeListener(this.commandChangeListener); this.probeIdColumnSpinner.setModel(this.probeIdColumnSpinnerModel); // initialize the spinners (mostly column spinners) this.intensityColumnSpinnerModel.setValue(this.commandBuilder.getIntensityColumn()); this.metarowColumnSpinnerModel.setValue(this.commandBuilder.getMetarowColumn()); this.metacolumnColumnSpinnerModel.setValue(this.commandBuilder.getMetacolumnColumn()); this.rowColumnSpinnerModel.setValue(this.commandBuilder.getRowColumn()); this.columnColumnSpinnerModel.setValue(this.commandBuilder.getColumnColumn()); this.numReplicatesSpinnerModel.setValue(this.commandBuilder.getNumberOfReplicates()); this.intensityColumnSpinner.setModel(this.intensityColumnSpinnerModel); this.metarowColumnSpinner.setModel(this.metarowColumnSpinnerModel); this.metacolumnColumnSpinner.setModel(this.metacolumnColumnSpinnerModel); this.rowColumnSpinner.setModel(this.rowColumnSpinnerModel); this.columnColumnSpinner.setModel(this.columnColumnSpinnerModel); this.numReplicatesSpinner.setModel(this.numReplicatesSpinnerModel); this.intensityColumnSpinnerModel.addChangeListener(this.commandChangeListener); this.metarowColumnSpinnerModel.addChangeListener(this.commandChangeListener); this.metacolumnColumnSpinnerModel.addChangeListener(this.commandChangeListener); this.rowColumnSpinnerModel.addChangeListener(this.commandChangeListener); this.columnColumnSpinnerModel.addChangeListener(this.commandChangeListener); this.numReplicatesSpinnerModel.addChangeListener(new ChangeListener() { /** * {@inheritDoc} */ public void stateChanged(ChangeEvent e) { ReadMicroarrayDataPanel.this.updateRCommand(); ReadMicroarrayDataPanel.this.refreshCollapseReplicatesEnabled(); } }); // initialize the input files this.dataFileTextField.getDocument().addDocumentListener( this.commandDocumentListener); this.designFileTextField.getDocument().addDocumentListener( this.commandDocumentListener); this.browseDataFileButton.addActionListener(new ActionListener() { /** * {@inheritDoc} */ public void actionPerformed(ActionEvent e) { ReadMicroarrayDataPanel.this.browseDataFiles(); } }); this.previewDataFileButton.addActionListener(new ActionListener() { /** * {@inheritDoc} */ public void actionPerformed(ActionEvent e) { ReadMicroarrayDataPanel.this.previewDataFile(); } }); this.browseDesignFileButton.addActionListener(new ActionListener() { /** * {@inheritDoc} */ public void actionPerformed(ActionEvent e) { ReadMicroarrayDataPanel.this.browseDesignFiles(); } }); this.previewDesignFileButton.addActionListener(new ActionListener() { /** * {@inheritDoc} */ public void actionPerformed(ActionEvent e) { ReadMicroarrayDataPanel.this.previewDesignFile(); } }); // initialize the check boxes this.includeMetarowMetacolumnCheckBox.setSelected( this.commandBuilder.getMetarowAndMetacolumnValid()); this.spotFlagIncludedCheckBox.setSelected( this.commandBuilder.getFilesIncludeSpotFlag()); this.log2TransformCheckBox.setSelected( this.commandBuilder.getLogTwoTransformData()); this.includeMetarowMetacolumnCheckBox.addItemListener(new ItemListener() { /** * {@inheritDoc} */ public void itemStateChanged(ItemEvent e) { ReadMicroarrayDataPanel.this.updateRCommand(); ReadMicroarrayDataPanel.this.refreshMetarowMetacolumnEnabled(); } }); this.spotFlagIncludedCheckBox.addItemListener( this.commandItemListener); this.log2TransformCheckBox.addItemListener( this.commandItemListener); // initialize the array type for(ArrayType arrayType: ArrayType.values()) { this.arrayTypeComboBox.addItem(arrayType); } this.arrayTypeComboBox.setSelectedItem( this.commandBuilder.getArrayType()); this.arrayTypeComboBox.addItemListener(new ItemListener() { /** * {@inheritDoc} */ public void itemStateChanged(ItemEvent e) { ReadMicroarrayDataPanel.this.updateRCommand(); ReadMicroarrayDataPanel.this.refreshAllEnabled(); } }); // initialize the "collapse replicates" combo box for(ReplicateSummaryMethod replicateSummaryMethod: ReplicateSummaryMethod.values()) { this.collapseReplicatesComboBox.addItem(replicateSummaryMethod); } this.collapseReplicatesComboBox.setSelectedItem( this.commandBuilder.getReplicateSummaryMethod()); this.collapseReplicatesComboBox.addItemListener( this.commandItemListener); // initialize the data name this.dataNameTextField.getDocument().addDocumentListener( this.commandDocumentListener); this.refreshAllEnabled(); } /** * open up a preview of the design file */ private void previewDesignFile() { CharacterDelimitedViewDialog.viewFlatFile( "Microarray Design Preview", this.commandBuilder.getDesignFileName(), CommonFlatFileFormat.TAB_DELIMITED_UNIX, this.commandBuilder.getFilesIncludeHeader(), this.parentDialog, MAX_ROW_COUNT); } /** * open up a preview of the data file */ private void previewDataFile() { CharacterDelimitedViewDialog.viewFlatFile( "Microarray Data Preview", this.commandBuilder.getDataFileName(), CommonFlatFileFormat.TAB_DELIMITED_UNIX, this.commandBuilder.getFilesIncludeHeader(), this.parentDialog, MAX_ROW_COUNT); } /** * open up the file chooser for design files */ private void browseDesignFiles() { MaanovaApplicationConfigurationManager manager = MaanovaApplicationConfigurationManager.getInstance(); JFileChooser fileChooser = new JFileChooser( manager.getStartingDataDirectory()); fileChooser.setDialogTitle("Select Microarray Design File"); fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); fileChooser.setMultiSelectionEnabled(false); int response = fileChooser.showOpenDialog(this); if(response == JFileChooser.APPROVE_OPTION) { File selectedFile = fileChooser.getSelectedFile(); if(selectedFile != null) { this.designFileTextField.setText( selectedFile.getAbsolutePath()); // update the starting directory which is the default location // that the file chooser opens to File newMicroarrayStartingDirectory = selectedFile.getParentFile(); manager.setStartingDataDirectory(newMicroarrayStartingDirectory); } } } /** * open up the file chooser for data files */ private void browseDataFiles() { MaanovaApplicationConfigurationManager manager = MaanovaApplicationConfigurationManager.getInstance(); JFileChooser fileChooser = new JFileChooser( manager.getStartingDataDirectory()); fileChooser.setDialogTitle("Select Microarray Data File"); fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); fileChooser.setMultiSelectionEnabled(false); int response = fileChooser.showOpenDialog(this); if(response == JFileChooser.APPROVE_OPTION) { File selectedFile = fileChooser.getSelectedFile(); if(selectedFile != null) { this.dataFileTextField.setText( selectedFile.getAbsolutePath()); // update the starting directory which is the default location // that the file chooser opens to File newMicroarrayStartingDirectory = selectedFile.getParentFile(); manager.setStartingDataDirectory(newMicroarrayStartingDirectory); } } } /** * refresh all of the enabled/disabled settings */ private void refreshAllEnabled() { // en/disable the two-color specific stuff boolean isTwoColor = this.commandBuilder.getArrayType() == ArrayType.TWO_COLOR; this.twoColorArraySettingsPanel.setEnabled(isTwoColor); this.includeMetarowMetacolumnCheckBox.setEnabled(isTwoColor); this.rowColumnLabel.setEnabled(isTwoColor); this.rowColumnSpinner.setEnabled(isTwoColor); this.columnColumnLabel.setEnabled(isTwoColor); this.columnColumnSpinner.setEnabled(isTwoColor); this.numReplicatesLabel.setEnabled(isTwoColor); this.numReplicatesSpinner.setEnabled(isTwoColor); this.refreshProbeIdColumnEnabled(); this.refreshMetarowMetacolumnEnabled(); this.refreshCollapseReplicatesEnabled(); } /** * refresh the enabled state of the probe ID spinner */ private void refreshProbeIdColumnEnabled() { this.probeIdColumnSpinner.setEnabled( this.commandBuilder.isProbeIdColumnValid()); } /** * refresh the enabled state of the collapse replicates check box */ private void refreshCollapseReplicatesEnabled() { // collapse replicates is only enabled for two color arrays with // >= 2 replicates boolean collapseReplicatesEnabled = this.commandBuilder.getArrayType() == ArrayType.TWO_COLOR && this.commandBuilder.getNumberOfReplicates() >= 2; this.collapseReplicatesLabel.setEnabled(collapseReplicatesEnabled); this.collapseReplicatesComboBox.setEnabled(collapseReplicatesEnabled); } /** * Refresh the enabled state of the metarow and metacolumn */ private void refreshMetarowMetacolumnEnabled() { // metarow and metacol are only enabled for two-color arrays boolean metarowAndMetacolumnEnabled = this.commandBuilder.getArrayType() == ArrayType.TWO_COLOR && this.includeMetarowMetacolumnCheckBox.isSelected(); this.metarowColumnLabel.setEnabled(metarowAndMetacolumnEnabled); this.metarowColumnSpinner.setEnabled(metarowAndMetacolumnEnabled); this.metacolumnColumnLabel.setEnabled(metarowAndMetacolumnEnabled); this.metacolumnColumnSpinner.setEnabled(metarowAndMetacolumnEnabled); } /** * Validate the data in this panel * @return * true iff the data is valid */ public boolean validateData() { String readableMicroarrayName = this.dataNameTextField.getText().trim(); // validate the data name String validationErrorMessage = RUtilities.getErrorMessageForReadableName( readableMicroarrayName); if(validationErrorMessage == null) { if(readableMicroarrayName.length() == 0) { validationErrorMessage = "The microarray data name cannot be empty. See help for " + "more detailed information."; } else { // validate the input files File experimentDataFile = new File( this.dataFileTextField.getText().trim()); if(!experimentDataFile.isFile()) { validationErrorMessage = "The data file \"" + this.dataFileTextField.getText() + "\" is either missing, or a directory. Please select " + "an existing file before proceeding."; } else { File designFile = new File( this.designFileTextField.getText().trim()); if(!designFile.isFile()) { validationErrorMessage = "The design file \"" + this.designFileTextField.getText() + "\" is either missing, or a directory. Please select " + "an existing file before proceeding."; } else { // make sure that all the column numbers are unique... // this is done selectively because we shouldn't be // validating for any of the column numbers in a // greyed out spinner Map<Integer, String> columnNumberMap = new HashMap<Integer, String>(); List<String> labelList = new ArrayList<String>(); List<SpinnerNumberModel> spinnerList = new ArrayList<SpinnerNumberModel>(); if(this.probeIdColumnCheckBox.isSelected()) { labelList.add(this.probeIdColumnCheckBox.getText()); spinnerList.add(this.probeIdColumnSpinnerModel); } labelList.add(this.intensityColumnLabel.getText()); spinnerList.add(this.intensityColumnSpinnerModel); if(this.commandBuilder.getArrayType() == ArrayType.TWO_COLOR) { if(this.commandBuilder.getMetarowAndMetacolumnValid()) { labelList.add(this.metarowColumnLabel.getText()); spinnerList.add(this.metarowColumnSpinnerModel); labelList.add(this.metacolumnColumnLabel.getText()); spinnerList.add(this.metacolumnColumnSpinnerModel); } labelList.add(this.rowColumnLabel.getText()); spinnerList.add(this.rowColumnSpinnerModel); labelList.add(this.columnColumnLabel.getText()); spinnerList.add(this.columnColumnSpinnerModel); } int columnValidationCount = labelList.size(); for(int i = 0; i < columnValidationCount && validationErrorMessage == null; i++) { validationErrorMessage = this.validateColumnIsUnique( columnNumberMap, labelList.get(i), spinnerList.get(i)); } } } } } if(validationErrorMessage != null) { JOptionPane.showMessageDialog( this, TextWrapper.wrapText( validationErrorMessage, TextWrapper.DEFAULT_DIALOG_COLUMN_COUNT), "Validation Failed", JOptionPane.WARNING_MESSAGE); return false; } else { return true; } } /** * Convenience function for validating that the given column model contains * a unique numbering * @param previousColumnsMap * a map containing previous column number and name value pairs. * this map gets updated by this function call if it's * successful * @param columnLabel * the label for the current column * @param columnModel * the spinner model for the current column * @return * null if its valid and an error message if it isn't */ private String validateColumnIsUnique( Map<Integer, String> previousColumnsMap, String columnLabel, SpinnerNumberModel columnModel) { String columnName = this.labelStringToPlainString(columnLabel); int columnValue = columnModel.getNumber().intValue(); if(previousColumnsMap.containsKey(columnValue)) { String prevColumnName = previousColumnsMap.get(columnValue); return "Column numbering must be unique. Both \"" + prevColumnName + "\" and \"" + columnName + "\" are specifying column number: " + columnValue + ". Please resolve this before proceeding."; } else { previousColumnsMap.put(columnValue, columnName); return null; } } /** * Convenience function for getting a string name from a label * @param labelString * the label string * @return * the plain string string */ private String labelStringToPlainString(String labelString) { labelString = labelString.trim(); // if there's a trailing colon, remove it if(labelString.endsWith(":")) { return labelString.substring(0, labelString.length() - 1); } else { return labelString; } } /** * Update the R command to reflect the current state of the GUI */ private void updateRCommand() { // update the probe ID this.commandBuilder.setProbeIdColumn( this.probeIdColumnSpinnerModel.getNumber().intValue()); this.commandBuilder.setProbeIdColumnValid( this.probeIdColumnCheckBox.isSelected()); // update the array type this.commandBuilder.setArrayType( (ArrayType)this.arrayTypeComboBox.getSelectedItem()); // update the number of replicates this.commandBuilder.setNumberOfReplicates( this.numReplicatesSpinnerModel.getNumber().intValue()); // update the command using the spinner values this.commandBuilder.setIntensityColumn( this.intensityColumnSpinnerModel.getNumber().intValue()); this.commandBuilder.setMetarowColumn( this.metarowColumnSpinnerModel.getNumber().intValue()); this.commandBuilder.setMetacolumnColumn( this.metacolumnColumnSpinnerModel.getNumber().intValue()); this.commandBuilder.setRowColumn( this.rowColumnSpinnerModel.getNumber().intValue()); this.commandBuilder.setColumnColumn( this.columnColumnSpinnerModel.getNumber().intValue()); // update the input files this.commandBuilder.setDataFileName( this.dataFileTextField.getText()); this.commandBuilder.setDesignFileName( this.designFileTextField.getText()); // update the boolean values this.commandBuilder.setMetarowAndMetacolumnValid( this.includeMetarowMetacolumnCheckBox.isSelected()); this.commandBuilder.setFilesIncludeSpotFlag( this.spotFlagIncludedCheckBox.isSelected()); this.commandBuilder.setLogTwoTransformData( this.log2TransformCheckBox.isSelected()); // update the data object name try { String dataRIdentifier = RUtilities.fromReadableNameToRIdentifier( this.dataNameTextField.getText()); this.commandBuilder.setMicroarrayDataName( dataRIdentifier); } catch(RSyntaxException ex) { LOG.log(Level.FINE, "can't convert readable name to an R identifier", ex); } this.fireCommandModified(); } /** * {@inheritDoc} */ public RCommand[] getCommands() { return new RCommand[] {this.commandBuilder.getCommand()}; } /** * Getter for the command builder * @return the commandBuilder */ public ReadMicroarrayDataCommandBuilder getCommandBuilder() { return this.commandBuilder; } /** * 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. */ @SuppressWarnings("all") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { javax.swing.JPanel fileInputPanel = new javax.swing.JPanel(); javax.swing.JLabel dataFileLabel = new javax.swing.JLabel(); dataFileTextField = new javax.swing.JTextField(); browseDataFileButton = new javax.swing.JButton(); previewDataFileButton = new javax.swing.JButton(); javax.swing.JLabel designFileLabel = new javax.swing.JLabel(); designFileTextField = new javax.swing.JTextField(); browseDesignFileButton = new javax.swing.JButton(); previewDesignFileButton = new javax.swing.JButton(); javax.swing.JPanel generalSettingsPanel = new javax.swing.JPanel(); javax.swing.JLabel arrayTypeLabel = new javax.swing.JLabel(); arrayTypeComboBox = new javax.swing.JComboBox(); probeIdColumnSpinner = new javax.swing.JSpinner(); intensityColumnLabel = new javax.swing.JLabel(); intensityColumnSpinner = new javax.swing.JSpinner(); log2TransformCheckBox = new javax.swing.JCheckBox(); probeIdColumnCheckBox = new javax.swing.JCheckBox(); twoColorArraySettingsPanel = new javax.swing.JPanel(); collapseReplicatesLabel = new javax.swing.JLabel(); collapseReplicatesComboBox = new javax.swing.JComboBox(); javax.swing.JLabel numReplicatesLabel1 = new javax.swing.JLabel(); javax.swing.JLabel numReplicatesLabel2 = new javax.swing.JLabel(); numReplicatesSpinner = new javax.swing.JSpinner(); numReplicatesLabel = new javax.swing.JLabel(); spotFlagIncludedCheckBox = new javax.swing.JCheckBox(); rowColumnLabel = new javax.swing.JLabel(); rowColumnSpinner = new javax.swing.JSpinner(); columnColumnLabel = new javax.swing.JLabel(); columnColumnSpinner = new javax.swing.JSpinner(); includeMetarowMetacolumnCheckBox = new javax.swing.JCheckBox(); metarowColumnLabel = new javax.swing.JLabel(); metarowColumnSpinner = new javax.swing.JSpinner(); metacolumnColumnLabel = new javax.swing.JLabel(); metacolumnColumnSpinner = new javax.swing.JSpinner(); dataNameLabel = new javax.swing.JLabel(); dataNameTextField = new javax.swing.JTextField(); fileInputPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Input Files")); dataFileLabel.setText("Experiment Data:"); browseDataFileButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/action/browse-16x16.png"))); // NOI18N browseDataFileButton.setText("Browse ..."); previewDataFileButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/action/preview-16x16.png"))); // NOI18N previewDataFileButton.setText("Preview ..."); designFileLabel.setText("Experiment Design:"); browseDesignFileButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/action/browse-16x16.png"))); // NOI18N browseDesignFileButton.setText("Browse ..."); previewDesignFileButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/action/preview-16x16.png"))); // NOI18N previewDesignFileButton.setText("Preview ..."); org.jdesktop.layout.GroupLayout fileInputPanelLayout = new org.jdesktop.layout.GroupLayout(fileInputPanel); fileInputPanel.setLayout(fileInputPanelLayout); fileInputPanelLayout.setHorizontalGroup( fileInputPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(fileInputPanelLayout.createSequentialGroup() .addContainerGap() .add(fileInputPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(designFileLabel) .add(dataFileLabel)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(fileInputPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) .add(dataFileTextField, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 185, Short.MAX_VALUE) .add(designFileTextField, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 185, Short.MAX_VALUE)) .add(14, 14, 14) .add(fileInputPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) .add(browseDataFileButton) .add(browseDesignFileButton)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(fileInputPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(previewDataFileButton) .add(org.jdesktop.layout.GroupLayout.TRAILING, previewDesignFileButton)) .addContainerGap()) ); fileInputPanelLayout.setVerticalGroup( fileInputPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(fileInputPanelLayout.createSequentialGroup() .addContainerGap() .add(fileInputPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(fileInputPanelLayout.createSequentialGroup() .add(fileInputPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(dataFileLabel) .add(previewDataFileButton) .add(browseDataFileButton) .add(dataFileTextField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(fileInputPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(designFileLabel) .add(designFileTextField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))) .add(fileInputPanelLayout.createSequentialGroup() .add(33, 33, 33) .add(fileInputPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(previewDesignFileButton) .add(browseDesignFileButton)))) .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); generalSettingsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("General Settings")); arrayTypeLabel.setText("Array Type:"); probeIdColumnSpinner.setPreferredSize(new java.awt.Dimension(50, 24)); intensityColumnLabel.setText("First Intensity Column:"); intensityColumnSpinner.setPreferredSize(new java.awt.Dimension(50, 24)); log2TransformCheckBox.setText("Log2 Transform Intensity Values"); probeIdColumnCheckBox.setText("Probe ID Column (Optional):"); org.jdesktop.layout.GroupLayout generalSettingsPanelLayout = new org.jdesktop.layout.GroupLayout(generalSettingsPanel); generalSettingsPanel.setLayout(generalSettingsPanelLayout); generalSettingsPanelLayout.setHorizontalGroup( generalSettingsPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(generalSettingsPanelLayout.createSequentialGroup() .add(5, 5, 5) .add(generalSettingsPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(generalSettingsPanelLayout.createSequentialGroup() .add(arrayTypeLabel) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(arrayTypeComboBox, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .add(generalSettingsPanelLayout.createSequentialGroup() .add(generalSettingsPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(intensityColumnLabel) .add(probeIdColumnCheckBox)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(generalSettingsPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(probeIdColumnSpinner, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(generalSettingsPanelLayout.createSequentialGroup() .add(intensityColumnSpinner, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(log2TransformCheckBox))))) .add(27, 27, 27)) ); generalSettingsPanelLayout.setVerticalGroup( generalSettingsPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(generalSettingsPanelLayout.createSequentialGroup() .add(10, 10, 10) .add(generalSettingsPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(arrayTypeLabel) .add(arrayTypeComboBox, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .add(14, 14, 14) .add(generalSettingsPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(probeIdColumnSpinner, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(probeIdColumnCheckBox)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(generalSettingsPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(intensityColumnLabel) .add(intensityColumnSpinner, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(log2TransformCheckBox)) .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); twoColorArraySettingsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Two-Color Array Settings")); collapseReplicatesLabel.setText("Collapse Replicates To:"); numReplicatesLabel1.setText("Number of Replicates:"); numReplicatesLabel2.setText("Number of Replicates:"); numReplicatesSpinner.setPreferredSize(new java.awt.Dimension(50, 24)); numReplicatesLabel.setText("Number of Replicates:"); spotFlagIncludedCheckBox.setText("Data Includes Spot Flag"); rowColumnLabel.setText("Probe Row Column:"); rowColumnSpinner.setPreferredSize(new java.awt.Dimension(50, 24)); columnColumnLabel.setText("Probe Column Column:"); columnColumnSpinner.setPreferredSize(new java.awt.Dimension(50, 24)); includeMetarowMetacolumnCheckBox.setText("Data Includes Metarow and Metacolumn"); metarowColumnLabel.setText("Probe Metarow Column:"); metarowColumnSpinner.setPreferredSize(new java.awt.Dimension(50, 24)); metacolumnColumnLabel.setText("Probe Metacolumn Column:"); metacolumnColumnSpinner.setPreferredSize(new java.awt.Dimension(50, 24)); org.jdesktop.layout.GroupLayout twoColorArraySettingsPanelLayout = new org.jdesktop.layout.GroupLayout(twoColorArraySettingsPanel); twoColorArraySettingsPanel.setLayout(twoColorArraySettingsPanelLayout); twoColorArraySettingsPanelLayout.setHorizontalGroup( twoColorArraySettingsPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(twoColorArraySettingsPanelLayout.createSequentialGroup() .addContainerGap() .add(twoColorArraySettingsPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(includeMetarowMetacolumnCheckBox) .add(twoColorArraySettingsPanelLayout.createSequentialGroup() .add(twoColorArraySettingsPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(metarowColumnLabel) .add(numReplicatesLabel) .add(rowColumnLabel)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(twoColorArraySettingsPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(twoColorArraySettingsPanelLayout.createSequentialGroup() .add(metarowColumnSpinner, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(metacolumnColumnLabel)) .add(twoColorArraySettingsPanelLayout.createSequentialGroup() .add(numReplicatesSpinner, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(collapseReplicatesLabel)) .add(twoColorArraySettingsPanelLayout.createSequentialGroup() .add(rowColumnSpinner, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(columnColumnLabel))) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(twoColorArraySettingsPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(columnColumnSpinner, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(collapseReplicatesComboBox, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(metacolumnColumnSpinner, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))) .add(spotFlagIncludedCheckBox)) .addContainerGap(65, Short.MAX_VALUE)) ); twoColorArraySettingsPanelLayout.setVerticalGroup( twoColorArraySettingsPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(twoColorArraySettingsPanelLayout.createSequentialGroup() .addContainerGap() .add(includeMetarowMetacolumnCheckBox) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(twoColorArraySettingsPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(metarowColumnLabel) .add(metarowColumnSpinner, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(metacolumnColumnLabel) .add(metacolumnColumnSpinner, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(twoColorArraySettingsPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(rowColumnLabel) .add(rowColumnSpinner, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(columnColumnLabel) .add(columnColumnSpinner, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(twoColorArraySettingsPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(numReplicatesLabel) .add(collapseReplicatesLabel) .add(numReplicatesSpinner, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(collapseReplicatesComboBox, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(spotFlagIncludedCheckBox) .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); dataNameLabel.setText("Microarray Data Object Name:"); org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .addContainerGap() .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(org.jdesktop.layout.GroupLayout.TRAILING, twoColorArraySettingsPanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .add(org.jdesktop.layout.GroupLayout.TRAILING, generalSettingsPanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 551, Short.MAX_VALUE) .add(fileInputPanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .add(layout.createSequentialGroup() .add(dataNameLabel) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(dataNameTextField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 153, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .addContainerGap() .add(fileInputPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(generalSettingsPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(twoColorArraySettingsPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(dataNameLabel) .add(dataNameTextField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); }// </editor-fold>//GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JComboBox arrayTypeComboBox; private javax.swing.JButton browseDataFileButton; private javax.swing.JButton browseDesignFileButton; private javax.swing.JComboBox collapseReplicatesComboBox; private javax.swing.JLabel collapseReplicatesLabel; private javax.swing.JLabel columnColumnLabel; private javax.swing.JSpinner columnColumnSpinner; private javax.swing.JTextField dataFileTextField; private javax.swing.JLabel dataNameLabel; private javax.swing.JTextField dataNameTextField; private javax.swing.JTextField designFileTextField; private javax.swing.JCheckBox includeMetarowMetacolumnCheckBox; private javax.swing.JLabel intensityColumnLabel; private javax.swing.JSpinner intensityColumnSpinner; private javax.swing.JCheckBox log2TransformCheckBox; private javax.swing.JLabel metacolumnColumnLabel; private javax.swing.JSpinner metacolumnColumnSpinner; private javax.swing.JLabel metarowColumnLabel; private javax.swing.JSpinner metarowColumnSpinner; private javax.swing.JLabel numReplicatesLabel; private javax.swing.JSpinner numReplicatesSpinner; private javax.swing.JButton previewDataFileButton; private javax.swing.JButton previewDesignFileButton; private javax.swing.JCheckBox probeIdColumnCheckBox; private javax.swing.JSpinner probeIdColumnSpinner; private javax.swing.JLabel rowColumnLabel; private javax.swing.JSpinner rowColumnSpinner; private javax.swing.JCheckBox spotFlagIncludedCheckBox; private javax.swing.JPanel twoColorArraySettingsPanel; // End of variables declaration//GEN-END:variables }