From: <lor...@us...> - 2010-06-15 14:08:38
|
Revision: 2164 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=2164&view=rev Author: lorenz_b Date: 2010-06-15 14:08:31 +0000 (Tue, 15 Jun 2010) Log Message: ----------- Continued refactoring Prot?\195?\169g?\195?\169 plugin. Some more progress feedback is shown to the user now. Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/reasoning/ProtegeReasoner.java trunk/src/dl-learner/org/dllearner/tools/protege/ActionHandler.java trunk/src/dl-learner/org/dllearner/tools/protege/DLLearnerModel.java trunk/src/dl-learner/org/dllearner/tools/protege/DLLearnerView.java trunk/src/dl-learner/org/dllearner/tools/protege/GraphicalCoveragePanel.java trunk/src/dl-learner/org/dllearner/tools/protege/GraphicalCoveragePanelHandler.java trunk/src/dl-learner/org/dllearner/tools/protege/GraphicalCoverageTextField.java trunk/src/dl-learner/org/dllearner/tools/protege/Manager.java trunk/src/dl-learner/org/dllearner/tools/protege/ProtegePlugin.java trunk/src/dl-learner/org/dllearner/tools/protege/ReadingOntologyThread.java trunk/src/dl-learner/org/dllearner/tools/protege/StatusBar.java trunk/src/dl-learner/org/dllearner/tools/protege/SuggestClassPanel.java Modified: trunk/src/dl-learner/org/dllearner/reasoning/ProtegeReasoner.java =================================================================== --- trunk/src/dl-learner/org/dllearner/reasoning/ProtegeReasoner.java 2010-06-14 09:10:38 UTC (rev 2163) +++ trunk/src/dl-learner/org/dllearner/reasoning/ProtegeReasoner.java 2010-06-15 14:08:31 UTC (rev 2164) @@ -92,6 +92,7 @@ import org.semanticweb.owlapi.reasoner.Node; import org.semanticweb.owlapi.reasoner.NodeSet; import org.semanticweb.owlapi.reasoner.OWLReasoner; +import org.semanticweb.owlapi.reasoner.ReasonerProgressMonitor; import org.semanticweb.owlapi.util.SimpleIRIMapper; import org.semanticweb.owlapi.vocab.PrefixOWLOntologyFormat; @@ -104,6 +105,8 @@ private OWLDataFactory factory; private OWLReasoner reasoner; + private ReasonerProgressMonitor progressMonitor; + private ProtegeReasonerConfigurator configurator; private Set<OWLOntology> loadedOntologies; @@ -166,6 +169,10 @@ public ReasonerType getReasonerType() { return ReasonerType.PROTEGE; } + + public void setProgressMonitor(ReasonerProgressMonitor progressMonitor){ + this.progressMonitor = progressMonitor; + } @Override public void releaseKB() { @@ -343,9 +350,14 @@ private void dematerialise(){ long dematStartTime = System.currentTimeMillis(); logger.debug("dematerialising concepts"); - + progressMonitor.reasonerTaskStarted("Preparing DL-Learner ..."); + int size = atomicConcepts.size() + atomicRoles.size() + + booleanDatatypeProperties.size() + intDatatypeProperties.size() + + doubleDatatypeProperties.size(); + int cnt = 1; + for (NamedClass atomicConcept : atomicConcepts) { - + SortedSet<Individual> pos = getIndividualsWithPellet(atomicConcept); classInstancesPos.put(atomicConcept, (TreeSet<Individual>) pos); if (configurator.getDefaultNegation()) { @@ -354,13 +366,14 @@ Negation negatedAtomicConcept = new Negation(atomicConcept); classInstancesNeg.put(atomicConcept, (TreeSet<Individual>) getIndividuals(negatedAtomicConcept)); } - + progressMonitor.reasonerTaskProgressChanged(cnt++, size); } logger.debug("dematerialising object properties"); for (ObjectProperty atomicRole : atomicRoles) { opPos.put(atomicRole, getPropertyMembers(atomicRole)); + progressMonitor.reasonerTaskProgressChanged(cnt++, size); } logger.debug("dematerialising datatype properties"); @@ -368,18 +381,22 @@ for (DatatypeProperty dp : booleanDatatypeProperties) { bdPos.put(dp, (TreeSet<Individual>) getTrueDatatypeMembers(dp)); bdNeg.put(dp, (TreeSet<Individual>) getFalseDatatypeMembers(dp)); + progressMonitor.reasonerTaskProgressChanged(cnt++, size); } for (DatatypeProperty dp : intDatatypeProperties) { id.put(dp, getIntDatatypeMembers(dp)); + progressMonitor.reasonerTaskProgressChanged(cnt++, size); } for (DatatypeProperty dp : doubleDatatypeProperties) { dd.put(dp, getDoubleDatatypeMembers(dp)); + progressMonitor.reasonerTaskProgressChanged(cnt++, size); } long dematDuration = System.currentTimeMillis() - dematStartTime; logger.debug("TBox dematerialised in " + dematDuration + " ms"); + progressMonitor.reasonerTaskStopped(); } Modified: trunk/src/dl-learner/org/dllearner/tools/protege/ActionHandler.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/protege/ActionHandler.java 2010-06-14 09:10:38 UTC (rev 2163) +++ trunk/src/dl-learner/org/dllearner/tools/protege/ActionHandler.java 2010-06-15 14:08:31 UTC (rev 2164) @@ -19,20 +19,20 @@ */ package org.dllearner.tools.protege; -import java.awt.Cursor; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.List; -import java.util.Set; import java.util.Timer; import java.util.TimerTask; import javax.swing.JOptionPane; -import javax.swing.SwingUtilities; import javax.swing.SwingWorker; import org.dllearner.core.EvaluatedDescription; +import org.dllearner.utilities.owl.OWLAPIDescriptionConvertVisitor; +import org.protege.editor.core.ProtegeApplication; +import org.protege.editor.core.ui.progress.BackgroundTask; /** * This class processes input from the user. @@ -66,6 +66,8 @@ private static final String EQUIVALENT_CLASS_LEARNING_STRING = "<html>suggest equivalent class expression</html>"; private static final String SUPER_CLASS_LEARNING_STRING = "<html>suggest super class expression</html>"; private static JOptionPane optionPane; + + private BackgroundTask learningTask; /** * This is the constructor for the action handler. @@ -96,52 +98,29 @@ if (z.getActionCommand().equals(EQUIVALENT_CLASS_LEARNING_STRING) || z.getActionCommand().equals(SUPER_CLASS_LEARNING_STRING)) { - + Manager manager = Manager.getInstance(model.getOWLEditorKit()); setLearningOptions(); + view.setBusyTaskStarted("Preparing ..."); + manager.initLearningProblem(); + manager.initLearningAlgorithm(); + view.setBusyTaskEnded(); - Manager manager = Manager.getInstance(model.getOWLEditorKit()); -// manager.initKnowledgeSource(); -// manager.initReasoner(); -// manager.initLearningProblem(); -// manager.initLearningAlgorithm(); - view.setBusy(true); - manager.init(); - view.getRunButton().setEnabled(false); - String moreInformationsMessage = "<html><font size=\"3\">Learning started. Currently searching class expressions with length between " - + manager.getMinimumHorizontalExpansion() - + " and " - + manager.getMaximumHorizontalExpansion() + ".</font></html>"; - view.setHelpButtonVisible(true); - view.setHintMessage(moreInformationsMessage); + learningTask = ProtegeApplication.getBackgroundTaskManager().startTask("Learning..."); + + view.setLearningStarted(); + view.showHorizontalExpansionMessage(Manager.getInstance().getMinimumHorizontalExpansion(), + Manager.getInstance().getMaximumHorizontalExpansion()); + retriever = new SuggestionRetriever(); retriever.addPropertyChangeListener(view.getStatusBar()); retriever.execute(); - //######################################################################### -// model.setKnowledgeSource(); - -// view.getSuggestClassPanel().getSuggestionsTable().clear(); -// view.getSuggestClassPanel().repaint(); -// model.setLearningProblem(); -// model.setLearningAlgorithm(); -// view.getRunButton().setEnabled(false); -// view.getHintPanel().setForeground(Color.RED); -// CELOE celoe = (CELOE) model.getLearningAlgorithm(); -// -// String moreInformationsMessage = "<html><font size=\"3\">Learning started. Currently searching class expressions with length between " -// + celoe.getMinimumHorizontalExpansion() -// + " and " -// + celoe.getMaximumHorizontalExpansion() + ".</font></html>"; -// view.setHelpButtonVisible(true); -// view.setHintMessage(moreInformationsMessage); -// retriever = new SuggestionRetriever(); -// retriever.addPropertyChangeListener(view.getStatusBar()); -// retriever.execute(); } if (z.getActionCommand().equals(ADD_BUTTON_STRING)) { - model.changeDLLearnerDescriptionsToOWLDescriptions(evaluatedDescription.getDescription()); + Manager.getInstance().addAxiom(OWLAPIDescriptionConvertVisitor + .getOWLClassExpression(evaluatedDescription.getDescription())); String message = "<html><font size=\"3\">class expression added</font></html>"; view.setHintMessage(message); view.setHelpButtonVisible(false); @@ -159,14 +138,7 @@ } if (z.toString().contains(HELP_BUTTON_STRING)) { - Set<String> uris = model.getOntologyURIString(); - String currentClass = ""; - for (String uri : uris) { - if (model.getCurrentConcept().toString().contains(uri)) { - currentClass = model.getCurrentConcept() - .toManchesterSyntaxString(uri, null); - } - } + String currentClass = Manager.getInstance().getCurrentlySelectedClassRendered(); //helpPanel.renderHelpTextMessage(currentClass); //view.getLearnerView().add(); @@ -223,16 +195,14 @@ @Override protected List<? extends EvaluatedDescription> doInBackground() throws Exception { - - view.setStatusBarVisible(true); - view.getStatusBar().setMaximumValue(Manager.getInstance().getMaxExecutionTimeInSeconds()); + timer = new Timer(); timer.schedule(new TimerTask(){ int progress = 0; List<? extends EvaluatedDescription> result; @Override public void run() { - progress += 1; + progress++; setProgress(progress); if(!isCancelled() && Manager.getInstance().isLearning()){ result = Manager.getInstance().getCurrentlyLearnedDescriptions(); @@ -249,46 +219,28 @@ @Override public void done() { - timer.cancel(); List<? extends EvaluatedDescription> result = Manager.getInstance().getCurrentlyLearnedDescriptions(); - setProgress(0); - view.stopStatusBar(); - view.setBusy(false); updateList(result); - view.showAlgorithmTerminatedMessage(); - + setProgress(0); + view.setLearningFinished(); + ProtegeApplication.getBackgroundTaskManager().endTask(learningTask); } @Override - protected void process( - List<List<? extends EvaluatedDescription>> resultLists) { - + protected void process(List<List<? extends EvaluatedDescription>> resultLists) { for (List<? extends EvaluatedDescription> list : resultLists) { updateList(list); } } - private void updateList( - final List<? extends EvaluatedDescription> result) { + private void updateList(final List<? extends EvaluatedDescription> result) { + model.setSuggestList(result); + view.setSuggestions(result); + view.showHorizontalExpansionMessage(Manager.getInstance().getMinimumHorizontalExpansion(), + Manager.getInstance().getMaximumHorizontalExpansion()); - Runnable doUpdateList = new Runnable() { - - public void run() { - model.setSuggestList(result); - view.getSuggestClassPanel().addSuggestions(result); - String moreInformationsMessage = "<html><font size=\"3\">Learning started. Currently searching class expressions with length between " - + Manager.getInstance().getMinimumHorizontalExpansion() - + " and " - + Manager.getInstance().getMaximumHorizontalExpansion() - + ".</font></html>"; - view.setHintMessage(moreInformationsMessage); - } - }; - SwingUtilities.invokeLater(doUpdateList); - } - } - + } Modified: trunk/src/dl-learner/org/dllearner/tools/protege/DLLearnerModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/protege/DLLearnerModel.java 2010-06-14 09:10:38 UTC (rev 2163) +++ trunk/src/dl-learner/org/dllearner/tools/protege/DLLearnerModel.java 2010-06-15 14:08:31 UTC (rev 2164) @@ -235,6 +235,7 @@ public void setReasoner() { this.reasoner = cm.reasoner(ProtegeReasoner.class, sources); reasoner.setOWLReasoner(editor.getOWLModelManager().getReasoner()); + reasoner.setProgressMonitor(view.getStatusBar()); // this.reasoner = new ProtegeReasoner(sources, editor.getOWLModelManager().getReasoner()); try { reasoner.init(); Modified: trunk/src/dl-learner/org/dllearner/tools/protege/DLLearnerView.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/protege/DLLearnerView.java 2010-06-14 09:10:38 UTC (rev 2163) +++ trunk/src/dl-learner/org/dllearner/tools/protege/DLLearnerView.java 2010-06-15 14:08:31 UTC (rev 2164) @@ -28,6 +28,7 @@ import java.awt.GridBagLayout; import java.awt.event.ActionListener; import java.net.URL; +import java.util.List; import java.util.Set; import javax.swing.DefaultListModel; @@ -40,6 +41,7 @@ import javax.swing.JTextPane; import javax.swing.JToggleButton; +import org.dllearner.core.EvaluatedDescription; import org.protege.editor.owl.OWLEditorKit; import org.semanticweb.owlapi.model.OWLClassExpression; /** @@ -121,7 +123,7 @@ private String labels; private int individualSize; private SuggestClassPanelHandler sugPanelHandler; - private StatusBar stat; + private StatusBar statusBar; private static final String WIKI_STRING = "<html><font size=\"3\">See <a href=\"http://dl-learner.org/wiki/ProtegePlugin\">DL-Learner plugin page</a> for an introduction.</font></html>"; /** @@ -166,14 +168,14 @@ runPanel = new JPanel(new FlowLayout()); accept = new JButton("<html>ADD</html>"); addButtonPanel = new JPanel(new BorderLayout()); - stat = new StatusBar(); - stat.setBackground(learnerScroll.getBackground()); + statusBar = new StatusBar(); + statusBar.setBackground(learnerScroll.getBackground()); this.setStatusBarVisible(false); hint = new JTextPane(); hint.setBackground(learnerScroll.getBackground()); hint.setContentType("text/html"); hint.setEditable(false); - hint.setText("<html><font size=\"3\">To get suggestions for class expression, please click the button above.</font></html>"); +// hint.setText("<html><font size=\"3\">To get suggestions for class expression, please click the button above.</font></html>"); learner = new JPanel(); advanced.setSize(20, 20); learner.setLayout(new GridBagLayout()); @@ -216,7 +218,7 @@ helpButton.setVisible(false); hint.setForeground(Color.BLACK); - hint.setText("<html><font size=\"3\">To get suggestions for class expression, please click the button above.</font></html>"); +// hint.setText("<html><font size=\"3\">To get suggestions for class expression, please click the button above.</font></html>"); String currentConcept = editorKit.getOWLWorkspace().getOWLSelectionModel().getLastSelectedClass().toString(); if(!labels.equals(currentConcept) || individualSize != editorKit.getModelManager().getActiveOntology().getIndividualsInSignature(true).size()) { if(individualSize != editorKit.getModelManager().getActiveOntology().getIndividualsInSignature(true).size()) { @@ -274,7 +276,7 @@ c.weighty = 0.0; c.gridx = 0; c.gridy = 2; - learner.add(stat, c); + learner.add(statusBar, c); c.fill = GridBagConstraints.BOTH; c.weightx = 0.0; @@ -350,7 +352,7 @@ * is started. */ public void setStatusBarVisible(boolean b) { - stat.setVisible(b); + statusBar.setVisible(b); } /** * This method enables the GraphicalCoveragePanel after a class expression is @@ -573,14 +575,14 @@ * This method starts the status bar. */ public void startStatusBar() { - stat.showProgress(true); + statusBar.showProgress(true); } /** * This method stops the status bar. */ public void stopStatusBar() { - stat.showProgress(false); + statusBar.showProgress(false); } /** @@ -588,7 +590,7 @@ * @return statusbar */ public StatusBar getStatusBar() { - return stat; + return statusBar; } public HyperLinkHandler getHyperLinkHandler() { @@ -604,4 +606,49 @@ } + public void setBusyTaskStarted(String taskName){ + setBusy(true); + setHelpButtonVisible(true); + setStatusBarVisible(true); + statusBar.showProgress(true); + statusBar.setMessage(taskName); + } + + public void setBusyTaskEnded(){ + setBusy(false); + setHelpButtonVisible(false); + setStatusBarVisible(false); + statusBar.showProgress(false); + statusBar.setMessage(""); + } + + public void setLearningStarted(){ + setBusy(true); + setHelpButtonVisible(true); + setStatusBarVisible(true); + run.setEnabled(false); + statusBar.setMaximumValue(Manager.getInstance().getMaxExecutionTimeInSeconds()); + statusBar.setMessage("Learning ..."); + } + + public void setLearningFinished(){ + stopStatusBar(); + setBusy(false); + showAlgorithmTerminatedMessage(); + } + + public void showHorizontalExpansionMessage(int min, int max){ + StringBuffer sb = new StringBuffer(); + sb.append("<html><font size=\"3\">Currently searching class expressions with length between "); + sb.append(min); + sb.append(" and "); + sb.append(max); + sb.append(".</font></html>"); + setHintMessage(sb.toString()); + } + + public void setSuggestions(List<? extends EvaluatedDescription> suggestions){ + sugPanel.setSuggestions(suggestions); + } + } Modified: trunk/src/dl-learner/org/dllearner/tools/protege/GraphicalCoveragePanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/protege/GraphicalCoveragePanel.java 2010-06-14 09:10:38 UTC (rev 2163) +++ trunk/src/dl-learner/org/dllearner/tools/protege/GraphicalCoveragePanel.java 2010-06-15 14:08:31 UTC (rev 2164) @@ -62,7 +62,6 @@ private Ellipse2D newConcept; private EvaluatedDescription eval; - private final DLLearnerModel model; private String conceptNew; private final Vector<IndividualPoint> posCovIndVector; private final Vector<IndividualPoint> posNotCovIndVector; @@ -102,16 +101,17 @@ this.setVisible(false); this.setForeground(Color.GREEN); eval = desc; - model = m; - id = model.getID(); +// id = model.getID(); + id = EQUI_STRING; darkGreen = new Color(0, 100, 0); darkRed = new Color(205, 0, 0); random = new Random(); - for(String uri : model.getOntologyURIString()) { - if(eval.getDescription().toString().contains(uri)) { - conceptNew = eval.getDescription().toManchesterSyntaxString(uri, null); - } - } +// for(String uri : model.getOntologyURIString()) { +// if(eval.getDescription().toString().contains(uri)) { +// conceptNew = eval.getDescription().toManchesterSyntaxString(uri, null); +// } +// } + conceptNew = Manager.getInstance().getRendering(eval.getDescription()); conceptVector = new Vector<String>(); posCovIndVector = new Vector<IndividualPoint>(); @@ -119,7 +119,7 @@ additionalIndividuals = new Vector<IndividualPoint>(); points = new Vector<IndividualPoint>(); this.computeGraphics(); - handler = new GraphicalCoveragePanelHandler(this, desc, model); + handler = new GraphicalCoveragePanelHandler(this, desc); if(shiftXAxis == 0) { oldConcept = new Ellipse2D.Double(ELLIPSE_X_AXIS + (2 * adjustment)+3, ELLIPSE_Y_AXIS+3, WIDTH, HEIGHT); @@ -137,7 +137,7 @@ + adjustment, ELLIPSE_Y_AXIS, WIDTH + distortionOld, HEIGHT + distortionOld); } - factory = model.getOWLEditorKit().getOWLModelManager().getOWLDataFactory(); + factory = Manager.getInstance().getActiveOntology().getOWLOntologyManager().getOWLDataFactory(); this.computeIndividualPoints(); this.addMouseMotionListener(handler); this.addMouseListener(handler); @@ -159,8 +159,7 @@ g2D.setColor(Color.BLACK); // Plus 1 - if (coveredIndividualSize != model.getReasoner().getIndividuals( - model.getCurrentConcept()).size() + if (coveredIndividualSize != Manager.getInstance().getIndividuals().size() && notCoveredInd != 0) { g2D.drawLine(x1 - 1 - shiftOldConcept, y1 - 1, x2 + 1 - shiftOldConcept, y1 - 1); @@ -211,8 +210,7 @@ y2 + 1); // Plus 3 - if (coveredIndividualSize != model.getReasoner().getIndividuals( - model.getCurrentConcept()).size() && ((EvaluatedDescriptionClass) eval).getAdditionalInstances().size() != 0) { + if (coveredIndividualSize != Manager.getInstance().getIndividuals().size() && ((EvaluatedDescriptionClass) eval).getAdditionalInstances().size() != 0) { g2D.drawLine(x1 - 1 + shiftNewConcept, y1 - 1, x2 + 1 + shiftNewConcept, y1 - 1); g2D.drawLine(x1 + shiftNewConcept, centerY - 1, x2 @@ -407,13 +405,8 @@ + this.getShiftCovered() && y >= this.getY1() && y <= this .getY2())) { - Set<String> uriString = model.getOntologyURIString(); - for(String uri : uriString) { - if(ind.toString().contains(uri)) { - posCovIndVector.add(new IndividualPoint("*", - (int) x, (int) y, ind.toManchesterSyntaxString(uri, null), factory.getOWLNamedIndividual(IRI.create(ind.getURI())), ind, uri)); - } - } + posCovIndVector.add(new IndividualPoint("*", + (int) x, (int) y, Manager.getInstance().getRendering(ind), factory.getOWLNamedIndividual(IRI.create(ind.getURI())), ind, "")); i++; flag = false; @@ -455,21 +448,11 @@ .getY2() + this.getShiftNewConcept())) { if (id.equals(EQUI_STRING)) { - Set<String> uriString = model.getOntologyURIString(); - for(String uri : uriString) { - if(ind.toString().contains(uri)) { - posNotCovIndVector.add(new IndividualPoint("*", - (int) x, (int) y, ind.toManchesterSyntaxString(uri, null), factory.getOWLNamedIndividual(IRI.create(ind.getURI())), ind, uri)); - } - } + posNotCovIndVector.add(new IndividualPoint("*", + (int) x, (int) y, Manager.getInstance().getRendering(ind), factory.getOWLNamedIndividual(IRI.create(ind.getURI())), ind, "")); } else { - Set<String> uriString = model.getOntologyURIString(); - for(String uri : uriString) { - if(ind.toString().contains(uri)) { - additionalIndividuals.add(new IndividualPoint("*", - (int) x, (int) y, ind.toManchesterSyntaxString(uri, null), factory.getOWLNamedIndividual(IRI.create(ind.getURI())), ind, uri)); - } - } + additionalIndividuals.add(new IndividualPoint("*", + (int) x, (int) y, Manager.getInstance().getRendering(ind), factory.getOWLNamedIndividual(IRI.create(ind.getURI())), ind, "")); } j++; flag = false; @@ -485,8 +468,7 @@ } } - Set<Individual> notCovInd = model.getReasoner().getIndividuals( - model.getCurrentConcept()); + Set<Individual> notCovInd = Manager.getInstance().getIndividuals(); notCovInd.removeAll(posInd); notCoveredInd = notCovInd.size(); int k = 0; @@ -504,13 +486,8 @@ - this.getShiftOldConcept() && y >= this.getY1() && y <= this .getY2())) { - Set<String> uriString = model.getOntologyURIString(); - for(String uri : uriString) { - if(ind.toString().contains(uri)) { - posNotCovIndVector.add(new IndividualPoint("*", - (int) x, (int) y, ind.toManchesterSyntaxString(uri, null), factory.getOWLNamedIndividual(IRI.create(ind.getURI())), ind, uri)); - } - } + posNotCovIndVector.add(new IndividualPoint("*", + (int) x, (int) y, Manager.getInstance().getRendering(ind), factory.getOWLNamedIndividual(IRI.create(ind.getURI())), ind, "")); k++; flag = false; x = random.nextInt(MAX_RANDOM_NUMBER); Modified: trunk/src/dl-learner/org/dllearner/tools/protege/GraphicalCoveragePanelHandler.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/protege/GraphicalCoveragePanelHandler.java 2010-06-14 09:10:38 UTC (rev 2163) +++ trunk/src/dl-learner/org/dllearner/tools/protege/GraphicalCoveragePanelHandler.java 2010-06-15 14:08:31 UTC (rev 2164) @@ -57,7 +57,6 @@ private final GraphicalCoveragePanel panel; private final EvaluatedDescription description; - private final DLLearnerModel model; private BasicComboPopup scrollPopup; private final Vector<String> individualComboBox; private JComboBox indiBox; @@ -74,12 +73,10 @@ * DLLearnerModel */ public GraphicalCoveragePanelHandler(GraphicalCoveragePanel p, - EvaluatedDescription eval, DLLearnerModel m) { + EvaluatedDescription eval) { this.panel = p; description = eval; - model = m; - ontology = model.getOWLEditorKit().getOWLModelManager() - .getActiveOntology(); + ontology = Manager.getInstance().getActiveOntology(); individualComboBox = new Vector<String>(); } @@ -116,7 +113,7 @@ } Vector<IndividualPoint> v = panel.getIndividualVector(); - ProtegeReasoner reasoner = model.getReasoner(); + ProtegeReasoner reasoner = Manager.getInstance().getReasoner(); for (int i = 0; i < v.size(); i++) { if (v.get(i).getXAxis() >= m.getX() - 5 && v.get(i).getXAxis() <= m.getX() + 5 @@ -227,13 +224,7 @@ int i = covInd.size(); if (i > 0) { for (Individual ind : covInd) { - Set<String> uriString = model.getOntologyURIString(); - for (String uri : uriString) { - if (ind.toString().contains(uri)) { - individualComboBox.add(ind - .toManchesterSyntaxString(uri, null)); - } - } + individualComboBox.add(Manager.getInstance().getRendering(ind)); } indiBox = new JComboBox(individualComboBox); scrollPopup = new BasicComboPopup(indiBox); @@ -262,13 +253,7 @@ int i = addInd.size(); if (i > 0) { for (Individual ind : addInd) { - Set<String> uriString = model.getOntologyURIString(); - for (String uri : uriString) { - if (ind.toString().contains(uri)) { - individualComboBox.add(ind - .toManchesterSyntaxString(uri, null)); - } - } + individualComboBox.add(Manager.getInstance().getRendering(ind)); } indiBox = new JComboBox(individualComboBox); scrollPopup = new BasicComboPopup(indiBox); @@ -284,20 +269,13 @@ && arg0.getY() <= panel.getY2()) { individualComboBox.clear(); - Set<Individual> notCovInd = model.getReasoner().getIndividuals( - model.getCurrentConcept()); + Set<Individual> notCovInd = Manager.getInstance().getIndividuals(); notCovInd.removeAll(((EvaluatedDescriptionClass) description) .getCoveredInstances()); int i = notCovInd.size(); if (i > 0) { for (Individual ind : notCovInd) { - Set<String> uriString = model.getOntologyURIString(); - for (String uri : uriString) { - if (ind.toString().contains(uri)) { - individualComboBox.add(ind - .toManchesterSyntaxString(uri, null)); - } - } + individualComboBox.add(Manager.getInstance().getRendering(ind)); } indiBox = new JComboBox(individualComboBox); scrollPopup = new BasicComboPopup(indiBox); Modified: trunk/src/dl-learner/org/dllearner/tools/protege/GraphicalCoverageTextField.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/protege/GraphicalCoverageTextField.java 2010-06-14 09:10:38 UTC (rev 2163) +++ trunk/src/dl-learner/org/dllearner/tools/protege/GraphicalCoverageTextField.java 2010-06-15 14:08:31 UTC (rev 2164) @@ -32,7 +32,8 @@ private final String id; private DLLearnerModel model; EvaluatedDescription description; - private String conceptNew; + private String newConceptRendered; + private String oldConceptRendered; //private final JScrollPane textScroll; public GraphicalCoverageTextField(EvaluatedDescription desc, DLLearnerModel m) { @@ -45,41 +46,46 @@ this.setBackground(model.getOWLEditorKit().getOWLWorkspace().getOWLComponentFactory().getOWLClassSelectorPanel().getBackground()); this.id = model.getID(); this.description = desc; - - for(String uri : model.getOntologyURIString()) { - if(description.getDescription().toString().contains(uri)) { - conceptNew = description.getDescription().toManchesterSyntaxString(uri, null); - } - } + Manager manager = Manager.getInstance(); + newConceptRendered = manager.getRendering(desc.getDescription()); + oldConceptRendered = manager.getRendering(manager.getCurrentlySelectedClass()); this.setText(); } private void setText() { - int coveredInstances = ((EvaluatedDescriptionClass) description).getCoveredInstances().size(); - int allInstances = coveredInstances + ((EvaluatedDescriptionClass) description).getNotCoveredInstances().size(); + int coveredInstancesCount = ((EvaluatedDescriptionClass) description).getCoveredInstances().size(); + int allInstancesCount = coveredInstancesCount + ((EvaluatedDescriptionClass) description).getNotCoveredInstances().size(); + int additionalInstancesCount = ((EvaluatedDescriptionClass) description).getAdditionalInstances().size(); int coverage = (int)(((EvaluatedDescriptionClass) description).getCoverage() * 100); - String text ="<html><p><font size=\"3\" color=\"yellow\">\u25cf</font><font size=\"3\" color=\"black\"> " + model.getOldConceptOWLAPI().toString() + "</font></p>" + - "<p style=\"max-width:50px;\"><font size=\"3\" color=\"EE9A00\">\u25cf</font><font size=\"3\" color=\"black\"> " + conceptNew + "</font></p>" + - "<p><font size=\"1\" color=\"green\">\u25aa </font><font size=\"3\" color=\"black\">individuals covered by </font> <font size=\"3\" color=\"EE9A00\">\u25cf</font>" + - "<font size=\"3\" color=\"black\"> and </font> <font size=\"3\" color=\"yellow\">\u25cf</font><font size=\"3\" color=\"black\"> (OK)</font></p> "; - if(id.equals(EQUI_STRING)) { - text += "<p><font size=\"1\" color=\"red\">\u25aa </font><font size=\"3\" color=\"black\">individuals covered by </font><font size=\"3\" color=\"EE9A00\">\u25cf</font></font><font size=\"3\" color=\"black\"> (potential problem)</font></p>" + - "<p><font size=\"1\" color=\"red\">\u25aa </font><font size=\"3\" color=\"black\">individuals covered by </font><font size=\"3\" color=\"yellow\">\u25cf</font></font><font size=\"3\" color=\"black\"> (potential problem)</font></p>"; - } else { - text += "<p><font size=\"1\" color=\"green\">\u25aa </font><font size=\"3\" color=\"black\">individuals covered by </font><font size=\"3\" color=\"EE9A00\">\u25cf</font></font><font size=\"3\" color=\"black\"> (no problem)</font></p>" + - "<p><font size=\"1\" color=\"red\">\u25aa </font><font size=\"3\" color=\"black\">individuals covered by </font><font size=\"3\" color=\"yellow\">\u25cf</font></font><font size=\"3\" color=\"black\"> (potential problem)</font></p>";; - } - text += "<p><font size=\"3\" color=\"black\">Covers " + coveredInstances + - " of " + allInstances + "(" + coverage + " %) of class instances</font></p>" + - "<p><font size=\"3\" color=\"black\">Covers " + ((EvaluatedDescriptionClass) description).getAdditionalInstances().size() + " additional instances</font></p>"; - if(!((EvaluatedDescriptionClass) description).isConsistent()) { - text += "<p style=\"max-width:100px;\"><font size=\"3\" color=\"red\">Adding this class expression may lead to an inconsistent ontology.</font></p>"; - } - if(description.getAccuracy() == 1.0) { - text += "<p><font size=\"3\" color=\"EE9A00\">\u25cf</font><font size=\"3\" color=\"black\"> and </font> <font size=\"3\" color=\"yellow\">\u25cf</font> cover the same instances.</p>"; - } - text += "</html>"; - this.setText(text); + + StringBuffer sb = new StringBuffer(); + sb.append("<html><p><font size=\"3\" color=\"yellow\">\u25cf</font><font size=\"3\" color=\"black\"> "); + sb.append(oldConceptRendered); + sb.append("</font></p>"); + sb.append("<p style=\"max-width:50px;\"><font size=\"3\" color=\"EE9A00\">\u25cf</font><font size=\"3\" color=\"black\"> "); + sb.append(newConceptRendered); + sb.append("</font></p>"); + sb.append("<p><font size=\"1\" color=\"green\">\u25aa </font><font size=\"3\" color=\"black\">individuals covered by </font> <font size=\"3\" color=\"EE9A00\">\u25cf</font>"); + sb.append("<font size=\"3\" color=\"black\"> and </font> <font size=\"3\" color=\"yellow\">\u25cf</font><font size=\"3\" color=\"black\"> (OK)</font></p> "); + if(id.equals(EQUI_STRING)){ + sb.append("<p><font size=\"1\" color=\"red\">\u25aa </font><font size=\"3\" color=\"black\">individuals covered by </font><font size=\"3\" color=\"EE9A00\">\u25cf</font></font><font size=\"3\" color=\"black\"> (potential problem)</font></p>"); + sb.append("<p><font size=\"1\" color=\"red\">\u25aa </font><font size=\"3\" color=\"black\">individuals covered by </font><font size=\"3\" color=\"yellow\">\u25cf</font></font><font size=\"3\" color=\"black\"> (potential problem)</font></p>"); + } else { + sb.append("<p><font size=\"1\" color=\"green\">\u25aa </font><font size=\"3\" color=\"black\">individuals covered by </font><font size=\"3\" color=\"EE9A00\">\u25cf</font></font><font size=\"3\" color=\"black\"> (no problem)</font></p>"); + sb.append("<p><font size=\"1\" color=\"red\">\u25aa </font><font size=\"3\" color=\"black\">individuals covered by </font><font size=\"3\" color=\"yellow\">\u25cf</font></font><font size=\"3\" color=\"black\"> (potential problem)</font></p>"); + } + sb.append("<p><font size=\"3\" color=\"black\">Covers ").append(coveredInstancesCount).append(" of ").append(allInstancesCount).append("(").append(coverage).append(" %) of class instances</font></p>"); + sb.append("<p><font size=\"3\" color=\"black\">Covers ").append(additionalInstancesCount).append(" additional instances</font></p>"); + if(!((EvaluatedDescriptionClass) description).isConsistent()) { + sb.append("<p style=\"max-width:100px;\"><font size=\"3\" color=\"red\">Adding this class expression may lead to an inconsistent ontology.</font></p>"); + } + if(description.getAccuracy() == 1.0) { + sb.append("<p><font size=\"3\" color=\"EE9A00\">\u25cf</font><font size=\"3\" color=\"black\"> and </font> <font size=\"3\" color=\"yellow\">\u25cf</font> cover the same instances.</p>"); + } + sb.append("</html>"); + + + this.setText(sb.toString()); //textScroll.setViewportView(this); } Modified: trunk/src/dl-learner/org/dllearner/tools/protege/Manager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/protege/Manager.java 2010-06-14 09:10:38 UTC (rev 2163) +++ trunk/src/dl-learner/org/dllearner/tools/protege/Manager.java 2010-06-15 14:08:31 UTC (rev 2164) @@ -3,6 +3,7 @@ import java.net.MalformedURLException; import java.util.Collections; import java.util.List; +import java.util.SortedSet; import org.dllearner.algorithms.celoe.CELOE; import org.dllearner.core.ComponentInitException; @@ -11,22 +12,35 @@ import org.dllearner.core.LearningAlgorithm; import org.dllearner.core.LearningProblem; import org.dllearner.core.LearningProblemUnsupportedException; +import org.dllearner.core.owl.Description; +import org.dllearner.core.owl.Individual; import org.dllearner.kb.OWLAPIOntology; import org.dllearner.learningproblems.ClassLearningProblem; import org.dllearner.learningproblems.EvaluatedDescriptionClass; import org.dllearner.reasoning.ProtegeReasoner; import org.dllearner.tools.ore.LearningManager.LearningType; +import org.dllearner.utilities.owl.OWLAPIConverter; +import org.dllearner.utilities.owl.OWLAPIDescriptionConvertVisitor; import org.protege.editor.owl.OWLEditorKit; 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.selection.OWLSelectionModelListener; +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.OWLOntology; +import org.semanticweb.owlapi.model.OWLOntologyChange; +import org.semanticweb.owlapi.model.OWLOntologyManager; +import org.semanticweb.owlapi.reasoner.ReasonerProgressMonitor; public class Manager implements OWLModelManagerListener, OWLSelectionModelListener{ private static Manager instance; private OWLEditorKit editorKit; + private ReasonerProgressMonitor progressMonitor; private boolean reinitNecessary = true; @@ -136,6 +150,7 @@ public void initReasoner(){ reasoner = cm.reasoner(ProtegeReasoner.class, ks); reasoner.setOWLReasoner(editorKit.getOWLModelManager().getReasoner()); + reasoner.setProgressMonitor(progressMonitor); try { reasoner.init(); } catch (ComponentInitException e) { @@ -143,6 +158,52 @@ } } + public void initReasonerAsynchronously(){ + reasoner = cm.reasoner(ProtegeReasoner.class, ks); + reasoner.setOWLReasoner(editorKit.getOWLModelManager().getReasoner()); + reasoner.setProgressMonitor(progressMonitor); + Thread t = new Thread(new Runnable() { + @Override + public void run() { + try { + reasoner.init(); + } catch (ComponentInitException e) { + e.printStackTrace(); + } + } + }); + t.start(); + } + + public void addAxiom(OWLClassExpression description){ + OWLClass selectedClass = editorKit.getOWLWorkspace().getOWLSelectionModel().getLastSelectedClass(); + if(learningType == LearningType.EQUIVALENT){ + addEquivalentClassesAxiom(selectedClass, description); + } else { + addSuperClassAxiom(selectedClass, description); + } + } + + private void addSuperClassAxiom(OWLClassExpression subClass, OWLClassExpression superClass){ + OWLOntology ontology = editorKit.getOWLModelManager().getActiveOntology(); + OWLOntologyManager manager = ontology.getOWLOntologyManager(); + OWLAxiom subClassAxiom = manager.getOWLDataFactory().getOWLSubClassOfAxiom(subClass, superClass); + OWLOntologyChange change = new AddAxiom(ontology, subClassAxiom); + manager.applyChange(change); + } + + private void addEquivalentClassesAxiom(OWLClassExpression equiv1, OWLClassExpression equiv2){ + OWLOntology ontology = editorKit.getOWLModelManager().getActiveOntology(); + OWLOntologyManager manager = ontology.getOWLOntologyManager(); + OWLAxiom equivalentClassesAxiom = manager.getOWLDataFactory().getOWLEquivalentClassesAxiom(equiv1, equiv2); + OWLOntologyChange change = new AddAxiom(ontology, equivalentClassesAxiom); + manager.applyChange(change); + } + + public void setProgressMonitor(ReasonerProgressMonitor progressMonitor){ + this.progressMonitor = progressMonitor; + } + public void startLearning(){ la.start(); } @@ -230,7 +291,55 @@ public int getMaximumHorizontalExpansion(){ return ((CELOE)la).getMaximumHorizontalExpansion(); } - + + public boolean isConsistent(){ + return reasoner.isConsistent(); + } + + public SortedSet<Individual> getIndividuals(){ + OWLClass selectedClass = editorKit.getOWLWorkspace().getOWLSelectionModel().getLastSelectedClass(); + return reasoner.getIndividuals(OWLAPIConverter.convertClass(selectedClass)); + } + + public boolean canLearn(){ + OWLClass selectedClass = editorKit.getOWLWorkspace().getOWLSelectionModel().getLastSelectedClass(); + boolean canLearn = reasoner.getIndividuals(OWLAPIConverter.convertClass(selectedClass)).size() > 0; + return canLearn; + } + + public String getRendering(Description desc){ + String rendering = editorKit.getModelManager().getRendering( + OWLAPIDescriptionConvertVisitor.getOWLClassExpression(desc)); + return rendering; + } + + public String getRendering(OWLClass cl){ + String rendering = editorKit.getModelManager().getRendering(cl); + return rendering; + } + + public String getRendering(Individual ind){ + String rendering = editorKit.getModelManager().getRendering( + OWLAPIConverter.getOWLAPIIndividual(ind)); + return rendering; + } + + public ProtegeReasoner getReasoner(){ + return reasoner; + } + + public OWLOntology getActiveOntology(){ + return editorKit.getOWLModelManager().getActiveOntology(); + } + + public OWLClass getCurrentlySelectedClass(){ + return editorKit.getOWLWorkspace().getOWLSelectionModel().getLastSelectedClass(); + } + + public String getCurrentlySelectedClassRendered(){ + return getRendering(getCurrentlySelectedClass()); + } + @Override public void handleChange(OWLModelManagerChangeEvent event) { if(event.isType(EventType.REASONER_CHANGED) || event.isType(EventType.ACTIVE_ONTOLOGY_CHANGED)){ Modified: trunk/src/dl-learner/org/dllearner/tools/protege/ProtegePlugin.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/protege/ProtegePlugin.java 2010-06-14 09:10:38 UTC (rev 2163) +++ trunk/src/dl-learner/org/dllearner/tools/protege/ProtegePlugin.java 2010-06-15 14:08:31 UTC (rev 2164) @@ -79,6 +79,7 @@ @Override public void initialise() throws Exception { view = new DLLearnerView(super.getOWLEditorKit()); + Manager.getInstance(getOWLEditorKit()).setProgressMonitor(view.getStatusBar()); System.out.println("Initializing DL-Learner plugin..."); addListeners(); } Modified: trunk/src/dl-learner/org/dllearner/tools/protege/ReadingOntologyThread.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/protege/ReadingOntologyThread.java 2010-06-14 09:10:38 UTC (rev 2163) +++ trunk/src/dl-learner/org/dllearner/tools/protege/ReadingOntologyThread.java 2010-06-15 14:08:31 UTC (rev 2164) @@ -32,7 +32,7 @@ import org.semanticweb.owlapi.model.OWLClass; /** - * This class reads the ontologie in a separate thread. + * This class reads the ontology in a separate thread. * * @author Christian Koetteritzsch * @@ -172,40 +172,58 @@ @Override public void run() { - String loading = "<html><font size=\"3\">loading instances...</font></html>"; + view.setStatusBarVisible(true); + view.setBusy(true); + Manager.getInstance().initKnowledgeSource(); + Manager.getInstance().initReasoner(); + view.setStatusBarVisible(false); + view.setBusy(false); + if(Manager.getInstance().canLearn()){ + view.getRunButton().setEnabled(true); + view + .setHintMessage("<html><font size=\"3\">To get suggestions for class descriptions, please click the button above.</font></html>"); + } else { + String message = "<html><font size=\"3\" color=\"red\">There are no instances for " + + current + + " available. Please insert some instances.</font></html>"; view.getHintPanel().setForeground(Color.RED); - view.setHintMessage(loading); - if (!model.isReasonerSet() - || model.getIsKnowledgeSourceIsUpdated() == true) { - model.setKnowledgeSource(); - model.setReasoner(); + view.setHintMessage(message); } - reasoner = model.getReasoner(); - isInconsistent = view.getIsInconsistent(); - if (!isInconsistent) { - this.checkURI(); - this.setPositiveConcept(); - if (this.hasIndividuals()) { - view.getRunButton().setEnabled(true); - view.getHintPanel().setForeground(Color.BLACK); - view - .setHintMessage("<html><font size=\"3\">To get suggestions for class descriptions, please click the button above.</font></html>"); - - } else { - view.getRunButton().setEnabled(false); - view.getHintPanel().setVisible(true); - String message = "<html><font size=\"3\" color=\"red\">There are no Instances for " - + current - + " available. Please insert some Instances.</font></html>"; - view.getHintPanel().setForeground(Color.RED); - view.setHintMessage(message); - } - } else { - view.getHintPanel().setForeground(Color.RED); - view.getRunButton().setEnabled(false); - view - .setHintMessage("The ontology is inconsistent and suggestions for class descriptions can only \nbe computed on consistent ontologies. Please repair the ontology first"); - } + +// String loading = "<html><font size=\"3\">loading instances...</font></html>"; +// view.getHintPanel().setForeground(Color.RED); +// view.setHintMessage(loading); +// if (!model.isReasonerSet() +// || model.getIsKnowledgeSourceIsUpdated() == true) { +// model.setKnowledgeSource(); +// model.setReasoner(); +// } +// reasoner = model.getReasoner(); +// isInconsistent = view.getIsInconsistent(); +// if (!isInconsistent) { +// this.checkURI(); +// this.setPositiveConcept(); +// if (this.hasIndividuals()) { +// view.getRunButton().setEnabled(true); +// view.getHintPanel().setForeground(Color.BLACK); +// view +// .setHintMessage("<html><font size=\"3\">To get suggestions for class descriptions, please click the button above.</font></html>"); +// +// } else { +// view.getRunButton().setEnabled(false); +// view.getHintPanel().setVisible(true); +// String message = "<html><font size=\"3\" color=\"red\">There are no Instances for " +// + current +// + " available. Please insert some Instances.</font></html>"; +// view.getHintPanel().setForeground(Color.RED); +// view.setHintMessage(message); +// } +// } else { +// view.getHintPanel().setForeground(Color.RED); +// view.getRunButton().setEnabled(false); +// view +// .setHintMessage("The ontology is inconsistent and suggestions for class descriptions can only \nbe computed on consistent ontologies. Please repair the ontology first"); +// } } /** Modified: trunk/src/dl-learner/org/dllearner/tools/protege/StatusBar.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/protege/StatusBar.java 2010-06-14 09:10:38 UTC (rev 2163) +++ trunk/src/dl-learner/org/dllearner/tools/protege/StatusBar.java 2010-06-15 14:08:31 UTC (rev 2164) @@ -14,7 +14,9 @@ import javax.swing.SwingUtilities; import javax.swing.Timer; -public class StatusBar extends JPanel implements PropertyChangeListener { +import org.semanticweb.owlapi.reasoner.ReasonerProgressMonitor; + +public class StatusBar extends JPanel implements PropertyChangeListener, ReasonerProgressMonitor { /** * */ @@ -114,4 +116,28 @@ } + @Override + public void reasonerTaskBusy() { + // TODO Auto-generated method stub + + } + + @Override + public void reasonerTaskProgressChanged(int value, int max) { + progressBar.setMaximum(max); + setProgress(value); + } + + @Override + public void reasonerTaskStarted(String message) { + setProgress(0); + setMessage(message); + } + + @Override + public void reasonerTaskStopped() { + setMessage(""); + setProgress(0); + } + } \ No newline at end of file Modified: trunk/src/dl-learner/org/dllearner/tools/protege/SuggestClassPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/protege/SuggestClassPanel.java 2010-06-14 09:10:38 UTC (rev 2163) +++ trunk/src/dl-learner/org/dllearner/tools/protege/SuggestClassPanel.java 2010-06-15 14:08:31 UTC (rev 2164) @@ -96,7 +96,7 @@ } @SuppressWarnings("unchecked") - public void addSuggestions(List<? extends EvaluatedDescription> result){ + public void setSuggestions(List<? extends EvaluatedDescription> result){ suggestionTable.setSuggestions((List<EvaluatedDescriptionClass>)result); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |