/** * Copyright (C) 2007-2009, Jens Lehmann * * This file is part of DL-Learner. * * DL-Learner is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * DL-Learner is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ package org.dllearner.tools.protege; import java.util.Collections; import java.util.Set; import javax.swing.JComponent; import org.dllearner.utilities.owl.DLSyntaxObjectRenderer; import org.protege.editor.core.ui.util.InputVerificationStatusChangedListener; import org.protege.editor.owl.model.event.EventType; import org.protege.editor.owl.model.event.OWLModelManagerChangeEvent; import org.protege.editor.owl.model.event.OWLModelManagerListener; import org.protege.editor.owl.model.inference.OWLReasonerManager; import org.protege.editor.owl.model.inference.ReasonerStatus; import org.protege.editor.owl.ui.editor.AbstractOWLClassExpressionEditor; import org.semanticweb.owlapi.io.ToStringRenderer; import org.semanticweb.owlapi.model.AxiomType; import org.semanticweb.owlapi.model.OWLClass; import org.semanticweb.owlapi.model.OWLClassExpression; /** * This is the class that must be implemented to get the plugin integrated in * Protégé. * * @author Christian Koetteritzsch * */ public class ProtegePlugin extends AbstractOWLClassExpressionEditor implements OWLModelManagerListener{ private DLLearnerView view; @Override public JComponent getComponent() { return view.getView(); } @Override public Set<OWLClassExpression> getClassExpressions() { return Collections.emptySet(); } @Override public boolean isValidInput() { if(getAxiomType() == AxiomType.EQUIVALENT_CLASSES) { Manager.getInstance(getOWLEditorKit()).setLearningType(LearningType.EQUIVALENT); } else if(getAxiomType() == AxiomType.SUBCLASS_OF) { Manager.getInstance(getOWLEditorKit()).setLearningType(LearningType.SUPER); } view.reset(); checkReasonerStatus(); return true; } private void checkReasonerStatus(){ OWLReasonerManager reasonerManager = getOWLEditorKit().getOWLModelManager().getOWLReasonerManager(); // ReasonerUtilities.warnUserIfReasonerIsNotConfigured(getOWLEditorKit().getOWLWorkspace(), reasonerManager); ReasonerStatus status = reasonerManager.getReasonerStatus(); boolean enable = true; String message = ""; if(status == ReasonerStatus.INITIALIZED){ if(status == ReasonerStatus.INCONSISTENT){ message = "The loaded ontology is inconsistent. Learning is only supported for consistent ontologies."; enable = false; } } else if(status == ReasonerStatus.OUT_OF_SYNC){ message = "You have to synchronize the reasoner first(click on menu \"Reasoner\"->\"Synchronize reasoner\")."; enable = false; } else { message = "You have to select a reasoner first(click on menu \"Reasoner\"). "; enable = false; } view.setHintMessage("<html><font size=\"3\" color=\"red\">" + message + "</font></html>"); view.setRunButtonEnabled(enable); if(enable){ if(!Manager.getInstance().isPreparing() && Manager.getInstance().isReinitNecessary()){ new ReadingOntologyThread(view).start(); } } } @Override public boolean setDescription(OWLClassExpression ce) { return true; } @Override public void initialise() throws Exception { System.out.println("Initializing DL-Learner plugin..."); Manager.getInstance(getOWLEditorKit()); view = new DLLearnerView(getOWLEditorKit(), getOWLEditorKit().getOWLWorkspace().getOWLSelectionModel().getSelectedEntity(), getAxiomType()); Manager manager = Manager.getInstance(); manager.setProgressMonitor(view.getStatusBar()); manager.setEntity(getOWLEditorKit().getOWLWorkspace().getOWLSelectionModel().getSelectedEntity()); manager.setAxiomType(getAxiomType()); addListeners(); ToStringRenderer.getInstance().setRenderer(new DLSyntaxObjectRenderer()); } @Override public void dispose() throws Exception { view.dispose(); Manager.getInstance().dispose(); removeListeners(); view = null; } @Override public void addStatusChangedListener( InputVerificationStatusChangedListener arg0) { } @Override public void removeStatusChangedListener( InputVerificationStatusChangedListener arg0) { } private void addListeners(){ getOWLEditorKit().getOWLModelManager().addListener(this); getOWLEditorKit().getOWLModelManager().addListener(Manager.getInstance(getOWLEditorKit())); getOWLEditorKit().getOWLWorkspace().getOWLSelectionModel().addListener(Manager.getInstance(getOWLEditorKit())); } private void removeListeners(){ getOWLEditorKit().getOWLModelManager().removeListener(this); getOWLEditorKit().getOWLModelManager().removeListener(Manager.getInstance(getOWLEditorKit())); getOWLEditorKit().getOWLWorkspace().getOWLSelectionModel().removeListener(Manager.getInstance(getOWLEditorKit())); } @Override public void handleChange(OWLModelManagerChangeEvent event) { OWLClass lastSelectedClass = getOWLEditorKit().getOWLWorkspace().getOWLSelectionModel().getLastSelectedClass(); if (lastSelectedClass != null) { if(event.isType(EventType.REASONER_CHANGED) && !event.isType(EventType.ACTIVE_ONTOLOGY_CHANGED)){ checkReasonerStatus(); } } } }