JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / site / j2s / jalview / io / AppletFormatAdapter.js
1 Clazz.declarePackage ("jalview.io");\r
2 Clazz.load (null, "jalview.io.AppletFormatAdapter", ["MCview.PDBfile", "jalview.datamodel.Alignment", "jalview.io.FileParse", "$.IdentifyFile", "jalview.jsdev.GenericFileAdapter", "jalview.util.MessageManager", "java.io.IOException", "java.lang.Exception", "$.StringBuffer"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.viewpanel = null;\r
5 this.annotFromStructure = false;\r
6 this.localSecondaryStruct = false;\r
7 this.serviceSecondaryStruct = false;\r
8 this.alignFile = null;\r
9 this.inFile = null;\r
10 this.newline = null;\r
11 this.exportSettings = null;\r
12 Clazz.instantialize (this, arguments);\r
13 }, jalview.io, "AppletFormatAdapter");\r
14 Clazz.prepareFields (c$, function () {\r
15 this.newline = System.getProperty ("line.separator");\r
16 });\r
17 Clazz.makeConstructor (c$, \r
18 function () {\r
19 });\r
20 Clazz.makeConstructor (c$, \r
21 function (viewpanel) {\r
22 this.viewpanel = viewpanel;\r
23 }, "jalview.api.AlignmentViewPanel");\r
24 Clazz.makeConstructor (c$, \r
25 function (alignPanel, settings) {\r
26 this.viewpanel = alignPanel;\r
27 this.exportSettings = settings;\r
28 }, "jalview.api.AlignmentViewPanel,jalview.api.AlignExportSettingI");\r
29 c$.prettyPrint = Clazz.defineMethod (c$, "prettyPrint", \r
30 function (els) {\r
31 var list =  new StringBuffer ();\r
32 for (var i = 0, iSize = els.length - 1; i < iSize; i++) {\r
33 list.append (els[i]);\r
34 list.append (", ");\r
35 }\r
36 list.append (" and " + els[els.length - 1] + ".");\r
37 return list.toString ();\r
38 }, "~A");\r
39 Clazz.defineMethod (c$, "setNewlineString", \r
40 function (nl) {\r
41 this.newline = nl;\r
42 }, "~S");\r
43 Clazz.defineMethod (c$, "getNewlineString", \r
44 function () {\r
45 return this.newline;\r
46 });\r
47 c$.isValidFormat = Clazz.defineMethod (c$, "isValidFormat", \r
48 function (format) {\r
49 return jalview.io.AppletFormatAdapter.isValidFormat (format, false);\r
50 }, "~S");\r
51 c$.isValidFormat = Clazz.defineMethod (c$, "isValidFormat", \r
52 function (format, forwriting) {\r
53 var valid = false;\r
54 var format_list = (forwriting) ? jalview.io.AppletFormatAdapter.WRITEABLE_FORMATS : jalview.io.AppletFormatAdapter.READABLE_FORMATS;\r
55 for (var element, $element = 0, $$element = format_list; $element < $$element.length && ((element = $$element[$element]) || true); $element++) {\r
56 if (element.equalsIgnoreCase (format)) {\r
57 return true;\r
58 }}\r
59 return valid;\r
60 }, "~S,~B");\r
61 Clazz.defineMethod (c$, "readFile", \r
62 function (inFile, type, format) {\r
63 this.inFile = inFile;\r
64 try {\r
65 if (format.equals ("FASTA")) {\r
66 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("FastaFile", [inFile, type]);\r
67 } else if (format.equals ("MSF")) {\r
68 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("MSFfile", [inFile, type]);\r
69 } else if (format.equals ("PileUp")) {\r
70 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("PileUpfile", [inFile, type]);\r
71 } else if (format.equals ("CLUSTAL")) {\r
72 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("ClustalFile", [inFile, type]);\r
73 } else if (format.equals ("BLC")) {\r
74 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("BLCFile", [inFile, type]);\r
75 } else if (format.equals ("PIR")) {\r
76 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("PIRFile", [inFile, type]);\r
77 } else if (format.equals ("PFAM")) {\r
78 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("PfamFile", [inFile, type]);\r
79 } else if (format.equals ("JnetFile")) {\r
80 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("JPredFile", [inFile, type]);\r
81 (this.alignFile).removeNonSequences ();\r
82 } else if (format.equals ("PDB")) {\r
83 this.alignFile =  new MCview.PDBfile (this.annotFromStructure, this.localSecondaryStruct, this.serviceSecondaryStruct, inFile, type);\r
84 } else if (format.equals ("STH")) {\r
85 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("StockholmFile", [inFile, type]);\r
86 } else if (format.equals ("SimpleBLAST")) {\r
87 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("SimpleBlastFile", [inFile, type]);\r
88 } else if (format.equals ("PHYLIP")) {\r
89 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("PhylipFile", [inFile, type]);\r
90 } else if (format.equals ("JSON")) {\r
91 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("JSONFile", [inFile, type]);\r
92 } else if (format.equals ("HTML")) {\r
93 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("HtmlFile", [inFile, type]);\r
94 } else if (format.equals ("RNAML")) {\r
95 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("RnamlFile", [inFile, type]);\r
96 } else if (format.equals ("GFF v2 or v3")) {\r
97 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("Gff3File", [inFile, type]);\r
98 }return this.buildAlignmentFrom (this.alignFile);\r
99 } catch (e) {\r
100 if (Clazz.exceptionOf (e, Exception)) {\r
101 e.printStackTrace ();\r
102 System.err.println ("Failed to read alignment using the '" + format + "' reader.\n" + e);\r
103 if (e.getMessage () != null && e.getMessage ().startsWith (jalview.io.AppletFormatAdapter.INVALID_CHARACTERS)) {\r
104 throw  new java.io.IOException (e.getMessage ());\r
105 }if (type.equalsIgnoreCase ("Paste")) {\r
106 try {\r
107 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("FastaFile", [">UNKNOWN\n" + inFile, "Paste"]);\r
108 return this.buildAlignmentFrom (this.alignFile);\r
109 } catch (ex) {\r
110 if (Clazz.exceptionOf (ex, Exception)) {\r
111 if (ex.toString ().startsWith (jalview.io.AppletFormatAdapter.INVALID_CHARACTERS)) {\r
112 throw  new java.io.IOException (e.getMessage ());\r
113 }ex.printStackTrace ();\r
114 } else {\r
115 throw ex;\r
116 }\r
117 }\r
118 }throw  new java.io.IOException (jalview.io.AppletFormatAdapter.SUPPORTED_FORMATS);\r
119 } else {\r
120 throw e;\r
121 }\r
122 }\r
123 }, "~S,~S,~S");\r
124 Clazz.defineMethod (c$, "readFromFile", \r
125 function (source, format) {\r
126 this.inFile = source.getInFile ();\r
127 var type = source.type;\r
128 try {\r
129 if (format.equals ("FASTA")) {\r
130 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("FastaFile", [source]);\r
131 } else if (format.equals ("MSF")) {\r
132 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("MSFfile", [source]);\r
133 } else if (format.equals ("PileUp")) {\r
134 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("PileUpfile", [source]);\r
135 } else if (format.equals ("CLUSTAL")) {\r
136 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("ClustalFile", [source]);\r
137 } else if (format.equals ("BLC")) {\r
138 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("BLCFile", [source]);\r
139 } else if (format.equals ("PIR")) {\r
140 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("PIRFile", [source]);\r
141 } else if (format.equals ("PFAM")) {\r
142 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("PfamFile", [source]);\r
143 } else if (format.equals ("JnetFile")) {\r
144 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("JPredFile", [source]);\r
145 (this.alignFile).removeNonSequences ();\r
146 } else if (format.equals ("PDB")) {\r
147 this.alignFile =  new MCview.PDBfile (this.annotFromStructure, this.localSecondaryStruct, this.serviceSecondaryStruct, source);\r
148 } else if (format.equals ("STH")) {\r
149 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("StockholmFile", [source]);\r
150 } else if (format.equals ("RNAML")) {\r
151 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("RnamlFile", [source]);\r
152 } else if (format.equals ("SimpleBLAST")) {\r
153 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("SimpleBlastFile", [source]);\r
154 } else if (format.equals ("PHYLIP")) {\r
155 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("PhylipFile", [source]);\r
156 } else if (format.equals ("GFF v2 or v3")) {\r
157 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("Gff3File", [this.inFile, type]);\r
158 } else if (format.equals ("JSON")) {\r
159 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("JSONFile", [source]);\r
160 } else if (format.equals ("HTML")) {\r
161 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("HtmlFile", [source]);\r
162 }return this.buildAlignmentFrom (this.alignFile);\r
163 } catch (e) {\r
164 if (Clazz.exceptionOf (e, Exception)) {\r
165 e.printStackTrace ();\r
166 System.err.println ("Failed to read alignment using the '" + format + "' reader.\n" + e);\r
167 if (e.getMessage () != null && e.getMessage ().startsWith (jalview.io.AppletFormatAdapter.INVALID_CHARACTERS)) {\r
168 throw  new java.io.IOException (e.getMessage ());\r
169 }if (type.equalsIgnoreCase ("Paste")) {\r
170 try {\r
171 this.alignFile = jalview.jsdev.GenericFileAdapter.getFile ("FastaFile", [">UNKNOWN\n" + this.inFile, "Paste"]);\r
172 return this.buildAlignmentFrom (this.alignFile);\r
173 } catch (ex) {\r
174 if (Clazz.exceptionOf (ex, Exception)) {\r
175 if (ex.toString ().startsWith (jalview.io.AppletFormatAdapter.INVALID_CHARACTERS)) {\r
176 throw  new java.io.IOException (e.getMessage ());\r
177 }ex.printStackTrace ();\r
178 } else {\r
179 throw ex;\r
180 }\r
181 }\r
182 }throw  new java.io.IOException (jalview.io.AppletFormatAdapter.SUPPORTED_FORMATS);\r
183 } else {\r
184 throw e;\r
185 }\r
186 }\r
187 }, "jalview.io.FileParse,~S");\r
188 Clazz.defineMethod (c$, "buildAlignmentFrom", \r
189  function (alignFile2) {\r
190 var al =  new jalview.datamodel.Alignment (this.alignFile.getSeqsAsArray ());\r
191 this.alignFile.addAnnotations (al);\r
192 this.alignFile.addGroups (al);\r
193 return al;\r
194 }, "jalview.io.AlignFile");\r
195 Clazz.defineMethod (c$, "formatSequences", \r
196 function (format, jvsuffix, ap, selectedOnly) {\r
197 var selvew = ap.getAlignViewport ().getAlignmentView (selectedOnly, false);\r
198 var aselview = selvew.getVisibleAlignment (ap.getAlignViewport ().getGapCharacter ());\r
199 var ala = (ap.getAlignViewport ().getVisibleAlignmentAnnotation (selectedOnly));\r
200 if (ala != null) {\r
201 for (var aa, $aa = ala.iterator (); $aa.hasNext () && ((aa = $aa.next ()) || true);) {\r
202 aselview.addAnnotation (aa);\r
203 }\r
204 }this.viewpanel = ap;\r
205 return this.formatSequences (format, aselview, jvsuffix);\r
206 }, "~S,~B,jalview.api.AlignmentViewPanel,~B");\r
207 Clazz.defineMethod (c$, "formatSequences", \r
208 function (format, alignment, jvsuffix) {\r
209 try {\r
210 var afile = null;\r
211 if (format.equalsIgnoreCase ("FASTA")) {\r
212 afile = jalview.jsdev.GenericFileAdapter.getFile ("FastaFile", []);\r
213 } else if (format.equalsIgnoreCase ("MSF")) {\r
214 afile = jalview.jsdev.GenericFileAdapter.getFile ("MSFfile", []);\r
215 } else if (format.equalsIgnoreCase ("PileUp")) {\r
216 afile = jalview.jsdev.GenericFileAdapter.getFile ("PileUpfile", []);\r
217 } else if (format.equalsIgnoreCase ("CLUSTAL")) {\r
218 afile = jalview.jsdev.GenericFileAdapter.getFile ("ClustalFile", []);\r
219 } else if (format.equalsIgnoreCase ("BLC")) {\r
220 afile = jalview.jsdev.GenericFileAdapter.getFile ("BLCFile", []);\r
221 } else if (format.equalsIgnoreCase ("PIR")) {\r
222 afile = jalview.jsdev.GenericFileAdapter.getFile ("PIRFile", []);\r
223 } else if (format.equalsIgnoreCase ("PFAM")) {\r
224 afile = jalview.jsdev.GenericFileAdapter.getFile ("PfamFile", []);\r
225 } else if (format.equalsIgnoreCase ("STH")) {\r
226 afile = jalview.jsdev.GenericFileAdapter.getFile ("StockholmFile", [alignment]);\r
227 } else if (format.equalsIgnoreCase ("AMSA")) {\r
228 afile = jalview.jsdev.GenericFileAdapter.getFile ("AMSAFile", [alignment]);\r
229 } else if (format.equalsIgnoreCase ("PHYLIP")) {\r
230 afile = jalview.jsdev.GenericFileAdapter.getFile ("PhylipFile", []);\r
231 } else if (format.equalsIgnoreCase ("JSON")) {\r
232 afile = jalview.jsdev.GenericFileAdapter.getFile ("JSONFile", []);\r
233 } else if (format.equalsIgnoreCase ("RNAML")) {\r
234 afile = jalview.jsdev.GenericFileAdapter.getFile ("RnamlFile", []);\r
235 } else {\r
236 throw  new Exception (jalview.util.MessageManager.getString ("error.implementation_error_unknown_file_format_string"));\r
237 }afile.setNewlineString (this.newline);\r
238 afile.addJVSuffix (jvsuffix);\r
239 afile.setExportSettings (this.exportSettings);\r
240 afile.configureForView (this.viewpanel);\r
241 if (this.viewpanel == null || this.viewpanel.getAlignment () == null || this.viewpanel.getAlignment () !== alignment) {\r
242 afile.setSeqs (alignment.getSequencesArray ());\r
243 } else {\r
244 afile.setSeqs (this.viewpanel.getAlignment ().getSequencesArray ());\r
245 }var afileresp = afile.print ();\r
246 if (afile.hasWarningMessage ()) {\r
247 System.err.println ("Warning raised when writing as " + format + " : " + afile.getWarningMessage ());\r
248 }return afileresp;\r
249 } catch (e) {\r
250 if (Clazz.exceptionOf (e, Exception)) {\r
251 System.err.println ("Failed to write alignment as a '" + format + "' file\n");\r
252 e.printStackTrace ();\r
253 } else {\r
254 throw e;\r
255 }\r
256 }\r
257 return null;\r
258 }, "~S,jalview.datamodel.AlignmentI,~B");\r
259 c$.checkProtocol = Clazz.defineMethod (c$, "checkProtocol", \r
260 function (file) {\r
261 var protocol = jalview.io.AppletFormatAdapter.FILE;\r
262 var ft = file.toLowerCase ().trim ();\r
263 if (ft.indexOf ("http:") == 0 || ft.indexOf ("https:") == 0 || ft.indexOf ("file:") == 0) {\r
264 protocol = jalview.io.AppletFormatAdapter.URL;\r
265 }return protocol;\r
266 }, "~S");\r
267 c$.resolveProtocol = Clazz.defineMethod (c$, "resolveProtocol", \r
268 function (file, format) {\r
269 return jalview.io.AppletFormatAdapter.resolveProtocol (file, format, false);\r
270 }, "~S,~S");\r
271 c$.resolveProtocol = Clazz.defineMethod (c$, "resolveProtocol", \r
272 function (file, format, debug) {\r
273 var protocol = null;\r
274 if (debug) {\r
275 System.out.println ("resolving datasource started with:\n>>file\n" + file + ">>endfile");\r
276 }try {\r
277 var rtn = false;\r
278 var is = System.getSecurityManager ().getClass ().getResourceAsStream ("/" + file);\r
279 if (is != null) {\r
280 rtn = true;\r
281 is.close ();\r
282 }if (debug) {\r
283 System.err.println ("Resource '" + file + "' was " + (rtn ? "" : "not") + " located by classloader.");\r
284 };if (rtn) {\r
285 protocol = jalview.io.AppletFormatAdapter.CLASSLOADER;\r
286 }} catch (ex) {\r
287 if (Clazz.exceptionOf (ex, Exception)) {\r
288 System.err.println ("Exception checking resources: " + file + " " + ex);\r
289 } else {\r
290 throw ex;\r
291 }\r
292 }\r
293 if (file.indexOf ("://") > -1) {\r
294 protocol = jalview.io.AppletFormatAdapter.URL;\r
295 } else {\r
296 protocol = jalview.io.AppletFormatAdapter.FILE;\r
297 }var fp = null;\r
298 try {\r
299 if (debug) {\r
300 System.out.println ("Trying to get contents of resource as " + protocol + ":");\r
301 }fp =  new jalview.io.FileParse (file, protocol);\r
302 if (!fp.isValid ()) {\r
303 fp = null;\r
304 } else {\r
305 if (debug) {\r
306 System.out.println ("Successful.");\r
307 }}} catch (e) {\r
308 if (Clazz.exceptionOf (e, Exception)) {\r
309 if (debug) {\r
310 System.err.println ("Exception when accessing content: " + e);\r
311 }fp = null;\r
312 } else {\r
313 throw e;\r
314 }\r
315 }\r
316 if (fp == null) {\r
317 if (debug) {\r
318 System.out.println ("Accessing as paste.");\r
319 }protocol = jalview.io.AppletFormatAdapter.PASTE;\r
320 fp = null;\r
321 try {\r
322 fp =  new jalview.io.FileParse (file, protocol);\r
323 if (!fp.isValid ()) {\r
324 fp = null;\r
325 }} catch (e) {\r
326 if (Clazz.exceptionOf (e, Exception)) {\r
327 System.err.println ("Failed to access content as paste!");\r
328 e.printStackTrace ();\r
329 fp = null;\r
330 } else {\r
331 throw e;\r
332 }\r
333 }\r
334 }if (fp == null) {\r
335 return null;\r
336 }if (format == null || format.length == 0) {\r
337 return protocol;\r
338 } else {\r
339 try {\r
340 var idformat =  new jalview.io.IdentifyFile ().Identify (file, protocol);\r
341 if (idformat == null) {\r
342 if (debug) {\r
343 System.out.println ("Format not identified. Inaccessible file.");\r
344 }return null;\r
345 }if (debug) {\r
346 System.out.println ("Format identified as " + idformat + "and expected as " + format);\r
347 }if (idformat.equals (format)) {\r
348 if (debug) {\r
349 System.out.println ("Protocol identified as " + protocol);\r
350 }return protocol;\r
351 } else {\r
352 if (debug) {\r
353 System.out.println ("File deemed not accessible via " + protocol);\r
354 }fp.close ();\r
355 return null;\r
356 }} catch (e) {\r
357 if (Clazz.exceptionOf (e, Exception)) {\r
358 if (debug) {\r
359 System.err.println ("File deemed not accessible via " + protocol);\r
360 e.printStackTrace ();\r
361 };} else {\r
362 throw e;\r
363 }\r
364 }\r
365 }return null;\r
366 }, "~S,~S,~B");\r
367 Clazz.defineMethod (c$, "getAlignFile", \r
368 function () {\r
369 return this.alignFile;\r
370 });\r
371 Clazz.defineMethod (c$, "setAlignFile", \r
372 function (alignFile) {\r
373 this.alignFile = alignFile;\r
374 }, "jalview.io.AlignFile");\r
375 Clazz.defineStatics (c$,\r
376 "FILE", "File",\r
377 "URL", "URL",\r
378 "PASTE", "Paste",\r
379 "CLASSLOADER", "ClassLoader");\r
380 c$.READABLE_FORMATS = c$.prototype.READABLE_FORMATS =  Clazz.newArray (-1, ["BLC", "CLUSTAL", "FASTA", "MSF", "PileUp", "PIR", "PFAM", "STH", "PDB", "JnetFile", "RNAML", "PHYLIP", "JSON", "GFF v2 or v3", "HTML"]);\r
381 c$.READABLE_EXTENSIONS = c$.prototype.READABLE_EXTENSIONS =  Clazz.newArray (-1, ["fa, fasta, mfa, fastq", "aln", "pfam", "msf", "pir", "blc", "amsa", "sto,stk", "xml,rnaml", "phy", "json", ".gff2,gff3", "jar,jvp", "html"]);\r
382 c$.READABLE_FNAMES = c$.prototype.READABLE_FNAMES =  Clazz.newArray (-1, ["Fasta", "Clustal", "PFAM", "MSF", "PIR", "BLC", "AMSA", "Stockholm", "RNAML", "PHYLIP", "JSON", "GFF v2 or v3", "Jalview", "HTML"]);\r
383 c$.WRITEABLE_FORMATS = c$.prototype.WRITEABLE_FORMATS =  Clazz.newArray (-1, ["BLC", "CLUSTAL", "FASTA", "MSF", "PileUp", "PIR", "PFAM", "AMSA", "STH", "PHYLIP", "JSON"]);\r
384 c$.WRITABLE_EXTENSIONS = c$.prototype.WRITABLE_EXTENSIONS =  Clazz.newArray (-1, ["fa, fasta, mfa, fastq", "aln", "pfam", "msf", "pir", "blc", "amsa", "sto,stk", "phy", "json", "jvp"]);\r
385 c$.WRITABLE_FNAMES = c$.prototype.WRITABLE_FNAMES =  Clazz.newArray (-1, ["Fasta", "Clustal", "PFAM", "MSF", "PIR", "BLC", "AMSA", "STH", "PHYLIP", "JSON", "Jalview"]);\r
386 Clazz.defineStatics (c$,\r
387 "INVALID_CHARACTERS", "Contains invalid characters");\r
388 c$.SUPPORTED_FORMATS = c$.prototype.SUPPORTED_FORMATS = "Formats currently supported are\n" + jalview.io.AppletFormatAdapter.prettyPrint (jalview.io.AppletFormatAdapter.READABLE_FORMATS);\r
389 });\r