/*
* The MIT License (MIT)
*
* Copyright (c) 2007-2015 Broad Institute
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package org.broad.igv.feature.genome;
import org.apache.log4j.Logger;
import org.broad.igv.Globals;
import org.broad.igv.prefs.PreferencesManager;
import org.broad.igv.ui.IGV;
import org.broad.igv.ui.util.FileDialogUtils;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.Serializable;
import java.util.Collection;
/**
* @author eflakes
*/
public class GenomeBuilderPane extends javax.swing.JPanel implements Serializable {
private static Logger logger = Logger.getLogger(GenomeBuilderPane.class);
private String genomeArchiveLocation;
private String genomeFilename;
GenomeImporter importer;
IGV igv;
public GenomeBuilderPane() {
initComponents();
importer = new GenomeImporter();
}
public void setIgv(IGV igv) {
this.igv = igv;
}
public String getCytobandFileName() {
String cytobandFile = cytobandFileTextField.getText();
if (cytobandFile != null && cytobandFile.trim().equals("")) {
cytobandFile = null;
}
return cytobandFile;
}
public String getGeneAnnotFileName() {
String refFlatFile = geneAnnotFileTextField.getText();
if (refFlatFile != null && refFlatFile.trim().equals("")) {
refFlatFile = null;
}
return refFlatFile;
}
public String getFastaFileName() {
String fastaFile = fastaFileTextField.getText();
if (fastaFile != null && fastaFile.trim().equals("")) {
fastaFile = null;
}
return fastaFile;
}
public String getChrAliasFileName() {
String chrAliasFile = chrAliasField.getText();
if (chrAliasFile != null && chrAliasFile.trim().equals("")) {
chrAliasFile = null;
}
return chrAliasFile;
}
public String getGenomeId() {
return idField.getText();
}
// public String getSequenceURL() {
// return sequenceURLField.getText();
// }
public String getGenomeDisplayName() {
String name = genomeDisplayNameTextField.getText();
if (name != null && name.trim().equals("")) {
name = null;
} else {
name = name.trim();
}
return name;
}
public String getGenomeArchiveLocation() {
if (genomeArchiveLocation != null && genomeArchiveLocation.trim().equals("")) {
genomeArchiveLocation = null;
}
return genomeArchiveLocation;
}
public String getArchiveFileName() {
if (genomeFilename == null) {
genomeFilename = getGenomeId() + Globals.GENOME_FILE_EXTENSION;
}
return genomeFilename;
}
protected File showGenomeArchiveDirectoryChooser() {
File directory = PreferencesManager.getPreferences().getLastGenomeImportDirectory();
File archiveName = new File(getGenomeId() + Globals.GENOME_FILE_EXTENSION);
File file = FileDialogUtils.chooseFile("Save Genome File", directory, archiveName, FileDialogUtils.SAVE);
if (file != null) {
genomeFilename = file.getName();
if (genomeFilename != null) {
if (!genomeFilename.endsWith(Globals.GENOME_FILE_EXTENSION)) {
genomeFilename += Globals.GENOME_FILE_EXTENSION;
file = new File(file.getParentFile(), genomeFilename);
}
genomeArchiveLocation = file.getParentFile().getAbsolutePath();
}
}
return file;
}
public boolean validateSelection() {
try {
if (!isIdValid()) {
return false;
}
if (!isGenomeDisplayNameValid()) {
genomeDisplayNameTextField.setText(null);
return false;
}
if (!isFASTAFileValid()) {
JOptionPane.showMessageDialog(this, "A fasta file is required!");
return false;
}
} catch (Exception e) {
logger.error("Error during Genome Builder validation!", e);
return false;
}
return true;
}
private boolean isFASTAFileValid() {
String file = fastaFileTextField.getText();
return file != null && file.trim().length() > 0;
}
private Boolean isIdValid() {
String id = getGenomeId();
if (id == null || id.trim().length() == 0) {
JOptionPane.showMessageDialog(this, "Genome ID is required");
return false;
}
Collection<String> inUseIds = GenomeManager.getInstance().getSelectableGenomeIDs();
if (inUseIds.contains(id)) {
JOptionPane.showMessageDialog(this,
"The genome ID '" + id + "' is already in use - please select another!");
return false;
}
return true;
}
private boolean isGenomeDisplayNameValid() {
String displayName = getGenomeDisplayName();
if (displayName == null || displayName.trim().length() == 0) {
JOptionPane.showMessageDialog(this, "Genome name is required");
return false;
}
Collection<String> inUseDisplayNames = GenomeManager.getInstance().getGenomeDisplayNames();
if (inUseDisplayNames.contains(displayName)) {
JOptionPane.showMessageDialog(this,
"The genome name '" + displayName + "' is already in use - please select another!");
return false;
}
return true;
}
/**
* 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("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
// Generated using JFormDesigner non-commercial license
private void initComponents() {
panel3 = new JPanel();
panel2 = new JPanel();
genomeDisplayNameLabel2 = new JLabel();
idField = new JTextField();
genomeDisplayNameLabel = new JLabel();
genomeDisplayNameTextField = new JTextField();
fastaFileLabel = new JLabel();
fastaFileTextField = new JTextField();
fastaFileButton = new JButton();
panel1 = new JPanel();
cytobandFileLabel = new JLabel();
cytobandFileTextField = new JTextField();
cytobandFileButton = new JButton();
geneAnnotFileLabel = new JLabel();
geneAnnotFileTextField = new JTextField();
geneAnnotFileButton = new JButton();
aliasFileLabel = new JLabel();
chrAliasField = new JTextField();
chrAliasButton = new JButton();
vSpacer2 = new JPanel(null);
//======== this ========
setFont(new Font("Tahoma", Font.ITALIC, 12));
setMaximumSize(new Dimension(900, 500));
setMinimumSize(new Dimension(400, 200));
setPreferredSize(new Dimension(700, 200));
setLayout(new BorderLayout());
//======== panel3 ========
{
panel3.setBorder(new EmptyBorder(20, 20, 20, 20));
panel3.setLayout(new BoxLayout(panel3, BoxLayout.Y_AXIS));
//======== panel2 ========
{
panel2.setBorder(new EmptyBorder(0, 0, 30, 0));
panel2.setLayout(null);
//---- genomeDisplayNameLabel2 ----
genomeDisplayNameLabel2.setText("Unique identifier");
genomeDisplayNameLabel2.setToolTipText("Unique identifier (e.g. hg18)");
genomeDisplayNameLabel2.setMaximumSize(new Dimension(84, 16));
genomeDisplayNameLabel2.setMinimumSize(new Dimension(84, 16));
genomeDisplayNameLabel2.setPreferredSize(new Dimension(14, 16));
panel2.add(genomeDisplayNameLabel2);
genomeDisplayNameLabel2.setBounds(15, 22, 125, 28);
//---- idField ----
idField.setToolTipText("A uniqe identifier for the genome");
panel2.add(idField);
idField.setBounds(145, 22, 548, 29);
//---- genomeDisplayNameLabel ----
genomeDisplayNameLabel.setText("Descriptive name");
panel2.add(genomeDisplayNameLabel);
genomeDisplayNameLabel.setBounds(15, 56, 175, 28);
//---- genomeDisplayNameTextField ----
genomeDisplayNameTextField.setToolTipText("The user-readable name of the genome");
genomeDisplayNameTextField.setPreferredSize(new Dimension(400, 28));
genomeDisplayNameTextField.setMinimumSize(new Dimension(25, 28));
panel2.add(genomeDisplayNameTextField);
genomeDisplayNameTextField.setBounds(145, 56, 548, 29);
//---- fastaFileLabel ----
fastaFileLabel.setText("FASTA file");
panel2.add(fastaFileLabel);
fastaFileLabel.setBounds(15, 88, 175, 29);
//---- fastaFileTextField ----
fastaFileTextField.setToolTipText("A FASTA data file");
fastaFileTextField.setPreferredSize(new Dimension(400, 28));
fastaFileTextField.setMinimumSize(new Dimension(25, 28));
panel2.add(fastaFileTextField);
fastaFileTextField.setBounds(145, 88, 548, 29);
//---- fastaFileButton ----
fastaFileButton.setText("Browse");
fastaFileButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
fastaFileButtonActionPerformed(e);
}
});
panel2.add(fastaFileButton);
fastaFileButton.setBounds(698, 88, 83, fastaFileButton.getPreferredSize().height);
}
panel3.add(panel2);
//======== panel1 ========
{
panel1.setBorder(new TitledBorder(null, "Optional", TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION,
new Font("Lucida Grande", Font.BOLD, 13)));
panel1.setLayout(null);
//---- cytobandFileLabel ----
cytobandFileLabel.setText("Cytoband file");
panel1.add(cytobandFileLabel);
cytobandFileLabel.setBounds(15, 25, 105, 29);
//---- cytobandFileTextField ----
cytobandFileTextField.setToolTipText("A cytoband data file");
cytobandFileTextField.setPreferredSize(new Dimension(400, 28));
cytobandFileTextField.setMinimumSize(new Dimension(25, 28));
panel1.add(cytobandFileTextField);
cytobandFileTextField.setBounds(145, 22, 548, 29);
//---- cytobandFileButton ----
cytobandFileButton.setText("Browse");
cytobandFileButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
cytobandFileButtonActionPerformed(e);
}
});
panel1.add(cytobandFileButton);
cytobandFileButton.setBounds(698, 22, 83, cytobandFileButton.getPreferredSize().height);
//---- geneAnnotFileLabel ----
geneAnnotFileLabel.setText("Gene file");
panel1.add(geneAnnotFileLabel);
geneAnnotFileLabel.setBounds(15, 56, 84, 29);
//---- geneAnnotFileTextField ----
geneAnnotFileTextField.setToolTipText("An annotation file");
geneAnnotFileTextField.setPreferredSize(new Dimension(400, 28));
geneAnnotFileTextField.setMinimumSize(new Dimension(25, 28));
panel1.add(geneAnnotFileTextField);
geneAnnotFileTextField.setBounds(145, 56, 548, 29);
//---- geneAnnotFileButton ----
geneAnnotFileButton.setText("Browse");
geneAnnotFileButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
refFlatFileButtonActionPerformed(e);
}
});
panel1.add(geneAnnotFileButton);
geneAnnotFileButton.setBounds(698, 56, 83, geneAnnotFileButton.getPreferredSize().height);
//---- aliasFileLabel ----
aliasFileLabel.setText("Alias file");
panel1.add(aliasFileLabel);
aliasFileLabel.setBounds(15, 90, 84, 29);
//---- chrAliasField ----
chrAliasField.setPreferredSize(new Dimension(400, 28));
chrAliasField.setMinimumSize(new Dimension(25, 28));
panel1.add(chrAliasField);
chrAliasField.setBounds(145, 90, 548, 29);
//---- chrAliasButton ----
chrAliasButton.setText("Browse");
chrAliasButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
chrAliasButtonActionPerformed(e);
}
});
panel1.add(chrAliasButton);
chrAliasButton.setBounds(698, 90, 83, chrAliasButton.getPreferredSize().height);
panel1.add(vSpacer2);
vSpacer2.setBounds(6, 124, 84, 20);
}
panel3.add(panel1);
}
add(panel3, BorderLayout.CENTER);
}// </editor-fold>//GEN-END:initComponents
private void chrAliasButtonActionPerformed(ActionEvent e) {
File directory = PreferencesManager.getPreferences().getDefineGenomeInputDirectory();
File file = FileDialogUtils.chooseFile("Select Chromosome Alias File", directory, FileDialogUtils.LOAD);
if (file != null) {
chrAliasField.setText(file.getAbsolutePath());
PreferencesManager.getPreferences().setDefineGenomeInputDirectory(file.getParentFile());
}
}
private void cytobandFileButtonActionPerformed(java.awt.event.ActionEvent evt) {
File directory = PreferencesManager.getPreferences().getDefineGenomeInputDirectory();
File file = FileDialogUtils.chooseFile("Select Cytoband File", directory, FileDialogUtils.LOAD);
if (file != null) {
cytobandFileTextField.setText(file.getAbsolutePath());
PreferencesManager.getPreferences().setDefineGenomeInputDirectory(file.getParentFile());
}
}
private void refFlatFileButtonActionPerformed(java.awt.event.ActionEvent evt) {
File directory = PreferencesManager.getPreferences().getDefineGenomeInputDirectory();
File file = FileDialogUtils.chooseFile("Select Annotation File", directory, FileDialogUtils.LOAD);
if (file != null) {
geneAnnotFileTextField.setText(file.getAbsolutePath());
PreferencesManager.getPreferences().setDefineGenomeInputDirectory(file.getParentFile());
}
}
private void fastaFileButtonActionPerformed(java.awt.event.ActionEvent evt) {
File directory = PreferencesManager.getPreferences().getDefineGenomeInputDirectory();
File file = FileDialogUtils.chooseFileOrDirectory("Select Fasta File", directory, null, FileDialogUtils.LOAD);
if (file != null) {
fastaFileTextField.setText(file.getAbsolutePath());
PreferencesManager.getPreferences().setDefineGenomeInputDirectory(file.getParentFile());
}
}
// Variables declaration - do not modify//GEN-BEGIN:variables
// Generated using JFormDesigner non-commercial license
private JPanel panel3;
private JPanel panel2;
private JLabel genomeDisplayNameLabel2;
private JTextField idField;
private JLabel genomeDisplayNameLabel;
private JTextField genomeDisplayNameTextField;
private JLabel fastaFileLabel;
private JTextField fastaFileTextField;
private JButton fastaFileButton;
private JPanel panel1;
private JLabel cytobandFileLabel;
private JTextField cytobandFileTextField;
private JButton cytobandFileButton;
private JLabel geneAnnotFileLabel;
private JTextField geneAnnotFileTextField;
private JButton geneAnnotFileButton;
private JLabel aliasFileLabel;
private JTextField chrAliasField;
private JButton chrAliasButton;
private JPanel vSpacer2;
// End of variables declaration//GEN-END:variables
}