/**
* See the NOTICE file distributed with this work for additional information
* regarding copyright ownership.
*
* This is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 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 Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this software; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF
* site: http://www.fsf.org.
*/
package org.ut.biolab.medsavant.client.region;
import org.ut.biolab.medsavant.client.util.MedSavantWorker;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.rmi.RemoteException;
import java.sql.SQLException;
import java.util.*;
import javax.swing.*;
import com.jidesoft.dialog.ButtonEvent;
import com.jidesoft.dialog.ButtonNames;
import com.jidesoft.dialog.PageList;
import com.jidesoft.wizard.AbstractWizardPage;
import com.jidesoft.wizard.CompletionWizardPage;
import com.jidesoft.wizard.DefaultWizardPage;
import com.jidesoft.wizard.WizardDialog;
import com.jidesoft.wizard.WizardStyle;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.List;
import java.util.concurrent.ExecutionException;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.genemania.exception.ApplicationException;
import org.genemania.exception.DataStoreException;
import org.genemania.type.CombiningMethod;
import org.ut.biolab.medsavant.client.geneset.GeneSetController;
import org.ut.biolab.medsavant.shared.importing.BEDFormat;
import org.ut.biolab.medsavant.shared.importing.FileFormat;
import org.ut.biolab.medsavant.client.importing.ImportFilePanel;
import org.ut.biolab.medsavant.shared.model.GeneSet;
import org.ut.biolab.medsavant.shared.model.RegionSet;
import org.ut.biolab.medsavant.client.reference.ReferenceController;
import org.ut.biolab.medsavant.client.settings.DirectorySettings;
import org.ut.biolab.medsavant.client.util.ClientMiscUtils;
import org.ut.biolab.medsavant.client.util.ClientNetworkUtils;
import org.ut.biolab.medsavant.client.util.GeneFetcher;
import org.ut.biolab.medsavant.client.view.MedSavantFrame;
import org.ut.biolab.medsavant.client.view.component.GeneSelectionPanel;
import org.ut.biolab.medsavant.client.view.component.WaitPanel;
import org.ut.biolab.medsavant.client.view.genetics.variantinfo.DownloadTask;
import org.ut.biolab.medsavant.client.view.genetics.variantinfo.GeneSetFetcher;
import org.ut.biolab.medsavant.client.view.genetics.variantinfo.GenemaniaInfoRetriever;
import org.ut.biolab.medsavant.client.view.genetics.variantinfo.GenemaniaInfoRetriever.NoRelatedGenesInfoException;
import org.ut.biolab.medsavant.client.view.util.DialogUtils;
import org.ut.biolab.medsavant.client.view.util.ViewUtil;
import org.ut.biolab.medsavant.shared.model.Gene;
/**
*
* @author Andrew
*/
public class RegionWizard extends WizardDialog {
private static final Log LOG = LogFactory.getLog(RegionWizard.class);
private static final String PAGENAME_NAME = "List Name";
private static final String PAGENAME_FILE = "Choose File";
private static final String PAGENAME_GENES = "Select Genes";
private static final String PAGENAME_CREATE = "Create";
private static final String PAGENAME_COMPLETE = "Complete";
private static final int DEFAULT_RELATED_GENES_LIMIT = 50;
private final CombiningMethod[] GENEMANIA_COMBINING_METHODS = {CombiningMethod.AVERAGE, CombiningMethod.BP, CombiningMethod.MF, CombiningMethod.CC, CombiningMethod.AUTOMATIC};
private String listName;
private String path;
private char delim;
private FileFormat fileFormat;
private int numHeaderLines;
private final boolean importing;
private GeneSet standardGenes;
private final RegionController controller;
private GeneSelectionPanel sourceGenesPanel;
private JButton runGeneManiaButton;
private GeneSelectionPanel selectedGenesPanel;
private class GeneManiaDownloadCompleteListener implements PropertyChangeListener {
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (evt.getPropertyName().equals("downloadState")) {
DownloadTask.DownloadState ds = (DownloadTask.DownloadState) evt.getNewValue();
if (ds == DownloadTask.DownloadState.CANCELLED
|| ds == DownloadTask.DownloadState.FINISHED) {
if (ds == DownloadTask.DownloadState.FINISHED) {
runGeneManiaButton.setText("Run GeneMANIA");
} else {
runGeneManiaButton.setText("Download GeneMANIA");
}
if (runGeneManiaButton != null) {
runGeneManiaButton.setEnabled(
(selectedGenesPanel.getNumSelected() + sourceGenesPanel.getNumSelected()) > 0);
}
}
}
}
}
private static GeneManiaDownloadCompleteListener geneManiaDownloadCompleteListener;
private void registerDownloadListener() {
try {
if (geneManiaDownloadCompleteListener == null) {
geneManiaDownloadCompleteListener = new GeneManiaDownloadCompleteListener();
DownloadTask dt = GenemaniaInfoRetriever.getGeneManiaDownloadTask();
dt.addPropertyChangeListener(geneManiaDownloadCompleteListener);
}
} catch (IOException e) {
DialogUtils.displayMessage("Error downloading GeneMANIA files");
LOG.error(e);
}
}
public RegionWizard(boolean doImportProcess) throws SQLException, RemoteException {
super(MedSavantFrame.getInstance(), "Region List Wizard", true);
this.importing = doImportProcess;
controller = RegionController.getInstance();
WizardStyle.setStyle(WizardStyle.MACOSX_STYLE);
//add pages
PageList model = new PageList();
if (doImportProcess) {
model.append(getNamePage());
model.append(getFilePage());
model.append(getCreationPage());
model.append(getCompletionPage());
} else {
model.append(getNamePage());
model.append(getGenesPage());
standardGenes = GeneSetController.getInstance().getCurrentGeneSet();
if (standardGenes == null) {
// That's odd. We have no standard genes for this genome.
throw new IllegalArgumentException(String.format("No standard genes to choose from for %s.", ReferenceController.getInstance().getCurrentReferenceName()));
}
fetchGenes();
//model.append(getRecommendPage());
model.append(getCreationPage());
model.append(getCompletionPage());
}
setPageList(model);
//change next action
setNextAction(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
String pageName = getCurrentPage().getTitle();
if (pageName.equals(PAGENAME_NAME) && validateListName()) {
if (importing) {
setCurrentPage(PAGENAME_FILE);
} else {
setCurrentPage(PAGENAME_GENES);
}
} else if (pageName.equals(PAGENAME_FILE) || pageName.equals(PAGENAME_GENES)) {
//setCurrentPage(PAGENAME_RECOMMEND);
setCurrentPage(PAGENAME_CREATE);
//} else if (pageName.equals(PAGENAME_RECOMMEND)) {
// setCurrentPage(PAGENAME_CREATE);
} else if (pageName.equals(PAGENAME_CREATE)) {
setCurrentPage(PAGENAME_COMPLETE);
}
}
});
pack();
// Changed resizableness: No good reason to restrict window size.
setResizable(true);
setLocationRelativeTo(MedSavantFrame.getInstance());
}
@Override
public Dimension getPreferredSize() {
Dimension parentDimension = MedSavantFrame.getInstance().getSize();
int xdim = Math.min(1520, Math.max(960, parentDimension.width - 100));
int ydim = Math.min(950, Math.max(600, parentDimension.height - 100));
return new Dimension(xdim, ydim);
}
private AbstractWizardPage getNamePage() {
return new DefaultWizardPage(PAGENAME_NAME) {
{
addText("Choose a name for the region list.\nThe name cannot already be in use. ");
addComponent(new JTextField() {
{
addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
if (getText() != null && !getText().equals("")) {
listName = getText();
fireButtonEvent(ButtonEvent.ENABLE_BUTTON, ButtonNames.NEXT);
} else {
fireButtonEvent(ButtonEvent.DISABLE_BUTTON, ButtonNames.NEXT);
}
}
});
}
});
}
@Override
public void setupWizardButtons() {
fireButtonEvent(ButtonEvent.HIDE_BUTTON, ButtonNames.FINISH);
fireButtonEvent(ButtonEvent.HIDE_BUTTON, ButtonNames.BACK);
fireButtonEvent(ButtonEvent.SHOW_BUTTON, ButtonNames.NEXT);
if (listName == null || listName.equals("")) {
fireButtonEvent(ButtonEvent.DISABLE_BUTTON, ButtonNames.NEXT);
} else {
fireButtonEvent(ButtonEvent.ENABLE_BUTTON, ButtonNames.NEXT);
}
}
};
}
private AbstractWizardPage getFilePage() {
//setup page
return new DefaultWizardPage(PAGENAME_FILE) {
{
ImportFilePanel importPanel = new ImportFilePanel(1) {
@Override
public void setReady(boolean ready) {
if (ready) {
path = getPath();
delim = getDelimiter();
fileFormat = getFileFormat();
numHeaderLines = getNumHeaderLines();
fireButtonEvent(ButtonEvent.ENABLE_BUTTON, ButtonNames.NEXT);
} else {
fireButtonEvent(ButtonEvent.DISABLE_BUTTON, ButtonNames.NEXT);
}
}
};
importPanel.addFileFormat(new BEDFormat());
addComponent(importPanel);
}
@Override
public void setupWizardButtons() {
fireButtonEvent(ButtonEvent.HIDE_BUTTON, ButtonNames.FINISH);
fireButtonEvent(ButtonEvent.SHOW_BUTTON, ButtonNames.BACK);
fireButtonEvent(ButtonEvent.SHOW_BUTTON, ButtonNames.NEXT);
if (path == null || path.equals("")) {
fireButtonEvent(ButtonEvent.DISABLE_BUTTON, ButtonNames.NEXT);
} else {
fireButtonEvent(ButtonEvent.ENABLE_BUTTON, ButtonNames.NEXT);
}
}
};
}
private AbstractWizardPage getGenesPage() {
return new DefaultWizardPage(PAGENAME_GENES) {
private static final int GENE_SELECTION_PANE_WIDTH = 350;
private JPanel leftSide;
private GeneSelectionPanel geneManiaResultsPanel;
private Set<String> geneManiaGeneNames = null;
{
selectedGenesPanel = new GeneSelectionPanel(true, true);
sourceGenesPanel = new GeneSelectionPanel(true, true);
geneManiaResultsPanel = new GeneSelectionPanel(true, true) {
@Override
protected void dragAndDropAddGenes(Set<Gene> geneSet) {
Set<Object> genesToMoveToGeneManiaPanel = new HashSet<Object>(geneManiaGeneNames);
genesToMoveToGeneManiaPanel.retainAll(selectedGenesPanel.getSelectedKeys());
selectedGenesPanel.copyItems(geneManiaResultsPanel, genesToMoveToGeneManiaPanel);
selectedGenesPanel.moveSelectedItems(sourceGenesPanel);
}
@Override
protected void dragAndDropRemoveKeys(Set<Object> keySet) {
Set<Object> keys = geneManiaResultsPanel.getSelectedKeys();
geneManiaResultsPanel.removeRows(keys);
sourceGenesPanel.removeRows(keys);
}
};
geneManiaResultsPanel.setOddRowColor(new Color(242, 249, 245));
runGeneManiaButton = new JButton("Run GeneMANIA");
runGeneManiaButton.setEnabled(!DirectorySettings.isGeneManiaInstalled());
ListSelectionListener selectionListener = new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent lse) {
int numSel = sourceGenesPanel.getNumSelected() + selectedGenesPanel.getNumSelected();
if (geneManiaGeneNames != null) {
numSel += geneManiaResultsPanel.getNumSelected();
}
if (GenemaniaInfoRetriever.isGeneManiaDownloading()) {
runGeneManiaButton.setEnabled(false);
} else {
runGeneManiaButton.setEnabled(numSel > 0 || !DirectorySettings.isGeneManiaInstalled());
}
}
};
sourceGenesPanel.getTable().getSelectionModel().addListSelectionListener(selectionListener);
selectedGenesPanel.getTable().getSelectionModel().addListSelectionListener(selectionListener);
selectedGenesPanel.getTable().getModel().addTableModelListener(new TableModelListener() {
@Override
public void tableChanged(TableModelEvent tme) {
if (selectedGenesPanel.getData().length > 0) {
fireButtonEvent(ButtonEvent.ENABLE_BUTTON, ButtonNames.NEXT);
} else {
fireButtonEvent(ButtonEvent.DISABLE_BUTTON, ButtonNames.NEXT);
}
}
});
selectedGenesPanel.setPreferredSize(new Dimension(GENE_SELECTION_PANE_WIDTH, selectedGenesPanel.getPreferredSize().height));
final JPanel outerLeftSide = new JPanel();
outerLeftSide.setLayout(new BoxLayout(outerLeftSide, BoxLayout.X_AXIS));
leftSide = new JPanel();
leftSide.setLayout(new BoxLayout(leftSide, BoxLayout.Y_AXIS));
leftSide.add(sourceGenesPanel);
outerLeftSide.add(leftSide);
final JPanel bg = new JPanel();
bg.setLayout(new BoxLayout(bg, BoxLayout.Y_AXIS));
JButton addButton = new JButton("Add →");
JButton removeButton = new JButton("← Remove");
sourceGenesPanel.getTable().addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent me) {
if (me.getClickCount() == 2) {
sourceGenesPanel.moveSelectedItems(selectedGenesPanel);
}
}
});
selectedGenesPanel.getTable().addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent me) {
if (me.getClickCount() == 2) {
if (geneManiaGeneNames != null) {
Set<Object> genesToMoveToGeneManiaPanel = new HashSet<Object>(geneManiaGeneNames);
genesToMoveToGeneManiaPanel.retainAll(selectedGenesPanel.getSelectedKeys());
selectedGenesPanel.copyItems(geneManiaResultsPanel, genesToMoveToGeneManiaPanel);
}
selectedGenesPanel.moveSelectedItems(sourceGenesPanel);
}
}
});
geneManiaResultsPanel.getTable().addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent me) {
if (me.getClickCount() == 2) {
Set<Object> keys = geneManiaResultsPanel.getSelectedKeys();
geneManiaResultsPanel.moveSelectedItems(selectedGenesPanel);
sourceGenesPanel.moveItems(selectedGenesPanel, keys);
}
}
});
addButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
if (geneManiaGeneNames != null) {
Set<Object> keys = geneManiaResultsPanel.getSelectedKeys();
geneManiaResultsPanel.moveSelectedItems(selectedGenesPanel);
sourceGenesPanel.moveItems(selectedGenesPanel, keys);
} else {
sourceGenesPanel.moveSelectedItems(selectedGenesPanel);
}
}
});
removeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
if (geneManiaGeneNames != null) {
Set<Object> genesToMoveToGeneManiaPanel = new HashSet<Object>(geneManiaGeneNames);
genesToMoveToGeneManiaPanel.retainAll(selectedGenesPanel.getSelectedKeys());
selectedGenesPanel.copyItems(geneManiaResultsPanel, genesToMoveToGeneManiaPanel);
}
selectedGenesPanel.moveSelectedItems(sourceGenesPanel);
}
});
bg.add(Box.createVerticalGlue());
bg.add(addButton);
bg.add(removeButton);
bg.add(Box.createVerticalGlue());
outerLeftSide.add(bg);
JPanel rightSide = new JPanel();
rightSide.setLayout(new BoxLayout(rightSide, BoxLayout.Y_AXIS));
rightSide.add(selectedGenesPanel);
rightSide.add(runGeneManiaButton);
final JSplitPane hsplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, outerLeftSide, rightSide);
hsplitPane.setResizeWeight(1);
addComponent(hsplitPane, true);
if (!DirectorySettings.isGeneManiaInstalled()) {
runGeneManiaButton.setText("Download GeneMANIA");
if (GenemaniaInfoRetriever.isGeneManiaDownloading()) {
runGeneManiaButton.setEnabled(false);
registerDownloadListener();
}
}
runGeneManiaButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
if (!DirectorySettings.isGeneManiaInstalled()) {
int response = DialogUtils.askYesNo("Download GeneMANIA?",
"GeneMANIA is not yet installed. Do you want to download and install it now?");
try {
if (response == DialogUtils.OK) {
runGeneManiaButton.setText("Run GeneMANIA");
runGeneManiaButton.setEnabled(false);
registerDownloadListener();
/*
DownloadTask dt = GenemaniaInfoRetriever.getGeneManiaDownloadTask();
dt.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (evt.getPropertyName().equals("downloadState")) {
DownloadTask.DownloadState ds = (DownloadTask.DownloadState) evt.getNewValue();
if (ds == DownloadTask.DownloadState.CANCELLED
|| ds == DownloadTask.DownloadState.FINISHED) {
runGeneManiaButton.setEnabled(
(selectedGenesPanel.getNumSelected() + sourceGenesPanel.getNumSelected()) > 0);
}
}
}
});
*/
GenemaniaInfoRetriever.getGeneManiaDownloadTask().execute();
}
} catch (IOException e) {
DialogUtils.displayMessage("Error downloading GeneMANIA files");
LOG.error(e);
}
} else {
final List<String> selectedGenes = new LinkedList<String>();
for (Gene g : selectedGenesPanel.getSelectedGenes()) {
selectedGenes.add(g.getName());
}
for (Gene g : sourceGenesPanel.getSelectedGenes()) {
selectedGenes.add(g.getName());
}
if (geneManiaGeneNames != null) {
for (Gene g : geneManiaResultsPanel.getSelectedGenes()) {
selectedGenes.add(g.getName());
}
}
final JButton closeGeneManiaButton = new JButton("← Close GeneMANIA results");
closeGeneManiaButton.setEnabled(false);
final JPanel geneManiaContainingPanel = new JPanel();
geneManiaContainingPanel.setLayout(new BoxLayout(geneManiaContainingPanel, BoxLayout.Y_AXIS));
final SwingWorker geneManiaWorker = new SwingWorker() {
private List<Object[]> results;
@Override
public void done() {
Object[][] newdata = new Object[results.size()][4];
results.toArray(newdata);
geneManiaResultsPanel.updateData(newdata);
geneManiaResultsPanel.updateView();
geneManiaContainingPanel.removeAll();
geneManiaContainingPanel.add(geneManiaResultsPanel);
geneManiaContainingPanel.revalidate();
geneManiaContainingPanel.repaint();
closeGeneManiaButton.setEnabled(true);
}
@Override
public Object doInBackground() {
try {
GenemaniaInfoRetriever genemania = new GenemaniaInfoRetriever();
genemania.setGenes(selectedGenes);
List<String> geneNameList = genemania.getRelatedGeneNamesByScore();
geneManiaGeneNames = new HashSet<String>();
geneManiaGeneNames.addAll(geneNameList);
LOG.debug("Found " + geneNameList.size() + " related genes");
results = new ArrayList<Object[]>(geneNameList.size());
int i = 0;
for (String gene : geneNameList) {
if (isCancelled()) {
return null;
}
Gene g = GeneSetFetcher.getInstance().getGeneDictionary().get(gene);
if (g == null) {
LOG.warn("No gene found for " + gene);
} else if (!selectedGenesPanel.hasKey(g.getName())) {
results.add(new Object[]{g.getName(), g.getChrom(), g.getStart(), g.getEnd()});
}
}
} catch (IOException e) {
LOG.error(e);
} catch (ApplicationException e) {
LOG.error(e);
} catch (DataStoreException e) {
LOG.error(e);
} catch (NoRelatedGenesInfoException e) {
LOG.error(e);
}
return null;
}
};
leftSide.removeAll();
closeGeneManiaButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
try {
geneManiaWorker.cancel(true);
} catch (Exception e) {
//genemania throws exceptions when cancelled
}
leftSide.removeAll();
leftSide.add(sourceGenesPanel);
leftSide.validate();
leftSide.repaint();
geneManiaGeneNames = null;
}
});
JPanel closeButtonPanel = new JPanel();
closeButtonPanel.setLayout(new BoxLayout(closeButtonPanel, BoxLayout.X_AXIS));
closeButtonPanel.add(closeGeneManiaButton);
closeButtonPanel.add(Box.createHorizontalGlue());
leftSide.add(closeButtonPanel);
geneManiaContainingPanel.add(new WaitPanel("Querying GeneMANIA for related genes"));
leftSide.add(geneManiaContainingPanel);
leftSide.validate();
leftSide.repaint();
geneManiaWorker.execute();
}//end else
}//end actionPerformed
});//end ActionListener
}
@Override
public void setupWizardButtons() {
fireButtonEvent(ButtonEvent.HIDE_BUTTON, ButtonNames.FINISH);
fireButtonEvent(ButtonEvent.SHOW_BUTTON, ButtonNames.BACK);
if (selectedGenesPanel.getNumSelected() > 0) {
fireButtonEvent(ButtonEvent.ENABLE_BUTTON, ButtonNames.NEXT);
} else {
fireButtonEvent(ButtonEvent.DISABLE_BUTTON, ButtonNames.NEXT);
}
}
};
}
private AbstractWizardPage getCreationPage() {
//setup page
return new DefaultWizardPage(PAGENAME_CREATE) {
private JProgressBar progressBar;
private JButton startButton;
{
addText("You are now ready to create this region list.");
progressBar = new JProgressBar();
addComponent(progressBar);
startButton = new JButton("Create List");
startButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
startButton.setEnabled(false);
fireButtonEvent(ButtonEvent.DISABLE_BUTTON, ButtonNames.BACK);
progressBar.setIndeterminate(true);
new MedSavantWorker<Void>("Region Lists") {
@Override
public Void doInBackground() throws Exception {
createList();
return null;
}
@Override
protected void showProgress(double fraction) {
}
@Override
protected void showSuccess(Void result) {
((CompletionWizardPage) getPageByTitle(PAGENAME_COMPLETE)).addText("List " + listName + " has been successfully created.");
setCurrentPage(PAGENAME_COMPLETE);
}
@Override
protected void showFailure(Throwable t) {
RegionWizard.this.setVisible(false);
LOG.error("Error uploading list.", t);
DialogUtils.displayException("Error", "There was an error while trying to create your list. ", t);
}
}.execute();
}
});
addComponent(ViewUtil.alignRight(startButton));
}
@Override
public void setupWizardButtons() {
fireButtonEvent(ButtonEvent.HIDE_BUTTON, ButtonNames.FINISH);
fireButtonEvent(ButtonEvent.SHOW_BUTTON, ButtonNames.BACK);
fireButtonEvent(ButtonEvent.SHOW_BUTTON, ButtonNames.NEXT);
fireButtonEvent(ButtonEvent.DISABLE_BUTTON, ButtonNames.NEXT);
}
};
}
private AbstractWizardPage getCompletionPage() {
return new CompletionWizardPage(PAGENAME_COMPLETE) {
@Override
public void setupWizardButtons() {
fireButtonEvent(ButtonEvent.HIDE_BUTTON, ButtonNames.BACK);
fireButtonEvent(ButtonEvent.ENABLE_BUTTON, ButtonNames.FINISH);
fireButtonEvent(ButtonEvent.HIDE_BUTTON, ButtonNames.NEXT);
}
};
}
private boolean validateListName() {
try {
for (RegionSet r : controller.getRegionSets()) {
if (r.getName().equals(listName)) {
DialogUtils.displayError("Error", "List name already in use.");
return false;
}
}
return true;
} catch (Exception ex) {
ClientMiscUtils.reportError("Error fetching region list: %s", ex);
return false;
}
}
private void createList() throws SQLException, IOException, InterruptedException, ExecutionException {
if (!importing) {
File tempFile = File.createTempFile("genes", ".bed");
FileWriter output = new FileWriter(tempFile);
for (Object[] rowData : selectedGenesPanel.getData()) {
output.write(rowData[1] + "\t" + rowData[2] + "\t" + rowData[3] + "\t" + rowData[0] + "\n");
}
output.close();
delim = '\t';
numHeaderLines = 0;
fileFormat = new BEDFormat();
path = tempFile.getAbsolutePath();
}
int transferID = ClientNetworkUtils.copyFileToServer(new File(path));
controller.addRegionSet(listName, delim, fileFormat, numHeaderLines, transferID);
}
private void fetchGenes() {
new GeneFetcher(standardGenes, "RegionWizard") {
@Override
public void setData(Object[][] data) {
sourceGenesPanel.updateData(data);
sourceGenesPanel.updateView();
}
/**
* Don't have progress bar handy, so we don't do anything to show
* progress.
*/
@Override
public void showProgress(double prog) {
}
}.execute();
}
}