/*\r
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6)\r
- * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle\r
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)\r
+ * Copyright (C) 2011 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle\r
* \r
* This file is part of Jalview.\r
* \r
\r
public class AnnotationFile\r
{\r
- StringBuffer text = new StringBuffer("JALVIEW_ANNOTATION\n"\r
- + "# Created: " + new java.util.Date() + "\n\n");\r
+ public AnnotationFile()\r
+ {\r
+ init();\r
+ }\r
+\r
+ /**\r
+ * character used to write newlines\r
+ */\r
+ protected String newline = System.getProperty("line.separator");\r
+\r
+ /**\r
+ * set new line string and reset the output buffer\r
+ * \r
+ * @param nl\r
+ */\r
+ public void setNewlineString(String nl)\r
+ {\r
+ newline = nl;\r
+ init();\r
+ }\r
+\r
+ public String getNewlineString()\r
+ {\r
+ return newline;\r
+ }\r
+\r
+ StringBuffer text;\r
+\r
+ private void init()\r
+ {\r
+ text = new StringBuffer("JALVIEW_ANNOTATION"+newline + "# Created: "\r
+ + new java.util.Date() + newline + newline);\r
+ refSeq = null;\r
+ refSeqId = null;\r
+ }\r
\r
/**\r
* convenience method for pre-2.4 feature files which have no view, hidden\r
{\r
if (refSeq != null)\r
{\r
- text.append("\nSEQUENCE_REF\tALIGNMENT\n");\r
+ text.append(newline);\r
+ text.append("SEQUENCE_REF\tALIGNMENT");\r
+ text.append(newline);\r
}\r
\r
refSeq = null;\r
if (refSeq == null || refSeq != row.sequenceRef)\r
{\r
refSeq = row.sequenceRef;\r
- text.append("\nSEQUENCE_REF\t" + refSeq.getName() + "\n");\r
+ text.append(newline);\r
+ text.append("SEQUENCE_REF\t");\r
+ text.append(refSeq.getName());\r
+ text.append(newline);\r
}\r
}\r
// mark any group references for the row\r
\r
if (refGroup != null)\r
{\r
- text.append("\nGROUP_REF\tALIGNMENT\n");\r
+ text.append(newline);\r
+ text.append("GROUP_REF\tALIGNMENT");\r
+ text.append(newline);\r
}\r
\r
refGroup = null;\r
if (refGroup == null || refGroup != row.groupRef)\r
{\r
refGroup = row.groupRef;\r
- text.append("\nGROUP_REF\t" + refGroup.getName() + "\n");\r
+ text.append(newline);\r
+ text.append("GROUP_REF\t");\r
+ text.append(refGroup.getName());\r
+ text.append(newline);\r
}\r
}\r
\r
\r
if (row.getThreshold() != null)\r
{\r
- graphLine\r
- .append("GRAPHLINE\t"\r
- + row.label\r
- + "\t"\r
- + row.getThreshold().value\r
- + "\t"\r
- + row.getThreshold().label\r
- + "\t"\r
- + jalview.util.Format.getHexString(row\r
- .getThreshold().colour) + "\n");\r
+ graphLine.append("GRAPHLINE\t");\r
+ graphLine.append(row.label);\r
+ graphLine.append("\t");\r
+ graphLine.append(row.getThreshold().value);\r
+ graphLine.append("\t");\r
+ graphLine.append(row.getThreshold().label);\r
+ graphLine.append("\t");\r
+ graphLine.append(jalview.util.Format.getHexString(row\r
+ .getThreshold().colour));\r
+ graphLine.append(newline);\r
}\r
\r
if (row.graphGroup > -1)\r
if (row.hasScore())\r
text.append("\t" + row.score);\r
\r
- text.append("\n");\r
+ text.append(newline);\r
\r
if (color != null && color != java.awt.Color.black && oneColour)\r
{\r
- colours.append("COLOUR\t" + row.label + "\t"\r
- + jalview.util.Format.getHexString(color) + "\n");\r
+ colours.append("COLOUR\t");\r
+ colours.append(row.label);\r
+ colours.append("\t");\r
+ colours.append(jalview.util.Format.getHexString(color));\r
+ colours.append(newline);\r
}\r
if (row.scaleColLabel || row.showAllColLabels\r
|| row.centreColLabels)\r
{\r
- rowprops.append("ROWPROPERTIES\t" + row.label);\r
- rowprops.append("\tscaletofit=" + row.scaleColLabel);\r
- rowprops.append("\tshowalllabs=" + row.showAllColLabels);\r
- rowprops.append("\tcentrelabs=" + row.centreColLabels);\r
- rowprops.append("\n");\r
+ rowprops.append("ROWPROPERTIES\t");\r
+ rowprops.append(row.label);\r
+ rowprops.append("\tscaletofit=");\r
+ rowprops.append(row.scaleColLabel);\r
+ rowprops.append("\tshowalllabs=");\r
+ rowprops.append(row.showAllColLabels);\r
+ rowprops.append("\tcentrelabs=");\r
+ rowprops.append(row.centreColLabels);\r
+ rowprops.append(newline);\r
}\r
}\r
\r
- text.append("\n");\r
+ text.append(newline);\r
\r
text.append(colours.toString());\r
text.append(graphLine.toString());\r
Enumeration en = graphGroup.elements();\r
while (en.hasMoreElements())\r
{\r
- text.append(en.nextElement() + "\n");\r
+ text.append(en.nextElement());\r
+ text.append(newline);\r
}\r
}\r
text.append(rowprops.toString());\r
\r
if (properties != null)\r
{\r
- text.append("\n\nALIGNMENT");\r
+ text.append(newline);\r
+ text.append(newline);\r
+ text.append("ALIGNMENT");\r
Enumeration en = properties.keys();\r
while (en.hasMoreElements())\r
{\r
String key = en.nextElement().toString();\r
- text.append("\t" + key + "=" + properties.get(key));\r
+ text.append("\t");\r
+ text.append(key);\r
+ text.append("=");\r
+ text.append(properties.get(key));\r
}\r
// TODO: output alignment visualization settings here if required\r
\r
else\r
{\r
seqrep = sg.getSeqrep();\r
- text.append("SEQUENCE_REF\t" + seqrep.getName() + "\n");\r
- text.append("SEQUENCE_GROUP\t" + sg.getName() + "\t"\r
- + (seqrep.findPosition(sg.getStartRes())) + "\t"\r
- + (seqrep.findPosition(sg.getEndRes())) + "\t" + "-1\t");\r
+ text.append("SEQUENCE_REF\t");\r
+ text.append(seqrep.getName());\r
+ text.append(newline);\r
+ text.append("SEQUENCE_GROUP\t");\r
+ text.append(sg.getName());\r
+ text.append("\t");\r
+ text.append((seqrep.findPosition(sg.getStartRes())));\r
+ text.append("\t");\r
+ text.append((seqrep.findPosition(sg.getEndRes())));\r
+ text.append("\t");\r
+ text.append("-1\t");\r
}\r
for (int s = 0; s < sg.getSize(); s++)\r
{\r
- text.append(sg.getSequenceAt(s).getName() + "\t");\r
+ text.append(sg.getSequenceAt(s).getName());\r
+ text.append("\t");\r
}\r
-\r
- text.append("\nPROPERTIES\t" + sg.getName() + "\t");\r
+ text.append(newline);\r
+ text.append("PROPERTIES\t");\r
+ text.append(sg.getName());\r
+ text.append("\t");\r
\r
if (sg.getDescription() != null)\r
{\r
- text.append("description=" + sg.getDescription() + "\t");\r
+ text.append("description=");\r
+ text.append(sg.getDescription());\r
+ text.append("\t");\r
}\r
if (sg.cs != null)\r
{\r
- text.append("colour=" + ColourSchemeProperty.getColourName(sg.cs)\r
- + "\t");\r
+ text.append("colour=");\r
+ text.append(ColourSchemeProperty.getColourName(sg.cs));\r
+ text.append("\t");\r
if (sg.cs.getThreshold() != 0)\r
{\r
- text.append("pidThreshold=" + sg.cs.getThreshold());\r
+ text.append("pidThreshold=");\r
+ text.append(sg.cs.getThreshold());\r
}\r
if (sg.cs.conservationApplied())\r
{\r
- text.append("consThreshold=" + sg.cs.getConservationInc() + "\t");\r
+ text.append("consThreshold=");\r
+ text.append(sg.cs.getConservationInc());\r
+ text.append("\t");\r
}\r
}\r
- text.append("outlineColour="\r
- + jalview.util.Format.getHexString(sg.getOutlineColour())\r
- + "\t");\r
-\r
- text.append("displayBoxes=" + sg.getDisplayBoxes() + "\t");\r
- text.append("displayText=" + sg.getDisplayText() + "\t");\r
- text.append("colourText=" + sg.getColourText() + "\t");\r
- text.append("showUnconserved=" + sg.getShowNonconserved() + "\t");\r
+ text.append("outlineColour=");\r
+ text.append(jalview.util.Format.getHexString(sg.getOutlineColour()));\r
+ text.append("\t");\r
+\r
+ text.append("displayBoxes=");\r
+ text.append(sg.getDisplayBoxes());\r
+ text.append("\t");\r
+ text.append("displayText=");\r
+ text.append(sg.getDisplayText());\r
+ text.append("\t");\r
+ text.append("colourText=");\r
+ text.append(sg.getColourText());\r
+ text.append("\t");\r
+ text.append("showUnconserved=");\r
+ text.append(sg.getShowNonconserved());\r
+ text.append("\t");\r
if (sg.textColour != java.awt.Color.black)\r
{\r
- text.append("textCol1="\r
- + jalview.util.Format.getHexString(sg.textColour) + "\t");\r
+ text.append("textCol1=");\r
+ text.append(jalview.util.Format.getHexString(sg.textColour));\r
+ text.append("\t");\r
}\r
if (sg.textColour2 != java.awt.Color.white)\r
{\r
- text.append("textCol2="\r
- + jalview.util.Format.getHexString(sg.textColour2) + "\t");\r
+ text.append("textCol2=");\r
+ text.append(jalview.util.Format.getHexString(sg.textColour2));\r
+ text.append("\t");\r
}\r
if (sg.thresholdTextColour != 0)\r
{\r
- text.append("textColThreshold=" + sg.thresholdTextColour + "\t");\r
+ text.append("textColThreshold=");\r
+ text.append(sg.thresholdTextColour);\r
+ text.append("\t");\r
}\r
if (sg.idColour != null)\r
{\r
- text.append("idColour="\r
- + jalview.util.Format.getHexString(sg.idColour) + "\t");\r
+ text.append("idColour=");\r
+ text.append(jalview.util.Format.getHexString(sg.idColour));\r
+ text.append("\t");\r
}\r
if (sg.isHidereps())\r
{\r
if (seqrep != null)\r
{\r
// terminate the last line and clear the sequence ref for the group\r
- text.append("\nSEQUENCE_REF");\r
+ text.append(newline);\r
+ text.append("SEQUENCE_REF");\r
}\r
- text.append("\n\n");\r
+ text.append(newline);\r
+ text.append(newline);\r
\r
}\r
}\r
public boolean parseAnnotationFrom(AlignmentI al, BufferedReader in)\r
throws Exception\r
{\r
- boolean modified=false;\r
+ boolean modified = false;\r
String groupRef = null;\r
Hashtable groupRefRows = new Hashtable();\r
\r
if (aa[aai].autoCalculated)\r
{\r
// make a note of the name and description\r
- autoAnnots\r
- .put(autoAnnotsKey(aa[aai], aa[aai].sequenceRef, (aa[aai].groupRef==null ? null : aa[aai].groupRef.getName())\r
- ),\r
- new Integer(1));\r
+ autoAnnots.put(\r
+ autoAnnotsKey(aa[aai], aa[aai].sequenceRef,\r
+ (aa[aai].groupRef == null ? null\r
+ : aa[aai].groupRef.getName())),\r
+ new Integer(1));\r
}\r
}\r
}\r
{\r
// TODO: use graduated colour def'n here too\r
colourAnnotations(al, st.nextToken(), st.nextToken());\r
- modified=true;continue;\r
+ modified = true;\r
+ continue;\r
}\r
\r
else if (token.equalsIgnoreCase("COMBINE"))\r
{\r
combineAnnotations(al, st);\r
- modified=true;continue;\r
+ modified = true;\r
+ continue;\r
}\r
else if (token.equalsIgnoreCase("ROWPROPERTIES"))\r
{\r
addRowProperties(al, st);\r
- modified=true;continue;\r
+ modified = true;\r
+ continue;\r
}\r
else if (token.equalsIgnoreCase("GRAPHLINE"))\r
{\r
addLine(al, st);\r
- modified=true;\r
+ modified = true;\r
continue;\r
}\r
\r
else if (token.equalsIgnoreCase("PROPERTIES"))\r
{\r
addProperties(al, st);\r
- modified=true; continue;\r
+ modified = true;\r
+ continue;\r
}\r
\r
else if (token.equalsIgnoreCase("BELOW_ALIGNMENT"))\r
{\r
setBelowAlignment(al, st);\r
- modified=true;continue;\r
+ modified = true;\r
+ continue;\r
}\r
else if (token.equalsIgnoreCase("ALIGNMENT"))\r
{\r
addAlignmentDetails(al, st);\r
- modified=true;continue;\r
+ modified = true;\r
+ continue;\r
}\r
\r
// Parse out the annotation row\r
\r
annotation.score = score;\r
if (!overrideAutoAnnot\r
- && autoAnnots\r
- .containsKey(autoAnnotsKey(annotation, refSeq, groupRef)))\r
+ && autoAnnots.containsKey(autoAnnotsKey(annotation, refSeq,\r
+ groupRef)))\r
{\r
// skip - we've already got an automatic annotation of this type.\r
continue;\r
}\r
}\r
// and set modification flag\r
- modified=true;\r
+ modified = true;\r
}\r
// Finally, resolve the groupRefs\r
Enumeration en = groupRefRows.keys();\r
return modified;\r
}\r
\r
- private Object autoAnnotsKey(AlignmentAnnotation annotation, SequenceI refSeq, String groupRef)\r
+ private Object autoAnnotsKey(AlignmentAnnotation annotation,\r
+ SequenceI refSeq, String groupRef)\r
{\r
- return annotation.graph\r
- + "\t"\r
- + annotation.label\r
- + "\t"\r
- + annotation.description\r
- + "\t"\r
- + (refSeq != null ? refSeq\r
- .getDisplayId(true) : "");\r
+ return annotation.graph + "\t" + annotation.label + "\t"\r
+ + annotation.description + "\t"\r
+ + (refSeq != null ? refSeq.getDisplayId(true) : "");\r
}\r
\r
Annotation parseAnnotation(String string, int graphStyle)\r
else\r
{\r
sp.append(atos.substring(p));\r
- sp.append("\n");\r
+ sp.append(newline);\r
}\r
p = cp + 1;\r
} while (p > 0);\r