JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / site / j2s / jalview / io / FastaFile.js
1 Clazz.declarePackage ("jalview.io");\r
2 Clazz.load (["jalview.io.AlignFile"], "jalview.io.FastaFile", ["jalview.datamodel.AlignmentAnnotation", "$.Annotation", "java.lang.StringBuffer"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.len = 72;\r
5 this.out = null;\r
6 Clazz.instantialize (this, arguments);\r
7 }, jalview.io, "FastaFile", jalview.io.AlignFile);\r
8 Clazz.makeConstructor (c$, \r
9 function () {\r
10 Clazz.superConstructor (this, jalview.io.FastaFile, []);\r
11 });\r
12 Clazz.overrideMethod (c$, "parse", \r
13 function () {\r
14 var sb =  new StringBuffer ();\r
15 var firstLine = true;\r
16 var line;\r
17 var uline;\r
18 var seq = null;\r
19 var annotation = false;\r
20 while ((uline = this.nextLine ()) != null) {\r
21 line = uline.trim ();\r
22 if (line.length > 0) {\r
23 if (line.charAt (0) == '>') {\r
24 if (line.startsWith (">#_")) {\r
25 if (annotation) {\r
26 this.annotations.addElement (this.makeAnnotation (seq, sb));\r
27 }} else {\r
28 annotation = false;\r
29 }if (!firstLine) {\r
30 seq.setSequence (sb.toString ());\r
31 if (!annotation) {\r
32 this.seqs.addElement (seq);\r
33 }}seq = this.parseId (line.substring (1));\r
34 firstLine = false;\r
35 sb =  new StringBuffer ();\r
36 if (line.startsWith (">#_")) {\r
37 annotation = true;\r
38 }} else {\r
39 sb.append (annotation ? uline : line);\r
40 }}}\r
41 if (annotation) {\r
42 this.annotations.addElement (this.makeAnnotation (seq, sb));\r
43 } else if (!firstLine) {\r
44 seq.setSequence (sb.toString ());\r
45 this.seqs.addElement (seq);\r
46 }});\r
47 Clazz.defineMethod (c$, "makeAnnotation", \r
48  function (seq, sb) {\r
49 var anots =  new Array (sb.length ());\r
50 var cb;\r
51 for (var i = 0; i < anots.length; i++) {\r
52 var cn = sb.charAt (i);\r
53 if (cn != ' ') {\r
54 anots[i] =  new jalview.datamodel.Annotation ("" + cn, null, ' ', NaN);\r
55 }}\r
56 var aa =  new jalview.datamodel.AlignmentAnnotation (seq.getName ().substring (2), seq.getDescription (), anots);\r
57 return aa;\r
58 }, "jalview.datamodel.SequenceI,StringBuffer");\r
59 Clazz.defineMethod (c$, "addAnnotations", \r
60 function (al) {\r
61 this.addProperties (al);\r
62 for (var i = 0; i < this.annotations.size (); i++) {\r
63 var aa = this.annotations.elementAt (i);\r
64 aa.setPadGaps (true, al.getGapCharacter ());\r
65 al.addAnnotation (aa);\r
66 }\r
67 }, "jalview.datamodel.Alignment");\r
68 Clazz.defineMethod (c$, "print", \r
69 function (s) {\r
70 this.out =  new StringBuffer ();\r
71 var i = 0;\r
72 while ((i < s.length) && (s[i] != null)) {\r
73 this.out.append (">" + this.printId (s[i]));\r
74 if (s[i].getDescription () != null) {\r
75 this.out.append (" " + s[i].getDescription ());\r
76 }this.out.append (this.newline);\r
77 var nochunks = (Clazz.doubleToInt (s[i].getLength () / this.len)) + 1;\r
78 for (var j = 0; j < nochunks; j++) {\r
79 var start = j * this.len;\r
80 var end = start + this.len;\r
81 if (end < s[i].getLength ()) {\r
82 this.out.append (s[i].getSequenceAsString (start, end) + this.newline);\r
83 } else if (start < s[i].getLength ()) {\r
84 this.out.append (s[i].getSequenceAsString (start, s[i].getLength ()) + this.newline);\r
85 }}\r
86 i++;\r
87 }\r
88 return this.out.toString ();\r
89 }, "~A");\r
90 Clazz.defineMethod (c$, "print", \r
91 function () {\r
92 return this.print (this.getSeqsAsArray ());\r
93 });\r
94 });\r