Class CasAnnotationViewer

All Implemented Interfaces:
ImageObserver, MenuContainer, Serializable, Accessible

public class CasAnnotationViewer extends JPanel
A Swing component that displays annotations in a text pane with highlighting. There is also a tree view for display details of annotations on which the user clicks. This class extends JPanel and so can be reused within any Swing application.

To launch the viewer, call the setCAS(CAS) method with the CAS to be viewed.

The viewer is configurable via the following methods:

  • setConsistentColors(boolean) - if set to true (default), the color assigned to any annotation type will be the same across all documents. If set to false, colors may vary across documents.
  • setDisplayedTypes(String[]) - specifies a set of types that will be highlighted in the viewer's text pane.
  • setHiddenTypes(String[]) - specifies a set of types that will NOT be highlighted in the viewer's text pane.
  • setHiddenFeatures(String[]) - specifies a set of features that will never shown in the viewer's annotation details tree.
  • setHighFrequencyTypes(String[]) - this can be used to specify a set of types that occur frequently. These types will the be assigned the most distinguishable colors.
  • setInitiallySelectedTypes(String[]) - this can be used to specify a set of types that will initially be selected (i.e. have their checkboxes checked) in the viewer. The default is for all types to be initially selected.
  • setRightToLeftTextOrientation(boolean) - switches the text pane from left-to-right (default) to right-to-left mode. This is needed to support languages such as Arabic and Hebrew, which are read from right to left.
See Also:
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      The Constant serialVersionUID.
      See Also:
    • MODE_ANNOTATIONS

      private static final short MODE_ANNOTATIONS
      The Constant MODE_ANNOTATIONS.
      See Also:
    • MODE_ENTITIES

      private static final short MODE_ENTITIES
      The Constant MODE_ENTITIES.
      See Also:
    • MODE_FEATURES

      private static final short MODE_FEATURES
      The Constant MODE_FEATURES.
      See Also:
    • DEFAULT_HIDDEN_FEATURES

      private static String[] DEFAULT_HIDDEN_FEATURES
      The default hidden features.
    • BRIGHT

      private static final float BRIGHT
      The Constant BRIGHT.
      See Also:
    • COLORS

      private static final Color[] COLORS
      The Constant COLORS.
    • cas

      private CAS cas
      The cas.
    • typeSystem

      private TypeSystem typeSystem
      The type system.
    • stringType

      private Type stringType
      The string type.
    • fsArrayType

      private Type fsArrayType
      The fs array type.
    • useConsistentColors

      private boolean useConsistentColors
      The use consistent colors.
    • highFrequencyTypes

      private List<String> highFrequencyTypes
      The high frequency types.
    • boldFaceKeyWords

      private String[] boldFaceKeyWords
      The bold face key words.
    • boldFaceSpans

      private int[] boldFaceSpans
      The bold face spans.
    • hiddenFeatureNames

      private Set<String> hiddenFeatureNames
      The hidden feature names.
    • hiddenTypeNames

      private Set<String> hiddenTypeNames
      The hidden type names.
    • displayedTypeNames

      private Set<String> displayedTypeNames
      The displayed type names.
    • initiallySelectedTypeNames

      private Set<String> initiallySelectedTypeNames
      The initially selected type names.
    • hideUnselectedCheckBoxes

      private boolean hideUnselectedCheckBoxes
      The hide unselected check boxes.
    • userTypes

      private List<String> userTypes
      The user types.
    • typesNotChecked

      private Set<String> typesNotChecked
      The types not checked.
    • typeColorMap

      private Map<String,Color> typeColorMap
      The type color map.
    • featureColorMap

      private Map<String,Color> featureColorMap
      The feature color map.
    • entityResolver

      private EntityResolver entityResolver
      The entity resolver.
    • viewMode

      private short viewMode
      The view mode.
    • typeToCheckBoxMap

      private Map<Type,JCheckBox> typeToCheckBoxMap
      The type to check box map.
    • entityToCheckBoxMap

      private Map<EntityResolver.Entity,JCheckBox> entityToCheckBoxMap
      The entity to check box map.
    • horizontalSplitPane

      private JSplitPane horizontalSplitPane
      The horizontal split pane.
    • verticalSplitPane

      private JSplitPane verticalSplitPane
      The vertical split pane.
    • textPane

      private JTextPane textPane
      The text pane.
    • textScrollPane

      private JScrollPane textScrollPane
      The text scroll pane.
    • typeRadioButtonMap

      private Map<Type,JRadioButton> typeRadioButtonMap
      The type radio button map.
    • featureRadioButtonMap

      private Map<String,JRadioButton> featureRadioButtonMap
      The feature radio button map.
    • featureValueCheckBoxMap

      private Map<String,JCheckBox> featureValueCheckBoxMap
      The feature value check box map.
    • featureValueColorMap

      private Map<String,Color> featureValueColorMap
      The feature value color map.
    • showHideUnselectedButton

      private JButton showHideUnselectedButton
      The show hide unselected button.
    • selectedAnnotationTree

      private JTree selectedAnnotationTree
      The selected annotation tree.
    • selectedAnnotationTreeModel

      private DefaultTreeModel selectedAnnotationTreeModel
      The selected annotation tree model.
    • annotationModeButton

      private JRadioButton annotationModeButton
      The annotation mode button.
    • entityModeButton

      private JRadioButton entityModeButton
      The entity mode button.
    • featureModeButton

      private JRadioButton featureModeButton
      The feature mode button.
    • sofaSelectionPanel

      private JPanel sofaSelectionPanel
      The sofa selection panel.
    • sofaSelectionComboBox

      private JComboBox sofaSelectionComboBox
      The sofa selection combo box.
    • disableSofaSelectionComboBoxStateChangeAction

      private boolean disableSofaSelectionComboBoxStateChangeAction
      The disable sofa selection combo box state change action.
    • tabbedChoicePane

      private JTabbedPane tabbedChoicePane
      The tabbed choice pane.
    • typeCheckBoxScrollPane

      private JScrollPane typeCheckBoxScrollPane
      The type check box scroll pane.
    • typeCheckBoxVerticalScrollPanel

      private CasAnnotationViewer.VerticallyScrollablePanel typeCheckBoxVerticalScrollPanel
      The type check box vertical scroll panel.
    • entityCheckBoxScrollPane

      private JScrollPane entityCheckBoxScrollPane
      The entity check box scroll pane.
    • entityCheckBoxVerticalScrollPanel

      private CasAnnotationViewer.VerticallyScrollablePanel entityCheckBoxVerticalScrollPanel
      The entity check box vertical scroll panel.
    • typeRadioButtonScrollPane

      private JScrollPane typeRadioButtonScrollPane
      The type radio button scroll pane.
    • typeRadioButtonVerticalScrollPanel

      private CasAnnotationViewer.VerticallyScrollablePanel typeRadioButtonVerticalScrollPanel
      The type radio button vertical scroll panel.
    • featureRadioButtonScrollPane

      private JScrollPane featureRadioButtonScrollPane
      The feature radio button scroll pane.
    • featureRadioButtonVerticalScrollPanel

      private CasAnnotationViewer.VerticallyScrollablePanel featureRadioButtonVerticalScrollPanel
      The feature radio button vertical scroll panel.
    • featureValueCheckBoxScrollPane

      private JScrollPane featureValueCheckBoxScrollPane
      The feature value check box scroll pane.
    • featureValueCheckBoxVerticalScrollPanel

      private CasAnnotationViewer.VerticallyScrollablePanel featureValueCheckBoxVerticalScrollPanel
      The feature value check box vertical scroll panel.
  • Constructor Details

    • CasAnnotationViewer

      public CasAnnotationViewer()
      Creates a CAS Annotation Viewer.
    • CasAnnotationViewer

      @Deprecated public CasAnnotationViewer(boolean aEntityViewEnabled)
      Deprecated.
      use the zero-argument constructor
      Instantiates a new cas annotation viewer.
      Parameters:
      aEntityViewEnabled - the a entity view enabled
  • Method Details

    • createControlPanel

      private JPanel createControlPanel()
      Creates the control panel.
      Returns:
      the j panel
    • createSelectButtonPanel

      private JPanel createSelectButtonPanel()
      Creates the select button panel.
      Returns:
      the j panel
    • createViewPanel

      private JPanel createViewPanel()
      Creates the view panel.
      Returns:
      the j panel
    • createViewModePanel

      private JPanel createViewModePanel()
      Creates the view mode panel.
      Returns:
      the j panel
    • createFeatureModeButton

      private void createFeatureModeButton()
      Creates the feature mode button.
    • createEntityModeButton

      private void createEntityModeButton()
      Creates the entity mode button.
    • createAnnotationModeButton

      private void createAnnotationModeButton()
      Creates the annotation mode button.
    • createSofaSelectionPanel

      private void createSofaSelectionPanel()
      Creates the sofa selection panel.
    • createSofaSelectionComboBox

      private void createSofaSelectionComboBox()
      Creates the sofa selection combo box.
    • createShowHideUnselectedButton

      private void createShowHideUnselectedButton()
      Creates the show hide unselected button.
    • createDeselectAllButton

      private JButton createDeselectAllButton()
      Creates the deselect all button.
      Returns:
      the j button
    • createSelectAllButton

      private JButton createSelectAllButton()
      Creates the select all button.
      Returns:
      the j button
    • resetTabbedPane

      private void resetTabbedPane()
      Re-populate the tabbed pane's tabs depending on the current view mode.
    • createHorizontalSplitPane

      private void createHorizontalSplitPane()
      Creates the horizontal split pane.
    • createTreePanel

      private JPanel createTreePanel()
      Creates the tree panel.
      Returns:
      the j panel
    • createSelectedAnnotationTree

      private void createSelectedAnnotationTree()
      Creates the selected annotation tree.
    • createVerticalSplitPane

      private void createVerticalSplitPane()
      Creates the vertical split pane.
    • createTabbedChoicePane

      private JTabbedPane createTabbedChoicePane()
      Creates the tabbed choice pane.
      Returns:
      the j tabbed pane
    • createFeatureValueCheckBoxPane

      private void createFeatureValueCheckBoxPane()
      Creates the feature value check box pane.
    • createFeatureRadioButtonPane

      private void createFeatureRadioButtonPane()
      Creates the feature radio button pane.
    • createTypeRadioButtonPane

      private void createTypeRadioButtonPane()
      Creates the type radio button pane.
    • createEntityCheckBoxPane

      private void createEntityCheckBoxPane()
      Creates the entity check box pane.
    • createTypeCheckBoxPane

      private void createTypeCheckBoxPane()
      Creates the type check box pane.
    • createTextScrollPane

      private void createTextScrollPane()
      Creates the text scroll pane.
    • getUserTypes

      public List<String> getUserTypes()
      Gets the user types.
      Returns:
      Returns the userTypes.
    • setUserTypes

      public void setUserTypes(List<String> userTypes)
      Sets the user types.
      Parameters:
      userTypes - The userTypes to set.
    • setHighFrequencyTypes

      public void setHighFrequencyTypes(String[] aTypeNames)
      Set the list of types that occur most frequently. This method assigns the most distinguishable colors to these types.
      Parameters:
      aTypeNames - names of types that are occur frequently. Ideally these should be ordered by frequency, with the most frequent being first.
    • setDisplayedTypes

      public void setDisplayedTypes(String[] aDisplayedTypeNames)
      Set the list of types that will be highlighted in the viewer. Types not in this list will not appear in the legend and will never be highlighted. If this method is not called, the default is to show all types in the CAS (except those specifically hidden by a call to setHiddenTypes(String[]).
      Parameters:
      aDisplayedTypeNames - names of types that are to be highlighted. Null indicates that all types in the CAS should be highlighted.
    • setHiddenTypes

      public void setHiddenTypes(String[] aTypeNames)
      Set the list of types that will NOT be highlighted in the viewer.
      Parameters:
      aTypeNames - names of types that are never to be highlighted.
    • setInitiallySelectedTypes

      public void setInitiallySelectedTypes(String[] aTypeNames)
      Configures the initially selected types in the viewer. If not called, all types will be initially selected.
      Parameters:
      aTypeNames - array of fully-qualified names of types to be initially selected
    • setHiddenFeatures

      public void setHiddenFeatures(String[] aFeatureNames)
      Configures the viewer to hide certain features in the annotation deatail pane.
      Parameters:
      aFeatureNames - array of (short) feature names to be hidden
    • setEntityResolver

      public void setEntityResolver(EntityResolver aEntityResolver)
      Sets the EntityResolver to use when the viewer is in entity mode.
      Parameters:
      aEntityResolver - user-supplied class that can determine which annotations correspond to the same entity.
    • setConsistentColors

      public void setConsistentColors(boolean aConsistent)
      Sets whether colors will be consistent in all documents viewed using this viewer. If set to true, assignments of color to annotation type will persist across documents; if false, colors will be reassigned in each new document. (Note that if high frequency types are set via setHighFrequencyTypes(String[]), the colors for those types will always be consistent, regardless of the value passed to this method.
      Parameters:
      aConsistent - true (the default) causes colors to be consistent across documents, false allows them to vary
    • setRightToLeftTextOrientation

      public void setRightToLeftTextOrientation(boolean aRightToLeft)
      Sets the text orientation. The default is left-to-right, but needs to be set to right-to-left to properly display some languages, most notably Arabic and Hebrew.
      Parameters:
      aRightToLeft - true to put the viewer in right-to-left mode, false for left-to-right (the default).
    • setHideUnselectedCheckboxes

      public void setHideUnselectedCheckboxes(boolean aHideUnselected)
      Sets whether unselected (unchecked) checkboxes will be hidden entirely from the legend. This mode makes for a cleaner legend at the expense of making it more difficult to toggle which types are selected. There's also a button in the GUI that lets the user change this setting.
      Parameters:
      aHideUnselected - the new hide unselected checkboxes
    • setCAS

      public void setCAS(CAS aCAS)
      Sets the CAS to be viewed. This must be called before display().
      Parameters:
      aCAS - the CSA to be viewed
    • initializeSofaSelectionPanel

      private void initializeSofaSelectionPanel()
      Initialize sofa selection panel.
    • reset

      private void reset()
      Reset.
    • resetSelectedAnnotationTree

      private void resetSelectedAnnotationTree()
      Reset selected annotation tree.
    • resetEntityCheckBoxPanel

      private void resetEntityCheckBoxPanel()
      Reset entity check box panel.
    • resetTypeCheckBoxPanel

      private void resetTypeCheckBoxPanel()
      Reset type check box panel.
    • resetFeatureValuePanel

      private void resetFeatureValuePanel()
      Reset feature value panel.
    • resetFeaturePanel

      private void resetFeaturePanel()
      Reset feature panel.
    • resetTypeRadioButtonPanel

      private void resetTypeRadioButtonPanel()
      Reset type radio button panel.
    • resetTypeColorMap

      private void resetTypeColorMap()
      Reset type color map.
    • applyBoldfaceToKeywords

      public void applyBoldfaceToKeywords(String[] aWords)
      Causes the specified words to appear in boldface wherever they occur in the document. This is case-insensitive. Call this method after setCAS(CAS). It wil apply only to the current document, and will be reset on the next call to setCAS(CAS).
      Parameters:
      aWords - array of words to highlight in boldface.
    • applyBoldfaceToSpans

      public void applyBoldfaceToSpans(int[] aSpans)
      Causes the specified spans to appear in boldface. This is case-insensitive. Call this method after setCAS(CAS). It wil apply only to the current document, and will be reset on the next call to setCAS(CAS).
      Parameters:
      aSpans - spans to appear in boldface (begin1, end1, begin2, end2, ...)
    • configureViewForXmlFragmentsQuery

      public void configureViewForXmlFragmentsQuery(String aQuery, String aTypeNamespace)
      Configures the viewer appropriately for displaying a hit against an XML fragments query. This does not use a sophisticated algorithm for determining the location of the document that matched the query. Currently all it does is call setInitiallySelectedTypes(String[]) with the list of types mentioned in the query and applyBoldfaceToKeywords(String[]) on any keywords mentioned in the query.
      Parameters:
      aQuery - an XML fragments query
      aTypeNamespace - namespace to prepend to the element names in the query in order to form fully-qualified CAS type names. This is optional; if not specified, type namespaces are ignored and any type whose local name matches the query will be selected.
    • configureViewForXmlFragmentsQuery

      public void configureViewForXmlFragmentsQuery(String aQuery)
      Configures the viewer appropriately for displaying a hit against an XML fragments query. This does not use a sophisticated algorithm for determining the location of the document that matched the query. Currently all it does is call setInitiallySelectedTypes(String[]) with the list of types mentioned in the query and applyBoldfaceToKeywords(String[]) on any keywords mentioned in the query.
      Parameters:
      aQuery - an XML fragments query
    • assignCheckedFromList

      public void assignCheckedFromList(List<String> aNotChecked)
      Assign initially checked to the specified types, pairing up down the lists.
      Parameters:
      aNotChecked - list of types not to be initially checked JMP
    • assignColorsFromList

      public void assignColorsFromList(List<Color> aColors, List<String> aTypeNames)
      Assign colors to the specified types, pairing up down the lists.
      Parameters:
      aColors - list of colors
      aTypeNames - list of type names JMP
    • assignTypeColors

      private void assignTypeColors(List<String> aTypeNames)
      Assign colors to the specified types.
      Parameters:
      aTypeNames - list of type names
    • display

      private void display()
      Creates/updates the display. This is called when setCAS() is called and again each time to user's mode or checkbox selections change.
    • displayFeatureView

      private void displayFeatureView()
      Create/update the feature view.
    • addFeatureValueCheckBoxes

      private void addFeatureValueCheckBoxes()
      Adds the feature value check boxes.
    • addFeatureRadioButtons

      private void addFeatureRadioButtons()
      Adds the feature radio buttons.
    • addTypeRadioButtons

      private void addTypeRadioButtons()
      Adds the type radio buttons.
    • processOneAnnotationInFeatureView

      private boolean processOneAnnotationInFeatureView(StyledDocument doc, Annotation annotation, boolean firstType)
      Examine an annotation and add type/feature/value-related controls if necessary.
      Parameters:
      doc - the doc
      annotation - the annotation
      firstType - If true, the annotation being examined has the first type-related radio button that needs to be created and also set as selected.
      Returns:
      If true, the annotation being examined has its type being selected, its feature-related radio buttons being displayed and one of its features being selected, and the feature's value is selected. So that the next annotation of different type will not have its features being displayed in the control panel.
    • processOneFeature

      private boolean processOneFeature(StyledDocument doc, Annotation annotation, Feature feature, boolean firstFeature)
      Examine one feature of the given annotation and create the feature-related controls.
      Parameters:
      doc - the doc
      annotation - the annotation
      feature - the feature
      firstFeature - the first feature
      Returns:
      true, if successful
    • processOneFeatureValue

      private boolean processOneFeatureValue(StyledDocument doc, Annotation annotation, Feature feature)
      Examine one feature of the given annotation and create the feature-value-related controls.
      Parameters:
      doc - the doc
      annotation - the annotation
      feature - the feature
      Returns:
      true, if successful
    • displayAnnotationView

      private void displayAnnotationView()
      Creates the annotation display.
    • addTypeCheckBoxes

      private void addTypeCheckBoxes()
      Adds the type check boxes.
    • processOneAnnotationInAnnotationView

      private void processOneAnnotationInAnnotationView(StyledDocument doc, AnnotationFS annotation)
      Process one annotation in annotation view.
      Parameters:
      doc - the doc
      annotation - the annotation
    • displayEntityView

      private void displayEntityView()
      Creates the entity display.
    • processOneAnnotationInEntityView

      private void processOneAnnotationInEntityView(StyledDocument doc, Annotation annotation)
      Process one annotation in entity view.
      Parameters:
      doc - the doc
      annotation - the annotation
    • updateSelectedAnnotationTree

      private void updateSelectedAnnotationTree(int aPosition)
      Refreshes the selected annotation tree.
      Parameters:
      aPosition - the currently selected offset into the document. All annotations overlapping this point will be rendered in the tree.
    • isMatch

      private boolean isMatch(Annotation annotation)
      Check if an annotation matches the filters set by the user. If true, the annotation will be added to the annotation tree display panel.
      Parameters:
      annotation - the annotation
      Returns:
      true, if is match
    • addAnnotationToTree

      protected void addAnnotationToTree(AnnotationFS aAnnotation)
      Adds an annotation to the selected annotations tree. Annotations in the tree are grouped by type.
      Parameters:
      aAnnotation - the annotation to add
    • addFeatureTreeNodes

      private void addFeatureTreeNodes(DefaultMutableTreeNode aParentNode, FeatureStructure aFS)
      Adds the feature tree nodes.
      Parameters:
      aParentNode - the a parent node
      aFS - the a FS
    • getFeatureValueInString

      private String getFeatureValueInString(FeatureStructure aFS, Feature feature)
      Get feature value in string, if value is not another annotation and not an array of annotations.
      Parameters:
      aFS - the a FS
      feature - the feature
      Returns:
      the feature value in string
    • checkString

      private static String checkString(String stringValue, String defaultIfNull, int maxLength)
      Check if a string is null or longer than specified limit. If null, use default value. If longer than specified limit, take only the leading substring that would fit in the limit.
      Parameters:
      stringValue - the string value
      defaultIfNull - the default if null
      maxLength - the max length
      Returns:
      the string
    • typeNamesContains

      private static boolean typeNamesContains(Set<String> names, String name)
      Does wildcard matching to determine if a give type name is "contained" in a Set of type names.
      Parameters:
      names - Type names, which may include wildcards (e.g, uima.tt.*)
      name - A type name
      Returns:
      True iff name matches a name in type names
    • wildCardMatch

      private static boolean wildCardMatch(String name, String pattern)
      Helper for
      invalid reference
      #typeNamesContains(HashSet, String)
      .
      Parameters:
      name - A litteral string
      pattern - A string that includes one or more *'s as wildcards
      Returns:
      True iff the string matches the pattern.
    • setSize

      public void setSize(Dimension d)
      Sets the size.
      Overrides:
      setSize in class Component
      Parameters:
      d - the new size
      See Also:
    • doBoldFace

      private void doBoldFace()
      Applies boldface as per the mBoldfaceKeywords and mBoldfaceSpans fields.
    • doBoldFaceBySpans

      private void doBoldFaceBySpans()
      Do bold face by spans.
    • doBoldFaceByKeyWords

      private void doBoldFaceByKeyWords()
      Do bold face by key words.
    • getSelectedAnnotationTree

      protected JTree getSelectedAnnotationTree()
      Gets the selected annotation tree component.
      Returns:
      the tree that displays annotation details about annotations overlapping the point where the user last clicked in the text.