+ } while (refSeqId != null\r
+ && (referedSeq = al.findName(referedSeq, refSeqId, true)) != null);\r
+ }\r
+ else\r
+ {\r
+ al.addAnnotation(annotation);\r
+ al.setAnnotationIndex(annotation,\r
+ al.getAlignmentAnnotation().length - existingAnnotations\r
+ - 1);\r
+ if (groupRef != null)\r
+ {\r
+ ((Vector) groupRefRows.get(groupRef)).addElement(annotation);\r
+ }\r
+ }\r
+ // and set modification flag\r
+ modified = true;\r
+ }\r
+ // Finally, resolve the groupRefs\r
+ Enumeration en = groupRefRows.keys();\r
+ \r
+ while (en.hasMoreElements())\r
+ {\r
+ groupRef = (String) en.nextElement();\r
+ boolean matched = false;\r
+ // Resolve group: TODO: add a getGroupByName method to alignments\r
+ for (SequenceGroup theGroup : al.getGroups())\r
+ {\r
+ if (theGroup.getName().equals(groupRef))\r
+ {\r
+ if (matched)\r
+ {\r
+ // TODO: specify and implement duplication of alignment annotation\r
+ // for multiple group references.\r
+ System.err\r
+ .println("Ignoring 1:many group reference mappings for group name '"\r
+ + groupRef + "'");\r
+ }\r
+ else\r
+ {\r
+ matched = true;\r
+ Vector rowset = (Vector) groupRefRows.get(groupRef);\r
+ if (rowset != null && rowset.size() > 0)\r
+ {\r
+ AlignmentAnnotation alan = null;\r
+ for (int elm = 0, elmSize = rowset.size(); elm < elmSize; elm++)\r
+ {\r
+ alan = (AlignmentAnnotation) rowset.elementAt(elm);\r
+ alan.groupRef = theGroup;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ ((Vector) groupRefRows.get(groupRef)).removeAllElements();\r