X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FAppletFormatAdapter.java;h=90400f421547f8ca45e8b20134c1b28e2c06e1f5;hb=ff2d6b48be7f17742defac9c965c70d7944d773b;hp=5601f2774d4ee082af143badbeee591c46fd7798;hpb=e2d6753e8cf3c5eaf8bccf34f4f5e9d651e9cb8e;p=jalview.git diff --git a/src/jalview/io/AppletFormatAdapter.java b/src/jalview/io/AppletFormatAdapter.java index 5601f27..90400f4 100755 --- a/src/jalview/io/AppletFormatAdapter.java +++ b/src/jalview/io/AppletFormatAdapter.java @@ -20,12 +20,12 @@ */ package jalview.io; -import jalview.api.AlignViewportI; +import jalview.api.AlignExportSettingI; +import jalview.api.AlignmentViewPanel; import jalview.datamodel.Alignment; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; import jalview.datamodel.AlignmentView; -import jalview.datamodel.SequenceGroup; import jalview.util.MessageManager; import java.io.File; @@ -43,7 +43,7 @@ import java.util.List; */ public class AppletFormatAdapter { - private AlignViewportI viewport; + private AlignmentViewPanel viewpanel; public static String FILE = "File"; @@ -77,12 +77,14 @@ public class AppletFormatAdapter */ protected String newline = System.getProperty("line.separator"); + private AlignExportSettingI exportSettings; + /** * List of valid format strings used in the isValidFormat method */ public static final String[] READABLE_FORMATS = new String[] { "BLC", "CLUSTAL", "FASTA", "MSF", "PileUp", "PIR", "PFAM", "STH", - "PDB", "JnetFile", "RNAML", PhylipFile.FILE_DESC, JSONFile.FILE_DESC, + "PDB", "JnetFile", "RNAML", PhylipFile.FILE_DESC, JSONFile.FILE_DESC, IdentifyFile.GFF3File, "HTML" }; /** @@ -92,6 +94,7 @@ public class AppletFormatAdapter public static final String[] READABLE_EXTENSIONS = new String[] { "fa, fasta, mfa, fastq", "aln", "pfam", "msf", "pir", "blc", "amsa", "sto,stk", "xml,rnaml", PhylipFile.FILE_EXT, JSONFile.FILE_EXT, + ".gff2,gff3", "jar,jvp", HtmlFile.FILE_EXT }; /** @@ -100,7 +103,7 @@ public class AppletFormatAdapter */ public static final String[] READABLE_FNAMES = new String[] { "Fasta", "Clustal", "PFAM", "MSF", "PIR", "BLC", "AMSA", "Stockholm", - "RNAML", PhylipFile.FILE_DESC, JSONFile.FILE_DESC, "Jalview", + "RNAML", PhylipFile.FILE_DESC, JSONFile.FILE_DESC, IdentifyFile.GFF3File, "Jalview", HtmlFile.FILE_DESC }; /** @@ -137,9 +140,16 @@ public class AppletFormatAdapter { } - public AppletFormatAdapter(AlignViewportI viewport) + public AppletFormatAdapter(AlignmentViewPanel viewpanel) + { + this.viewpanel = viewpanel; + } + + public AppletFormatAdapter(AlignmentViewPanel alignPanel, + AlignExportSettingI settings) { - this.viewport = viewport; + viewpanel = alignPanel; + exportSettings = settings; } /** @@ -221,7 +231,7 @@ public class AppletFormatAdapter * * @return DOCUMENT ME! */ - public Alignment readFile(String inFile, String type, String format) + public AlignmentI readFile(String inFile, String type, String format) throws java.io.IOException { // TODO: generalise mapping between format string and io. class instances @@ -229,7 +239,6 @@ public class AppletFormatAdapter this.inFile = inFile; try { - Alignment al; if (format.equals("FASTA")) { alignFile = new FastaFile(inFile, type); @@ -285,36 +294,20 @@ public class AppletFormatAdapter else if (format.equals(JSONFile.FILE_DESC)) { alignFile = new JSONFile(inFile, type); - al = new Alignment(alignFile.getSeqsAsArray()); - alignFile.addAnnotations(al); - ((JSONFile) alignFile).setViewport(viewport); - for (SequenceGroup sg : alignFile.getSeqGroups()) - { - al.addGroup(sg); - } - return al; } else if (format.equals(HtmlFile.FILE_DESC)) { alignFile = new HtmlFile(inFile, type); - al = new Alignment(alignFile.getSeqsAsArray()); - alignFile.addAnnotations(al); - for (SequenceGroup sg : alignFile.getSeqGroups()) - { - al.addGroup(sg); - } - return al; } else if (format.equals("RNAML")) { alignFile = new RnamlFile(inFile, type); } - - al = new Alignment(alignFile.getSeqsAsArray()); - - alignFile.addAnnotations(al); - - return al; + else if (format.equals(IdentifyFile.GFF3File)) + { + alignFile = new Gff3File(inFile, type); + } + return buildAlignmentFrom(alignFile); } catch (Exception e) { e.printStackTrace(); @@ -334,11 +327,7 @@ public class AppletFormatAdapter { // Possible sequence is just residues with no label alignFile = new FastaFile(">UNKNOWN\n" + inFile, "Paste"); - Alignment al = new Alignment(alignFile.getSeqsAsArray()); - - alignFile.addSeqGroups(al); - alignFile.addAnnotations(al); - return al; + return buildAlignmentFrom(alignFile); } catch (Exception ex) { @@ -377,7 +366,6 @@ public class AppletFormatAdapter String type = source.type; try { - Alignment al; if (format.equals("FASTA")) { alignFile = new FastaFile(source); @@ -432,23 +420,21 @@ public class AppletFormatAdapter { alignFile = new PhylipFile(source); } + else if (format.equals(IdentifyFile.GFF3File)) + { + alignFile = new Gff3File(inFile, type); + } else if (format.equals(JSONFile.FILE_DESC)) { alignFile = new JSONFile(source); - // ((JSONFile) afile).setViewport(viewport); - al = new Alignment(alignFile.getSeqsAsArray()); - alignFile.addAnnotations(al); - alignFile.addSeqGroups(al); - return al; } else if (format.equals(HtmlFile.FILE_DESC)) { alignFile = new HtmlFile(source); } - al = new Alignment(alignFile.getSeqsAsArray()); - alignFile.addAnnotations(al); - return al; + return buildAlignmentFrom(alignFile); + } catch (Exception e) { e.printStackTrace(); @@ -468,10 +454,7 @@ public class AppletFormatAdapter { // Possible sequence is just residues with no label alignFile = new FastaFile(">UNKNOWN\n" + inFile, "Paste"); - Alignment al = new Alignment(alignFile.getSeqsAsArray()); - alignFile.addAnnotations(al); - alignFile.addSeqGroups(al); - return al; + return buildAlignmentFrom(alignFile); } catch (Exception ex) { @@ -491,6 +474,27 @@ public class AppletFormatAdapter /** + * boilerplate method to handle data from an AlignFile and construct a new + * alignment or import to an existing alignment + * + * @param alignFile2 + * @return AlignmentI instance ready to pass to a UI constructor + */ + private AlignmentI buildAlignmentFrom(AlignFile alignFile2) + { + // Standard boilerplate for creating alignment from parser + // alignFile.configureForView(viewpanel); + + AlignmentI al = new Alignment(alignFile.getSeqsAsArray()); + + alignFile.addAnnotations(al); + + alignFile.addGroups(al); + + return al; + } + + /** * create an alignment flatfile from a Jalview alignment view * @param format * @param jvsuffix @@ -499,13 +503,14 @@ public class AppletFormatAdapter * @return flatfile in a string */ public String formatSequences(String format, boolean jvsuffix, - AlignViewportI av, boolean selectedOnly) + AlignmentViewPanel ap, boolean selectedOnly) { - AlignmentView selvew = av.getAlignmentView(selectedOnly, false); - AlignmentI aselview = selvew.getVisibleAlignment(av + AlignmentView selvew = ap.getAlignViewport().getAlignmentView( + selectedOnly, false); + AlignmentI aselview = selvew.getVisibleAlignment(ap.getAlignViewport() .getGapCharacter()); - List ala = (av + List ala = (ap.getAlignViewport() .getVisibleAlignmentAnnotation(selectedOnly)); if (ala != null) { @@ -514,7 +519,7 @@ public class AppletFormatAdapter aselview.addAnnotation(aa); } } - + viewpanel = ap; return formatSequences(format, aselview, jvsuffix); } @@ -582,22 +587,6 @@ public class AppletFormatAdapter else if (format.equalsIgnoreCase(JSONFile.FILE_DESC)) { afile = new JSONFile(); - afile.setViewport(viewport); - // Add groups to AlignFile - afile.seqGroups = alignment.getGroups(); - - // Add non auto calculated annotation to AlignFile - for (AlignmentAnnotation annot : alignment.getAlignmentAnnotation()) - { - if (annot != null && !annot.autoCalculated) - { - if (annot.label.equals("PDB.CATempFactor")) - { - continue; - } - afile.annotations.add(annot); - } - } } else if (format.equalsIgnoreCase("RNAML")) { @@ -608,11 +597,23 @@ public class AppletFormatAdapter { throw new Exception(MessageManager.getString("error.implementation_error_unknown_file_format_string")); } + afile.setNewlineString(newline); afile.addJVSuffix(jvsuffix); + afile.setExportSettings(exportSettings); + afile.configureForView(viewpanel); - afile.setSeqs(alignment.getSequencesArray()); - + // check whether we were given a specific alignment to export, rather than + // the one in the viewpanel + if (viewpanel == null || viewpanel.getAlignment() == null + || viewpanel.getAlignment() != alignment) + { + afile.setSeqs(alignment.getSequencesArray()); + } + else + { + afile.setSeqs(viewpanel.getAlignment().getSequencesArray()); + } String afileresp = afile.print(); if (afile.hasWarningMessage()) @@ -659,7 +660,7 @@ public class AppletFormatAdapter System.gc(); long memf = -r.totalMemory() + r.freeMemory(); long t1 = -System.currentTimeMillis(); - Alignment al = afa.readFile(args[i], FILE, + AlignmentI al = afa.readFile(args[i], FILE, new IdentifyFile().Identify(args[i], FILE)); t1 += System.currentTimeMillis(); System.gc();