JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / bin / jalview / io / IdentifyFile.js
1 Clazz.declarePackage ("jalview.io");\r
2 Clazz.load (null, "jalview.io.IdentifyFile", ["jalview.io.FileParse"], function () {\r
3 c$ = Clazz.declareType (jalview.io, "IdentifyFile");\r
4 Clazz.defineMethod (c$, "Identify", \r
5 function (file, protocol) {\r
6 var emessage = "UNIDENTIFIED FILE PARSING ERROR";\r
7 var parser = null;\r
8 try {\r
9 parser =  new jalview.io.FileParse (file, protocol);\r
10 if (parser.isValid ()) {\r
11 return this.Identify (parser);\r
12 }} catch (e) {\r
13 if (Clazz.exceptionOf (e, Exception)) {\r
14 System.err.println ("Error whilst identifying");\r
15 e.printStackTrace (System.err);\r
16 emessage = e.getMessage ();\r
17 } else {\r
18 throw e;\r
19 }\r
20 }\r
21 if (parser != null) {\r
22 return parser.errormessage;\r
23 }return emessage;\r
24 }, "~S,~S");\r
25 Clazz.defineMethod (c$, "Identify", \r
26 function (source) {\r
27 return this.Identify (source, true);\r
28 }, "jalview.io.FileParse");\r
29 Clazz.defineMethod (c$, "Identify", \r
30 function (source, closeSource) {\r
31 var reply = "PFAM";\r
32 var data;\r
33 var length = 0;\r
34 var lineswereskipped = false;\r
35 var isBinary = false;\r
36 try {\r
37 if (!closeSource) {\r
38 source.mark ();\r
39 }while ((data = source.nextLine ()) != null) {\r
40 length += data.trim ().length;\r
41 if (!lineswereskipped) {\r
42 for (var i = 0; !isBinary && i < data.length; i++) {\r
43 var c = data.charAt (i);\r
44 isBinary = (c.charCodeAt (0) < 32 && c != '\t' && c != '\n' && c != '\r' && c.charCodeAt (0) != 5 && c.charCodeAt (0) != 27);\r
45 }\r
46 }if (isBinary) {\r
47 if (source.inFile != null) {\r
48 var fileStr = source.inFile.getName ();\r
49 if (fileStr.lastIndexOf (".jar") > -1 || fileStr.lastIndexOf (".zip") > -1) {\r
50 reply = "Jalview";\r
51 }}if (!lineswereskipped && data.startsWith ("PK")) {\r
52 reply = "Jalview";\r
53 break;\r
54 }}data = data.toUpperCase ();\r
55 if (data.startsWith ("##GFF-VERSION")) {\r
56 reply = "GFF v2 or v3";\r
57 break;\r
58 }if (data.indexOf ("# STOCKHOLM") > -1) {\r
59 reply = "STH";\r
60 break;\r
61 }if (data.matches ("<HTML(\"[^\"]*\"|'[^']*'|[^'\">])*>")) {\r
62 reply = "HTML";\r
63 break;\r
64 }if (data.matches ("<RNAML (\"[^\"]*\"|'[^']*'|[^'\">])*>")) {\r
65 reply = "RNAML";\r
66 break;\r
67 }if (data.indexOf ("{\"") > -1) {\r
68 reply = "JSON";\r
69 break;\r
70 }if ((data.length < 1) || (data.indexOf ("#") == 0)) {\r
71 lineswereskipped = true;\r
72 continue;\r
73 }if (data.indexOf ("PILEUP") > -1) {\r
74 reply = "PileUp";\r
75 break;\r
76 }if ((data.indexOf ("//") == 0) || ((data.indexOf ("!!") > -1) && (data.indexOf ("!!") < data.indexOf ("_MULTIPLE_ALIGNMENT ")))) {\r
77 reply = "MSF";\r
78 break;\r
79 } else if (data.indexOf ("CLUSTAL") > -1) {\r
80 reply = "CLUSTAL";\r
81 break;\r
82 } else if (data.indexOf (">") > -1) {\r
83 var checkPIR = false;\r
84 var starterm = false;\r
85 if ((data.indexOf (">P1;") > -1) || (data.indexOf (">DL;") > -1)) {\r
86 checkPIR = true;\r
87 reply = "PIR";\r
88 }data = source.nextLine ();\r
89 if (data.indexOf (">") > -1) {\r
90 reply = "BLC";\r
91 } else {\r
92 var data1 = source.nextLine ();\r
93 var data2 = source.nextLine ();\r
94 var c1;\r
95 if (checkPIR) {\r
96 starterm = (data1 != null && data1.indexOf ("*") > -1) || (data2 != null && data2.indexOf ("*") > -1);\r
97 }if (data2 != null && (c1 = data.indexOf ("*")) > -1) {\r
98 if (c1 == 0 && c1 == data2.indexOf ("*")) {\r
99 reply = "BLC";\r
100 } else {\r
101 reply = "FASTA";\r
102 }} else {\r
103 reply = "FASTA";\r
104 if (!checkPIR) {\r
105 break;\r
106 }}}if (checkPIR) {\r
107 var dta = null;\r
108 if (!starterm) {\r
109 do {\r
110 try {\r
111 dta = source.nextLine ();\r
112 } catch (ex) {\r
113 if (Clazz.exceptionOf (ex, java.io.IOException)) {\r
114 } else {\r
115 throw ex;\r
116 }\r
117 }\r
118 ;if (dta != null && dta.indexOf ("*") > -1) {\r
119 starterm = true;\r
120 }} while (dta != null && !starterm);\r
121 }if (starterm) {\r
122 reply = "PIR";\r
123 break;\r
124 } else {\r
125 reply = "FASTA";\r
126 }}break;\r
127 } else if (data.indexOf ("HEADER") == 0 || data.indexOf ("ATOM") == 0) {\r
128 reply = "PDB";\r
129 break;\r
130 } else if (data.matches ("\\s*\\d+\\s+\\d+\\s*")) {\r
131 reply = "PHYLIP";\r
132 break;\r
133 } else if (!lineswereskipped && data.charAt (0) != '*' && data.charAt (0) != ' ' && data.indexOf (":") < data.indexOf (",")) {\r
134 reply = "JnetFile";\r
135 break;\r
136 }lineswereskipped = true;\r
137 }\r
138 if (closeSource) {\r
139 source.close ();\r
140 } else {\r
141 source.reset ();\r
142 }} catch (ex) {\r
143 if (Clazz.exceptionOf (ex, Exception)) {\r
144 System.err.println ("File Identification failed!\n" + ex);\r
145 return source.errormessage;\r
146 } else {\r
147 throw ex;\r
148 }\r
149 }\r
150 if (length == 0) {\r
151 System.err.println ("File Identification failed! - Empty file was read.");\r
152 return "EMPTY DATA FILE";\r
153 }return reply;\r
154 }, "jalview.io.FileParse,~B");\r
155 Clazz.defineStatics (c$,\r
156 "GFF3File", "GFF v2 or v3");\r
157 });\r