Clover icon

Coverage Report

  1. Project Clover database Thu Jun 4 2026 14:16:38 BST
  2. Package jalview.io

File FileFormat.java

 

Coverage histogram

../../img/srcFileCovDistChart6.png
37% of files have more coverage

Code metrics

2
78
69
1
585
485
70
0.9
1.13
69
1.01

Classes

Class Line # Actions
FileFormat 31 78 70
0.55704755.7%
 

Contributing tests

This file is covered by 403 tests. .

Source view

1    /*
2    * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3    * Copyright (C) $$Year-Rel$$ The Jalview Authors
4    *
5    * This file is part of Jalview.
6    *
7    * Jalview is free software: you can redistribute it and/or
8    * modify it under the terms of the GNU General Public License
9    * as published by the Free Software Foundation, either version 3
10    * of the License, or (at your option) any later version.
11    *
12    * Jalview is distributed in the hope that it will be useful, but
13    * WITHOUT ANY WARRANTY; without even the implied warranty
14    * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15    * PURPOSE. See the GNU General Public License for more details.
16    *
17    * You should have received a copy of the GNU General Public License
18    * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19    * The Jalview Authors are detailed in the 'AUTHORS' file.
20    */
21    package jalview.io;
22   
23    import java.io.IOException;
24   
25    import jalview.datamodel.AlignmentI;
26    import jalview.datamodel.DBRefSource;
27    import jalview.datamodel.PDBEntry;
28    import jalview.ext.jmol.JmolParser;
29    import jalview.structure.StructureImportSettings;
30   
 
31    public enum FileFormat implements FileFormatI
32    {
33    Fasta("Fasta", "fa,fasta,mfa,fastq", true, true)
34    {
 
35  411 toggle @Override
36    public AlignmentFileReaderI getReader(FileParse source)
37    throws IOException
38    {
39  411 return new FastaFile(source);
40    }
41   
 
42  56 toggle @Override
43    public AlignmentFileWriterI getWriter(AlignmentI al)
44    {
45  56 return new FastaFile();
46    }
47    },
48    Pfam("PFAM", "pfam", true, true)
49    {
 
50  11 toggle @Override
51    public AlignmentFileReaderI getReader(FileParse source)
52    throws IOException
53    {
54  11 return new PfamFile(source);
55    }
56   
 
57  3 toggle @Override
58    public AlignmentFileWriterI getWriter(AlignmentI al)
59    {
60  3 return new PfamFile();
61    }
62    },
63    Stockholm("Stockholm", "sto,stk", true, true)
64    {
 
65  47 toggle @Override
66    public AlignmentFileReaderI getReader(FileParse source)
67    throws IOException
68    {
69  47 return new StockholmFile(source);
70    }
71   
 
72  56 toggle @Override
73    public AlignmentFileWriterI getWriter(AlignmentI al)
74    {
75  56 return new StockholmFile(al);
76    }
77   
78    },
79   
80    PIR("PIR", "pir", true, true)
81    {
 
82  1 toggle @Override
83    public AlignmentFileReaderI getReader(FileParse source)
84    throws IOException
85    {
86  1 return new PIRFile(source);
87    }
88   
 
89  3 toggle @Override
90    public AlignmentFileWriterI getWriter(AlignmentI al)
91    {
92  3 return new PIRFile();
93    }
94    },
95    BLC("BLC", "blc", true, true)
96    {
 
97  1 toggle @Override
98    public AlignmentFileReaderI getReader(FileParse source)
99    throws IOException
100    {
101  1 return new BLCFile(source);
102    }
103   
 
104  6 toggle @Override
105    public AlignmentFileWriterI getWriter(AlignmentI al)
106    {
107  6 return new BLCFile();
108    }
109    },
110    AMSA("AMSA", "amsa", true, true)
111    {
 
112  1 toggle @Override
113    public AlignmentFileReaderI getReader(FileParse source)
114    throws IOException
115    {
116  1 return new AMSAFile(source);
117    }
118   
 
119  1 toggle @Override
120    public AlignmentFileWriterI getWriter(AlignmentI al)
121    {
122  1 return new AMSAFile(al);
123    }
124    },
125    A3M("A3M (HHSuite)", "a3m", true, false)
126    {
 
127  1 toggle @Override
128    public AlignmentFileReaderI getReader(FileParse source)
129    throws IOException
130    {
131  1 return new A3mFile(source);
132    }
133   
 
134  0 toggle @Override
135    public AlignmentFileWriterI getWriter(AlignmentI al)
136    {
137  0 throw new Error("Not Implemented.");
138    }
139    },
140    Html("HTML", "html", true, false)
141    {
 
142  0 toggle @Override
143    public AlignmentFileReaderI getReader(FileParse source)
144    throws IOException
145    {
146  0 return new HtmlFile(source);
147    }
148   
 
149  0 toggle @Override
150    public AlignmentFileWriterI getWriter(AlignmentI al)
151    {
152  0 return new HtmlFile();
153    }
154   
 
155  0 toggle @Override
156    public boolean isComplexAlignFile()
157    {
158  0 return true;
159    }
160   
161    },
162    LayeredBN("LBN", "lbn", true, false)
163    {
 
164  3 toggle @Override
165    public AlignmentFileReaderI getReader(FileParse source)
166    throws IOException
167    {
168  3 return new LayeredDBNParser(source);
169    }
170   
 
171  0 toggle @Override
172    public AlignmentFileWriterI getWriter(AlignmentI al)
173    {
174  0 return new LayeredDBNParser();
175    }
176   
177    },
178    Rnaml("RNAML", "xml,rnaml", true, false)
179    {
 
180  1 toggle @Override
181    public AlignmentFileReaderI getReader(FileParse source)
182    throws IOException
183    {
184  1 return new RnamlFile(source);
185    }
186   
 
187  0 toggle @Override
188    public AlignmentFileWriterI getWriter(AlignmentI al)
189    {
190  0 return new RnamlFile();
191    }
192   
193    },
194    Json("JSON", "json", true, true)
195    {
 
196  12 toggle @Override
197    public AlignmentFileReaderI getReader(FileParse source)
198    throws IOException
199    {
200  12 return new JSONFile(source);
201    }
202   
 
203  8 toggle @Override
204    public AlignmentFileWriterI getWriter(AlignmentI al)
205    {
206  8 return new JSONFile();
207    }
208   
 
209  0 toggle @Override
210    public boolean isComplexAlignFile()
211    {
212  0 return true;
213    }
214   
215    },
216    Pileup("PileUp", "pileup", true, true)
217    {
 
218  1 toggle @Override
219    public AlignmentFileReaderI getReader(FileParse source)
220    throws IOException
221    {
222  1 return new PileUpfile(source);
223    }
224   
 
225  2 toggle @Override
226    public AlignmentFileWriterI getWriter(AlignmentI al)
227    {
228  2 return new PileUpfile();
229    }
230   
231    },
232    MSF("MSF", "msf", true, true)
233    {
 
234  1 toggle @Override
235    public AlignmentFileReaderI getReader(FileParse source)
236    throws IOException
237    {
238  1 return new MSFfile(source);
239    }
240   
 
241  3 toggle @Override
242    public AlignmentFileWriterI getWriter(AlignmentI al)
243    {
244  3 return new MSFfile();
245    }
246   
247    },
248    Clustal("Clustal", "aln", true, true)
249    {
 
250  1 toggle @Override
251    public AlignmentFileReaderI getReader(FileParse source)
252    throws IOException
253    {
254  1 return new ClustalFile(source);
255    }
256   
 
257  37 toggle @Override
258    public AlignmentFileWriterI getWriter(AlignmentI al)
259    {
260  37 return new ClustalFile();
261    }
262    },
263    Phylip("PHYLIP", "phy", true, true)
264    {
 
265  7 toggle @Override
266    public AlignmentFileReaderI getReader(FileParse source)
267    throws IOException
268    {
269  7 return new PhylipFile(source);
270    }
271   
 
272  3 toggle @Override
273    public AlignmentFileWriterI getWriter(AlignmentI al)
274    {
275  3 return new PhylipFile();
276    }
277    },
278    GenBank("GenBank Flatfile", "gb,gbk", true, false)
279    {
 
280  0 toggle @Override
281    public AlignmentFileReaderI getReader(FileParse source)
282    throws IOException
283    {
284  0 return new GenBankFile(source, "GenBank");
285    }
286   
 
287  0 toggle @Override
288    public AlignmentFileWriterI getWriter(AlignmentI al)
289    {
290  0 return null;
291    }
292    },
293    Embl("ENA Flatfile", "txt", true, false)
294    {
 
295  0 toggle @Override
296    public AlignmentFileReaderI getReader(FileParse source)
297    throws IOException
298    {
299    // Always assume we import from EMBL for now
300  0 return new EmblFlatFile(source, DBRefSource.EMBL);
301    }
302   
 
303  0 toggle @Override
304    public AlignmentFileWriterI getWriter(AlignmentI al)
305    {
306  0 return null;
307    }
308    },
309    Jnet("JnetFile", "", false, false)
310    {
 
311  0 toggle @Override
312    public AlignmentFileReaderI getReader(FileParse source)
313    throws IOException
314    {
315  0 JPredFile af = new JPredFile(source);
316  0 af.removeNonSequences();
317  0 return af;
318    }
319   
 
320  0 toggle @Override
321    public AlignmentFileWriterI getWriter(AlignmentI al)
322    {
323  0 return null; // todo is this called?
324    }
325   
326    },
327    Features("GFF or Jalview features", "gff2,gff3", true, false)
328    {
 
329  1 toggle @Override
330    public AlignmentFileReaderI getReader(FileParse source)
331    throws IOException
332    {
333  1 return new FeaturesFile(source);
334    }
335   
 
336  0 toggle @Override
337    public AlignmentFileWriterI getWriter(AlignmentI al)
338    {
339  0 return new FeaturesFile();
340    }
341    },
342    FeatureSettings("Jalview Feature Settings File", "fc", false, false)
343    {
 
344  0 toggle @Override
345    public AlignmentFileReaderI getReader(FileParse source)
346    throws IOException
347    {
348  0 return null;
349    }
350   
 
351  0 toggle @Override
352    public AlignmentFileWriterI getWriter(AlignmentI al)
353    {
354  0 return null;
355    }
356    },
357    ScoreMatrix("Substitution matrix", "", false, false)
358    {
 
359  0 toggle @Override
360    public AlignmentFileReaderI getReader(FileParse source)
361    throws IOException
362    {
363  0 return new ScoreMatrixFile(source);
364    }
365   
 
366  0 toggle @Override
367    public AlignmentFileWriterI getWriter(AlignmentI al)
368    {
369  0 return null;
370    }
371    },
372    PDB("PDB", "pdb,ent", true, false)
373    {
 
374  0 toggle @Override
375    public AlignmentFileReaderI getReader(FileParse source)
376    throws IOException
377    {
378  0 boolean isParseWithJMOL = StructureImportSettings
379    .getDefaultStructureFileFormat() != PDBEntry.Type.PDB;
380  0 if (isParseWithJMOL)
381    {
382  0 return new JmolParser(source);
383    }
384    else
385    {
386  0 StructureImportSettings.setShowSeqFeatures(true);
387  0 return new mc_view.PDBfile(
388    StructureImportSettings.isVisibleChainAnnotation(),
389    StructureImportSettings.isProcessSecondaryStructure(),
390    StructureImportSettings.isExternalSecondaryStructure(),
391    source);
392    }
393    }
394   
 
395  0 toggle @Override
396    public AlignmentFileWriterI getWriter(AlignmentI al)
397    {
398  0 return new JmolParser(); // todo or null?
399    }
400   
 
401  27 toggle @Override
402    public boolean isStructureFile()
403    {
404  27 return true;
405    }
406    },
407    MMCif("mmCIF", "cif", true, false)
408    {
 
409  0 toggle @Override
410    public AlignmentFileReaderI getReader(FileParse source)
411    throws IOException
412    {
413  0 return new JmolParser(source);
414    }
415   
 
416  0 toggle @Override
417    public AlignmentFileWriterI getWriter(AlignmentI al)
418    {
419  0 return new JmolParser(); // todo or null?
420    }
421   
 
422  0 toggle @Override
423    public boolean isStructureFile()
424    {
425  0 return true;
426    }
427    },
428    Jalview("Jalview", "jvp,jar", true, true)
429    {
 
430  0 toggle @Override
431    public AlignmentFileReaderI getReader(FileParse source)
432    throws IOException
433    {
434  0 return null;
435    }
436   
 
437  0 toggle @Override
438    public AlignmentFileWriterI getWriter(AlignmentI al)
439    {
440  0 return null;
441    }
442   
 
443  520 toggle @Override
444    public boolean isTextFormat()
445    {
446  520 return false;
447    }
448   
 
449  68 toggle @Override
450    public boolean isIdentifiable()
451    {
452  68 return true;
453    }
454    },
455    JalviewAnnotation("Annotation", "ann,annotation", false, false)
456    {
 
457  0 toggle @Override
458    public AlignmentFileReaderI getReader(FileParse source)
459    throws IOException
460    {
461  0 return null;
462    }
463   
 
464  0 toggle @Override
465    public AlignmentFileWriterI getWriter(AlignmentI al)
466    {
467  0 return null;
468    }
469    },
470    HMMER3("HMMER3", "hmm", true, true)
471    {
 
472  3 toggle @Override
473    public AlignmentFileReaderI getReader(FileParse source)
474    throws IOException
475    {
476  3 return new HMMFile(source);
477    }
478   
 
479  1 toggle @Override
480    public AlignmentFileWriterI getWriter(AlignmentI al)
481    {
482  1 return new HMMFile();
483    }
484    },
485    BSML("BSML", "bbb", true, false)
486    {
 
487  0 toggle @Override
488    public AlignmentFileReaderI getReader(FileParse source)
489    throws IOException
490    {
491  0 return new BSMLFile(source);
492    }
493   
 
494  0 toggle @Override
495    public AlignmentFileWriterI getWriter(AlignmentI al)
496    {
497  0 return null;
498    }
499    };
500   
501    private boolean writable;
502   
503    private boolean readable;
504   
505    private String extensions;
506   
507    private String name;
508   
 
509  94 toggle @Override
510    public boolean isComplexAlignFile()
511    {
512  94 return false;
513    }
514   
 
515  8936 toggle @Override
516    public boolean isReadable()
517    {
518  8936 return readable;
519    }
520   
 
521  24818 toggle @Override
522    public boolean isWritable()
523    {
524  24818 return writable;
525    }
526   
527    /**
528    * Constructor
529    *
530    * @param shortName
531    * @param extensions
532    * comma-separated list of file extensions associated with the format
533    * @param isReadable
534    * - can be recognised by IdentifyFile and imported with the given
535    * reader
536    * @param isWritable
537    * - can be exported with the returned writer
538    */
 
539  1458 toggle private FileFormat(String shortName, String extensions,
540    boolean isReadable, boolean isWritable)
541    {
542  1458 this.name = shortName;
543  1458 this.extensions = extensions;
544  1458 this.readable = isReadable;
545  1458 this.writable = isWritable;
546    }
547   
 
548  677 toggle @Override
549    public String getExtensions()
550    {
551  677 return extensions;
552    }
553   
554    /**
555    * Answers the display name of the file format (as for example shown in menu
556    * options). This name should not be locale (language) dependent.
557    */
 
558  26375 toggle @Override
559    public String getName()
560    {
561  26375 return name;
562    }
563   
 
564  6239 toggle @Override
565    public boolean isTextFormat()
566    {
567  6239 return true;
568    }
569   
 
570  957 toggle @Override
571    public boolean isStructureFile()
572    {
573  957 return false;
574    }
575   
576    /**
577    * By default, answers true, indicating the format is one that can be
578    * identified by IdentifyFile. Formats that cannot be identified should
579    * override this method to return false.
580    */
 
581  1772 toggle public boolean isIdentifiable()
582    {
583  1772 return true;
584    }
585    }