JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / src / jalview / jsdev / GenericFileAdapter.java
1 package jalview.jsdev;\r
2 \r
3 import jalview.datamodel.AlignmentI;\r
4 import jalview.io.AlignFile;\r
5 import jalview.io.FileParse;\r
6 \r
7 import java.io.BufferedReader;\r
8 import java.io.FileReader;\r
9 import java.io.IOException;\r
10 import java.io.InputStreamReader;\r
11 import java.lang.reflect.Constructor;\r
12 import java.lang.reflect.InvocationTargetException;\r
13 import java.net.URL;\r
14 \r
15 import javajs.J2SIgnoreImport;\r
16 /**\r
17  * A class to open files via reflection so that their classes are only loaded as necessary\r
18  * \r
19  * note: not all file openers have corresponding String inFile and FileParse\r
20  * source options. Why not?\r
21  * \r
22  * note: Pileupfile does not have a capital "F"; the method below requires that,\r
23  * so if that file name gets changed, so too does the reflection code here.\r
24  * \r
25  * @author Bob Hanson\r
26  * \r
27  */\r
28 \r
29 @J2SIgnoreImport({java.io.FileReader.class})\r
30 abstract public class GenericFileAdapter extends AlignFile {\r
31 \r
32         /**\r
33          * inFileOrSource class type\r
34          * \r
35          * @param inFileOrSource\r
36          *          type will determine constructor -- [], [AlignmentI],\r
37          *          [inFile,type], or [source]\r
38          * @param type\r
39          * @param fileName\r
40          * @return\r
41          */\r
42         public static AlignFile getFile(String fileType, Object... params) {\r
43                 Class<?> cl = null;\r
44                 try {\r
45                         cl = Class.forName("jalview.io." + fileType);\r
46                 } catch (ClassNotFoundException e) {\r
47                         System.err.println("did not find file jalview.io." + fileType);\r
48                         return null;\r
49                 }\r
50                 Constructor<?> m;\r
51                 Throwable ex = null;\r
52                 try {\r
53                         switch (params.length) {\r
54                         case 0:\r
55                                 return (AlignFile) cl.newInstance();\r
56                         case 1:\r
57                                 m = (params[0] instanceof FileParse ? cl\r
58                                                 .getConstructor(FileParse.class) : cl\r
59                                                 .getConstructor(AlignmentI.class));\r
60                                 break;\r
61                         case 2:\r
62                                 m = cl.getConstructor(String.class, String.class);\r
63                                 break;\r
64                         default:\r
65                                 return null;\r
66                         }\r
67                         return (AlignFile) m.newInstance(params);\r
68                 } catch (InstantiationException e) {\r
69                         ex = e;\r
70                 } catch (IllegalAccessException e) {\r
71                         ex = e;\r
72                 } catch (NoSuchMethodException e) {\r
73                         ex = e;\r
74                 } catch (SecurityException e) {\r
75                         ex = e;\r
76                 } catch (IllegalArgumentException e) {\r
77                         ex = e;\r
78                 } catch (InvocationTargetException e) {\r
79                         ex = e;\r
80                 }\r
81                 if (ex != null) {\r
82                         System.err.println("Error in GenericFileAdapter: " + ex);\r
83                         /**\r
84                          * @j2sNative\r
85                          * \r
86                          *            alert(ex)\r
87                          * \r
88                          */\r
89                         {\r
90                                 ex.printStackTrace();\r
91                         }\r
92                 }\r
93                 return null;\r
94         }\r
95 \r
96         /**\r
97          * Determines whether or not we have a JavaScript applet.\r
98          * \r
99          * @return\r
100          */\r
101         public static boolean isJS() {\r
102         /**\r
103          * @j2sNative \r
104          * \r
105          * return true;\r
106          * \r
107          */\r
108         {\r
109                 return false;\r
110         } \r
111         }\r
112 \r
113         /**\r
114          * opens a file for line-oriented reading via File() or URL()\r
115          * \r
116          * @param fileName\r
117          * @param forceURL\r
118          * @return\r
119          * @throws IOException\r
120          */\r
121         public static BufferedReader getReader(String fileName, boolean forceURL) throws IOException {\r
122         if (!forceURL && !isJS())\r
123                 return new BufferedReader(new FileReader(fileName));            \r
124                 if (fileName.indexOf("//") < 0)\r
125                         fileName = "file://" + fileName;\r
126     return new BufferedReader(new InputStreamReader(new URL(fileName).openStream()));\r
127         }\r
128         \r
129 \r
130 }\r