1 package jalview.jsdev;
\r
3 import jalview.datamodel.AlignmentI;
\r
4 import jalview.io.AlignFile;
\r
5 import jalview.io.FileParse;
\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
15 import javajs.J2SIgnoreImport;
\r
17 * A class to open files via reflection so that their classes are only loaded as necessary
\r
19 * note: not all file openers have corresponding String inFile and FileParse
\r
20 * source options. Why not?
\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
25 * @author Bob Hanson
\r
29 @J2SIgnoreImport({java.io.FileReader.class})
\r
30 abstract public class GenericFileAdapter extends AlignFile {
\r
33 * inFileOrSource class type
\r
35 * @param inFileOrSource
\r
36 * type will determine constructor -- [], [AlignmentI],
\r
37 * [inFile,type], or [source]
\r
42 public static AlignFile getFile(String fileType, Object... params) {
\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
51 Throwable ex = null;
\r
53 switch (params.length) {
\r
55 return (AlignFile) cl.newInstance();
\r
57 m = (params[0] instanceof FileParse ? cl
\r
58 .getConstructor(FileParse.class) : cl
\r
59 .getConstructor(AlignmentI.class));
\r
62 m = cl.getConstructor(String.class, String.class);
\r
67 return (AlignFile) m.newInstance(params);
\r
68 } catch (InstantiationException e) {
\r
70 } catch (IllegalAccessException e) {
\r
72 } catch (NoSuchMethodException e) {
\r
74 } catch (SecurityException e) {
\r
76 } catch (IllegalArgumentException e) {
\r
78 } catch (InvocationTargetException e) {
\r
82 System.err.println("Error in GenericFileAdapter: " + ex);
\r
90 ex.printStackTrace();
\r
97 * Determines whether or not we have a JavaScript applet.
\r
101 public static boolean isJS() {
\r
114 * opens a file for line-oriented reading via File() or URL()
\r
119 * @throws IOException
\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