diff --git a/src/main/java/org/broad/igv/ui/IGVMenuBar.java b/src/main/java/org/broad/igv/ui/IGVMenuBar.java index 8f72951c9..67dae72c5 100644 --- a/src/main/java/org/broad/igv/ui/IGVMenuBar.java +++ b/src/main/java/org/broad/igv/ui/IGVMenuBar.java @@ -431,7 +431,7 @@ private JMenu createGenomesMenu() { JMenu menu = new JMenu("Genomes"); - loadGenomeFromServerMenuItem = new JMenuItem("Select Hosted Genome..."); + loadGenomeFromServerMenuItem = new JMenuItem("Download Hosted Genome..."); loadGenomeFromServerMenuItem.addActionListener(e -> GenomeComboBox.loadGenomeFromServer()); loadGenomeFromServerMenuItem.setToolTipText(LOAD_GENOME_SERVER_TOOLTIP); menu.add(loadGenomeFromServerMenuItem); diff --git a/src/main/java/org/broad/igv/ui/commandbar/GenomeComboBox.java b/src/main/java/org/broad/igv/ui/commandbar/GenomeComboBox.java index 9a2dc7839..f9cc1fbf8 100644 --- a/src/main/java/org/broad/igv/ui/commandbar/GenomeComboBox.java +++ b/src/main/java/org/broad/igv/ui/commandbar/GenomeComboBox.java @@ -20,6 +20,7 @@ import java.io.File; import java.io.IOException; import java.util.*; +import java.util.List; /** * Created by jrobinso on 7/6/17. @@ -102,16 +103,10 @@ private void loadGenomeListItem(final GenomeListItem genomeListItem) { loadGenomeFromServer(); } else { - boolean success = false; - Exception error = null; try { - success = GenomeManager.getInstance().loadGenomeById(genomeListItem.getId()); + GenomeManager.getInstance().loadGenomeById(genomeListItem.getId()); } catch (Exception e) { log.error(e); - error = e; - } - - if (!success) { int choice = JOptionPane.showConfirmDialog( IGV.getInstance().getMainFrame(), "The genome [" + genomeListItem.getId() + "] could not be read. Would you like to remove the selected entry?", @@ -120,7 +115,7 @@ private void loadGenomeListItem(final GenomeListItem genomeListItem) { if (choice == JOptionPane.OK_OPTION) { GenomeListManager.getInstance().removeGenomeListItem(genomeListItem); refreshGenomeListComboBox(); - log.error("Error initializing genome", error); + log.error("Error initializing genome", e); } } } @@ -220,27 +215,36 @@ public static void loadGenomeFromServer() { if (dialog.isCanceled()) { IGVEventBus.getInstance().post(new GenomeResetEvent()); } else { - GenomeListItem selectedValue = dialog.getSelectedValue(); - if (selectedValue != null) { - + List selectedValueList = dialog.getSelectedValues(); + GenomeListItem firstItem = null; + for (GenomeListItem selectedValue : selectedValueList) { + if (selectedValue != null) { + boolean downloadSequence = false; + boolean success = GenomeManager.getInstance().downloadGenome(selectedValue, downloadSequence); + if (success) { + GenomeListManager.getInstance().addServerGenomeItem(selectedValue); + firstItem = selectedValue; + } + } + } + if (firstItem != null && selectedValueList.size() == 1) { try { - GenomeManager.getInstance().loadGenome(selectedValue.getPath()); - - GenomeListManager.getInstance().addServerGenomeItem(selectedValue); - GenomeListManager.getInstance().removeUserDefinedGenome(selectedValue.getId()); + GenomeManager.getInstance().loadGenome(firstItem.getPath()); + // If the user has previously defined this genome, remove it. + GenomeListManager.getInstance().removeUserDefinedGenome(firstItem.getId()); // If this is a .json genome, attempt to remove existing .genome files - if (selectedValue.getPath().endsWith(".json")) { - removeDotGenomeFile(selectedValue.getId()); + if (firstItem.getPath().endsWith(".json")) { + removeDotGenomeFile(firstItem.getId()); } + } catch (IOException e) { - GenomeListManager.getInstance().removeGenomeListItem(selectedValue); - MessageUtils.showErrorMessage("Error loading genome " + selectedValue.getDisplayableName(), e); - log.error("Error loading genome " + selectedValue.getDisplayableName(), e); + GenomeListManager.getInstance().removeGenomeListItem(firstItem); + MessageUtils.showErrorMessage("Error loading genome " + firstItem.getDisplayableName(), e); + log.error("Error loading genome " + firstItem.getDisplayableName(), e); } - } } }; diff --git a/src/main/java/org/broad/igv/ui/commandbar/GenomeSelectionDialog.java b/src/main/java/org/broad/igv/ui/commandbar/GenomeSelectionDialog.java index 4b4d9cbdf..096566b4d 100644 --- a/src/main/java/org/broad/igv/ui/commandbar/GenomeSelectionDialog.java +++ b/src/main/java/org/broad/igv/ui/commandbar/GenomeSelectionDialog.java @@ -51,6 +51,7 @@ public class GenomeSelectionDialog extends org.broad.igv.ui.IGVDialog { private JPanel dialogPane; private JPanel contentPanel; + private JTextArea textArea1; private JPanel filterPanel; private JLabel label1; private JTextField genomeFilter; @@ -61,7 +62,7 @@ public class GenomeSelectionDialog extends org.broad.igv.ui.IGVDialog { private JButton cancelButton; private boolean isCanceled = true; - private GenomeListItem selectedValue = null; + private List selectedValues = null; private List allListItems; private DefaultListModel genomeListModel; @@ -105,7 +106,11 @@ private void rebuildGenomeList(String filterText) { * @param e */ private void genomeListMouseClicked(MouseEvent e) { - if (e.getClickCount() == 2) { + switch (e.getClickCount()) { + case 1: + List selValues = genomeList.getSelectedValuesList(); + break; + case 2: okButtonActionPerformed(null); } } @@ -114,8 +119,8 @@ private void genomeEntryKeyReleased(KeyEvent e) { rebuildGenomeList(genomeFilter.getText()); } - public GenomeListItem getSelectedValue() { - return selectedValue; + public List getSelectedValues() { + return selectedValues; } public boolean isCanceled() { @@ -124,14 +129,14 @@ public boolean isCanceled() { private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed isCanceled = true; - selectedValue = null; + selectedValues = null; setVisible(false); dispose(); } private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed isCanceled = false; - selectedValue = genomeList.getSelectedValue(); + selectedValues = genomeList.getSelectedValuesList(); setVisible(false); dispose(); } @@ -140,6 +145,7 @@ private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRS private void initComponents() { dialogPane = new JPanel(); contentPanel = new JPanel(); + textArea1 = new JTextArea(); filterPanel = new JPanel(); label1 = new JLabel(); genomeFilter = new JTextField(); @@ -165,6 +171,16 @@ private void initComponents() { { contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS)); + //---- textArea1 ---- + textArea1.setText("Selected genomes will be downloaded and added to the genome dropdown list."); + textArea1.setLineWrap(true); + textArea1.setWrapStyleWord(true); + textArea1.setBackground(UIManager.getColor("Button.background")); + textArea1.setRows(2); + textArea1.setMaximumSize(new Dimension(2147483647, 60)); + textArea1.setRequestFocusEnabled(false); + textArea1.setEditable(false); + contentPanel.add(textArea1); //======== filterPanel ======== { @@ -204,7 +220,7 @@ public void keyReleased(KeyEvent e) { { //---- genomeList ---- - genomeList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + //genomeList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); genomeList.addMouseListener(new IGVMouseInputAdapter() { @Override public void igvMouseClicked(MouseEvent e) { @@ -227,24 +243,14 @@ public void igvMouseClicked(MouseEvent e) { //---- okButton ---- okButton.setText("OK"); - okButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - okButtonActionPerformed(e); - } - }); + okButton.addActionListener(e -> okButtonActionPerformed(e)); buttonBar.add(okButton, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 5, 5), 0, 0)); //---- cancelButton ---- cancelButton.setText("Cancel"); - cancelButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - cancelButtonActionPerformed(e); - } - }); + cancelButton.addActionListener(e -> cancelButtonActionPerformed(e)); buttonBar.add(cancelButton, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 5, 0), 0, 0));