JAL-2476 ability to drag and drop score matrix file to desktop, simplify
[jalview.git] / src / jalview / io / FileFormat.java
1 package jalview.io;
2
3 import jalview.datamodel.AlignmentI;
4 import jalview.datamodel.PDBEntry;
5 import jalview.ext.jmol.JmolParser;
6 import jalview.structure.StructureImportSettings;
7
8 import java.io.IOException;
9
10 public enum FileFormat implements FileFormatI
11 {
12   Fasta("Fasta", "fa, fasta, mfa, fastq", true, true)
13   {
14     @Override
15     public AlignmentFileReaderI getReader(FileParse source)
16             throws IOException
17     {
18       return new FastaFile(source);
19     }
20
21     @Override
22     public AlignmentFileWriterI getWriter(AlignmentI al)
23     {
24       return new FastaFile();
25     }
26   },
27   Pfam("PFAM", "pfam", true, true)
28   {
29     @Override
30     public AlignmentFileReaderI getReader(FileParse source)
31             throws IOException
32     {
33       return new PfamFile(source);
34     }
35
36     @Override
37     public AlignmentFileWriterI getWriter(AlignmentI al)
38     {
39       return new PfamFile();
40     }
41   },
42   Stockholm("Stockholm", "sto,stk", true, true)
43   {
44     @Override
45     public AlignmentFileReaderI getReader(FileParse source)
46             throws IOException
47     {
48       return new StockholmFile(source);
49     }
50
51     @Override
52     public AlignmentFileWriterI getWriter(AlignmentI al)
53     {
54       return new StockholmFile(al);
55     }
56
57   },
58
59   PIR("PIR", "pir", true, true)
60   {
61     @Override
62     public AlignmentFileReaderI getReader(FileParse source)
63             throws IOException
64     {
65       return new PIRFile(source);
66     }
67
68     @Override
69     public AlignmentFileWriterI getWriter(AlignmentI al)
70     {
71       return new PIRFile();
72     }
73   },
74   BLC("BLC", "BLC", true, true)
75   {
76     @Override
77     public AlignmentFileReaderI getReader(FileParse source)
78             throws IOException
79     {
80       return new BLCFile(source);
81     }
82
83     @Override
84     public AlignmentFileWriterI getWriter(AlignmentI al)
85     {
86       return new BLCFile();
87     }
88   },
89   AMSA("AMSA", "amsa", true, true)
90   {
91     @Override
92     public AlignmentFileReaderI getReader(FileParse source)
93             throws IOException
94     {
95       return new AMSAFile(source);
96     }
97
98     @Override
99     public AlignmentFileWriterI getWriter(AlignmentI al)
100     {
101       return new AMSAFile(al);
102     }
103   },
104   Html("HTML", "html", true, false)
105   {
106     @Override
107     public AlignmentFileReaderI getReader(FileParse source)
108             throws IOException
109     {
110       return new HtmlFile(source);
111     }
112
113     @Override
114     public AlignmentFileWriterI getWriter(AlignmentI al)
115     {
116       return new HtmlFile();
117     }
118
119     @Override
120     public boolean isComplexAlignFile()
121     {
122       return true;
123     }
124
125   },
126   Rnaml("RNAML", "xml,rnaml", true, false)
127   {
128     @Override
129     public AlignmentFileReaderI getReader(FileParse source)
130             throws IOException
131     {
132       return new RnamlFile(source);
133     }
134
135     @Override
136     public AlignmentFileWriterI getWriter(AlignmentI al)
137     {
138       return new RnamlFile();
139     }
140
141   },
142   Json("JSON", "json", true, true)
143   {
144     @Override
145     public AlignmentFileReaderI getReader(FileParse source)
146             throws IOException
147     {
148       return new JSONFile(source);
149     }
150
151     @Override
152     public AlignmentFileWriterI getWriter(AlignmentI al)
153     {
154       return new JSONFile();
155     }
156
157     @Override
158     public boolean isComplexAlignFile()
159     {
160       return true;
161     }
162
163   },
164   Pileup("PileUp", "pileup", true, true)
165   {
166     @Override
167     public AlignmentFileReaderI getReader(FileParse source)
168             throws IOException
169     {
170       return new PileUpfile(source);
171     }
172
173     @Override
174     public AlignmentFileWriterI getWriter(AlignmentI al)
175     {
176       return new PileUpfile();
177     }
178
179   },
180   MSF("MSF", "msf", true, true)
181   {
182     @Override
183     public AlignmentFileReaderI getReader(FileParse source)
184             throws IOException
185     {
186       return new MSFfile(source);
187     }
188
189     @Override
190     public AlignmentFileWriterI getWriter(AlignmentI al)
191     {
192       return new MSFfile();
193     }
194
195   },
196   Clustal("Clustal", "aln", true, true)
197   {
198     @Override
199     public AlignmentFileReaderI getReader(FileParse source)
200             throws IOException
201     {
202       return new ClustalFile(source);
203     }
204
205     @Override
206     public AlignmentFileWriterI getWriter(AlignmentI al)
207     {
208       return new ClustalFile();
209     }
210   },
211   Phylip("PHYLIP", "phy", true, true)
212   {
213     @Override
214     public AlignmentFileReaderI getReader(FileParse source)
215             throws IOException
216     {
217       return new PhylipFile(source);
218     }
219
220     @Override
221     public AlignmentFileWriterI getWriter(AlignmentI al)
222     {
223       return new PhylipFile();
224     }
225   },
226   Jnet("JnetFile", "", false, false)
227   {
228     @Override
229     public AlignmentFileReaderI getReader(FileParse source)
230             throws IOException
231     {
232       JPredFile af = new JPredFile(source);
233       af.removeNonSequences();
234       return af;
235     }
236
237     @Override
238     public AlignmentFileWriterI getWriter(AlignmentI al)
239     {
240       return null; // todo is this called?
241     }
242
243   },
244   Features("GFF or Jalview features", "gff2,gff3", true, false)
245   {
246     @Override
247     public AlignmentFileReaderI getReader(FileParse source)
248             throws IOException
249     {
250       return new FeaturesFile(source);
251     }
252
253     @Override
254     public AlignmentFileWriterI getWriter(AlignmentI al)
255     {
256       return new FeaturesFile();
257     }
258
259     @Override
260     public boolean hasSequenceData()
261     {
262       return false;
263     }
264   },
265   ScoreMatrix("Substitution matrix", "", false, false)
266   {
267     @Override
268     public AlignmentFileReaderI getReader(FileParse source)
269             throws IOException
270     {
271       return new ScoreMatrixFile(source);
272     }
273
274     @Override
275     public AlignmentFileWriterI getWriter(AlignmentI al)
276     {
277       return null;
278     }
279
280     @Override
281     public boolean hasSequenceData()
282     {
283       return false;
284     }
285   },
286   PDB("PDB", "pdb,ent", true, false)
287   {
288     @Override
289     public AlignmentFileReaderI getReader(FileParse source)
290             throws IOException
291     {
292       boolean isParseWithJMOL = StructureImportSettings
293               .getDefaultStructureFileFormat() != PDBEntry.Type.PDB;
294       if (isParseWithJMOL)
295       {
296         return new JmolParser(source);
297       }
298       else
299       {
300         StructureImportSettings.setShowSeqFeatures(true);
301         return new MCview.PDBfile(
302                 StructureImportSettings.isVisibleChainAnnotation(),
303                 StructureImportSettings.isProcessSecondaryStructure(),
304                 StructureImportSettings.isExternalSecondaryStructure(),
305                 source);
306       }
307     }
308
309     @Override
310     public AlignmentFileWriterI getWriter(AlignmentI al)
311     {
312       return new JmolParser(); // todo or null?
313     }
314
315     @Override
316     public boolean isStructureFile()
317     {
318       return true;
319     }
320   },
321   MMCif("mmCIF", "cif", true, false)
322   {
323     @Override
324     public AlignmentFileReaderI getReader(FileParse source)
325             throws IOException
326     {
327       return new JmolParser(source);
328     }
329
330     @Override
331     public AlignmentFileWriterI getWriter(AlignmentI al)
332     {
333       return new JmolParser(); // todo or null?
334     }
335
336     @Override
337     public boolean isStructureFile()
338     {
339       return true;
340     }
341   },
342   Jalview("Jalview", "jar,jvp", true, true)
343   {
344     @Override
345     public AlignmentFileReaderI getReader(FileParse source)
346             throws IOException
347     {
348       return null;
349     }
350
351     @Override
352     public AlignmentFileWriterI getWriter(AlignmentI al)
353     {
354       return null;
355     }
356
357     @Override
358     public boolean isTextFormat()
359     {
360       return false;
361     }
362
363     @Override
364     public boolean isIdentifiable()
365     {
366       return false;
367     }
368   };
369
370   private boolean writable;
371
372   private boolean readable;
373
374   private String extensions;
375
376   private String name;
377
378   @Override
379   public boolean isComplexAlignFile()
380   {
381     return false;
382   }
383
384   @Override
385   public boolean isReadable()
386   {
387     return readable;
388   }
389
390   @Override
391   public boolean isWritable()
392   {
393     return writable;
394   }
395
396   /**
397    * Constructor
398    * 
399    * @param shortName
400    * @param extensions
401    *          comma-separated list of file extensions associated with the format
402    * @param isReadable
403    * @param isWritable
404    */
405   private FileFormat(String shortName, String extensions,
406           boolean isReadable, boolean isWritable)
407   {
408     this.name = shortName;
409     this.extensions = extensions;
410     this.readable = isReadable;
411     this.writable = isWritable;
412   }
413
414   @Override
415   public String getExtensions()
416   {
417     return extensions;
418   }
419
420   /**
421    * Answers the display name of the file format (as for example shown in menu
422    * options). This name should not be locale (language) dependent.
423    */
424   @Override
425   public String getName()
426   {
427     return name;
428   }
429
430   @Override
431   public boolean isTextFormat()
432   {
433     return true;
434   }
435
436   @Override
437   public boolean isStructureFile()
438   {
439     return false;
440   }
441
442   /**
443    * By default, answers true, indicating the format is one that can be
444    * identified by IdentifyFile. Formats that cannot be identified should
445    * override this method to return false.
446    */
447   public boolean isIdentifiable()
448   {
449     return true;
450   }
451
452   @Override
453   public boolean hasSequenceData()
454   {
455     return true;
456   }
457 }