+ /**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @return DOCUMENT ME!\r
+ */\r
+ public int[] gapMap()\r
+ {\r
+ // Returns an int array giving the position of each residue in the sequence in the alignment\r
+ String seq = jalview.analysis.AlignSeq.extractGaps("-. ", sequence);\r
+ int[] map = new int[seq.length()];\r
+ int j = 0;\r
+ int p = 0;\r
+\r
+ while (j < sequence.length())\r
+ {\r
+ if (!jalview.util.Comparison.isGap(sequence.charAt(j)))\r
+ {\r
+ map[p++] = j;\r
+ }\r
+\r
+ j++;\r
+ }\r
+\r
+ return map;\r
+ }\r
+\r
+ /**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @param i DOCUMENT ME!\r
+ */\r
+ public void deleteCharAt(int i)\r
+ {\r
+ if (i >= sequence.length())\r
+ {\r
+ return;\r
+ }\r
+\r
+ sequence = sequence.substring(0, i) + sequence.substring(i + 1);\r
+ }\r
+\r
+ /**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @param i DOCUMENT ME!\r
+ * @param j DOCUMENT ME!\r
+ */\r
+ public void deleteChars(int i, int j)\r
+ {\r
+ if (i >= sequence.length())\r
+ {\r
+ return;\r
+ }\r
+\r
+ if (j >= sequence.length())\r
+ {\r
+ sequence = sequence.substring(0, i);\r
+ }\r
+ else\r
+ {\r
+ sequence = sequence.substring(0, i) + sequence.substring(j);\r
+ }\r
+ }\r
+\r
+\r
+ /**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @param i DOCUMENT ME!\r
+ * @param c DOCUMENT ME!\r
+ * @param chop DOCUMENT ME!\r
+ */\r
+ public void insertCharAt(int i, char c)\r
+ {\r
+ String tmp = new String(sequence);\r
+\r
+ if (i < sequence.length())\r
+ {\r
+ sequence = tmp.substring(0, i) + String.valueOf(c) +\r
+ tmp.substring(i);\r
+ }\r
+ else\r
+ {\r
+ // JBPNote : padding char at end of sequence. We'll not get away with this when we insert residues, I bet!\r
+ char[] ch = new char[(1 + i) - sequence.length()];\r
+\r
+ for (int j = 0, k = ch.length; j < k; j++)\r
+ ch[j] = c;\r
+\r
+ sequence = tmp + String.valueOf(ch);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @param c DOCUMENT ME!\r
+ */\r
+ public void setColor(Color c)\r
+ {\r
+ this.color = c;\r
+ }\r
+\r
+ /**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @return DOCUMENT ME!\r
+ */\r
+ public Color getColor()\r
+ {\r
+ return color;\r
+ }\r
+\r
+ public String getVamsasId()\r
+ {\r
+ return vamsasId;\r
+ }\r
+\r
+ public void setVamsasId(String id)\r
+ {\r
+ vamsasId = id;\r
+ }\r
+\r
+ public void setDBRef(Vector dbref)\r
+ {\r
+ dbrefs = dbref;\r
+ }\r
+ public Vector getDBRef()\r
+ {\r
+ return dbrefs;\r
+ }\r
+\r
+ public void addDBRef(DBRefEntry entry)\r
+ {\r
+ if(dbrefs == null)\r
+ dbrefs = new Vector();\r
+\r
+ dbrefs.addElement(entry);\r
+ }\r
+\r
+ public void setDatasetSequence(SequenceI seq)\r
+ {\r
+ datasetSequence = seq;\r
+ }\r
+\r
+ public SequenceI getDatasetSequence()\r
+ {\r
+ return datasetSequence;\r
+ }\r
+\r
+ public AlignmentAnnotation [] getAnnotation()\r
+ {\r
+ if(annotation==null)\r
+ return null;\r
+\r
+ AlignmentAnnotation [] ret = new AlignmentAnnotation[annotation.size()];\r
+ for(int r = 0; r<ret.length; r++)\r
+ ret[r] = (AlignmentAnnotation)annotation.elementAt(r);\r
+\r
+ return ret;\r
+ }\r
+\r
+ public void addAlignmentAnnotation(AlignmentAnnotation annotation)\r
+ {\r
+ if(this.annotation==null)\r
+ this.annotation = new Vector();\r
+\r
+ this.annotation.addElement( annotation );\r
+ }\r
+\r
+ public SequenceGroup getHiddenSequences()\r
+ {\r
+ return hiddenSequences;\r
+ }\r
+\r
+ public void addHiddenSequence(SequenceI seq)\r
+ {\r
+ if(hiddenSequences==null)\r
+ {\r
+ hiddenSequences = new SequenceGroup();\r
+ }\r
+ hiddenSequences.addSequence(seq, false);\r
+ }\r
+\r
+ public void showHiddenSequence(SequenceI seq)\r
+ {\r
+ hiddenSequences.deleteSequence(seq, false);\r
+ if (hiddenSequences.getSize() < 1)\r
+ {\r
+ hiddenSequences = null;\r
+ }\r
+\r
+ }\r
+\r
+ public void changeCase(boolean toUpper, int start, int end)\r
+ {\r
+ StringBuffer newSeq = new StringBuffer();\r
+\r
+ if(end>sequence.length())\r
+ end = sequence.length();\r
+\r
+ if (start > 0)\r
+ {\r
+ newSeq.append(sequence.substring(0, start));\r
+ }\r
+\r
+ if (toUpper)\r
+ newSeq.append(sequence.substring(start, end).toUpperCase());\r
+ else\r
+ newSeq.append(sequence.substring(start, end).toLowerCase());\r
+\r
+ if (end < sequence.length())\r
+ newSeq.append(sequence.substring(end));\r
+\r
+ sequence = newSeq.toString();\r
+ }\r
+\r
+ public void toggleCase(int start, int end)\r
+ {\r
+ StringBuffer newSeq = new StringBuffer();\r
+\r
+ if(end>sequence.length())\r
+ end = sequence.length();\r
+\r
+ if (start > 0)\r
+ {\r
+ newSeq.append(sequence.substring(0, start));\r
+ }\r
+\r
+ char nextChar;\r
+ for(int c=start; c<end; c++)\r
+ {\r
+ nextChar = sequence.charAt(c);\r
+ if(Character.isLetter(nextChar))\r
+ {\r
+ if(Character.isUpperCase(nextChar))\r
+ nextChar = Character.toLowerCase(nextChar);\r
+ else\r
+ nextChar = Character.toUpperCase(nextChar);\r
+ }\r
+\r
+\r
+ newSeq.append(nextChar);\r
+ }\r
+\r
+ if (end < sequence.length())\r
+ newSeq.append(sequence.substring(end));\r
+\r
+ sequence = newSeq.toString();\r
+ }\r