X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;h=b18d33c3d04691673ac243c49ea0b4840664cdaa;hb=ac782d365838ae95fc6bbf6164e763a1e6893e72;hp=95f1ed19f6fc33535d98855f30ea4893fd866d4d;hpb=bf448d3b8794da07525adedec9f1ff04428e84cb;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index 95f1ed1..b18d33c 100644 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -45,6 +45,7 @@ import jalview.commands.RemoveGapColCommand; import jalview.commands.RemoveGapsCommand; import jalview.commands.SlideSequencesCommand; import jalview.commands.TrimRegionCommand; +import jalview.datamodel.AlignExportSettingBeanI; import jalview.datamodel.AlignedCodonFrame; import jalview.datamodel.Alignment; import jalview.datamodel.AlignmentAnnotation; @@ -54,7 +55,6 @@ 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; @@ -336,14 +336,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, Desktop.getDesktop().propertyChange(evt); } - /** - * BH 2018 - * + * BH 2018 + * * @return true if we have any features */ @Override - protected boolean haveAlignmentFeatures() { + protected boolean haveAlignmentFeatures() + { AlignmentI alignment = getViewport().getAlignment(); for (int i = 0; i < alignment.getHeight(); i++) @@ -351,12 +351,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, SequenceI seq = alignment.getSequenceAt(i); for (String group : seq.getFeatures().getFeatureGroups(true)) { - if (group != null)return true; + if (group != null) + return true; } } - return false; + return false; } - + /** * initalise the alignframe from the underlying viewport data and the * configurations @@ -418,7 +419,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, * */ { - addServiceListeners(); + addServiceListeners(); } setGUINucleotide(); } @@ -536,14 +537,15 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, setFileFormat(format); reload.setEnabled(true); } - + /** * JavaScript will have this, maybe others. More dependable than a file name * and maintains a reference to the actual bytes loaded. * * @param file */ - public void setFileObject(File file) { + public void setFileObject(File file) + { this.fileObject = file; } @@ -1077,7 +1079,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, FileLoader loader = new FileLoader(); DataSourceType protocol = fileName.startsWith("http:") - ? DataSourceType.URL : DataSourceType.FILE; + ? DataSourceType.URL + : DataSourceType.FILE; loader.LoadFile(viewport, fileName, protocol, currentFileFormat); } else @@ -1092,13 +1095,15 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { DataSourceType protocol = (fileName.startsWith("http:") - ? DataSourceType.URL : DataSourceType.FILE); + ? DataSourceType.URL + : DataSourceType.FILE); newframe = loader.LoadFileWaitTillLoaded(fileName, protocol, currentFileFormat); } else { - newframe = loader.LoadFileWaitTillLoaded(fileObject, DataSourceType.FILE, currentFileFormat); + newframe = loader.LoadFileWaitTillLoaded(fileObject, + DataSourceType.FILE, currentFileFormat); } newframe.setBounds(bounds); @@ -1175,7 +1180,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { @Override public void run() - { + { currentFileFormat = chooser.getSelectedFormat(); while (currentFileFormat == null) { @@ -1200,95 +1205,115 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, }).showSaveDialog(this); } - public boolean saveAlignment(String file, FileFormatI format) - { - boolean success = true; - - if (FileFormat.Jalview.equals(format)) - { - String shortName = title; - - if (shortName.indexOf(java.io.File.separatorChar) > -1) - { - shortName = shortName.substring( - shortName.lastIndexOf(java.io.File.separatorChar) + 1); - } + private boolean lastSaveSuccessful = false; - success = new Jalview2XML().saveAlignment(this, file, shortName); + private FileFormatI lastFormatSaved; - statusBar.setText(MessageManager.formatMessage( - "label.successfully_saved_to_file_in_format", new Object[] - { fileName, format })); + private String lastFilenameSaved; - } - else - { - AlignmentExportData exportData = getAlignmentForExport(format, - viewport, null); - if (exportData.getSettings().isCancelled()) - { - return false; - } - FormatAdapter f = new FormatAdapter(alignPanel, - exportData.getSettings()); - String output = f.formatSequences(format, exportData.getAlignment(), // class - // cast - // exceptions - // will - // occur in the distant future - exportData.getOmitHidden(), exportData.getStartEndPostions(), - f.getCacheSuffixDefault(format), - viewport.getAlignment().getHiddenColumns()); - - if (output == null) - { - success = false; - } - else - { - try - { - PrintWriter out = new PrintWriter(new FileWriter(file)); - - out.print(output); - out.close(); - this.setTitle(file); - statusBar.setText(MessageManager.formatMessage( - "label.successfully_saved_to_file_in_format", new Object[] - { fileName, format.getName() })); - } catch (Exception ex) - { - success = false; - ex.printStackTrace(); - } - } - } + /** + * Raise a dialog or status message for the last call to saveAlignment. + * + * @return true if last call to saveAlignment(file, format) was successful. + */ + public boolean isSaveAlignmentSuccessful() + { - if (!success) + if (!lastSaveSuccessful) { JvOptionPane.showInternalMessageDialog(this, MessageManager .formatMessage("label.couldnt_save_file", new Object[] - { fileName }), + { lastFilenameSaved }), MessageManager.getString("label.error_saving_file"), JvOptionPane.WARNING_MESSAGE); } + else + { - return success; + statusBar.setText(MessageManager.formatMessage( + "label.successfully_saved_to_file_in_format", new Object[] + { lastFilenameSaved, lastFormatSaved })); + + } + return lastSaveSuccessful; } - private void warningMessage(String warning, String title) + public void saveAlignment(String file, FileFormatI format) { - if (new jalview.util.Platform().isHeadless()) + lastSaveSuccessful = false; + lastFilenameSaved = file; + lastFormatSaved = format; + AlignFrame us = this; + if (FileFormat.Jalview.equals(format)) { - System.err.println("Warning: " + title + "\nWarning: " + warning); + String shortName = title; + if (shortName.indexOf(java.io.File.separatorChar) > -1) + { + shortName = shortName.substring( + shortName.lastIndexOf(java.io.File.separatorChar) + 1); + } + + lastSaveSuccessful = new Jalview2XML().saveAlignment(this, file, + shortName); } else { - JvOptionPane.showInternalMessageDialog(this, warning, title, - JvOptionPane.WARNING_MESSAGE); + AlignExportSettingI settings = getAlignmentForExport(format, + alignPanel, null); + settings.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + + if (settings.isCancelled()) + { + lastSaveSuccessful = false; + return; + } + AlignmentExportData exportData = settings.getAlignExportData(); + FormatAdapter f = new FormatAdapter(alignPanel, + exportData.getSettings()); + String output = f.formatSequences(format, + exportData.getAlignment(), // class + // cast + // exceptions + // will + // occur in the distant future + exportData.getOmitHidden(), + exportData.getStartEndPostions(), + f.getCacheSuffixDefault(format), + viewport.getAlignment().getHiddenColumns()); + + if (output == null) + { + lastSaveSuccessful = false; + } + else + { + try + { + PrintWriter out = new PrintWriter(new FileWriter(file)); + + out.print(output); + out.close(); + us.setTitle(file); + statusBar.setText(MessageManager.formatMessage( + "label.successfully_saved_to_file_in_format", + new Object[] + { fileName, format.getName() })); + } catch (Exception ex) + { + lastSaveSuccessful = false; + ex.printStackTrace(); + } + } + } + }); + + settings.doShowSettings(); } - return; } /** @@ -1302,75 +1327,50 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, { FileFormatI fileFormat = FileFormats.getInstance() .forName(e.getActionCommand()); - AlignmentExportData exportData = getAlignmentForExport(fileFormat, - viewport, null); - if (exportData.getSettings().isCancelled()) - { - return; - } - CutAndPasteTransfer cap = new CutAndPasteTransfer(); - cap.setForInput(null); - try + AlignExportSettingI settings = getAlignmentForExport(fileFormat, + alignPanel, null); + settings.addActionListener(new ActionListener() { - FileFormatI format = fileFormat; - cap.setText(new FormatAdapter(alignPanel, exportData.getSettings()) - .formatSequences(format, exportData.getAlignment(), - exportData.getOmitHidden(), - exportData.getStartEndPostions(), - viewport.getAlignment().getHiddenColumns())); - Desktop.addInternalFrame(cap, MessageManager - .formatMessage("label.alignment_output_command", new Object[] - { e.getActionCommand() }), 600, 500); - } catch (OutOfMemoryError oom) - { - new OOMWarning("Outputting alignment as " + e.getActionCommand(), - oom); - cap.dispose(); - } + @Override + public void actionPerformed(ActionEvent e) + { + if (settings.isCancelled()) + { + return; + } + AlignmentExportData exportData = settings.getAlignExportData(); + CutAndPasteTransfer cap = new CutAndPasteTransfer(); + cap.setForInput(null); + try + { + FileFormatI format = fileFormat; + cap.setText(new FormatAdapter(alignPanel, settings) + .formatSequences(format, exportData.getAlignment(), + exportData.getOmitHidden(), + exportData.getStartEndPostions(), + viewport.getAlignment().getHiddenColumns())); + Desktop.addInternalFrame(cap, MessageManager.formatMessage( + "label.alignment_output_command", new Object[] + { fileFormat.getName() }), 600, 500); + } catch (OutOfMemoryError oom) + { + new OOMWarning("Outputting alignment as " + fileFormat.getName(), + oom); + cap.dispose(); + } + // TODO Auto-generated method stub + } + }); + settings.doShowSettings(); } - public static AlignmentExportData getAlignmentForExport( - FileFormatI format, AlignViewportI viewport, - AlignExportSettingI exportSettings) + public static AlignExportSettingI getAlignmentForExport( + FileFormatI format, AlignmentPanel alignPanel, + AlignExportSettingBeanI exportSettings) { - AlignmentI alignmentToExport = null; - AlignExportSettingI settings = exportSettings; - String[] omitHidden = null; - - HiddenSequences hiddenSeqs = viewport.getAlignment() - .getHiddenSequences(); - - alignmentToExport = viewport.getAlignment(); - - boolean hasHiddenSeqs = hiddenSeqs.getSize() > 0; - if (settings == null) - { - settings = new AlignExportSettings(hasHiddenSeqs, - viewport.hasHiddenColumns(), format); - } - // settings.isExportAnnotations(); - - if (viewport.hasHiddenColumns() && !settings.isExportHiddenColumns()) - { - omitHidden = viewport.getViewAsString(false, - settings.isExportHiddenSequences()); - } - int[] alignmentStartEnd = new int[2]; - if (hasHiddenSeqs && settings.isExportHiddenSequences()) - { - alignmentToExport = hiddenSeqs.getFullAlignment(); - } - else - { - alignmentToExport = viewport.getAlignment(); - } - alignmentStartEnd = viewport.getAlignment().getHiddenColumns() - .getVisibleStartAndEndIndex(alignmentToExport.getWidth()); - AlignmentExportData ed = new AlignmentExportData(alignmentToExport, - omitHidden, alignmentStartEnd, settings); - return ed; + return new AlignExportSettings(alignPanel, format, exportSettings); } /** @@ -1472,17 +1472,17 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, chooser.setToolTipText( MessageManager.getString("label.load_jalview_annotations")); chooser.response(new RunResponse(JalviewFileChooser.APPROVE_OPTION) - { + { - @Override - public void run() - { - String choice = chooser.getSelectedFile().getPath(); - jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice); - loadJalviewDataFile(chooser.getSelectedFile(), null, null, null); - } + @Override + public void run() + { + String choice = chooser.getSelectedFile().getPath(); + jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice); + loadJalviewDataFile(chooser.getSelectedFile(), null, null, null); + } - }); + }); chooser.openDialog(this); } @@ -3942,40 +3942,38 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, chooser.setToolTipText( MessageManager.getString("label.load_tree_file")); - chooser.response( - new jalview.util.dialogrunner.RunResponse(JalviewFileChooser.APPROVE_OPTION) - { - @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()); - } catch (Exception ex) - { - JvOptionPane.showMessageDialog(Desktop.desktop, - ex.getMessage(), - MessageManager.getString( - "label.problem_reading_tree_file"), - JvOptionPane.WARNING_MESSAGE); - ex.printStackTrace(); - } - if (fin != null && fin.hasWarningMessage()) - { - JvOptionPane.showMessageDialog(Desktop.desktop, - fin.getWarningMessage(), - MessageManager.getString( - "label.possible_problem_with_tree_file"), - JvOptionPane.WARNING_MESSAGE); - } - } - }).openDialog(this); + chooser.response(new jalview.util.dialogrunner.RunResponse( + JalviewFileChooser.APPROVE_OPTION) + { + @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()); + } catch (Exception ex) + { + JvOptionPane.showMessageDialog(Desktop.desktop, ex.getMessage(), + MessageManager + .getString("label.problem_reading_tree_file"), + JvOptionPane.WARNING_MESSAGE); + ex.printStackTrace(); + } + if (fin != null && fin.hasWarningMessage()) + { + JvOptionPane.showMessageDialog(Desktop.desktop, + fin.getWarningMessage(), + MessageManager.getString( + "label.possible_problem_with_tree_file"), + JvOptionPane.WARNING_MESSAGE); + } + } + }).openDialog(this); } public TreePanel showNewickTree(NewickFile nf, String treeTitle) @@ -4402,7 +4400,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, */ public boolean parseFeaturesFile(Object file, DataSourceType sourceType) { - // BH 2018 + // BH 2018 return avc.parseFeaturesFile(file, sourceType, Cache.getDefault("RELAXEDSEQIDMATCHING", false)); @@ -4449,8 +4447,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, // Java's Transferable for native dnd evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE); Transferable t = evt.getTransferable(); - - + final AlignFrame thisaf = this; final List files = new ArrayList<>(); List protocols = new ArrayList<>(); @@ -4483,14 +4480,17 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, ArrayList filesnotmatched = new ArrayList<>(); for (int i = 0; i < files.size(); i++) { - // BH 2018 + // BH 2018 Object file = files.get(i); String fileName = file.toString(); String pdbfn = ""; - DataSourceType protocol = (file instanceof File ? DataSourceType.FILE : FormatAdapter.checkProtocol(fileName)); + DataSourceType protocol = (file instanceof File + ? DataSourceType.FILE + : FormatAdapter.checkProtocol(fileName)); if (protocol == DataSourceType.FILE) { - File fl = (file instanceof File ? (File) file : new File(fileName)); + File fl = (file instanceof File ? (File) file + : new File(fileName)); pdbfn = fl.getName(); } else if (protocol == DataSourceType.URL) @@ -4539,7 +4539,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, int assocfiles = 0; if (filesmatched.size() > 0) { - boolean autoAssociate = Cache.getDefault("AUTOASSOCIATE_PDBANDSEQS", false); + boolean autoAssociate = Cache + .getDefault("AUTOASSOCIATE_PDBANDSEQS", false); if (!autoAssociate) { String msg = MessageManager.formatMessage(