/**
* Creates the annotation display.
*/
private void displayAnnotations() {
// for speed, detach document from text pane before updating
StyledDocument doc = (StyledDocument) textPane.getDocument();
Document blank = new DefaultStyledDocument();
textPane.setDocument(blank);
// make sure annotationCheckboxPanel is showing
if (legendScrollPane.getViewport().getView() != annotationCheckboxPanel) {
legendScrollPane.setViewportView(annotationCheckboxPanel);
}
// add text from CAS
try {
doc.remove(0, doc.getLength());
doc.insertString(0, mCAS.getDocumentText(), new SimpleAttributeSet());
} catch (BadLocationException e) {
throw new RuntimeException(e);
}
// Iterate over annotations
FSIterator iter = mCAS.getAnnotationIndex().iterator();
Hashtable checkBoxes = new Hashtable();
HashSet checkBoxesDone = new HashSet();
while (iter.isValid()) {
AnnotationFS fs = (AnnotationFS) iter.get();
iter.moveToNext();
Type type = fs.getType();
// have we seen this type before?
JCheckBox checkbox = (JCheckBox) mTypeToCheckboxMap.get(type);
if (checkbox == null) {
// check that type should be displayed
if ((mDisplayedTypeNames == null || typeNamesContains(mDisplayedTypeNames, type.getName()))
&& !typeNamesContains(mHiddenTypeNames, type.getName())) {
// if mTypeNameToColorMap exists, get color from there
Color c = (Color) mTypeNameToColorMap.get(type.getName());
if (c == null) // assign next available color
{
c = COLORS[mTypeNameToColorMap.size() % COLORS.length];
mTypeNameToColorMap.put(type.getName(), c);
}
// This next section required until priorities work properly
// HashSet noCheckSet = new HashSet();
String noCheckArray[] = {
// "org.apache.jresporator.PROPER",
// "DOCSTRUCT_ANNOT_TYPE",
// "VOCAB_ANNOT_TYPE"
};
for (int i = 0; i < noCheckArray.length; i++) {
noCheckSet.add(noCheckArray[i]);
}
// end of section
// should type be initially selected?
boolean selected = ((mInitiallySelectedTypeNames == null &&
// document annotation is not initially selected in default case
!CAS.TYPE_NAME_DOCUMENT_ANNOTATION.equals(type.getName()) && !noCheckSet
.contains(type.getName()) // priorities JMP
) || (mInitiallySelectedTypeNames != null && typeNamesContains(
mInitiallySelectedTypeNames, type.getName())));
// add checkbox
checkbox = new JCheckBox(type.getShortName(), selected);
checkbox.setToolTipText(type.getName());
checkbox.addActionListener(this);
checkbox.setBackground(c);
// annotationCheckboxPanel.add(checkbox); do it later JMP
checkBoxes.put(type.getName(), checkbox);
checkBoxesDone.add(checkbox);
// add to (Type, Checkbox) map
mTypeToCheckboxMap.put(type, checkbox);
} else {
// this type is not hidden, skip it
continue;
}
}
// if checkbox is checked, assign color to text
if (checkbox.isSelected()) {
int begin = fs.getBegin();
int end = fs.getEnd();
// Be careful of 0-length annotations and annotations that span the
// entire document. In either of these cases, if we try to set
// background color, it will set the input text style, which is not
// what we want.
if (begin == 0 && end == mCAS.getDocumentText().length()) {
end--;
}
if (begin < end) {
MutableAttributeSet attrs = new SimpleAttributeSet();
StyleConstants.setBackground(attrs, checkbox.getBackground());
doc.setCharacterAttributes(begin, end - begin, attrs, false);
}
}
}
// now populate panel with checkboxes in order specified in user file. JMP