fileFormat enum wip changes
[jalview.git] / src / jalview / io / FileFormat.java
index 893a8ac..bca365f 100644 (file)
@@ -4,10 +4,12 @@ import jalview.ext.jmol.JmolParser;
 import jalview.structure.StructureImportSettings;
 
 import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
 
 public enum FileFormat implements FileFormatI
 {
-  Fasta
+  Fasta("FASTA", "fa, fasta, mfa, fastq", true, true)
   {
     @Override
     public AlignmentFileI getAlignmentFile(String inFile,
@@ -29,7 +31,7 @@ public enum FileFormat implements FileFormatI
       return new FastaFile();
     }
   },
-  Pfam
+  Pfam("PFAM", "pfam", true, true)
   {
     @Override
     public AlignmentFileI getAlignmentFile(String inFile,
@@ -51,7 +53,7 @@ public enum FileFormat implements FileFormatI
       return new PfamFile();
     }
   },
-  Stockholm
+  Stockholm("STH", "sto,stk", true, true)
   {
     @Override
     public AlignmentFileI getAlignmentFile(String inFile,
@@ -73,30 +75,8 @@ public enum FileFormat implements FileFormatI
     }
 
   },
-  SimpleBlast
-  {
-    @Override
-    public AlignmentFileI getAlignmentFile(String inFile,
-            DataSourceType sourceType) throws IOException
-    {
-      return new SimpleBlastFile(inFile, sourceType);
-    }
 
-    @Override
-    public AlignmentFileI getAlignmentFile(FileParse source)
-            throws IOException
-    {
-      return new SimpleBlastFile(source);
-    }
-
-    @Override
-    public AlignmentFileI getAlignmentFile()
-    {
-      return new SimpleBlastFile();
-    }
-  },
-
-  PIR
+  PIR("PIR", "pir", true, true)
   {
     @Override
     public AlignmentFileI getAlignmentFile(String inFile,
@@ -117,7 +97,7 @@ public enum FileFormat implements FileFormatI
       return new PIRFile();
     }
   },
-  BLC
+  BLC("BLC", "BLC", true, true)
   {
     @Override
     public AlignmentFileI getAlignmentFile(String inFile,
@@ -136,9 +116,8 @@ public enum FileFormat implements FileFormatI
     {
       return new BLCFile();
     }
-
   },
-  Html
+  Html("HTML", "html", true, false)
   {
     @Override
     public AlignmentFileI getAlignmentFile(String inFile,
@@ -165,7 +144,7 @@ public enum FileFormat implements FileFormatI
     }
 
   },
-  Rnaml
+  Rnaml("RNAML", "xml,rnaml", true, false)
   {
     @Override
     public AlignmentFileI getAlignmentFile(String inFile,
@@ -186,7 +165,7 @@ public enum FileFormat implements FileFormatI
     }
 
   },
-  Json
+  Json("JSON","json", true, true)
   {
     @Override
     public AlignmentFileI getAlignmentFile(String inFile,
@@ -213,7 +192,7 @@ public enum FileFormat implements FileFormatI
     }
 
   },
-  Pileup
+  Pileup("PileUp", "?", false, false)
   {
     @Override
     public AlignmentFileI getAlignmentFile(String inFile,
@@ -234,7 +213,7 @@ public enum FileFormat implements FileFormatI
     }
 
   },
-  MSF
+  MSF("MSF", "msf", true, true)
   {
     @Override
     public AlignmentFileI getAlignmentFile(String inFile,
@@ -255,7 +234,7 @@ public enum FileFormat implements FileFormatI
     }
 
   },
-  Clustal
+  Clustal("CLUSTAL", "aln", true, true)
   {
     @Override
     public AlignmentFileI getAlignmentFile(String inFile,
@@ -274,9 +253,8 @@ public enum FileFormat implements FileFormatI
     {
       return new ClustalFile();
     }
-
   },
-  Phylip
+  Phylip("PHYLIP", "phy", true, true)
   {
     @Override
     public AlignmentFileI getAlignmentFile(String inFile,
@@ -297,9 +275,8 @@ public enum FileFormat implements FileFormatI
     {
       return new PhylipFile();
     }
-
   },
-  Jnet
+  Jnet("JnetFile", "", false, false)
   {
     @Override
     public AlignmentFileI getAlignmentFile(String inFile,
@@ -326,7 +303,7 @@ public enum FileFormat implements FileFormatI
     }
 
   },
-  Features
+  Features("GFF or Jalview features", "gff2,gff3", false, false)
   {
     @Override
     public AlignmentFileI getAlignmentFile(String inFile,
@@ -348,7 +325,7 @@ public enum FileFormat implements FileFormatI
       return new FeaturesFile();
     }
   },
-  PDB
+  PDB("PDB", "", false, false)
   {
 
     @Override
@@ -410,9 +387,8 @@ public enum FileFormat implements FileFormatI
     {
       return new JmolParser(); // todo or null?
     }
-
   },
-  MMCif
+  MMCif("mmCIF", "cif", false, false)
   {
 
     @Override
@@ -443,7 +419,7 @@ public enum FileFormat implements FileFormatI
       return new JmolParser(); // todo or null?
     }
   },
-  Jalview
+  Jalview("Jalview", "jar,jvp", true, false)
   {
 
     @Override
@@ -467,6 +443,27 @@ public enum FileFormat implements FileFormatI
     }
   };
 
+  /**
+   * A lookup map of enums by upper-cased name
+   */
+  private static Map<String, FileFormat> names;
+  static
+  {
+    names = new HashMap<String, FileFormat>();
+    for (FileFormat format : FileFormat.values())
+    {
+      names.put(format.toString().toUpperCase(), format);
+    }
+  }
+
+  private boolean writable;
+
+  private boolean readable;
+
+  private String extensions;
+
+  private String name;
+
   @Override
   public boolean isComplexAlignFile()
   {
@@ -478,4 +475,55 @@ public enum FileFormat implements FileFormatI
   {
     return toString();
   }
+
+  /**
+   * Returns the file format with the given name, or null if format is null or
+   * invalid. Unlike valueOf(), this is not case-sensitive, to be kind to
+   * writers of javascript.
+   * 
+   * @param format
+   * @return
+   */
+  public static FileFormatI forName(String format)
+  {
+    // or could store format.getShortDescription().toUpperCase()
+    // in order to decouple 'given name' from enum name
+    return format == null ? null : names.get(format.toUpperCase());
+  }
+
+  @Override
+  public boolean isReadable()
+  {
+    return readable;
+  }
+
+  @Override
+  public boolean isWritable()
+  {
+    return writable;
+  }
+
+  /**
+   * Constructor
+   * 
+   * @param shortName
+   * @param extensions
+   *          comma-separated list of file extensions associated with the format
+   * @param isReadable
+   * @param isWritable
+   */
+  private FileFormat(String shortName, String extensions,
+          boolean isReadable, boolean isWritable)
+  {
+    this.name = shortName;
+    this.extensions = extensions;
+    this.readable = isReadable;
+    this.writable = isWritable;
+  }
+
+  @Override
+  public String getExtensions()
+  {
+    return extensions;
+  }
 }