X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;h=a71d75fe4f08d0c42940306f4bbf1dc3b7cd0678;hb=f96e6a945e2df8a844f428c08cfc08210d937fc0;hp=ef402615a9f0f3d789c5c00ae2e447dfed72f34e;hpb=4f30214e8098748469c6a4269ac2ed6c5750e4b0;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index ef40261..a71d75f 100644 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -20,9 +20,91 @@ */ package jalview.gui; +import java.util.Locale; +import jalview.analysis.AlignmentSorter; +import jalview.analysis.AlignmentUtils; +import jalview.analysis.CrossRef; +import jalview.analysis.Dna; +import jalview.analysis.ParseProperties; +import jalview.analysis.SequenceIdMatcher; +import jalview.analysis.TreeModel; +import jalview.api.AlignExportSettingI; +import jalview.api.AlignViewControllerGuiI; +import jalview.api.AlignViewControllerI; +import jalview.api.AlignViewportI; +import jalview.api.AlignmentViewPanel; +import jalview.api.FeatureSettingsControllerI; +import jalview.api.SplitContainerI; +import jalview.api.ViewStyleI; +import jalview.bin.Cache; +import jalview.bin.Jalview; +import jalview.commands.CommandI; +import jalview.commands.EditCommand; +import jalview.commands.EditCommand.Action; +import jalview.commands.OrderCommand; +import jalview.commands.RemoveGapColCommand; +import jalview.commands.RemoveGapsCommand; +import jalview.commands.SlideSequencesCommand; +import jalview.commands.TrimRegionCommand; +import jalview.datamodel.AlignedCodonFrame; +import jalview.datamodel.Alignment; +import jalview.datamodel.AlignmentAnnotation; +import jalview.datamodel.AlignmentExportData; +import jalview.datamodel.AlignmentI; +import jalview.datamodel.AlignmentOrder; +import jalview.datamodel.AlignmentView; +import jalview.datamodel.ColumnSelection; +import jalview.datamodel.HiddenColumns; +import jalview.datamodel.HiddenSequences; +import jalview.datamodel.PDBEntry; +import jalview.datamodel.SeqCigar; +import jalview.datamodel.Sequence; +import jalview.datamodel.SequenceGroup; +import jalview.datamodel.SequenceI; +import jalview.ext.archaeopteryx.AptxInit; +import jalview.ext.forester.io.SupportedTreeFileFilter; +import jalview.ext.forester.io.TreeParser; +import jalview.gui.ColourMenuHelper.ColourChangeListener; +import jalview.gui.ViewSelectionMenu.ViewSetProvider; +import jalview.io.AlignmentProperties; +import jalview.io.AnnotationFile; +import jalview.io.BioJsHTMLOutput; +import jalview.io.DataSourceType; +import jalview.io.FileFormat; +import jalview.io.FileFormatI; +import jalview.io.FileFormats; +import jalview.io.FileLoader; +import jalview.io.FileParse; +import jalview.io.FormatAdapter; +import jalview.io.HtmlSvgOutput; +import jalview.io.IdentifyFile; +import jalview.io.JPredFile; +import jalview.io.JalviewFileChooser; +import jalview.io.JalviewFileView; +import jalview.io.JnetAnnotationMaker; +import jalview.io.NewickFile; +import jalview.io.ScoreMatrixFile; +import jalview.io.TCoffeeScoreFile; +import jalview.jbgui.GAlignFrame; +import jalview.schemes.ColourSchemeI; +import jalview.schemes.ColourSchemes; +import jalview.schemes.ResidueColourScheme; +import jalview.schemes.TCoffeeColourScheme; +import jalview.util.MessageManager; +import jalview.viewmodel.AlignmentViewport; +import jalview.viewmodel.ViewportRanges; +import jalview.ws.DBRefFetcher; +import jalview.ws.DBRefFetcher.FetchFinishedListenerI; +import jalview.ws.jws1.Discoverer; +import jalview.ws.jws2.Jws2Discoverer; +import jalview.ws.jws2.jabaws2.Jws2Instance; +import jalview.ws.seqfetcher.DbSourceProxy; + import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; +import java.awt.Dimension; +import java.awt.GridLayout; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; @@ -48,6 +130,7 @@ import java.awt.print.PrinterJob; import java.beans.PropertyChangeEvent; import java.io.File; import java.io.FileWriter; +import java.io.IOException; import java.io.PrintWriter; import java.net.URL; import java.util.ArrayList; @@ -56,11 +139,13 @@ import java.util.Deque; import java.util.Enumeration; import java.util.Hashtable; import java.util.List; +import java.util.StringTokenizer; import java.util.Vector; import javax.swing.ButtonGroup; import javax.swing.JCheckBoxMenuItem; import javax.swing.JComponent; +import javax.swing.JComboBox; import javax.swing.JEditorPane; import javax.swing.JInternalFrame; import javax.swing.JLabel; @@ -90,6 +175,7 @@ import jalview.api.SplitContainerI; import jalview.api.ViewStyleI; import jalview.api.analysis.SimilarityParamsI; import jalview.bin.Cache; +import jalview.bin.Console; import jalview.bin.Jalview; import jalview.commands.CommandI; import jalview.commands.EditCommand; @@ -143,6 +229,7 @@ import jalview.schemes.ColourSchemeI; import jalview.schemes.ColourSchemes; import jalview.schemes.ResidueColourScheme; import jalview.schemes.TCoffeeColourScheme; +import jalview.util.HttpUtils; import jalview.util.ImageMaker.TYPE; import jalview.util.MessageManager; import jalview.util.Platform; @@ -345,8 +432,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, */ void init() { -// setBackground(Color.white); // BH 2019 - + // setBackground(Color.white); // BH 2019 + if (!Jalview.isHeadlessMode()) { progressBar = new ProgressBar(this.statusPanel, this.statusBar); @@ -364,8 +451,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, // modifyPID.setEnabled(false); } - String sortby = jalview.bin.Cache.getDefault("SORT_ALIGNMENT", - "No sort"); + String sortby = Cache.getDefault("SORT_ALIGNMENT", "No sort"); if (sortby.equals("Id")) { @@ -407,7 +493,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, wrapMenuItem_actionPerformed(null); } - if (jalview.bin.Cache.getDefault("SHOW_OVERVIEW", false)) + if (Cache.getDefault("SHOW_OVERVIEW", false)) { this.overviewMenuItem_actionPerformed(null); } @@ -482,10 +568,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } } }); - if (Cache.getDefault("VERSION", "DEVELOPMENT").toLowerCase() + if (Cache.getDefault("VERSION", "DEVELOPMENT").toLowerCase(Locale.ROOT) .indexOf("devel") > -1 - || Cache.getDefault("VERSION", "DEVELOPMENT").toLowerCase() - .indexOf("test") > -1) + || Cache.getDefault("VERSION", "DEVELOPMENT") + .toLowerCase(Locale.ROOT).indexOf("test") > -1) { formatMenu.add(vsel); } @@ -563,7 +649,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } if (viewport.cursorMode) { - alignPanel.getSeqPanel().moveCursor(0, 1); + alignPanel.getSeqPanel().moveCursor(0, 1, evt.isShiftDown()); } break; @@ -574,7 +660,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } if (viewport.cursorMode) { - alignPanel.getSeqPanel().moveCursor(0, -1); + alignPanel.getSeqPanel().moveCursor(0, -1, evt.isShiftDown()); } break; @@ -587,7 +673,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } else { - alignPanel.getSeqPanel().moveCursor(-1, 0); + alignPanel.getSeqPanel().moveCursor(-1, 0, evt.isShiftDown()); } break; @@ -599,7 +685,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } else { - alignPanel.getSeqPanel().moveCursor(1, 0); + alignPanel.getSeqPanel().moveCursor(1, 0, evt.isShiftDown()); } break; @@ -1010,7 +1096,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, */ public String getVersion() { - return jalview.bin.Cache.getProperty("VERSION"); + return Cache.getProperty("VERSION"); } public FeatureRenderer getFeatureRenderer() @@ -1061,7 +1147,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, Desktop.instance.closeAssociatedWindows(); FileLoader loader = new FileLoader(); - DataSourceType protocol = fileName.startsWith("http:") + DataSourceType protocol = HttpUtils.startsWithHttpOrHttps(fileName) ? DataSourceType.URL : DataSourceType.FILE; loader.LoadFile(viewport, fileName, protocol, currentFileFormat); @@ -1077,9 +1163,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (fileObject == null) { - DataSourceType protocol = (fileName.startsWith("http:") - ? DataSourceType.URL - : DataSourceType.FILE); + DataSourceType protocol = HttpUtils.startsWithHttpOrHttps( + fileName) ? DataSourceType.URL : DataSourceType.FILE; newframe = loader.LoadFileWaitTillLoaded(fileName, protocol, currentFileFormat); } @@ -1130,7 +1215,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, public void save_actionPerformed(ActionEvent e) { if (fileName == null || (currentFileFormat == null) - || fileName.startsWith("http")) + || HttpUtils.startsWithHttpOrHttps(fileName)) { saveAs_actionPerformed(); } @@ -1203,11 +1288,20 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (!lastSaveSuccessful) { - JvOptionPane.showInternalMessageDialog(this, MessageManager - .formatMessage("label.couldnt_save_file", new Object[] - { lastFilenameSaved }), - MessageManager.getString("label.error_saving_file"), - JvOptionPane.WARNING_MESSAGE); + if (!Platform.isHeadless()) + { + JvOptionPane.showInternalMessageDialog(this, MessageManager + .formatMessage("label.couldnt_save_file", new Object[] + { lastFilenameSaved }), + MessageManager.getString("label.error_saving_file"), + JvOptionPane.WARNING_MESSAGE); + } + else + { + Console.error(MessageManager + .formatMessage("label.couldnt_save_file", new Object[] + { lastFilenameSaved })); + } } else { @@ -1241,15 +1335,16 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, String shortName = title; if (shortName.indexOf(File.separatorChar) > -1) { - shortName = shortName.substring( - shortName.lastIndexOf(File.separatorChar) + 1); + shortName = shortName + .substring(shortName.lastIndexOf(File.separatorChar) + 1); } - lastSaveSuccessful = new Jalview2XML().saveAlignment(this, file, shortName); - + lastSaveSuccessful = new Jalview2XML().saveAlignment(this, file, + shortName); + statusBar.setText(MessageManager.formatMessage( "label.successfully_saved_to_file_in_format", new Object[] - { fileName, format })); - + { file, format })); + return; } @@ -1283,31 +1378,65 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { // create backupfiles object and get new temp filename destination boolean doBackup = BackupFiles.getEnabled(); - BackupFiles backupfiles = doBackup ? new BackupFiles(file) : null; + BackupFiles backupfiles = null; + if (doBackup) + { + Console.trace( + "ALIGNFRAME making backupfiles object for " + file); + backupfiles = new BackupFiles(file); + } try { - String tempFilePath = doBackup ? backupfiles.getTempFilePath() : file; - PrintWriter out = new PrintWriter( - new FileWriter(tempFilePath)); + String tempFilePath = doBackup ? backupfiles.getTempFilePath() + : file; + Console.trace("ALIGNFRAME setting PrintWriter"); + PrintWriter out = new PrintWriter(new FileWriter(tempFilePath)); + + if (backupfiles != null) + { + Console.trace("ALIGNFRAME about to write to temp file " + + backupfiles.getTempFilePath()); + } out.print(output); + Console.trace("ALIGNFRAME about to close file"); out.close(); + Console.trace("ALIGNFRAME closed file"); AlignFrame.this.setTitle(file); statusBar.setText(MessageManager.formatMessage( - "label.successfully_saved_to_file_in_format", new Object[] - { fileName, format.getName() })); + "label.successfully_saved_to_file_in_format", + new Object[] + { fileName, format.getName() })); lastSaveSuccessful = true; + } catch (IOException e) + { + lastSaveSuccessful = false; + Console.error( + "ALIGNFRAME Something happened writing the temp file"); + Console.error(e.getMessage()); + Console.debug(Cache.getStackTraceString(e)); } catch (Exception ex) { lastSaveSuccessful = false; - ex.printStackTrace(); + Console.error( + "ALIGNFRAME Something unexpected happened writing the temp file"); + Console.error(ex.getMessage()); + Console.debug(Cache.getStackTraceString(ex)); } if (doBackup) { backupfiles.setWriteSuccess(lastSaveSuccessful); + Console.debug("ALIGNFRAME writing temp file was " + + (lastSaveSuccessful ? "" : "NOT ") + "successful"); // do the backup file roll and rename the temp file to actual file + Console.trace( + "ALIGNFRAME about to rollBackupsAndRenameTempFile"); lastSaveSuccessful = backupfiles.rollBackupsAndRenameTempFile(); + Console.debug( + "ALIGNFRAME performed rollBackupsAndRenameTempFile " + + (lastSaveSuccessful ? "" : "un") + + "successfully"); } } } @@ -1487,9 +1616,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, public void associatedData_actionPerformed(ActionEvent e) { final JalviewFileChooser chooser = new JalviewFileChooser( - jalview.bin.Cache.getProperty("LAST_DIRECTORY")); + Cache.getProperty("LAST_DIRECTORY")); chooser.setFileView(new JalviewFileView()); - String tooltip = MessageManager.getString("label.load_jalview_annotations"); + String tooltip = MessageManager + .getString("label.load_jalview_annotations"); chooser.setDialogTitle(tooltip); chooser.setToolTipText(tooltip); chooser.setResponseHandler(0, new Runnable() @@ -1498,7 +1628,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, public void run() { String choice = chooser.getSelectedFile().getPath(); - jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice); + Cache.setProperty("LAST_DIRECTORY", choice); loadJalviewDataFile(chooser.getSelectedFile(), null, null, null); } }); @@ -1685,7 +1815,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { if (originalSource != viewport) { - Cache.log.warn( + Console.warn( "Implementation worry: mismatch of viewport origin for undo"); } originalSource.updateHiddenColumns(); @@ -1725,7 +1855,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (originalSource != viewport) { - Cache.log.warn( + Console.warn( "Implementation worry: mismatch of viewport origin for redo"); } originalSource.updateHiddenColumns(); @@ -1782,10 +1912,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } /** - * DOCUMENT ME! + * Calls AlignmentI.moveSelectedSequencesByOne with current sequence selection + * or the sequence under cursor in keyboard mode * * @param up - * DOCUMENT ME! + * or down (if !up) */ public void moveSelectedSequences(boolean up) { @@ -1793,8 +1924,25 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (sg == null) { + if (viewport.cursorMode) + { + sg = new SequenceGroup(); + sg.addSequence(viewport.getAlignment().getSequenceAt( + alignPanel.getSeqPanel().seqCanvas.cursorY), false); + } + else + { + return; + } + } + + if (sg.getSize() < 1) + { return; } + + // TODO: JAL-3733 - add an event to the undo buffer for this ! + viewport.getAlignment().moveSelectedSequencesByOne(sg, viewport.getHiddenRepSequences(), up); alignPanel.paintAlignment(true, false); @@ -2404,56 +2552,61 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, return; } - Runnable okAction = new Runnable() - { - @Override - public void run() - { - SequenceI[] cut = sg.getSequences() - .toArray(new SequenceI[sg.getSize()]); - - addHistoryItem(new EditCommand( - MessageManager.getString("label.cut_sequences"), Action.CUT, - cut, sg.getStartRes(), sg.getEndRes() - sg.getStartRes() + 1, - viewport.getAlignment())); - - viewport.setSelectionGroup(null); - viewport.sendSelection(); - viewport.getAlignment().deleteGroup(sg); - - viewport.firePropertyChange("alignment", null, - viewport.getAlignment().getSequences()); - if (viewport.getAlignment().getHeight() < 1) - { - try - { - AlignFrame.this.setClosed(true); - } catch (Exception ex) - { - } - } - }}; + Runnable okAction = new Runnable() + { + @Override + public void run() + { + SequenceI[] cut = sg.getSequences() + .toArray(new SequenceI[sg.getSize()]); + + addHistoryItem(new EditCommand( + MessageManager.getString("label.cut_sequences"), Action.CUT, + cut, sg.getStartRes(), + sg.getEndRes() - sg.getStartRes() + 1, + viewport.getAlignment())); + + viewport.setSelectionGroup(null); + viewport.sendSelection(); + viewport.getAlignment().deleteGroup(sg); + + viewport.firePropertyChange("alignment", null, + viewport.getAlignment().getSequences()); + if (viewport.getAlignment().getHeight() < 1) + { + try + { + AlignFrame.this.setClosed(true); + } catch (Exception ex) + { + } + } + } + }; /* * If the cut affects all sequences, prompt for confirmation */ - boolean wholeHeight = sg.getSize() == viewport.getAlignment().getHeight(); + boolean wholeHeight = sg.getSize() == viewport.getAlignment() + .getHeight(); boolean wholeWidth = (((sg.getEndRes() - sg.getStartRes()) + 1) == viewport.getAlignment().getWidth()) ? true : false; - if (wholeHeight && wholeWidth) - { - JvOptionPane dialog = JvOptionPane.newOptionDialog(Desktop.desktop); - dialog.setResponseHandler(0, okAction); // 0 = OK_OPTION - Object[] options = new Object[] { MessageManager.getString("action.ok"), - MessageManager.getString("action.cancel") }; - dialog.showDialog(MessageManager.getString("warn.delete_all"), - MessageManager.getString("label.delete_all"), - JvOptionPane.DEFAULT_OPTION, JvOptionPane.PLAIN_MESSAGE, null, - options, options[0]); - } else - { - okAction.run(); - } + if (wholeHeight && wholeWidth) + { + JvOptionPane dialog = JvOptionPane.newOptionDialog(Desktop.desktop); + dialog.setResponseHandler(0, okAction); // 0 = OK_OPTION + Object[] options = new Object[] { + MessageManager.getString("action.ok"), + MessageManager.getString("action.cancel") }; + dialog.showDialog(MessageManager.getString("warn.delete_all"), + MessageManager.getString("label.delete_all"), + JvOptionPane.DEFAULT_OPTION, JvOptionPane.PLAIN_MESSAGE, null, + options, options[0]); + } + else + { + okAction.run(); + } } /** @@ -2512,7 +2665,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } viewport.setSelectionGroup(null); viewport.getColumnSelection().clear(); - viewport.setSelectionGroup(null); + viewport.setSearchResults(null); alignPanel.getIdPanel().getIdCanvas().searchResults = null; // JAL-2034 - should delegate to // alignPanel to decide if overview needs @@ -2625,8 +2778,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, column, viewport.getAlignment()); } - setStatus(MessageManager - .formatMessage("label.removed_columns", new String[] + setStatus(MessageManager.formatMessage("label.removed_columns", + new String[] { Integer.valueOf(trimRegion.getSize()).toString() })); addHistoryItem(trimRegion); @@ -2675,8 +2828,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, addHistoryItem(removeGapCols); - setStatus(MessageManager - .formatMessage("label.removed_empty_columns", new Object[] + setStatus(MessageManager.formatMessage("label.removed_empty_columns", + new Object[] { Integer.valueOf(removeGapCols.getSize()).toString() })); // This is to maintain viewport position on first residue @@ -2749,15 +2902,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } /** - * DOCUMENT ME! + * Opens a Finder dialog * * @param e - * DOCUMENT ME! */ @Override public void findMenuItem_actionPerformed(ActionEvent e) { - new Finder(); + new Finder(alignPanel, false, null); } /** @@ -2798,8 +2950,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (viewport.getViewName() == null) { - viewport.setViewName(MessageManager - .getString("label.view_name_original")); + viewport.setViewName( + MessageManager.getString("label.view_name_original")); } /* @@ -3325,7 +3477,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, JLabel textLabel = new JLabel(); textLabel.setText(content); textLabel.setBackground(Color.WHITE); - + pane = new JPanel(new BorderLayout()); ((JPanel) pane).setOpaque(true); pane.setBackground(Color.WHITE); @@ -3455,8 +3607,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * otherwise set the chosen colour scheme (or null for 'None') */ ColourSchemeI cs = ColourSchemes.getInstance().getColourScheme(name, - viewport, - viewport.getAlignment(), viewport.getHiddenRepSequences()); + viewport, viewport.getAlignment(), + viewport.getHiddenRepSequences()); changeColour(cs); } @@ -3676,15 +3828,15 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, /** * Constructs a tree panel and adds it to the desktop * - * @param type - * tree type (NJ or AV) - * @param modelName - * name of score model used to compute the tree - * @param options - * parameters for the distance or similarity calculation + * @param params + * @param treeAlgo + * + * @param tree + * + * */ - void newTreePanel(String type, String modelName, - SimilarityParamsI options) + void newTreePanel(TreeModel tree, String treeAlgo, + String substitutionMatrix) { String frameTitle = ""; TreePanel tp; @@ -3696,7 +3848,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, SequenceGroup sg = viewport.getSelectionGroup(); /* Decide if the selection is a column region */ - for (SequenceI _s : sg.getSequences()) + for (SequenceI _s : sg.getSequences()) // port this to Archaeopteryx? { if (_s.getLength() < sg.getEndRes()) { @@ -3720,7 +3872,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } } - tp = new TreePanel(alignPanel, type, modelName, options); + tp = new TreePanel(alignPanel, tree, treeAlgo, substitutionMatrix); frameTitle = tp.getPanelTitle() + (onSelection ? " on region" : ""); frameTitle += " from "; @@ -3839,8 +3991,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, Enumeration labels = scoreSorts.keys(); while (labels.hasMoreElements()) { - addSortByAnnotScoreMenuItem(sortByAnnotScore, - labels.nextElement()); + addSortByAnnotScoreMenuItem(sortByAnnotScore, labels.nextElement()); } sortByAnnotScore.setVisible(scoreSorts.size() > 0); scoreSorts.clear(); @@ -3889,6 +4040,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, @Override public void actionPerformed(ActionEvent e) { + // adapt to Aptx tp.sortByTree_actionPerformed(); addHistoryItem(tp.sortAlignmentIn(alignPanel)); @@ -3998,28 +4150,78 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, @Override protected void loadTreeMenuItem_actionPerformed(ActionEvent e) { + chooseTreeFile(); + } + + @Override + protected void loadTreeUrlItem_actionPerformed(ActionEvent e) + { + chooseTreeUrl(); + } + + @Override + protected void loadTreeBaseStudy_actionPerformed(ActionEvent e) + { + chooseTreeDb(); + + } + + @Override + protected void loadTreeOfLife_actionPerformed(ActionEvent e) + { + chooseTreeDb(); + + } + + @Override + protected void loadTreeFam_actionPerformed(ActionEvent e) + { + chooseTreeDb(); + + } + + @Override + protected void loadTreePfam_actionPerformed(ActionEvent e) + { + chooseTreeDb(); + + } + + @Override + protected void loadTreeBase_actionPerformed(ActionEvent e) + { + chooseTreeDb(); + + } + + + public void chooseTreeFile() + { // Pick the tree file JalviewFileChooser chooser = new JalviewFileChooser( - jalview.bin.Cache.getProperty("LAST_DIRECTORY")); + Cache.getProperty("LAST_DIRECTORY")); chooser.setFileView(new JalviewFileView()); chooser.setDialogTitle( - MessageManager.getString("label.select_newick_like_tree_file")); + MessageManager.getString("label.select_tree_file")); // modify chooser.setToolTipText( - MessageManager.getString("label.load_tree_file")); + MessageManager.getString("label.load_tree_for_sequence_set")); + for (SupportedTreeFileFilter treeFormat : SupportedTreeFileFilter + .values()) + { + chooser.setFileFilter(treeFormat.getTreeFilter()); + } - chooser.setResponseHandler(0,new Runnable() + chooser.setResponseHandler(0, new Runnable() { @Override public void run() { String filePath = chooser.getSelectedFile().getPath(); Cache.setProperty("LAST_DIRECTORY", filePath); - NewickFile fin = null; - try - { - fin = new NewickFile(new FileParse(chooser.getSelectedFile(), - DataSourceType.FILE)); - viewport.setCurrentTree(showNewickTree(fin, filePath).getTree()); + TreeParser treeParser = null; + try { + treeParser = new TreeParser(filePath); + treeParser.loadTree(viewport); } catch (Exception ex) { JvOptionPane.showMessageDialog(Desktop.desktop, ex.getMessage(), @@ -4039,6 +4241,78 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } }); chooser.showOpenDialog(this); + } + } + + /** + * Break up and move to TreeParser? + */ + public void chooseTreeUrl() + { + + JLabel label = new JLabel( + MessageManager.getString("label.tree_url_example")); + // add "example" button + final JComboBox history = new JComboBox<>(); + + JPanel panel = new JPanel(new GridLayout(2, 1)); + panel.add(label); + panel.add(history); + history.setPreferredSize(new Dimension(400, 20)); + history.setEditable(true); + history.addItem("http://www."); + + String historyItems = jalview.bin.Cache.getProperty("RECENT_URL"); + + StringTokenizer st; + + if (historyItems != null) + { + st = new StringTokenizer(historyItems, "\t"); + + while (st.hasMoreTokens()) + { + history.addItem(st.nextToken()); + } + } + + int reply = JvOptionPane.showInternalConfirmDialog(this, panel, + MessageManager.getString("label.load_tree_url"), + JvOptionPane.OK_CANCEL_OPTION); + + if (reply == JvOptionPane.OK_OPTION) + { + + String urlString = history.getSelectedItem().toString(); + URL treeUrl; + + try + { + FileFormatI format = null; + + format = new IdentifyFile().identify(urlString, DataSourceType.URL); + // add actual use for the format identification (jalview .jar files) + treeUrl = new URL(urlString); + AptxInit.createInstanceFromUrl(treeUrl, viewport); + + } catch (IOException | RuntimeException e) + { + JvOptionPane.showMessageDialog(this, MessageManager.formatMessage( + "exception.failed_to_read_data_from_source", new String[] + { urlString }), + MessageManager.getString("label.url_not_found"), + JvOptionPane.ERROR_MESSAGE); + e.printStackTrace(); + } + } + else + { + + } + } + + public void chooseTreeDb() + { } public TreePanel showNewickTree(NewickFile nf, String treeTitle) @@ -4156,6 +4430,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, final JMenu seqsrchmenu = new JMenu("Sequence Database Search"); final JMenu analymenu = new JMenu("Analysis"); final JMenu dismenu = new JMenu("Protein Disorder"); + final JMenu phylogenmenu = new JMenu("Phylogenetic inference"); + // JAL-940 - only show secondary structure prediction services from // the legacy server if (// Cache.getDefault("SHOW_JWS1_SERVICES", true) @@ -4175,8 +4451,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, // Add any secondary structure prediction services for (int i = 0, j = secstrpr.size(); i < j; i++) { - final ext.vamsas.ServiceHandle sh = secstrpr - .get(i); + final ext.vamsas.ServiceHandle sh = secstrpr.get(i); jalview.ws.WSMenuEntryProviderI impl = jalview.ws.jws1.Discoverer .getServiceClient(sh); int p = secstrmenu.getItemCount(); @@ -4196,6 +4471,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, wsmenu.add(secstrmenu); wsmenu.add(dismenu); wsmenu.add(analymenu); + wsmenu.add(phylogenmenu); // No search services yet // wsmenu.add(seqsrchmenu); @@ -4220,9 +4496,15 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, webService.add(me.webServiceNoServices); } // TODO: move into separate menu builder class. - boolean new_sspred = false; - if (Cache.getDefault("SHOW_JWS2_SERVICES", true)) { + // logic for 2.11.1.4 is + // always look to see if there is a discover. if there isn't + // we can't show any Jws2 services + // if there are services available, show them - regardless of + // the 'show JWS2 preference' + // if the discoverer is running then say so + // otherwise offer to trigger discovery if 'show JWS2' is not + // enabled Jws2Discoverer jws2servs = Jws2Discoverer.getDiscoverer(); if (jws2servs != null) { @@ -4231,7 +4513,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, jws2servs.attachWSMenuEntry(webService, me); for (Jws2Instance sv : jws2servs.getServices()) { - if (sv.description.toLowerCase().contains("jpred")) + if (sv.description.toLowerCase(Locale.ROOT) + .contains("jpred")) { for (JMenuItem jmi : legacyItems) { @@ -4239,8 +4522,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } } } - } + if (jws2servs.isRunning()) { JMenuItem tm = new JMenuItem( @@ -4248,6 +4531,26 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, tm.setEnabled(false); webService.add(tm); } + else if (!Cache.getDefault("SHOW_JWS2_SERVICES", true)) + { + JMenuItem enableJws2 = new JMenuItem( + "Discover Web Services"); + enableJws2.setToolTipText( + "Select to start JABA Web Service discovery (or enable option in Web Service preferences)"); + enableJws2.setEnabled(true); + enableJws2.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + // start service discoverer, but ignore preference + Desktop.instance.startServiceDiscovery(false, + true); + } + }); + webService.add(enableJws2); + } } } build_urlServiceMenu(me.webService); @@ -4265,7 +4568,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } } catch (Exception e) { - Cache.log.debug( + Console.debug( "Exception during web service menu building process.", e); } @@ -4276,7 +4579,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } buildingMenu = false; } - }).start(); + }, "BuildWebServiceThread").start(); } @@ -4362,7 +4665,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, showProducts.setEnabled(showp); } catch (Exception e) { - Cache.log.warn( + Console.warn( "canShowProducts threw an exception - please report to help@jalview.org", e); return false; @@ -4384,7 +4687,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, protected void showProductsFor(final SequenceI[] sel, final boolean _odna, final String source) { - new Thread(CrossRefAction.getHandlerFor(sel, _odna, source, this)) + new Thread(CrossRefAction.getHandlerFor(sel, _odna, source, this), + "CrossReferencesThread") .start(); } @@ -4403,8 +4707,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, al = dna.translateCdna(codeTable); } catch (Exception ex) { - jalview.bin.Cache.log.error( - "Exception during translation. Please report this !", ex); + Console.error("Exception during translation. Please report this !", + ex); final String msg = MessageManager.getString( "label.error_when_translating_sequences_submit_bug_report"); final String errorTitle = MessageManager @@ -4555,10 +4859,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, if (protocol == DataSourceType.FILE) { File fl; - if (file instanceof File) { + if (file instanceof File) + { fl = (File) file; Platform.cacheFileData(fl); - } else { + } + else + { fl = new File(fileName); } pdbfn = fl.getName(); @@ -4690,7 +4997,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, ex.printStackTrace(); } } - }).start(); + }, "DropFileThread").start(); } } @@ -4763,7 +5070,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } } catch (Exception x) { - Cache.log.debug( + Console.debug( "Exception when processing data source as T-COFFEE score file", x); tcf = null; @@ -5089,7 +5396,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, }); dbRefFetcher.fetchDBRefs(false); } - }).start(); + }, "BuildFetchDBMenuThread").start(); } @@ -5795,6 +6102,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, } private Rectangle lastFeatureSettingsBounds = null; + @Override public void setFeatureSettingsGeometry(Rectangle bounds) {