From: James Procter Date: Fri, 28 Apr 2023 15:49:27 +0000 (+0100) Subject: JAL-161 JAL-4173 allow trees embedded as NH tags in stockholm to be loaded as trees... X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=115a611d005faab33f978a469578bcacbcecc112;p=jalview.git JAL-161 JAL-4173 allow trees embedded as NH tags in stockholm to be loaded as trees when stockholm alignment is imported --- diff --git a/src/jalview/io/AlignFile.java b/src/jalview/io/AlignFile.java index 1233940..1bea24b 100755 --- a/src/jalview/io/AlignFile.java +++ b/src/jalview/io/AlignFile.java @@ -433,12 +433,24 @@ public abstract class AlignFile extends FileParse newickStrings.addElement(new String[] { treeName, newickString }); } - protected int getTreeCount() + @Override + public int getTreeCount() { return newickStrings == null ? 0 : newickStrings.size(); } @Override + public boolean hasTrees() + { + return getTreeCount()>0; + } + + @Override + public List getNewickTrees() + { + return newickStrings; + } + @Override public void addGroups(AlignmentI al) { diff --git a/src/jalview/io/AlignmentFileReaderI.java b/src/jalview/io/AlignmentFileReaderI.java index c3e148d..2ea1fa1 100644 --- a/src/jalview/io/AlignmentFileReaderI.java +++ b/src/jalview/io/AlignmentFileReaderI.java @@ -20,6 +20,9 @@ */ package jalview.io; +import java.util.Arrays; +import java.util.List; + import jalview.api.AlignExportSettingsI; import jalview.api.AlignmentViewPanel; import jalview.api.FeatureSettingsModelI; @@ -47,4 +50,16 @@ public interface AlignmentFileReaderI FeatureSettingsModelI getFeatureColourScheme(); + default int getTreeCount() { + return 0; + } + + default boolean hasTrees() { + return false; + } + + default List getNewickTrees() { + return Arrays.asList(new String[][] {}); + } + } diff --git a/src/jalview/io/FileLoader.java b/src/jalview/io/FileLoader.java index 449c685..7b2ec80 100755 --- a/src/jalview/io/FileLoader.java +++ b/src/jalview/io/FileLoader.java @@ -32,6 +32,7 @@ import jalview.api.FeatureSettingsModelI; import jalview.api.FeaturesDisplayedI; import jalview.api.FeaturesSourceI; import jalview.bin.Cache; +import jalview.bin.Console; import jalview.bin.Jalview; import jalview.datamodel.AlignmentI; import jalview.datamodel.HiddenColumns; @@ -328,7 +329,6 @@ public class FileLoader implements Runnable } loadtime = -System.currentTimeMillis(); AlignmentI al = null; - if (FileFormat.Jalview.equals(format)) { if (source != null) @@ -344,19 +344,21 @@ public class FileLoader implements Runnable } else { + FormatAdapter fa = null; // populated for simple and complex flatfile formats - but not Jalview Projects String error = AppletFormatAdapter.getSupportedFormats(); try { if (source != null) { + fa=new FormatAdapter(); // read from the provided source - al = new FormatAdapter().readFromFile(source, format); + al = fa.readFromFile(source, format); } else { // open a new source and read from it - FormatAdapter fa = new FormatAdapter(); + fa = new FormatAdapter(); boolean downloadStructureFile = format.isStructureFile() && protocol.equals(DataSourceType.URL); if (downloadStructureFile) @@ -474,6 +476,33 @@ public class FileLoader implements Runnable alignFrame.getViewport() .applyFeaturesStyle(proxyColourScheme); } + if (source.hasTrees()) + { + for (String[] nhxtree : source.getNewickTrees()) + { + NewickFile fin = null; + try + { + fin = new NewickFile(new FileParse(nhxtree[1], + DataSourceType.PASTE)); + if (fin.hasWarningMessage()) + { + Console.warn( + "Warnings when importing tree from file: " + + fin.getWarningMessage()); + } + if (fin.isValid())// && fin.getTree() != null) + { + alignFrame.showNewickTree(fin, nhxtree[0]); + } else { + Console.warn("Ignoring tree "+nhxtree[0]+"\t"+nhxtree[1]); + } + } catch (Throwable thr) + { + Console.warn("Couldn't import tree from file", thr); + } + } + } alignFrame.setStatus(MessageManager.formatMessage( "label.successfully_loaded_file", new String[] { title }));