
org.coode.dlquery.OWLClassExpressionEditorViewComponent Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.coode.dlquery Show documentation
Show all versions of org.coode.dlquery Show documentation
A plug-in for Protege that provides a reasoner-backed query capability.
package org.coode.dlquery;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import org.protege.editor.core.ui.util.ComponentFactory;
import org.protege.editor.owl.model.cache.OWLExpressionUserCache;
import org.protege.editor.owl.model.entity.OWLEntityCreationSet;
import org.protege.editor.owl.model.event.EventType;
import org.protege.editor.owl.model.event.OWLModelManagerListener;
import org.protege.editor.owl.model.inference.OWLReasonerManager;
import org.protege.editor.owl.model.inference.ReasonerUtilities;
import org.protege.editor.owl.ui.CreateDefinedClassPanel;
import org.protege.editor.owl.ui.clsdescriptioneditor.ExpressionEditor;
import org.protege.editor.owl.ui.clsdescriptioneditor.OWLExpressionChecker;
import org.protege.editor.owl.ui.view.AbstractOWLViewComponent;
import org.semanticweb.owlapi.model.AddAxiom;
import org.semanticweb.owlapi.model.OWLAxiom;
import org.semanticweb.owlapi.model.OWLClass;
import org.semanticweb.owlapi.model.OWLClassExpression;
import org.semanticweb.owlapi.model.OWLDataFactory;
import org.semanticweb.owlapi.model.OWLException;
import org.semanticweb.owlapi.model.OWLOntologyChange;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.Marker;
import org.slf4j.MarkerFactory;
import static org.coode.dlquery.ResultsSection.*;
/**
* Author: Matthew Horridge
* The University Of Manchester
* Medical Informatics Group
* Date: 22-Aug-2006
*
* [email protected]
* www.cs.man.ac.uk/~horridgm
*/
public class OWLClassExpressionEditorViewComponent extends AbstractOWLViewComponent {
private static final Marker marker = MarkerFactory.getMarker("DL Query");
private final Logger logger = LoggerFactory.getLogger(OWLClassExpressionEditorViewComponent.class);
private ExpressionEditor owlDescriptionEditor;
private ResultsList resultsList;
private JCheckBox showDirectSuperClassesCheckBox;
private JCheckBox showSuperClassesCheckBox;
private JCheckBox showEquivalentClassesCheckBox;
private JCheckBox showDirectSubClassesCheckBox;
private JCheckBox showSubClassesCheckBox;
private JCheckBox showIndividualsCheckBox;
private JButton executeButton;
private JButton addButton;
private OWLModelManagerListener listener;
private boolean requiresRefresh = false;
protected void initialiseOWLView() throws Exception {
setLayout(new BorderLayout(10, 10));
JComponent editorPanel = createQueryPanel();
JComponent resultsPanel = createResultsPanel();
JComponent optionsBox = createOptionsBox();
resultsPanel.add(optionsBox, BorderLayout.EAST);
JSplitPane splitter = new JSplitPane(JSplitPane.VERTICAL_SPLIT, editorPanel, resultsPanel);
splitter.setDividerLocation(0.3);
add(splitter, BorderLayout.CENTER);
updateGUI();
listener = event -> {
if (event.isType(EventType.ONTOLOGY_CLASSIFIED)) {
doQuery();
}
};
getOWLModelManager().addListener(listener);
addHierarchyListener(event -> {
if (requiresRefresh && isShowing()) {
doQuery();
}
});
}
private JComponent createQueryPanel() {
JPanel editorPanel = new JPanel(new BorderLayout());
final OWLExpressionChecker checker = getOWLModelManager().getOWLExpressionCheckerFactory().getOWLClassExpressionChecker();
owlDescriptionEditor = new ExpressionEditor<>(getOWLEditorKit(), checker);
owlDescriptionEditor.addStatusChangedListener(newState -> {
executeButton.setEnabled(newState);
addButton.setEnabled(newState);
});
owlDescriptionEditor.setPreferredSize(new Dimension(100, 50));
editorPanel.add(ComponentFactory.createScrollPane(owlDescriptionEditor), BorderLayout.CENTER);
JPanel buttonHolder = new JPanel(new FlowLayout(FlowLayout.LEFT));
executeButton = new JButton("Execute");
executeButton.addActionListener(e -> doQuery());
addButton = new JButton("Add to ontology");
addButton.addActionListener(e -> doAdd());
buttonHolder.add(executeButton);
buttonHolder.add(addButton);
editorPanel.add(buttonHolder, BorderLayout.SOUTH);
editorPanel.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder(
BorderFactory.createEmptyBorder(),
"Query (class expression)"),
BorderFactory.createEmptyBorder(3, 3, 3, 3)));
return editorPanel;
}
private JComponent createResultsPanel() {
JComponent resultsPanel = new JPanel(new BorderLayout(10, 10));
resultsPanel.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder(BorderFactory.createEmptyBorder(), "Query results"),
BorderFactory.createEmptyBorder(3, 3, 3, 3)));
resultsList = new ResultsList(getOWLEditorKit());
// resultsList.setResultsSectionVisible(SUB_CLASSES, showSubClassesCheckBox.isSelected());
resultsPanel.add(ComponentFactory.createScrollPane(resultsList));
return resultsPanel;
}
private JComponent createOptionsBox() {
Box optionsBox = new Box(BoxLayout.Y_AXIS);
showDirectSuperClassesCheckBox = new JCheckBox(new AbstractAction(DIRECT_SUPER_CLASSES.getDisplayName()) {
public void actionPerformed(ActionEvent e) {
resultsList.setResultsSectionVisible(DIRECT_SUPER_CLASSES, showDirectSuperClassesCheckBox.isSelected());
doQuery();
}
});
optionsBox.add(showDirectSuperClassesCheckBox);
optionsBox.add(Box.createVerticalStrut(3));
showSuperClassesCheckBox = new JCheckBox(new AbstractAction(SUPER_CLASSES.getDisplayName()) {
public void actionPerformed(ActionEvent e) {
resultsList.setResultsSectionVisible(SUPER_CLASSES, showSuperClassesCheckBox.isSelected());
doQuery();
}
});
showSuperClassesCheckBox.setSelected(false);
optionsBox.add(showSuperClassesCheckBox);
optionsBox.add(Box.createVerticalStrut(3));
showEquivalentClassesCheckBox = new JCheckBox(new AbstractAction(EQUIVALENT_CLASSES.getDisplayName()) {
public void actionPerformed(ActionEvent e) {
resultsList.setResultsSectionVisible(EQUIVALENT_CLASSES, showEquivalentClassesCheckBox.isSelected());
doQuery();
}
});
optionsBox.add(showEquivalentClassesCheckBox);
optionsBox.add(Box.createVerticalStrut(3));
showDirectSubClassesCheckBox = new JCheckBox(new AbstractAction(DIRECT_SUB_CLASSES.getDisplayName()) {
public void actionPerformed(ActionEvent e) {
resultsList.setResultsSectionVisible(DIRECT_SUB_CLASSES, showDirectSubClassesCheckBox.isSelected());
doQuery();
}
});
optionsBox.add(showDirectSubClassesCheckBox);
optionsBox.add(Box.createVerticalStrut(3));
showSubClassesCheckBox = new JCheckBox(new AbstractAction(SUB_CLASSES.getDisplayName()) {
public void actionPerformed(ActionEvent e) {
resultsList.setResultsSectionVisible(SUB_CLASSES, showSubClassesCheckBox.isSelected());
doQuery();
}
});
showSubClassesCheckBox.setSelected(false);
optionsBox.add(showSubClassesCheckBox);
optionsBox.add(Box.createVerticalStrut(3));
showIndividualsCheckBox = new JCheckBox(new AbstractAction(INSTANCES.getDisplayName()) {
public void actionPerformed(ActionEvent e) {
resultsList.setResultsSectionVisible(INSTANCES, showIndividualsCheckBox.isSelected());
doQuery();
}
});
optionsBox.add(showIndividualsCheckBox);
return optionsBox;
}
protected void disposeOWLView() {
getOWLModelManager().removeListener(listener);
}
private void updateGUI() {
showDirectSuperClassesCheckBox.setSelected(resultsList.isResultsSectionVisible(DIRECT_SUPER_CLASSES));
showSuperClassesCheckBox.setSelected(resultsList.isResultsSectionVisible(SUPER_CLASSES));
showEquivalentClassesCheckBox.setSelected(resultsList.isResultsSectionVisible(EQUIVALENT_CLASSES));
showDirectSubClassesCheckBox.setSelected(resultsList.isResultsSectionVisible(DIRECT_SUB_CLASSES));
showSubClassesCheckBox.setSelected(resultsList.isResultsSectionVisible(SUB_CLASSES));
showIndividualsCheckBox.setSelected(resultsList.isResultsSectionVisible(INSTANCES));
}
private void doQuery() {
if (isShowing()) {
try {
OWLReasonerManager reasonerManager = getOWLModelManager().getOWLReasonerManager();
ReasonerUtilities.warnUserIfReasonerIsNotConfigured(this, reasonerManager);
OWLClassExpression desc = owlDescriptionEditor.createObject();
if (desc != null) {
OWLExpressionUserCache.getInstance(getOWLModelManager()).add(desc, owlDescriptionEditor.getText());
resultsList.setOWLClassExpression(desc);
}
} catch (OWLException e) {
logger.error(marker, "An error occurred whilst executing the DL query: {}", e.getMessage(), e);
}
requiresRefresh = false;
}
else {
requiresRefresh = true;
}
}
private void doAdd() {
try {
OWLClassExpression desc = owlDescriptionEditor.createObject();
OWLEntityCreationSet creationSet = CreateDefinedClassPanel.showDialog(desc, getOWLEditorKit());
if (creationSet != null) {
List changes = new ArrayList<>(creationSet.getOntologyChanges());
OWLDataFactory factory = getOWLModelManager().getOWLDataFactory();
OWLAxiom equiv = factory.getOWLEquivalentClassesAxiom(creationSet.getOWLEntity(), desc);
changes.add(new AddAxiom(getOWLModelManager().getActiveOntology(), equiv));
getOWLModelManager().applyChanges(changes);
if (isSynchronizing()) {
getOWLEditorKit().getOWLWorkspace().getOWLSelectionModel().setSelectedEntity(creationSet.getOWLEntity());
}
}
} catch (OWLException e) {
logger.error(marker, "An error occurred whilst adding the class definition: {}", e.getMessage(), e);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy