- /*
- * Build a lookup, by calcId (annotation source), of all annotation types in
- * each graph group.
- */
- Map<String, Map<Integer, List<String>>> groupLabels = new HashMap<String, Map<Integer, List<String>>>();
-
- // trackers for which calcId!label combinations we have dealt with
- List<String> addedToShown = new ArrayList<String>();
- List<String> addedToHidden = new ArrayList<String>();
-
- for (AlignmentAnnotation aa : annotations)
- {
-
- if (sequenceGroup == null
- || (aa.sequenceRef != null && sequenceGroup.getSequences()
- .contains(aa.sequenceRef)))
- {
- String calcId = aa.getCalcId();
-
- /*
- * Build a 'composite label' for types in line graph groups.
- */
- final List<String> labelAsList = new ArrayList<String>();
- final String displayLabel = aa.label;
- labelAsList.add(displayLabel);
- if (aa.graph == AlignmentAnnotation.LINE_GRAPH
- && aa.graphGroup > -1)
- {
- if (!groupLabels.containsKey(calcId))
- {
- groupLabels.put(calcId, new HashMap<Integer, List<String>>());
- }
- Map<Integer, List<String>> groupLabelsForCalcId = groupLabels
- .get(calcId);
- if (groupLabelsForCalcId.containsKey(aa.graphGroup))
- {
- if (!groupLabelsForCalcId.get(aa.graphGroup).contains(
- displayLabel))
- {
- groupLabelsForCalcId.get(aa.graphGroup).add(displayLabel);
- }
- }
- else
- {
- groupLabelsForCalcId.put(aa.graphGroup, labelAsList);
- }
- }
- else
- /*
- * 'Simple case' - not a grouped annotation type - list of one label
- * only
- */
- {
- String rememberAs = calcId + "!" + displayLabel;
- if (aa.visible && !addedToShown.contains(rememberAs))
- {
- if (!shownTypes.containsKey(calcId))
- {
- shownTypes.put(calcId, new ArrayList<List<String>>());
- }
- shownTypes.get(calcId).add(labelAsList);
- addedToShown.add(rememberAs);
- }
- else
- {
- if (!aa.visible && !addedToHidden.contains(rememberAs))
- {
- if (!hiddenTypes.containsKey(calcId))
- {
- hiddenTypes.put(calcId, new ArrayList<List<String>>());
- }
- hiddenTypes.get(calcId).add(labelAsList);
- addedToHidden.add(rememberAs);
- }
- }
- }
- }
- }
- /*
- * finally add the 'composite group labels' to the appropriate lists,
- * depending on whether the group is identified as visible or hidden
- */
- for (String calcId : groupLabels.keySet())