From: <lor...@us...> - 2009-09-07 13:47:52
|
Revision: 1838 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1838&view=rev Author: lorenz_b Date: 2009-09-07 13:47:42 +0000 (Mon, 07 Sep 2009) Log Message: ----------- added some informations about the current loaded ontology Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/PelletExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/OPlus.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/MetricsPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/SimpleExplanationTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBar.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatisfiableClassesTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ClassChoosePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/KnowledgeSourcePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/LearningPanel.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/HSTExplanationGenerator.java Modified: trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java 2009-09-06 15:28:00 UTC (rev 1837) +++ trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java 2009-09-07 13:47:42 UTC (rev 1838) @@ -12,9 +12,8 @@ private static TaskManager instance; private SwingWorker<?, ?> currentTask; + - private Thread currentThread; - private StatusBar statusBar; private JDialog dialog; @@ -30,6 +29,10 @@ this.statusBar = statusBar; } + public StatusBar getStatusBar(){ + return statusBar; + } + public void setDialog(JDialog dialog){ this.dialog = dialog; } @@ -42,10 +45,6 @@ this.currentTask = task; } - public void setCurrentThread(Thread t){ - this.currentThread = t; - } - public void cancelCurrentTask(){ if(currentTask != null && !currentTask.isCancelled() && !currentTask.isDone()){ currentTask.cancel(true); @@ -54,8 +53,7 @@ // dialog.setCursor(null); } - public synchronized void cancelCurrentThread(){currentThread.stop(); - } + public void setTaskStarted(String message){ dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java 2009-09-06 15:28:00 UTC (rev 1837) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java 2009-09-07 13:47:42 UTC (rev 1838) @@ -10,6 +10,7 @@ import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.RepairManager; import org.dllearner.tools.ore.RepairManagerListener; +import org.dllearner.tools.ore.TaskManager; import org.dllearner.tools.ore.explanation.laconic.LaconicExplanationGenerator; import org.mindswap.pellet.owlapi.PelletReasonerFactory; import org.mindswap.pellet.owlapi.Reasoner; @@ -128,6 +129,7 @@ } axiom2Module.put(entailment, module); regularExpGen = new PelletExplanationGenerator(manager, Collections.singleton(module)); + regularExpGen.setProgressMonitor(TaskManager.getInstance().getStatusBar()); if(limit == -1){ explanations = regularExpGen.getExplanations(entailment); } else { Added: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/HSTExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/HSTExplanationGenerator.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/HSTExplanationGenerator.java 2009-09-07 13:47:42 UTC (rev 1838) @@ -0,0 +1,389 @@ +package org.dllearner.tools.ore.explanation; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.semanticweb.owl.inference.OWLClassReasoner; +import org.semanticweb.owl.inference.OWLReasonerFactory; +import org.semanticweb.owl.model.OWLAxiom; +import org.semanticweb.owl.model.OWLDeclarationAxiom; +import org.semanticweb.owl.model.OWLDescription; +import org.semanticweb.owl.model.OWLEntity; +import org.semanticweb.owl.model.OWLException; +import org.semanticweb.owl.model.OWLOntology; +import org.semanticweb.owl.model.OWLOntologyManager; +import org.semanticweb.owl.model.OWLRuntimeException; +import org.semanticweb.owl.util.OWLEntityCollector; + +import com.clarkparsia.explanation.MultipleExplanationGenerator; +import com.clarkparsia.explanation.TransactionAwareSingleExpGen; +import com.clarkparsia.explanation.util.ExplanationProgressMonitor; +import com.clarkparsia.explanation.util.OntologyUtils; +import com.clarkparsia.explanation.util.SilentExplanationProgressMonitor; + +/* +* Copyright (C) 2007, Clark & Parsia +* +* Modifications to the initial code base are copyright of their +* respective authors, or their employers as appropriate. Authorship +* of the modifications may be determined from the ChangeLog placed at +* the end of this file. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; either +* version 2.1 of the License, or (at your option) any later version. + +* This library 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 +* Lesser General Public License for more details. + +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ +/** + * <p/> + * Description: An implementation of MultipleExplanationGenerator interface + * using Reiter's Hitting Set Tree (HST) algorithm as described in Aditya + * Kalyanpur's thesis. This class relies on a SingleExplanationGenerator that + * can compute a minimal set of axioms that cause the unsatisfiability. The + * core of the functionality is based on Matthew Horridge's implementation. + * </p> + * <p/> + * Copyright: Copyright (c) 2007 + * </p> + * <p/> + * Company: Clark & Parsia, LLC. <http://www.clarkparsia.com> + * </p> + * @author Evren Sirin + */ +public class HSTExplanationGenerator implements MultipleExplanationGenerator { + + public static final Logger log = Logger.getLogger(HSTExplanationGenerator.class + .getName()); + + private TransactionAwareSingleExpGen singleExplanationGenerator; + + private ExplanationProgressMonitor progressMonitor = new SilentExplanationProgressMonitor(); + + private static OWLEntityCollector collector; + + public HSTExplanationGenerator(TransactionAwareSingleExpGen singleExplanationGenerator) { + this.singleExplanationGenerator = singleExplanationGenerator; + + collector = new OWLEntityCollector(); + collector.setCollectDataTypes( false ); + } + + + public void setProgressMonitor(ExplanationProgressMonitor progressMonitor) { + this.progressMonitor = progressMonitor; + } + + + public OWLOntologyManager getOntologyManager() { + return singleExplanationGenerator.getOntologyManager(); + } + + /** + * @deprecated + */ + public OWLOntology getOntology() { + return singleExplanationGenerator.getOntology(); + } + + public Set<OWLOntology> getOntologies() { + return singleExplanationGenerator.getOntologies(); + } + + public void setOntology(OWLOntology ontology) { + singleExplanationGenerator.setOntology(ontology); + } + + public void setOntologies(Set<OWLOntology> ontologies) { + singleExplanationGenerator.setOntologies(ontologies); + } + + + public OWLClassReasoner getReasoner() { + return singleExplanationGenerator.getReasoner(); + } + + + public void setReasoner(OWLClassReasoner reasoner) { + singleExplanationGenerator.setReasoner(reasoner); + } + + + public OWLReasonerFactory getReasonerFactory() { + return singleExplanationGenerator.getReasonerFactory(); + } + + + public void setReasonerFactory(OWLReasonerFactory reasonerFactory) { + singleExplanationGenerator.setReasonerFactory(reasonerFactory); + } + + + public TransactionAwareSingleExpGen getSingleExplanationGenerator() { + return singleExplanationGenerator; + } + + + public Set<OWLAxiom> getExplanation(OWLDescription unsatClass) { + return singleExplanationGenerator.getExplanation(unsatClass); + } + + + public Set<Set<OWLAxiom>> getExplanations(OWLDescription unsatClass) { + return getExplanations(unsatClass, 0); + } + + + public Set<Set<OWLAxiom>> getExplanations(OWLDescription unsatClass, int maxExplanations) { + if (maxExplanations < 0) + throw new IllegalArgumentException(); + + if (log.isLoggable(Level.CONFIG)) + log.config("Get " + (maxExplanations == 0 ? "all" : maxExplanations) + " explanation(s) for: " + unsatClass); + + try { + Set<OWLAxiom> firstMups = getExplanation(unsatClass); + if (firstMups.isEmpty()) { + return Collections.emptySet(); + } + Set<Set<OWLAxiom>> allMups = new LinkedHashSet<Set<OWLAxiom>>(); + progressMonitor.foundExplanation(firstMups); + allMups.add(firstMups); + Set<Set<OWLAxiom>> satPaths = new HashSet<Set<OWLAxiom>>(); + Set<OWLAxiom> currentPathContents = new HashSet<OWLAxiom>(); + singleExplanationGenerator.beginTransaction(); + try { + constructHittingSetTree(unsatClass, firstMups, allMups, satPaths, currentPathContents, maxExplanations); + } finally { + singleExplanationGenerator.endTransaction(); + } + progressMonitor.foundAllExplanations(); + return allMups; + } + catch (OWLException e) { + throw new OWLRuntimeException(e); + } + } + + //////////////////////////////////////////////////////////////////////////////////////////// + // + // Hitting Set Stuff + // + /////////////////////////////////////////////////////////////////////////////////////////// + + + /** + * Orders the axioms in a single MUPS by the frequency of which they appear + * in all MUPS. + * @param mups The MUPS containing the axioms to be ordered + * @param allMups The set of all MUPS which is used to calculate the ordering + */ + private static List<OWLAxiom> getOrderedMUPS(List<OWLAxiom> mups, final Set<Set<OWLAxiom>> allMups) { + Comparator<OWLAxiom> mupsComparator = new Comparator<OWLAxiom>() { + public int compare(OWLAxiom o1, OWLAxiom o2) { + // The axiom that appears in most MUPS has the lowest index + // in the list + int occ1 = getOccurrences(o1, allMups); + int occ2 = getOccurrences(o2, allMups); + return -occ1 + occ2; + } + }; + Collections.sort(mups, mupsComparator); + return mups; + } + + + /** + * Given an axiom and a set of axioms this method determines how many sets + * contain the axiom. + * @param ax The axiom that will be counted. + * @param axiomSets The sets to count from + */ + private static int getOccurrences(OWLAxiom ax, Set<Set<OWLAxiom>> axiomSets) { + int count = 0; + for (Set<OWLAxiom> axioms : axiomSets) { + if (axioms.contains(ax)) { + count++; + } + } + return count; + } + + /** + * Returns the entities referenced in an axiom. + * @param axiom axiom whose signature is being computed + * @return the entities referenced in the axiom + */ + private Set<OWLEntity> getSignature(OWLAxiom axiom) { + collector.reset(); + + axiom.accept( collector ); + + return new HashSet<OWLEntity>( collector.getObjects() ); + } + + + /** + * This is a recursive method that builds a hitting set tree to obtain all + * justifications for an unsatisfiable class. + * @param mups The current justification for the current class. This + * corresponds to a node in the hitting set tree. + * @param allMups All of the MUPS that have been found - this set gets populated + * over the course of the tree building process. Initially this + * should just contain the first justification + * @param satPaths Paths that have been completed. + * @param currentPathContents The contents of the current path. Initially this should be an + * empty set. + */ + private void constructHittingSetTree(OWLDescription unsatClass, Set<OWLAxiom> mups, Set<Set<OWLAxiom>> allMups, + Set<Set<OWLAxiom>> satPaths, Set<OWLAxiom> currentPathContents, + int maxExplanations) throws OWLException { + + if (log.isLoggable(Level.FINE)) + log.fine("MUPS " + allMups.size() + ": " + mups); + + if (progressMonitor.isCancelled()) { + return; + } + + // We go through the current mups, axiom by axiom, and extend the tree + // with edges for each axiom + List<OWLAxiom> orderedMups = getOrderedMUPS(new ArrayList<OWLAxiom>(mups), allMups); + + while (!orderedMups.isEmpty()) { + if (progressMonitor.isCancelled()) { + return; + } + OWLAxiom axiom = orderedMups.get(0); + orderedMups.remove(0); + if (allMups.size() == maxExplanations) { + if (log.isLoggable(Level.FINE)) + log.fine("Computed " + maxExplanations + "explanations"); + return; + } + + if (log.isLoggable(Level.FINE)) + log.fine("Removing axiom: " + axiom + " " + currentPathContents.size() + " more removed: " + currentPathContents); + + // Remove the current axiom from all the ontologies it is included + // in + + Set<OWLOntology> ontologies = OntologyUtils.removeAxiom(axiom, getReasoner() + .getLoadedOntologies(), getOntologyManager()); + + // Removal may have dereferenced some entities, if so declarations are added + Set<OWLEntity> sig = getSignature( axiom ); + List<OWLDeclarationAxiom> temporaryDeclarations = new ArrayList<OWLDeclarationAxiom>( + sig.size() ); + for( OWLEntity e : sig ) { + boolean referenced = false; + for( Iterator<OWLOntology> i = ontologies.iterator(); !referenced && i.hasNext(); ) { + for( Iterator<OWLAxiom> j = i.next().getReferencingAxioms( e ).iterator(); !referenced + && j.hasNext(); ) { + OWLAxiom a = j.next(); + referenced = a.isLogicalAxiom() || (a instanceof OWLDeclarationAxiom); + } + } + if( !referenced ) { + OWLDeclarationAxiom declaration = getOntologyManager().getOWLDataFactory().getOWLDeclarationAxiom( e ); + temporaryDeclarations.add( declaration ); + } + } + for( OWLDeclarationAxiom decl : temporaryDeclarations ) { + OntologyUtils.addAxiom( decl, getReasoner().getLoadedOntologies(), + getOntologyManager() ); + } + + currentPathContents.add(axiom); + + boolean earlyTermination = false; + // Early path termination. If our path contents are the superset of + // the contents of a path then we can terminate here. + for (Set<OWLAxiom> satPath : satPaths) { + if (currentPathContents.containsAll(satPath)) { + earlyTermination = true; + if (log.isLoggable(Level.FINE)) + log.fine("Stop - satisfiable (early termination)"); + break; + } + } + + if (!earlyTermination) { + Set<OWLAxiom> newMUPS = null; + for (Set<OWLAxiom> foundMUPS : allMups) { + Set<OWLAxiom> foundMUPSCopy = new HashSet<OWLAxiom>(foundMUPS); + foundMUPSCopy.retainAll(currentPathContents); + if (foundMUPSCopy.isEmpty()) { + newMUPS = foundMUPS; + break; + } + } + if (newMUPS == null) { + newMUPS = getExplanation(unsatClass); + } + // Generate a new node - i.e. a new justification set + if (newMUPS.contains(axiom)) { + // How can this be the case??? + throw new OWLRuntimeException("Explanation contains removed axiom: " + axiom); + } + + if (!newMUPS.isEmpty()) { + // Note that getting a previous justification does not mean + // we + // can stop. stopping here causes some justifications to be + // missed + allMups.add(newMUPS); + progressMonitor.foundExplanation(newMUPS); + // Recompute priority here? + constructHittingSetTree(unsatClass, + newMUPS, + allMups, + satPaths, + currentPathContents, + maxExplanations); + // We have found a new MUPS, so recalculate the ordering + // axioms in the MUPS at the current level + orderedMups = getOrderedMUPS(orderedMups, allMups); + } + else { + if (log.isLoggable(Level.FINE)) + log.fine("Stop - satisfiable"); + + // End of current path - add it to the list of paths + satPaths.add(new HashSet<OWLAxiom>(currentPathContents)); + } + } + + // Back track - go one level up the tree and run for the next axiom + currentPathContents.remove(axiom); + + if (log.isLoggable(Level.FINE)) + log.fine("Restoring axiom: " + axiom); + + // Remove any temporary declarations + for( OWLDeclarationAxiom decl : temporaryDeclarations ) { + OntologyUtils.removeAxiom( decl, getReasoner().getLoadedOntologies(), + getOntologyManager() ); + } + + // Done with the axiom that was removed. Add it back in + OntologyUtils.addAxiom(axiom, ontologies, getOntologyManager()); + } + } +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java 2009-09-06 15:28:00 UTC (rev 1837) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java 2009-09-07 13:47:42 UTC (rev 1838) @@ -1,7 +1,6 @@ package org.dllearner.tools.ore.explanation; import java.util.ArrayList; -import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -25,7 +24,6 @@ import org.semanticweb.owl.model.OWLSubClassAxiom; import org.semanticweb.owl.model.RemoveAxiom; -import com.clarkparsia.explanation.PelletExplanation; import com.clarkparsia.modularity.IncrementalClassifier; public class LostEntailmentsChecker { @@ -227,9 +225,7 @@ } for(OWLAxiom ax : possibleLosts){ - try {System.out.println(ax + " is entailed " + reasoner.isEntailed(ax)); - PelletExplanation exp = new PelletExplanation(manager, Collections.singleton(ontology), false); - System.out.println(exp.getEntailmentExplanation(ax)); + try { manager.applyChanges(changes); if(!reasoner.isEntailed(ax)){ realLosts.add(ax); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/PelletExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/PelletExplanationGenerator.java 2009-09-06 15:28:00 UTC (rev 1837) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/PelletExplanationGenerator.java 2009-09-07 13:47:42 UTC (rev 1838) @@ -20,6 +20,7 @@ import com.clarkparsia.explanation.HSTExplanationGenerator; import com.clarkparsia.explanation.SatisfiabilityConverter; import com.clarkparsia.explanation.TransactionAwareSingleExpGen; +import com.clarkparsia.explanation.util.ExplanationProgressMonitor; public class PelletExplanationGenerator implements ExplanationGenerator{ static { @@ -110,6 +111,10 @@ return explanations; } + public void setProgressMonitor(ExplanationProgressMonitor progressMonitor){ + expGen.setProgressMonitor(progressMonitor); + } + public static void main(String[] args) throws OWLOntologyCreationException{ OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); OWLDataFactory factory = manager.getOWLDataFactory(); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java 2009-09-06 15:28:00 UTC (rev 1837) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java 2009-09-07 13:47:42 UTC (rev 1838) @@ -25,6 +25,11 @@ import org.semanticweb.owl.model.OWLOntologyManager; import org.semanticweb.owl.model.OWLSubClassAxiom; +/* + * This class computes laconic explanations for a given entailment. The algorithm is adapted from the paper + * 'Laconic and Precise Justifications in OWL' from Matthew Horridge, Bijan Parsia and Ulrike Sattler. + * + */ public class LaconicExplanationGenerator { Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/OPlus.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/OPlus.java 2009-09-06 15:28:00 UTC (rev 1837) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/OPlus.java 2009-09-07 13:47:42 UTC (rev 1838) @@ -57,7 +57,10 @@ import org.semanticweb.owl.model.SWRLRule; - +/* + * This class computes the oplus closure provided in 'Laconic and Precise Justifications in OWL' from + * Matthew Horridge, Bijan Parsia and Ulrike Sattler. A set of axioms is into smaller and weaker axioms. + */ public class OPlus implements OWLAxiomVisitorEx<Set<OWLAxiom>> { Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTable.java 2009-09-06 15:28:00 UTC (rev 1837) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTable.java 2009-09-07 13:47:42 UTC (rev 1838) @@ -140,7 +140,7 @@ ExplanationManager expMan = ExplanationManager.getInstance(oreMan); OWLOntologyManager man = oreMan.getReasoner().getOWLOntologyManager(); List<OWLOntologyChange>repairPlan = repMan.getRepairPlan(); - + StringBuilder sb = new StringBuilder(); sb.append(ManchesterSyntaxRenderer.renderSimple(entailment)); if(((ImpactTableModel)getModel()).isLostEntailment(entailment)){ @@ -173,7 +173,7 @@ setLayout(new BorderLayout()); explanationsPanel = new Box(1); - + int counter = 1; for(Explanation exp : explanations){ ExplanationTablePanel panel = new ExplanationTablePanel(new SimpleExplanationTable(exp), counter); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/MetricsPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/MetricsPanel.java 2009-09-06 15:28:00 UTC (rev 1837) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/MetricsPanel.java 2009-09-07 13:47:42 UTC (rev 1838) @@ -2,39 +2,30 @@ import java.awt.BorderLayout; import java.awt.Color; -import java.awt.Dimension; +import java.awt.Font; import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.StringSelection; import java.awt.event.ActionEvent; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; import java.net.URI; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Set; import javax.swing.AbstractAction; import javax.swing.BorderFactory; -import javax.swing.Box; -import javax.swing.BoxLayout; -import javax.swing.JDialog; import javax.swing.JFrame; -import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JTable; +import javax.swing.border.TitledBorder; -import org.protege.editor.core.ui.util.ComponentFactory; -import org.protege.editor.owl.ui.OWLAxiomTypeFramePanel; +import org.protege.editor.core.PropertyUtil; +import org.protege.editor.core.ProtegeProperties; import org.semanticweb.owl.apibinding.OWLManager; import org.semanticweb.owl.metrics.AxiomCountMetric; import org.semanticweb.owl.metrics.AxiomTypeMetric; @@ -91,6 +82,7 @@ // TODO Auto-generated catch block e.printStackTrace(); } + initialiseOWLView(); createPopupMenu(); } @@ -136,11 +128,11 @@ metricManagerMap = new LinkedHashMap<String, OWLMetricManager>(); tableModelMap = new HashMap<OWLMetricManager, MetricsTableModel>(); createBasicMetrics(); - createClassAxiomMetrics(); - createObjectPropertyAxiomMetrics(); - createDataPropertyAxiomMetrics(); - createIndividualAxiomMetrics(); - createAnnotationAxiomMetrics(); +// createClassAxiomMetrics(); +// createObjectPropertyAxiomMetrics(); +// createDataPropertyAxiomMetrics(); +// createIndividualAxiomMetrics(); +// createAnnotationAxiomMetrics(); createUI(); updateView(manager.getOntologies().iterator().next()); for(OWLMetricManager man : metricManagerMap.values()) { @@ -153,8 +145,10 @@ private void createUI() { + setLayout(new BorderLayout()); - Box box = new Box(BoxLayout.Y_AXIS); + JPanel panel = new JPanel(); + panel.setLayout(new BorderLayout()); for (String metricsSet : metricManagerMap.keySet()) { MetricsTableModel tableModel = new MetricsTableModel(metricManagerMap.get(metricsSet)); tableModelMap.put(metricManagerMap.get(metricsSet), tableModel); @@ -162,83 +156,23 @@ table.setGridColor(Color.LIGHT_GRAY); table.setRowHeight(table.getRowHeight() + 4); table.setShowGrid(true); + table.getColumnModel().getColumn(1).setMaxWidth(150); table.getColumnModel().setColumnMargin(2); - table.addMouseListener(new MouseAdapter() { + table.setFont(getFont().deriveFont(Font.BOLD, 12.0f)); + table.setForeground(PropertyUtil.getColor(ProtegeProperties.getInstance().getProperty(ProtegeProperties.PROPERTY_COLOR_KEY), + Color.GRAY)); - public void mousePressed(MouseEvent e) { - if(e.isPopupTrigger()) { - handleTablePopupRequest(table, e); - } - } - - - public void mouseReleased(MouseEvent e) { - if(e.isPopupTrigger()) { - handleTablePopupRequest(table, e); - } - } - - private void handleTablePopupRequest(JTable table, MouseEvent e) { - int row = table.rowAtPoint(e.getPoint()); - int col = table.columnAtPoint(e.getPoint()); - if(row == -1 || col == -1) { - return; - } - MetricsTableModel model = (MetricsTableModel) table.getModel(); - for(OWLMetricManager man : tableModelMap.keySet()) { - if(tableModelMap.get(man).equals(model)) { - OWLMetric<?> metric = man.getMetrics().get(row); - if(metric instanceof AxiomCountMetric) { - lastMetric = (AxiomCountMetric) metric; - popupMenu.show(table, e.getX(), e.getY()); - } - break; - } - } - - } - }); - final JPanel tablePanel = new JPanel(new BorderLayout()); - tablePanel.addMouseListener(new MouseAdapter() { - - public void mousePressed(MouseEvent e) { - if(e.isPopupTrigger()) { - showMenu(e); - } - } - - - public void mouseReleased(MouseEvent e) { - if(e.isPopupTrigger()) { - showMenu(e); - } - } - - private void showMenu(MouseEvent e) { - JPopupMenu menu = new JPopupMenu(); - menu.add(new AbstractAction("Copy metrics to clipboard") { - - /** - * - */ - private static final long serialVersionUID = 6638146469347852653L; - - public void actionPerformed(ActionEvent e) { - exportCSV(); - } - }); - menu.show(tablePanel, e.getX(), e.getY()); - } - }); + tablePanel.add(table); - tablePanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(2, 2, 14, 2), - ComponentFactory.createTitledBorder(metricsSet))); + tablePanel.setFont(getFont().deriveFont(Font.BOLD, 12.0f)); +// tablePanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(2, 2, 14, 2), +// ComponentFactory.createTitledBorder(metricsSet))); table.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY)); - box.add(tablePanel); + panel.add(tablePanel); } - JScrollPane sp = new JScrollPane(box); + JScrollPane sp = new JScrollPane(panel); sp.setOpaque(false); add(sp); } @@ -353,6 +287,11 @@ for (OWLMetricManager man : metricManagerMap.values()) { man.setOntology(activeOntology); } + TitledBorder border = new TitledBorder(activeOntology.getURI().toString()); + border.setTitleFont(getFont().deriveFont(Font.BOLD, 12.0f)); + border.setTitleColor(PropertyUtil.getColor(ProtegeProperties.getInstance().getProperty(ProtegeProperties.PROPERTY_COLOR_KEY), + Color.GRAY)); + setBorder(border); repaint(); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/SimpleExplanationTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/SimpleExplanationTableModel.java 2009-09-06 15:28:00 UTC (rev 1837) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/SimpleExplanationTableModel.java 2009-09-07 13:47:42 UTC (rev 1838) @@ -37,9 +37,16 @@ @Override public Object getValueAt(int rowIndex, int columnIndex) { - OWLAxiom ax = getOWLAxiomAtRow(rowIndex); - int depth2Root = expMan.getOrdering(exp).get(rowIndex).values().iterator().next(); - return ManchesterSyntaxRenderer.render(ax, impMan.isSelected(ax), depth2Root); + OWLAxiom ax; + if(exp.getAxioms().size() > 1){ + ax = getOWLAxiomAtRow(rowIndex); + int depth2Root = expMan.getOrdering(exp).get(rowIndex).values().iterator().next(); + return ManchesterSyntaxRenderer.render(ax, impMan.isSelected(ax), depth2Root); + } else { + ax = exp.getAxioms().iterator().next(); + return ManchesterSyntaxRenderer.render(ax, impMan.isSelected(ax), 0); + } + } public OWLAxiom getOWLAxiomAtRow(int rowIndex){ Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBar.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBar.java 2009-09-06 15:28:00 UTC (rev 1837) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBar.java 2009-09-07 13:47:42 UTC (rev 1838) @@ -12,6 +12,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.geom.Ellipse2D; +import java.util.Set; import javax.swing.Icon; import javax.swing.JButton; @@ -23,8 +24,11 @@ import org.dllearner.tools.ore.TaskManager; import org.mindswap.pellet.utils.progress.ProgressMonitor; +import org.semanticweb.owl.model.OWLAxiom; -public class StatusBar extends JPanel implements ProgressMonitor{ +import com.clarkparsia.explanation.util.ExplanationProgressMonitor; + +public class StatusBar extends JPanel implements ProgressMonitor, ExplanationProgressMonitor{ /** * */ @@ -36,6 +40,7 @@ private int progressPercent = -1; private String progressMessage; private boolean isIndeterminateMode; + private boolean isCanceled = false; public StatusBar() { infoLabel = new JLabel(""); @@ -54,8 +59,8 @@ @Override public void actionPerformed(ActionEvent e) { - TaskManager.getInstance().cancelCurrentThread(); + isCanceled = true; } }); rB.setToolTipText("Abort"); @@ -75,6 +80,7 @@ } public void showProgress(boolean b) { + isCanceled = false; isIndeterminateMode = b; SwingUtilities.invokeLater(new Runnable() { @@ -139,7 +145,7 @@ @Override public boolean isCanceled() { - return false; + return isCanceled; } @Override @@ -205,6 +211,23 @@ }); } + + @Override + public void foundAllExplanations() { + // TODO Auto-generated method stub + + } + + @Override + public void foundExplanation(Set<OWLAxiom> explanation) { + System.out.println(explanation); + + } + + @Override + public boolean isCancelled() { + return isCanceled; + } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatisfiableClassesTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatisfiableClassesTable.java 2009-09-06 15:28:00 UTC (rev 1837) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatisfiableClassesTable.java 2009-09-07 13:47:42 UTC (rev 1838) @@ -3,7 +3,6 @@ import java.awt.Color; import java.awt.Dimension; import java.awt.event.ActionEvent; -import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.List; @@ -37,33 +36,33 @@ getColumn(0).setCellRenderer(new UnsatClassesTableCellRenderer(expMan)); // setAutoResizeMode(JTable.AUTO_RESIZE_OFF); - addMouseListener(new MouseAdapter() { - public void mousePressed(MouseEvent e) { - int row = rowAtPoint(e.getPoint()); - if (row >= 0 && row < getRowCount() && e.isPopupTrigger()) { - OWLClass cl = (OWLClass) getValueAt(row, 1); - if (ExplanationManager - .getInstance(OREManager.getInstance()) - .getDerivedClasses().contains(cl)) { - showPopupMenu(e); - } - } - - } - - public void mouseReleased(MouseEvent e) { - int row = rowAtPoint(e.getPoint()); - if (row >= 0 && row < getRowCount() && e.isPopupTrigger()) { - OWLClass cl = (OWLClass) getValueAt(row, 1); - if (ExplanationManager - .getInstance(OREManager.getInstance()) - .getDerivedClasses().contains(cl)) { - showPopupMenu(e); - } - } - } - - }); +// addMouseListener(new MouseAdapter() { +// public void mousePressed(MouseEvent e) { +// int row = rowAtPoint(e.getPoint()); +// if (row >= 0 && row < getRowCount() && e.isPopupTrigger()) { +// OWLClass cl = (OWLClass) getValueAt(row, 1); +// if (ExplanationManager +// .getInstance(OREManager.getInstance()) +// .getDerivedClasses().contains(cl)) { +// showPopupMenu(e); +// } +// } +// +// } +// +// public void mouseReleased(MouseEvent e) { +// int row = rowAtPoint(e.getPoint()); +// if (row >= 0 && row < getRowCount() && e.isPopupTrigger()) { +// OWLClass cl = (OWLClass) getValueAt(row, 1); +// if (ExplanationManager +// .getInstance(OREManager.getInstance()) +// .getDerivedClasses().contains(cl)) { +// showPopupMenu(e); +// } +// } +// } +// +// }); } private void showPopupMenu(MouseEvent e){ Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java 2009-09-06 15:28:00 UTC (rev 1837) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java 2009-09-07 13:47:42 UTC (rev 1838) @@ -23,6 +23,7 @@ import java.awt.BorderLayout; import java.awt.CardLayout; +import java.awt.Color; import java.awt.Component; import java.awt.Dialog; import java.awt.Font; @@ -435,7 +436,9 @@ //setLayout(new GridBagLayout()); infoScrollPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); infoScrollPane.setViewportBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); - informationsField.setBackground(UIManager.getDefaults().getColor("control")); + Color color = UIManager.getColor("Panel.background"); + informationsField.setBackground(new Color(color.getRed(), color.getGreen(), color.getBlue())); + informationsField.setOpaque(true); informationsField.setColumns(80); informationsField.setEditable(false); informationsField.setLineWrap(true); @@ -448,7 +451,7 @@ JPanel buttonInformationPanel = new JPanel(); buttonInformationPanel.setLayout(new BorderLayout()); buttonInformationPanel.add(buttonPanel, BorderLayout.SOUTH); -// buttonInformationPanel.add(informationPanel, BorderLayout.NORTH); + buttonInformationPanel.add(informationPanel, BorderLayout.NORTH); wizardDialog.getContentPane().add(buttonInformationPanel, java.awt.BorderLayout.SOUTH); wizardDialog.getContentPane().add(cardPanel, java.awt.BorderLayout.CENTER); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java 2009-09-06 15:28:00 UTC (rev 1837) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java 2009-09-07 13:47:42 UTC (rev 1838) @@ -49,8 +49,9 @@ /** * Information string for class choose panel. */ - public static final String INFORMATION = "In this panel all atomic classes in the ontology are shown in the list above. " - + "Select one of them which should be (re)learned from, then press \"Next-Button\""; + public static final String INFORMATION = "As you can see, all atomic classes of the ontology are shown in the list above. " + + "Select one of them for which you want to learn equivalent class expressions," + + " then press <Next>"; private ClassChoosePanel owlClassPanel; Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java 2009-09-06 15:28:00 UTC (rev 1837) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java 2009-09-07 13:47:42 UTC (rev 1838) @@ -48,8 +48,8 @@ public class KnowledgeSourcePanelDescriptor extends WizardPanelDescriptor implements ActionListener{ public static final String IDENTIFIER = "KNOWLEDGESOURCE_CHOOSE_PANEL"; - public static final String INFORMATION = "Select the type of knowledgesource you want to work with and then enter the URI." - + " After all press \"Next\"-button"; + public static final String INFORMATION = "Choose an OWL-ontology from file system or URI. Your are also able to extract a fragment " + + "from a SPARQL-endpoint. After all press <Next>"; private KnowledgeSourcePanel knowledgePanel; @@ -99,9 +99,11 @@ public void loadOntology(URI uri){ OREManager.getInstance().setCurrentKnowledgeSource(uri); + RecentManager.getInstance().addURI(uri); RecentManager.getInstance().serialize(); new OntologyLoadingTask(getWizard().getStatusBar()).execute(); + } private void handleOpenFromURI() { @@ -166,7 +168,7 @@ uri); new OntologyLoadingTask(getWizard().getStatusBar()).execute(); } - @SuppressWarnings(value = { "unused" }) + private void updateMetrics(){ knowledgePanel.updateMetrics(); } @@ -217,7 +219,7 @@ statusBar.setProgressTitle("Done"); getWizard().getDialog().setCursor(null); getWizard().setNextFinishButtonEnabled(true); -// updateMetrics(); + updateMetrics(); } } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java 2009-09-06 15:28:00 UTC (rev 1837) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java 2009-09-07 13:47:42 UTC (rev 1838) @@ -51,8 +51,8 @@ public class LearningPanelDescriptor extends WizardPanelDescriptor implements ActionListener, ListSelectionListener{ public static final String IDENTIFIER = "LEARNING_PANEL"; - public static final String INFORMATION = "In this panel you can start the learning algorithm. While it is running, " - + "temporary results are shown in the list above. Select one of them and press Next"; + public static final String INFORMATION = "Press <Start> to start learning. While it is running, " + + "temporary results are shown in the list above. Select one of them and press <Next>"; private LearningPanel learnPanel; private LearningTask learningTask; @@ -103,7 +103,11 @@ // Description de = new NamedClass("http://example.com/father#male"); if (!e.getValueIsAdjusting() && (learningTask.isDone() || learningTask.isCancelled())){ - OREManager.getInstance().setNewClassDescription(learnPanel.getResultTable().getSelectedValue()); + EvaluatedDescriptionClass selectedClassExpression = learnPanel.getResultTable().getSelectedValue(); +// if(!selectedClassExpression.isConsistent()){ +// learnPanel.add(new JLabel("Selected class expression may lead to an inconsistent knowledgebase.")); +// } + OREManager.getInstance().setNewClassDescription(selectedClassExpression); learnPanel.updateCurrentGraphicalCoveragePanel(OREManager.getInstance().getNewClassDescription()); } @@ -196,7 +200,7 @@ learnPanel.getResultTable().clear(); getWizard().getDialog().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); getWizard().getStatusBar().showProgress(true); - getWizard().getStatusBar().setProgressTitle("learning class expressions"); + getWizard().getStatusBar().setProgressTitle("Learning equivalent class expressions"); la = OREManager.getInstance().getLa(); timer = new Timer(); @@ -231,7 +235,7 @@ } getWizard().getDialog().setCursor(null); getWizard().getStatusBar().showProgress(false); - getWizard().getStatusBar().setProgressTitle("class expressions successfully learned"); + getWizard().getStatusBar().setProgressTitle("Done"); learnPanel.getStartButton().setEnabled(true); learnPanel.getStopButton().setEnabled(false); updateList(result); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ClassChoosePanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ClassChoosePanel.java 2009-09-06 15:28:00 UTC (rev 1837) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ClassChoosePanel.java 2009-09-07 13:47:42 UTC (rev 1838) @@ -53,6 +53,7 @@ contentPanel = getContentPanel(); setLayout(new java.awt.BorderLayout()); add(contentPanel, BorderLayout.CENTER); + } private JPanel getContentPanel() { @@ -62,7 +63,7 @@ JScrollPane scroll = new JScrollPane(classesTable); contentPanel.add(scroll); scroll.setPreferredSize(new Dimension(400, 400)); - + return contentPanel; } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/KnowledgeSourcePanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/KnowledgeSourcePanel.java 2009-09-06 15:28:00 UTC (rev 1837) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/KnowledgeSourcePanel.java 2009-09-07 13:47:42 UTC (rev 1838) @@ -33,6 +33,7 @@ import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; +import javax.swing.JLabel; import javax.swing.JPanel; import org.dllearner.tools.ore.OREManager; @@ -61,6 +62,8 @@ private GridBagConstraints c; private MetricsPanel metricsPanel; + + private JLabel ontologyName; @@ -74,11 +77,12 @@ c.gridx = 0; c.gridy = 0; - c.gridwidth = 2; + c.gridwidth = 1; c.gridheight = 1; c.fill = GridBagConstraints.HORIZONTAL; add(contentPanel, c); // addMetricsPanel(); + } @@ -137,21 +141,27 @@ box.add(recentLinkBox); } + metricsPanel = new MetricsPanel(); + box.add(Box.createVerticalStrut(4 * strutHeight)); + box.add(metricsPanel); panel.add(box); + return panel; } public void addMetricsPanel() { - c.gridx = 2; - c.gridy = 0; + c.gridx = 0; + c.gridy = 1; c.gridwidth = 1; - c.gridheight = 2; - c.weightx = 0.1; - c.weighty = 0.8; + c.gridheight = 1; + c.weightx = 0.0; + c.weighty = 0.0; + c.fill = GridBagConstraints.NONE; + metricsPanel = new MetricsPanel(); - c.fill = GridBagConstraints.VERTICAL; + add(metricsPanel, c); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/LearningPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/LearningPanel.java 2009-09-06 15:28:00 UTC (rev 1837) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/LearningPanel.java 2009-09-07 13:47:42 UTC (rev 1838) @@ -114,6 +114,7 @@ stopButton = new JButton(); buttonPanel.add(stopButton); stopButton.setText("Stop"); + stopButton.setEnabled(false); // add(buttonPanel, c); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |