JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / site / j2s / jalview / commands / ChangeCaseCommand.js
1 Clazz.declarePackage ("jalview.commands");\r
2 Clazz.load (["jalview.commands.CommandI"], "jalview.commands.ChangeCaseCommand", ["java.lang.StringBuffer"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.description = null;\r
5 this.caseChange = -1;\r
6 this.seqs = null;\r
7 this.regions = null;\r
8 Clazz.instantialize (this, arguments);\r
9 }, jalview.commands, "ChangeCaseCommand", null, jalview.commands.CommandI);\r
10 Clazz.makeConstructor (c$, \r
11 function (description, seqs, regions, caseChange) {\r
12 this.description = description;\r
13 this.seqs = seqs;\r
14 this.regions = regions;\r
15 this.caseChange = caseChange;\r
16 this.doCommand (null);\r
17 }, "~S,~A,java.util.List,~N");\r
18 Clazz.overrideMethod (c$, "getDescription", \r
19 function () {\r
20 return this.description;\r
21 });\r
22 Clazz.overrideMethod (c$, "getSize", \r
23 function () {\r
24 return 1;\r
25 });\r
26 Clazz.overrideMethod (c$, "doCommand", \r
27 function (views) {\r
28 this.changeCase (true);\r
29 }, "~A");\r
30 Clazz.overrideMethod (c$, "undoCommand", \r
31 function (views) {\r
32 this.changeCase (false);\r
33 }, "~A");\r
34 Clazz.defineMethod (c$, "changeCase", \r
35 function (doCommand) {\r
36 var sequence;\r
37 var start;\r
38 var end;\r
39 var nextChar;\r
40 for (var r, $r = this.regions.iterator (); $r.hasNext () && ((r = $r.next ()) || true);) {\r
41 start = r[0];\r
42 for (var s = 0; s < this.seqs.length; s++) {\r
43 sequence = this.seqs[s].getSequenceAsString ();\r
44 var newSeq =  new StringBuffer ();\r
45 if (r[1] > sequence.length) {\r
46 end = sequence.length;\r
47 } else {\r
48 end = r[1];\r
49 }if (start > 0) {\r
50 newSeq.append (sequence.substring (0, start));\r
51 }if ((this.caseChange == jalview.commands.ChangeCaseCommand.TO_UPPER && doCommand) || (this.caseChange == jalview.commands.ChangeCaseCommand.TO_LOWER && !doCommand)) {\r
52 newSeq.append (sequence.substring (start, end).toUpperCase ());\r
53 } else if ((this.caseChange == jalview.commands.ChangeCaseCommand.TO_LOWER && doCommand) || (this.caseChange == jalview.commands.ChangeCaseCommand.TO_UPPER && !doCommand)) {\r
54 newSeq.append (sequence.substring (start, end).toLowerCase ());\r
55 } else {\r
56 for (var c = start; c < end; c++) {\r
57 nextChar = sequence.charAt (c);\r
58 if ('a' <= nextChar && nextChar <= 'z') {\r
59 nextChar = String.fromCharCode (nextChar.charCodeAt (0) - (32));\r
60 } else if ('A' <= nextChar && nextChar <= 'Z') {\r
61 nextChar = String.fromCharCode (nextChar.charCodeAt (0) + (32));\r
62 }newSeq.append (nextChar);\r
63 }\r
64 }if (end < sequence.length) {\r
65 newSeq.append (sequence.substring (end));\r
66 }this.seqs[s].setSequence (newSeq.toString ());\r
67 }\r
68 }\r
69 }, "~B");\r
70 Clazz.defineStatics (c$,\r
71 "TO_LOWER", 0,\r
72 "TO_UPPER", 1,\r
73 "TOGGLE_CASE", 2);\r
74 });\r