import java.util.ArrayList;
import java.util.BitSet;
import java.util.Enumeration;
+import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import jalview.analysis.Conservation;
import jalview.api.AlignViewportI;
+import jalview.datamodel.Alignment;
import jalview.datamodel.AlignmentAnnotation;
import jalview.datamodel.AlignmentI;
import jalview.datamodel.Annotation;
private String lastread = "";
/**
+ * default calcId string for new annotation
+ */
+ private String defaultCalcId = null;
+
+ /**
* Constructor
*/
public AnnotationFile()
return readAnnotationFile(al, null, file, sourceType);
}
+ /**
+ * read an annotation file onto the alignment, but apply the given calcId
+ * @param aln
+ * @param calcId
+ * @param file
+ * @param url
+ * @return
+ */
+ public boolean readAnnotationFileWithCalcId(Alignment aln, String calcId, String file,
+ DataSourceType url)
+ {
+ defaultCalcId=calcId;
+ return readAnnotationFile(aln, null, file, url);
+ }
+
public boolean readAnnotationFile(AlignmentI al, HiddenColumns hidden,
Object file, DataSourceType sourceType)
{
annotation = new AlignmentAnnotation(label, description,
(index == 0) ? null : annotations, 0, 0, graphStyle);
-
+ annotation.setCalcId(defaultCalcId);
annotation.score = score;
if (!overrideAutoAnnot && autoAnnots
.containsKey(autoAnnotsKey(annotation, refSeq, groupRef)))
}
String name = st.nextToken();
- SequenceGroup sg = null;
- for (SequenceGroup _sg : al.getGroups())
+
+ Map<String, String> properties = new HashMap<>();
+ while (st.hasMoreTokens())
{
- if ((sg = _sg).getName().equals(name))
- {
- break;
- }
- else
+ String keyValue = st.nextToken();
+ String key = keyValue.substring(0, keyValue.indexOf("="));
+ String value = keyValue.substring(keyValue.indexOf("=") + 1);
+ properties.put(key, value);
+ }
+
+ for (SequenceGroup sg : al.getGroups())
+ {
+ if (sg.getName().equals(name))
{
- sg = null;
+ addProperties(sg, properties, al);
}
}
+ }
- if (sg != null)
+ /**
+ * Helper method that applies any specified properties to a SequenceGroup
+ *
+ * @param sg
+ * @param properties
+ * @param al
+ */
+ private void addProperties(SequenceGroup sg,
+ Map<String, String> properties, AlignmentI al)
+ {
+ ColourSchemeI def = sg.getColourScheme();
+ for (String key : properties.keySet())
{
- String keyValue, key, value;
- ColourSchemeI def = sg.getColourScheme();
- while (st.hasMoreTokens())
+ String value = properties.get(key);
+ if (key.equalsIgnoreCase("description"))
{
- keyValue = st.nextToken();
- key = keyValue.substring(0, keyValue.indexOf("="));
- value = keyValue.substring(keyValue.indexOf("=") + 1);
-
- if (key.equalsIgnoreCase("description"))
- {
- sg.setDescription(value);
- }
- else if (key.equalsIgnoreCase("colour"))
- {
- // TODO need to notify colourscheme of view reference once it is
- // available
- sg.cs.setColourScheme(
- ColourSchemeProperty.getColourScheme(null, al, value));
- }
- else if (key.equalsIgnoreCase("pidThreshold"))
- {
- sg.cs.setThreshold(Integer.parseInt(value), true);
+ sg.setDescription(value);
+ }
+ else if (key.equalsIgnoreCase("colour"))
+ {
+ // TODO need to notify colourscheme of view reference once it is
+ // available
+ sg.cs.setColourScheme(
+ ColourSchemeProperty.getColourScheme(null, al, value));
+ }
+ else if (key.equalsIgnoreCase("pidThreshold"))
+ {
+ sg.cs.setThreshold(Integer.parseInt(value), true);
- }
- else if (key.equalsIgnoreCase("consThreshold"))
- {
- sg.cs.setConservationInc(Integer.parseInt(value));
- Conservation c = new Conservation("Group", sg.getSequences(null),
- sg.getStartRes(), sg.getEndRes() + 1);
+ }
+ else if (key.equalsIgnoreCase("consThreshold"))
+ {
+ sg.cs.setConservationInc(Integer.parseInt(value));
+ Conservation c = new Conservation("Group", sg.getSequences(null),
+ sg.getStartRes(), sg.getEndRes() + 1);
- c.calculate();
- c.verdict(false, 25); // TODO: refer to conservation percent threshold
+ c.calculate();
+ c.verdict(false, 25); // TODO: refer to conservation percent threshold
- sg.cs.setConservation(c);
+ sg.cs.setConservation(c);
- }
- else if (key.equalsIgnoreCase("outlineColour"))
- {
- sg.setOutlineColour(ColorUtils.parseColourString(value));
- }
- else if (key.equalsIgnoreCase("displayBoxes"))
- {
- sg.setDisplayBoxes(Boolean.valueOf(value).booleanValue());
- }
- else if (key.equalsIgnoreCase("showUnconserved"))
- {
- sg.setShowNonconserved(Boolean.valueOf(value).booleanValue());
- }
- else if (key.equalsIgnoreCase("displayText"))
- {
- sg.setDisplayText(Boolean.valueOf(value).booleanValue());
- }
- else if (key.equalsIgnoreCase("colourText"))
- {
- sg.setColourText(Boolean.valueOf(value).booleanValue());
- }
- else if (key.equalsIgnoreCase("textCol1"))
- {
- sg.textColour = ColorUtils.parseColourString(value);
- }
- else if (key.equalsIgnoreCase("textCol2"))
- {
- sg.textColour2 = ColorUtils.parseColourString(value);
- }
- else if (key.equalsIgnoreCase("textColThreshold"))
- {
- sg.thresholdTextColour = Integer.parseInt(value);
- }
- else if (key.equalsIgnoreCase("idColour"))
- {
- Color idColour = ColorUtils.parseColourString(value);
- sg.setIdColour(idColour == null ? Color.black : idColour);
- }
- else if (key.equalsIgnoreCase("hide"))
- {
- // see bug https://mantis.lifesci.dundee.ac.uk/view.php?id=25847
- sg.setHidereps(true);
- }
- else if (key.equalsIgnoreCase("hidecols"))
- {
- // see bug https://mantis.lifesci.dundee.ac.uk/view.php?id=25847
- sg.setHideCols(true);
- }
- sg.recalcConservation();
}
- if (sg.getColourScheme() == null)
+ else if (key.equalsIgnoreCase("outlineColour"))
{
- sg.setColourScheme(def);
+ sg.setOutlineColour(ColorUtils.parseColourString(value));
}
+ else if (key.equalsIgnoreCase("displayBoxes"))
+ {
+ sg.setDisplayBoxes(Boolean.valueOf(value).booleanValue());
+ }
+ else if (key.equalsIgnoreCase("showUnconserved"))
+ {
+ sg.setShowNonconserved(Boolean.valueOf(value).booleanValue());
+ }
+ else if (key.equalsIgnoreCase("displayText"))
+ {
+ sg.setDisplayText(Boolean.valueOf(value).booleanValue());
+ }
+ else if (key.equalsIgnoreCase("colourText"))
+ {
+ sg.setColourText(Boolean.valueOf(value).booleanValue());
+ }
+ else if (key.equalsIgnoreCase("textCol1"))
+ {
+ sg.textColour = ColorUtils.parseColourString(value);
+ }
+ else if (key.equalsIgnoreCase("textCol2"))
+ {
+ sg.textColour2 = ColorUtils.parseColourString(value);
+ }
+ else if (key.equalsIgnoreCase("textColThreshold"))
+ {
+ sg.thresholdTextColour = Integer.parseInt(value);
+ }
+ else if (key.equalsIgnoreCase("idColour"))
+ {
+ Color idColour = ColorUtils.parseColourString(value);
+ sg.setIdColour(idColour == null ? Color.black : idColour);
+ }
+ else if (key.equalsIgnoreCase("hide"))
+ {
+ // see bug https://mantis.lifesci.dundee.ac.uk/view.php?id=25847
+ sg.setHidereps(true);
+ }
+ else if (key.equalsIgnoreCase("hidecols"))
+ {
+ // see bug https://mantis.lifesci.dundee.ac.uk/view.php?id=25847
+ sg.setHideCols(true);
+ }
+ sg.recalcConservation();
+ }
+
+ if (sg.getColourScheme() == null)
+ {
+ sg.setColourScheme(def);
}
}