+ return result.toString();\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see jalview.bin.JalviewLiteJsApi#highlight(java.lang.String,\r
+ * java.lang.String, java.lang.String)\r
+ */\r
+ public void highlight(String sequenceId, String position,\r
+ String alignedPosition)\r
+ {\r
+ highlightIn(getDefaultTargetFrame(), sequenceId, position,\r
+ alignedPosition);\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see jalview.bin.JalviewLiteJsApi#highlightIn(jalview.appletgui.AlignFrame,\r
+ * java.lang.String, java.lang.String, java.lang.String)\r
+ */\r
+ public void highlightIn(final AlignFrame alf, final String sequenceId,\r
+ final String position, final String alignedPosition)\r
+ {\r
+ // TODO: could try to highlight in all alignments if alf==null\r
+ jalview.analysis.SequenceIdMatcher matcher = new jalview.analysis.SequenceIdMatcher(\r
+ alf.viewport.getAlignment().getSequencesArray());\r
+ final SequenceI sq = matcher.findIdMatch(sequenceId);\r
+ if (sq != null)\r
+ {\r
+ int apos = -1;\r
+ try\r
+ {\r
+ apos = new Integer(position).intValue();\r
+ apos--;\r
+ } catch (NumberFormatException ex)\r
+ {\r
+ return;\r
+ }\r
+ final StructureSelectionManagerProvider me = this;\r
+ final int pos = apos;\r
+ // use vamsas listener to broadcast to all listeners in scope\r
+ if (alignedPosition != null\r
+ && (alignedPosition.trim().length() == 0 || alignedPosition\r
+ .toLowerCase().indexOf("false") > -1))\r
+ {\r
+ java.awt.EventQueue.invokeLater(new Runnable()\r
+ {\r
+ @Override\r
+ public void run()\r
+ {\r
+ StructureSelectionManager.getStructureSelectionManager(me)\r
+ .mouseOverVamsasSequence(sq, sq.findIndex(pos), null);\r
+ }\r
+ });\r
+ }\r
+ else\r
+ {\r
+ java.awt.EventQueue.invokeLater(new Runnable()\r
+ {\r
+ @Override\r
+ public void run()\r
+ {\r
+ StructureSelectionManager.getStructureSelectionManager(me)\r
+ .mouseOverVamsasSequence(sq, pos, null);\r
+ }\r
+ });\r
+ }\r
+ }\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see jalview.bin.JalviewLiteJsApi#select(java.lang.String,\r
+ * java.lang.String)\r
+ */\r
+ public void select(String sequenceIds, String columns)\r
+ {\r
+ selectIn(getDefaultTargetFrame(), sequenceIds, columns, separator);\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see jalview.bin.JalviewLiteJsApi#select(java.lang.String,\r
+ * java.lang.String, java.lang.String)\r
+ */\r
+ public void select(String sequenceIds, String columns, String sep)\r
+ {\r
+ selectIn(getDefaultTargetFrame(), sequenceIds, columns, sep);\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see jalview.bin.JalviewLiteJsApi#selectIn(jalview.appletgui.AlignFrame,\r
+ * java.lang.String, java.lang.String)\r
+ */\r
+ public void selectIn(AlignFrame alf, String sequenceIds, String columns)\r
+ {\r
+ selectIn(alf, sequenceIds, columns, separator);\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see jalview.bin.JalviewLiteJsApi#selectIn(jalview.appletgui.AlignFrame,\r
+ * java.lang.String, java.lang.String, java.lang.String)\r
+ */\r
+ public void selectIn(final AlignFrame alf, String sequenceIds,\r
+ String columns, String sep)\r
+ {\r
+ if (sep == null || sep.length() == 0)\r
+ {\r
+ sep = separator;\r
+ }\r
+ else\r
+ {\r
+ if (debug)\r
+ {\r
+ System.err.println("Selecting region using separator string '"\r
+ + separator + "'");\r
+ }\r
+ }\r
+ // deparse fields\r
+ String[] ids = separatorListToArray(sequenceIds, sep);\r
+ String[] cols = separatorListToArray(columns, sep);\r
+ final SequenceGroup sel = new SequenceGroup();\r
+ final ColumnSelection csel = new ColumnSelection();\r
+ AlignmentI al = alf.viewport.getAlignment();\r
+ jalview.analysis.SequenceIdMatcher matcher = new jalview.analysis.SequenceIdMatcher(\r
+ alf.viewport.getAlignment().getSequencesArray());\r
+ int start = 0, end = al.getWidth(), alw = al.getWidth();\r
+ boolean seqsfound = true;\r
+ if (ids != null && ids.length > 0)\r
+ {\r
+ seqsfound = false;\r
+ for (int i = 0; i < ids.length; i++)\r
+ {\r
+ if (ids[i].trim().length() == 0)\r
+ {\r
+ continue;\r
+ }\r
+ SequenceI sq = matcher.findIdMatch(ids[i]);\r
+ if (sq != null)\r
+ {\r
+ seqsfound = true;\r
+ sel.addSequence(sq, false);\r
+ }\r
+ }\r
+ }\r
+ boolean inseqpos = false;\r
+ if (cols != null && cols.length > 0)\r
+ {\r
+ boolean seset = false;\r
+ for (int i = 0; i < cols.length; i++)\r
+ {\r
+ String cl = cols[i].trim();\r
+ if (cl.length() == 0)\r
+ {\r
+ continue;\r
+ }\r
+ int p;\r
+ if ((p = cl.indexOf("-")) > -1)\r
+ {\r
+ int from = -1, to = -1;\r
+ try\r
+ {\r
+ from = new Integer(cl.substring(0, p)).intValue();\r
+ from--;\r
+ } catch (NumberFormatException ex)\r
+ {\r
+ System.err\r
+ .println("ERROR: Couldn't parse first integer in range element column selection string '"\r
+ + cl + "' - format is 'from-to'");\r
+ return;\r
+ }\r
+ try\r
+ {\r
+ to = new Integer(cl.substring(p + 1)).intValue();\r
+ to--;\r
+ } catch (NumberFormatException ex)\r
+ {\r
+ System.err\r
+ .println("ERROR: Couldn't parse second integer in range element column selection string '"\r
+ + cl + "' - format is 'from-to'");\r
+ return;\r
+ }\r
+ if (from >= 0 && to >= 0)\r
+ {\r
+ // valid range\r
+ if (from < to)\r
+ {\r
+ int t = to;\r
+ to = from;\r
+ to = t;\r
+ }\r
+ if (!seset)\r
+ {\r
+ start = from;\r
+ end = to;\r
+ seset = true;\r
+ }\r
+ else\r
+ {\r
+ // comment to prevent range extension\r
+ if (start > from)\r
+ {\r
+ start = from;\r
+ }\r
+ if (end < to)\r
+ {\r
+ end = to;\r
+ }\r
+ }\r
+ for (int r = from; r <= to; r++)\r
+ {\r
+ if (r >= 0 && r < alw)\r
+ {\r
+ csel.addElement(r);\r
+ }\r
+ }\r
+ if (debug)\r
+ {\r
+ System.err.println("Range '" + cl + "' deparsed as [" + from\r
+ + "," + to + "]");\r
+ }\r
+ }\r
+ else\r
+ {\r
+ System.err.println("ERROR: Invalid Range '" + cl\r
+ + "' deparsed as [" + from + "," + to + "]");\r
+ }\r
+ }\r
+ else\r
+ {\r
+ int r = -1;\r
+ try\r
+ {\r
+ r = new Integer(cl).intValue();\r
+ r--;\r
+ } catch (NumberFormatException ex)\r
+ {\r
+ if (cl.toLowerCase().equals("sequence"))\r
+ {\r
+ // we are in the dataset sequence's coordinate frame.\r
+ inseqpos = true;\r
+ }\r
+ else\r
+ {\r
+ System.err\r
+ .println("ERROR: Couldn't parse integer from point selection element of column selection string '"\r
+ + cl + "'");\r
+ return;\r
+ }\r
+ }\r
+ if (r >= 0 && r <= alw)\r
+ {\r
+ if (!seset)\r
+ {\r
+ start = r;\r
+ end = r;\r
+ seset = true;\r
+ }\r
+ else\r
+ {\r
+ // comment to prevent range extension\r
+ if (start > r)\r
+ {\r
+ start = r;\r
+ }\r
+ if (end < r)\r
+ {\r
+ end = r;\r
+ }\r
+ }\r
+ csel.addElement(r);\r
+ if (debug)\r
+ {\r
+ System.err.println("Point selection '" + cl\r
+ + "' deparsed as [" + r + "]");\r
+ }\r
+ }\r
+ else\r
+ {\r
+ System.err.println("ERROR: Invalid Point selection '" + cl\r
+ + "' deparsed as [" + r + "]");\r
+ }\r
+ }\r
+ }\r
+ }\r
+ if (seqsfound)\r
+ {\r
+ // we only propagate the selection when it was the null selection, or the\r
+ // given sequences were found in the alignment.\r
+ if (inseqpos && sel.getSize() > 0)\r
+ {\r
+ // assume first sequence provides reference frame ?\r
+ SequenceI rs = sel.getSequenceAt(0);\r
+ start = rs.findIndex(start);\r
+ end = rs.findIndex(end);\r
+ if (csel != null)\r
+ {\r
+ Vector cs = csel.getSelected();\r
+ csel.clear();\r
+ for (int csi = 0, csiS = cs.size(); csi < csiS; csi++)\r
+ {\r
+ csel.addElement(rs.findIndex(((Integer) cs.elementAt(csi))\r
+ .intValue()));\r
+ }\r
+ }\r
+ }\r
+ sel.setStartRes(start);\r
+ sel.setEndRes(end);\r
+ EventQueue.invokeLater(new Runnable()\r
+ {\r
+ @Override\r
+ public void run()\r
+ {\r
+ alf.select(sel, csel);\r
+ }\r
+ });\r
+ }\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see\r
+ * jalview.bin.JalviewLiteJsApi#getSelectedSequencesAsAlignment(java.lang.\r
+ * String, java.lang.String)\r
+ */\r
+ public String getSelectedSequencesAsAlignment(String format, String suffix)\r
+ {\r
+ return getSelectedSequencesAsAlignmentFrom(getDefaultTargetFrame(),\r
+ format, suffix);\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see\r
+ * jalview.bin.JalviewLiteJsApi#getSelectedSequencesAsAlignmentFrom(jalview\r
+ * .appletgui.AlignFrame, java.lang.String, java.lang.String)\r
+ */\r
+ public String getSelectedSequencesAsAlignmentFrom(AlignFrame alf,\r
+ String format, String suffix)\r
+ {\r
+ try\r
+ {\r
+ boolean seqlimits = suffix.equalsIgnoreCase("true");\r
+ if (alf.viewport.getSelectionGroup() != null)\r
+ {\r
+ String reply = new AppletFormatAdapter().formatSequences(format,\r
+ new Alignment(alf.viewport.getSelectionAsNewSequence()),\r
+ seqlimits);\r
+ return reply;\r
+ }\r
+ } catch (Exception ex)\r
+ {\r
+ ex.printStackTrace();\r
+ return "Error retrieving alignment in " + format + " format. ";\r
+ }\r
+ return "";\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see jalview.bin.JalviewLiteJsApi#getAlignmentOrder()\r
+ */\r
+ public String getAlignmentOrder()\r
+ {\r
+ return getAlignmentOrderFrom(getDefaultTargetFrame());\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see\r
+ * jalview.bin.JalviewLiteJsApi#getAlignmentOrderFrom(jalview.appletgui.AlignFrame\r
+ * )\r
+ */\r
+ public String getAlignmentOrderFrom(AlignFrame alf)\r
+ {\r
+ return getAlignmentOrderFrom(alf, separator);\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see\r
+ * jalview.bin.JalviewLiteJsApi#getAlignmentOrderFrom(jalview.appletgui.AlignFrame\r
+ * , java.lang.String)\r
+ */\r
+ public String getAlignmentOrderFrom(AlignFrame alf, String sep)\r
+ {\r
+ AlignmentI alorder = alf.getAlignViewport().getAlignment();\r
+ String[] order = new String[alorder.getHeight()];\r
+ for (int i = 0; i < order.length; i++)\r
+ {\r
+ order[i] = alorder.getSequenceAt(i).getName();\r
+ }\r
+ return arrayToSeparatorList(order);\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see jalview.bin.JalviewLiteJsApi#orderBy(java.lang.String,\r
+ * java.lang.String)\r
+ */\r
+ public String orderBy(String order, String undoName)\r
+ {\r
+ return orderBy(order, undoName, separator);\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see jalview.bin.JalviewLiteJsApi#orderBy(java.lang.String,\r
+ * java.lang.String, java.lang.String)\r
+ */\r
+ public String orderBy(String order, String undoName, String sep)\r
+ {\r
+ return orderAlignmentBy(getDefaultTargetFrame(), order, undoName, sep);\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see\r
+ * jalview.bin.JalviewLiteJsApi#orderAlignmentBy(jalview.appletgui.AlignFrame,\r
+ * java.lang.String, java.lang.String, java.lang.String)\r
+ */\r
+ public String orderAlignmentBy(AlignFrame alf, String order,\r
+ String undoName, String sep)\r
+ {\r
+ String[] ids = separatorListToArray(order, sep);\r
+ SequenceI[] sqs = null;\r
+ if (ids != null && ids.length > 0)\r
+ {\r
+ jalview.analysis.SequenceIdMatcher matcher = new jalview.analysis.SequenceIdMatcher(\r
+ alf.viewport.getAlignment().getSequencesArray());\r
+ int s = 0;\r
+ sqs = new SequenceI[ids.length];\r
+ for (int i = 0; i < ids.length; i++)\r
+ {\r
+ if (ids[i].trim().length() == 0)\r
+ {\r
+ continue;\r
+ }\r
+ SequenceI sq = matcher.findIdMatch(ids[i]);\r
+ if (sq != null)\r
+ {\r
+ sqs[s++] = sq;\r
+ }\r
+ }\r
+ if (s > 0)\r
+ {\r
+ SequenceI[] sqq = new SequenceI[s];\r
+ System.arraycopy(sqs, 0, sqq, 0, s);\r
+ sqs = sqq;\r
+ }\r
+ else\r
+ {\r
+ sqs = null;\r
+ }\r
+ }\r
+ if (sqs == null)\r
+ {\r
+ return "";\r
+ }\r
+ ;\r
+ final AlignmentOrder aorder = new AlignmentOrder(sqs);\r