/*
* OntologyViewer.java
*
* Niraj Aswani, 12/March/07
*
* $Id: OntologyViewer.html,v 1.0 2007/03/12 16:13:01 niraj Exp $
*/
package gate.creole.ontology.ocat;
import gate.gui.docview.AbstractDocumentView;
import javax.swing.*;
import com.ontotext.gate.vr.ClassNode;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.List;
import gate.*;
import gate.creole.ontology.OClass;
import gate.creole.ontology.OConstants;
import gate.creole.ontology.OInstance;
import gate.creole.ontology.OResource;
import gate.creole.ontology.Ontology;
import gate.creole.ontology.OntologyModificationListener;
import gate.creole.ontology.RDFProperty;
import gate.event.*;
import gate.gui.docview.*;
/**
* In this class we implement the basic structure of the ontology viewer Which
* includes the total ontologies that has been loaded in the system option for
* the new ontology, if someone wishes to load it into the system the ontology
* viewer (which displays all the conetps) Ontology instance viewer and the
* instance attribute viewer
*
* @author niraj
*/
public class OntologyViewer extends AbstractDocumentView implements
CreoleListener,
AnnotationSetListener,
AnnotationListener,
OntologyModificationListener {
/**
* Serial version ID
*/
private static final long serialVersionUID = 3977303230621759543L;
/** Main panel which holds all different components */
private JPanel mainPanel;
/** This stores all the available instances of Ontologies in GATE */
private ArrayList<Ontology> ontologies;
/** ComboBox used to display the ontology instances */
private JComboBox ontologyCB;
/** Panel to display ComboBox */
private JPanel ontologyCBPanel;
/**
* Instance of JTabbedPane to show the ontology Viewer and the
* OntologyViewerOptions
*/
private JTabbedPane tabbedPane;
/** Instance of OntologyTreePanel */
private OntologyTreePanel ontologyTreePanel;
/**
* AnnotationMap which stores all the relavant annotations (i.e. annotation
* with class feature) in the following way className --> ArrayList (which
* contains all the annotations) </p>
*/
private HashMap<String, ArrayList<Annotation>> className2AnnotationList =
new HashMap<String, ArrayList<Annotation>>();
/** TextualDocument View instance */
protected TextualDocumentView documentTextualDocumentView;
/**
* This is where the actual document text is being displayed.
*/
protected JTextArea documentTextArea;
/**
* This object provides a functionality to add/remove/change the annotations
*/
protected AnnotationAction annotationAction;
/**
* Each Annotation Set is given a unique ID, which is used later in the
* annotationsID2ASID map.
*/
protected HashMap<Integer, String> asID2ASName =
new HashMap<Integer, String>();
/**
* The highest Annotation Set ID
*/
private int highestASID = 0;
/**
* We store the ID of each annotation and the ID of annotation set the
* annotation belongs to.
*/
private HashMap<Integer, Integer> annotationsID2ASID =
new HashMap<Integer, Integer>();
/**
* Given an annotation, this method tells which selectedAnnotationSetName it
* belongs to.
*
* @param ann
* @return the name of the annotation set.
*/
public String getAnnotationSet(Annotation ann) {
Integer setId = annotationsID2ASID.get(ann.getId());
return asID2ASName.get(setId);
}
/** Initialises the GUI */
public void initGUI() {
// get a pointer to the textual view used for highlights
Iterator centralViewsIter = owner.getCentralViews().iterator();
while(documentTextualDocumentView == null && centralViewsIter.hasNext()) {
DocumentView aView = (DocumentView)centralViewsIter.next();
if(aView instanceof TextualDocumentView)
documentTextualDocumentView = (TextualDocumentView)aView;
}
documentTextArea =
(JTextArea)((JScrollPane)documentTextualDocumentView.getGUI())
.getViewport().getView();
// lets create the OntologyTree Component
ontologyTreePanel = new OntologyTreePanel(this);
// first lets find out all the annotations
// which have ontology and a class feature in it
document.getAnnotations().addAnnotationSetListener(this);
initLocalData();
// first creating ontologyCB GUI
ontologyCB = new JComboBox();
ontologyCBPanel = new JPanel();
ontologyCBPanel.setLayout(new FlowLayout());
ontologyCBPanel.add(ontologyCB);
// then lets create main panel design
mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());
mainPanel.add(ontologyCBPanel, BorderLayout.NORTH);
mainPanel.add(ontologyTreePanel.getGUI(), BorderLayout.CENTER);
mainPanel.setBackground(Color.white);
int width =
ontologyCB.getWidth() > ontologyTreePanel.getWidth() ? ontologyCB
.getWidth() : ontologyTreePanel.getWidth();
mainPanel.setMaximumSize(new Dimension(width, mainPanel.getHeight()));
tabbedPane = new JTabbedPane();
tabbedPane.addTab("Ontology Tree(s)", mainPanel);
tabbedPane.addTab("Options", ontologyTreePanel.ontologyViewerOptions
.getGUI());
// load ontologies from the Gate environment
loadOntologies();
// add various listeners, such as annotationAction,
// selectionChangeAction and so on.
addListeners();
if(ontologies != null && ontologies.size() > 0) {
ontologyTreePanel.showOntologyInOntologyTreeGUI(ontologies.get(0),
className2AnnotationList);
}
else {
ontologyTreePanel.showEmptyOntologyTree();
}
}
/** ReIntializes all Maps used for local uses */
protected void initLocalData() {
className2AnnotationList.clear();
asID2ASName.clear();
HashMap<String, ArrayList<Annotation>> temp =
getAnnotationsWithClassOrInstanceFeature(document.getAnnotations(), null);
if(temp != null) {
className2AnnotationList.putAll(temp);
}
Map<String, AnnotationSet> annotSetMap = document.getNamedAnnotationSets();
if(annotSetMap != null) {
java.util.List<String> setNames =
new ArrayList<String>(annotSetMap.keySet());
Collections.sort(setNames);
Iterator<String> setsIter = setNames.iterator();
while(setsIter.hasNext()) {
temp =
getAnnotationsWithClassOrInstanceFeature(document
.getAnnotations(setsIter.next()), null);
if(temp != null) {
Iterator<String> keyIter = temp.keySet().iterator();
while(keyIter.hasNext()) {
String key = keyIter.next();
if(className2AnnotationList.containsKey(key)
&& temp.get(key) != null) {
className2AnnotationList.get(key).addAll(temp.get(key));
continue;
}
else {
className2AnnotationList.put(key, temp.get(key));
}
}
}
}
}
}
/**
* This method is called by respective selectedAnnotationSetName from where an
* annotation is removed
*/
public void annotationRemoved(AnnotationSetEvent ase) {
if(ontologyTreePanel.getCurrentOntology() == null) return;
Annotation currentAnnot = ase.getAnnotation();
currentAnnot.removeAnnotationListener(this);
// checks if it was of our interest
FeatureMap map = currentAnnot.getFeatures();
String ontoClassName =
ontologyTreePanel.ontologyViewerOptions.getSelectedClassURIFeatureName();
String ontoInstanceName =
ontologyTreePanel.ontologyViewerOptions
.getSelectedInstanceURIFeatureName();
if(map.containsKey(ontoClassName) || map.containsKey(ontoInstanceName)) {
// yes this is of our interest we need to remove this from our
// className2AnnotationList if it exists
Set<String> keySet =
ontologyTreePanel.currentOResourceName2AnnotationsListMap.keySet();
Iterator<String> iter = keySet.iterator();
String className = "";
ArrayList<Annotation> annots = null;
outer: while(iter.hasNext()) {
className = iter.next();
annots = className2AnnotationList.get(className);
if(annots != null) {
for(int i = 0; i < annots.size(); i++) {
if(currentAnnot.getId().equals(annots.get(i).getId())) {
annots.remove(currentAnnot);
break outer;
}
}
}
}
ontologyTreePanel.currentOResourceName2AnnotationsListMap.put(className,
annots);
// remove this from annotationsID2ASID
annotationsID2ASID.remove(currentAnnot.getId());
// and finally we need to highlight annotations
ontologyTreePanel.ontoTreeListener.refreshHighlights();
}
}
public void annotationUpdated(AnnotationEvent ae) {
if(ontologyTreePanel.getCurrentOntology() == null) return;
Annotation currentAnnot = (Annotation)ae.getSource();
// what we need to do is to add this to className2AnnotationList if
// it is relavant to our stuff
FeatureMap map = currentAnnot.getFeatures();
String ontoClassName =
ontologyTreePanel.ontologyViewerOptions.getSelectedClassURIFeatureName();
String ontoInstanceName =
ontologyTreePanel.ontologyViewerOptions
.getSelectedInstanceURIFeatureName();
String aName = null;
String aValue = "";
if(map.containsKey(ontoClassName)) {
aName = (String)map.get(ontoClassName);
}
else if(map.containsKey(ontoInstanceName)) {
aName = (String)map.get(ontoInstanceName);
}
else {
return;
}
if(aName == null) return;
int index = aName.lastIndexOf("#");
if(index < 0) index = aName.lastIndexOf("/");
if(index < 0) index = aName.lastIndexOf(":");
if(index >= 0) {
aValue = aName.substring(index + 1, aName.length());
}
else {
aValue = aName;
}
if(className2AnnotationList.containsKey(aValue)) {
ArrayList<Annotation> annotList = className2AnnotationList.get(aValue);
if(!annotList.contains(currentAnnot)) {
annotList.add(currentAnnot);
className2AnnotationList.put(aValue, annotList);
}
}
else {
ArrayList<Annotation> annotList = new ArrayList<Annotation>();
annotList.add(currentAnnot);
className2AnnotationList.put(aValue, annotList);
}
AnnotationSet set = null;
// find out the selectedAnnotationSetName that contains this
// annotation
if(document.getAnnotations().get(currentAnnot.getId()) != null) {
set = document.getAnnotations();
}
else {
Collection sets = document.getNamedAnnotationSets().values();
Iterator iter = sets.iterator();
while(iter.hasNext()) {
AnnotationSet set1 = (AnnotationSet)iter.next();
if(set1.get(currentAnnot.getId()) != null) {
set = set1;
break;
}
}
}
Integer setId = null;
if(asID2ASName.values() != null && asID2ASName.values().contains(set)) {
Iterator<Integer> iter = asID2ASName.keySet().iterator();
while(iter.hasNext()) {
Integer tempId = iter.next();
String setString = asID2ASName.get(tempId);
if(setString.equals(set.getName())) {
setId = tempId;
break;
}
}
}
else {
setId = new Integer(highestASID);
highestASID++;
asID2ASName.put(setId, set.getName());
}
annotationsID2ASID.put(currentAnnot.getId(), setId);
// done entry
// we have added the annotation to the annotation Map
// so we would call the
ontologyTreePanel.showOntologyInOntologyTreeGUI(ontologyTreePanel
.getCurrentOntology(), className2AnnotationList);
ontologyTreePanel.ontoTreeListener.refreshHighlights();
}
/**
* This method is invoked whenever a new annotation is added
*/
public void annotationAdded(AnnotationSetEvent ase) {
if(ontologyTreePanel.getCurrentOntology() == null) return;
Annotation currentAnnot = ase.getAnnotation();
currentAnnot.addAnnotationListener(this);
// what we need to do is to add this to className2AnnotationList if
// it is relavant to our stuff
FeatureMap map = currentAnnot.getFeatures();
String ontoClassName =
ontologyTreePanel.ontologyViewerOptions.getSelectedClassURIFeatureName();
String ontoInstanceName =
ontologyTreePanel.ontologyViewerOptions
.getSelectedInstanceURIFeatureName();
String aName = (String)map.get(ontoClassName);
String aValue = "";
if(map.containsKey(ontoClassName)) {
aName = (String)map.get(ontoClassName);
}
else if(map.containsKey(ontoInstanceName)) {
aName = (String)map.get(ontoInstanceName);
}
else {
return;
}
if(aName == null) return;
int index = aName.lastIndexOf("#");
if(index < 0) index = aName.lastIndexOf("/");
if(index < 0) index = aName.lastIndexOf(":");
if(index >= 0) {
aValue = aName.substring(index + 1, aName.length());
}
else {
aValue = aName;
}
if(className2AnnotationList.containsKey(aValue)) {
ArrayList<Annotation> annotList = className2AnnotationList.get(aValue);
annotList.add(currentAnnot);
className2AnnotationList.put(aValue, annotList);
}
else {
ArrayList<Annotation> annotList = new ArrayList<Annotation>();
annotList.add(currentAnnot);
className2AnnotationList.put(aValue, annotList);
}
// make entry in annotationsID2ASID
AnnotationSet set = (AnnotationSet)ase.getSource();
Integer setId = null;
if(asID2ASName.values() != null && asID2ASName.values().contains(set)) {
Iterator<Integer> iter = asID2ASName.keySet().iterator();
while(iter.hasNext()) {
Integer tempId = iter.next();
String setString = asID2ASName.get(tempId);
if(setString.equals(set.getName())) {
setId = tempId;
break;
}
}
}
else {
setId = new Integer(highestASID);
highestASID++;
asID2ASName.put(setId, set.getName());
}
annotationsID2ASID.put(currentAnnot.getId(), setId);
// we have added the annotation to the annotation Map
// so we would call the
ontologyTreePanel.showOntologyInOntologyTreeGUI(ontologyTreePanel
.getCurrentOntology(), className2AnnotationList);
ontologyTreePanel.ontoTreeListener.refreshHighlights();
}
/**
* This method iterates through annotations and find out the ones with
* ontology and class features and returns the map<String,
* ArrayList<Annotation>>
*/
private HashMap<String, ArrayList<Annotation>> getAnnotationsWithClassOrInstanceFeature(
AnnotationSet set, String aClassName) {
Integer setId = null;
if(asID2ASName.values() != null
&& asID2ASName.values().contains(set.getName())) {
Iterator<Integer> iter = asID2ASName.keySet().iterator();
while(iter.hasNext()) {
Integer tempId = iter.next();
String setString = asID2ASName.get(tempId);
if(setString.equals(set.getName())) {
setId = tempId;
break;
}
}
}
else {
setId = new Integer(highestASID);
highestASID++;
asID2ASName.put(setId, set.getName());
}
HashMap<String, ArrayList<Annotation>> subMap =
new HashMap<String, ArrayList<Annotation>>();
// now lets find out all the annotations which have ontology as a
// feature
Iterator<Annotation> setIter = set.iterator();
String ontoClassName =
ontologyTreePanel.ontologyViewerOptions.getSelectedClassURIFeatureName();
String ontoInstanceName =
ontologyTreePanel.ontologyViewerOptions
.getSelectedInstanceURIFeatureName();
while(setIter.hasNext()) {
Annotation currentAnnot = setIter.next();
currentAnnot.removeAnnotationListener(this);
currentAnnot.addAnnotationListener(this);
FeatureMap map = currentAnnot.getFeatures();
String aName = null;
String aValue = "";
if(map.containsKey(ontoClassName)) {
aName = (String)map.get(ontoClassName);
}
else if(map.containsKey(ontoInstanceName)) {
aName = (String)map.get(ontoInstanceName);
}
else {
continue;
}
int index = aName.lastIndexOf("#");
if(index < 0) index = aName.lastIndexOf("/");
if(index < 0) index = aName.lastIndexOf(":");
if(index >= 0) {
aValue = aName.substring(index + 1, aName.length());
}
else {
aValue = aName;
}
if(aClassName == null || aValue.equals(aClassName)) {
if(subMap.containsKey(aValue)) {
ArrayList<Annotation> annotList = subMap.get(aValue);
annotList.add(currentAnnot);
subMap.put(aValue, annotList);
}
else {
ArrayList<Annotation> annotList = new ArrayList<Annotation>();
annotList.add(currentAnnot);
subMap.put(aValue, annotList);
}
}
annotationsID2ASID.put(currentAnnot.getId(), setId);
}
return subMap;
}
public void registerHooks() {
documentTextArea.addMouseListener(annotationAction);
documentTextArea.addMouseMotionListener(annotationAction);
if(ontologyTreePanel != null) {
if(ontologyTreePanel.ontoTreeListener != null) {
ontologyTreePanel.ontoTreeListener.refreshHighlights();
}
}
}
public void unregisterHooks() {
documentTextArea.removeMouseListener(annotationAction);
documentTextArea.removeMouseMotionListener(annotationAction);
if(ontologyTreePanel != null) {
if(ontologyTreePanel.ontoTreeListener != null) {
ontologyTreePanel.ontoTreeListener.removeHighlights();
}
}
}
public int getType() {
return VERTICAL;
}
/**
* gets the main tabbed pane that will be displayed as the OCAT component
*/
public Component getGUI() {
return tabbedPane;
}
/**
* Adds various listeners to the different components
*/
private void addListeners() {
Gate.getCreoleRegister().addCreoleListener(this);
ontologyCB.addActionListener(new OntologySelectionChangeAction());
annotationAction = new AnnotationAction(ontologyTreePanel);
}
/**
* Releases all resources and listeners
*/
public void cleanup() {
Gate.getCreoleRegister().removeCreoleListener(this);
// and we need to remove the annotationSetListener as well
AnnotationSet set = document.getAnnotations();
set.removeAnnotationSetListener(this);
Map annotSetMap = document.getNamedAnnotationSets();
if(annotSetMap != null) {
java.util.List<String> setNames =
new ArrayList<String>(annotSetMap.keySet());
Collections.sort(setNames);
Iterator<String> setsIter = setNames.iterator();
while(setsIter.hasNext()) {
set = document.getAnnotations(setsIter.next());
set.removeAnnotationSetListener(this);
}
}
}
/**
* Searches within the GATE system to find out all the loaded ontologies
*/
private void loadOntologies() {
if(ontologies == null) {
ontologies = new ArrayList<Ontology>();
java.util.List lrs = gate.Gate.getCreoleRegister().getPublicLrInstances();
Iterator iter1 = lrs.iterator();
while(iter1.hasNext()) {
gate.LanguageResource lr = (LanguageResource)iter1.next();
if(!(lr instanceof Ontology)) continue;
((Ontology)lr).addOntologyModificationListener(this);
ontologies.add((Ontology)lr);
ontologyCB.addItem(((Ontology)lr).getName());
}
}
}
/**
* Refresh the comboBox.. in case new ontology is loaded or one is removed
*
* @param ontology
* this could be either newly added ontology or that removed one
* @param removed
* if true instance is removed otherwise added
*/
private void refreshOntologyCB(Ontology ontology, boolean removed) {
if(removed) {
// first we need to see if there exists any instance in the system
// that has the same id, if so, we don't want to remove this
int index = ontologies.indexOf(ontology);
if(index >= 0) {
ontologies.remove(ontology);
ontologyCB.removeItemAt(index);
ontologyCB.invalidate();
boolean wasCurrentlySelected = false;
if(ontologyTreePanel.getCurrentOntology() == ontology)
wasCurrentlySelected = true;
ontologyTreePanel.removeOntologyTreeModel(ontology,
wasCurrentlySelected);
if(wasCurrentlySelected) if(ontologyCB.getItemCount() > 0) {
ontologyCB.setSelectedIndex(0);
}
}
}
else {
ontologies.add(ontology);
ontologyCB.addItem(ontology.getName());
if(ontologyCB.getItemCount() == 1) {
ontologyTreePanel.currentOntologyTree.setVisible(true);
ontologyCB.setSelectedIndex(0);
}
}
}
/**
* Description: an internal OntologySelectionChangeAction used to handle the
* ontology selection changes
*
* @author Niraj Aswani
* @version 1.0
*/
private class OntologySelectionChangeAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
/** gets executed when user changes his/her selection of ontology */
if(e.getSource() == ontologyCB) {
int index = ontologyCB.getSelectedIndex();
if(index >= 0) {
ontologyTreePanel.showOntologyInOntologyTreeGUI(
ontologies.get(index), className2AnnotationList);
}
else {
ontologyTreePanel.showEmptyOntologyTree();
}
ontologyTreePanel.ontoTreeListener.refreshHighlights();
}
}
}
// ***************************
/** CreoleListener methods */
// ****************************
/**
* Gets executed whenever new resource is loaded in the GATE system
*
* @param creoleEvent
*/
public void resourceLoaded(CreoleEvent creoleEvent) {
Resource rs = creoleEvent.getResource();
if(rs instanceof Ontology) {
((Ontology)rs).addOntologyModificationListener(this);
refreshOntologyCB((Ontology)rs, false);
}
}
/**
* Gets executed whenever existing resource is unloaded in the GATE system
*
* @param creoleEvent
*/
public void resourceUnloaded(CreoleEvent creoleEvent) {
Resource rs = creoleEvent.getResource();
if(rs instanceof Ontology) {
// we are interested
((Ontology)rs).removeOntologyModificationListener(this);
refreshOntologyCB((Ontology)rs, true);
}
}
public void datastoreOpened(CreoleEvent creoleEvent) {
}
public void datastoreCreated(CreoleEvent creoleEvent) {
}
public void datastoreClosed(CreoleEvent creoleEvent) {
}
/**
* Gets executed whenever resource name is changed
*
* @param resource
* @param string
* @param string2
*/
public void resourceRenamed(Resource resource, String string, String string2) {
if(resource instanceof Ontology) {
int index = ontologies.indexOf((Ontology)resource);
ontologyCB.remove(index);
ontologyCB.insertItemAt(((Ontology)resource).getName(), index);
ontologyCB.invalidate();
}
}
public void resourcesRemoved(Ontology ontology, String[] deletedResources) {
boolean shouldSelectAgain = false;
int index = ontologies.indexOf(ontology);
if(index < 0) return;
if(ontologyCB.getSelectedIndex() == index) {
shouldSelectAgain = true;
}
HashMap<String, Boolean> selectionMap =
ontologyTreePanel.ontology2OResourceSelectionMap.get(ontology);
refreshOntologyCB(ontology, true);
refreshOntologyCB(ontology, false);
if(shouldSelectAgain) ontologyCB.setSelectedIndex(index);
HashMap<String, Boolean> newMap =
ontologyTreePanel.ontology2OResourceSelectionMap.get(ontology);
for(String key : selectionMap.keySet()) {
Boolean val = selectionMap.get(key);
if(newMap.containsKey(key)) {
newMap.put(key, val);
}
}
documentTextArea.requestFocus();
}
public void resourceRelationChanged(Ontology ontology, OResource resource1,
OResource resouce2, int eventType) {
this.ontologyModified(ontology, resource1, eventType);
}
public void resourcePropertyValueChanged(Ontology ontology,
OResource resource, RDFProperty property, Object value, int eventType) {
this.ontologyModified(ontology, resource, eventType);
}
public void ontologyModified(Ontology ontology, OResource resource,
int eventType) {
if(eventType == OConstants.SUB_CLASS_ADDED_EVENT
|| eventType == OConstants.SUB_CLASS_REMOVED_EVENT) {
ontologyReset(ontology);
}
}
public void ontologyReset(Ontology ontology) {
boolean shouldSelectAgain = false;
int index = ontologies.indexOf(ontology);
if(index < 0) return;
initLocalData();
if(ontologyCB.getSelectedIndex() == index) {
shouldSelectAgain = true;
}
// lets traverse through the ontology and find out the classes which
// are selected
HashMap<String, Boolean> selectionMap =
ontologyTreePanel.ontology2OResourceSelectionMap.get(ontology);
refreshOntologyCB(ontology, true);
refreshOntologyCB(ontology, false);
if(shouldSelectAgain) ontologyCB.setSelectedIndex(index);
HashMap<String, Boolean> newMap =
ontologyTreePanel.ontology2OResourceSelectionMap.get(ontology);
for(String key : selectionMap.keySet()) {
Boolean val = selectionMap.get(key);
if(newMap.containsKey(key)) {
newMap.put(key, val);
}
}
documentTextArea.requestFocus();
}
public void resourceAdded(Ontology ontology, OResource resource) {
boolean shouldSelectAgain = false;
int index = ontologies.indexOf(ontology);
if(index < 0) return;
if(ontologyCB.getSelectedIndex() == index) {
shouldSelectAgain = true;
}
if(resource instanceof OInstance) {
OInstance inst1 = (OInstance)resource;
Set<OClass> oClasses = inst1.getOClasses(OConstants.DIRECT_CLOSURE);
// for each class find out its class nodes
for(OClass aClass : oClasses) {
List<ClassNode> cnodes = ontologyTreePanel.getNode(aClass.getName());
if(cnodes.isEmpty()) {
continue;
}
for(ClassNode anode : cnodes) {
ClassNode instNode = new ClassNode(inst1);
anode.addSubNode(instNode);
// here we need to set a color for this new instance
ontologyTreePanel.setColorScheme(instNode,
(HashMap<String, Color>)ontologyTreePanel.ontology2ColorSchemesMap
.get(ontology));
ontologyTreePanel
.setOntoTreeClassSelection(
instNode,
(HashMap<String, Boolean>)ontologyTreePanel.ontology2OResourceSelectionMap
.get(ontology));
}
}
HashMap<String, Set<OClass>> map =
ontologyTreePanel.ontology2PropValuesAndInstances2ClassesMap
.get(ontology);
Set<RDFProperty> rdfProps =
ontologyTreePanel.ontology2PropertiesMap.get(ontology);
ontologyTreePanel
.updatePVnInst2ClassesMap(inst1, rdfProps, oClasses, map);
}
else {
// lets traverse through the ontology and find out the classes
// which
// are selected
HashMap<String, Boolean> selectionMap =
ontologyTreePanel.ontology2OResourceSelectionMap.get(ontology);
refreshOntologyCB(ontology, true);
refreshOntologyCB(ontology, false);
if(shouldSelectAgain) ontologyCB.setSelectedIndex(index);
HashMap<String, Boolean> newMap =
ontologyTreePanel.ontology2OResourceSelectionMap.get(ontology);
for(String key : selectionMap.keySet()) {
Boolean val = selectionMap.get(key);
if(newMap.containsKey(key)) {
newMap.put(key, val);
}
}
}
if(shouldSelectAgain) ontologyCB.setSelectedIndex(index);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
ontologyTreePanel.currentOntologyTree.updateUI();
documentTextArea.requestFocus();
}
});
}
/**
* A method that returns the instance of ontology viewer options.
*
* @return
*/
public OntologyViewerOptions getOntologyViewerOptions() {
/*
* Do not delete this method, as it is used by Annotator GUI
*/
return ontologyTreePanel.ontologyViewerOptions;
}
}