From: <lor...@us...> - 2009-08-25 15:57:54
|
Revision: 1831 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1831&view=rev Author: lorenz_b Date: 2009-08-25 15:57:36 +0000 (Tue, 25 Aug 2009) Log Message: ----------- some changes in UI added option to add axiom in lost entailments list to repair plan Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/recent.txt trunk/src/dl-learner/org/dllearner/tools/ore/ui/DescriptionLabel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxTableCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/MouseOverHintDemo.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBarSimulator.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatisfiableClassesTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/InconsistencyExplanationPanelDescriptor.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/UnsatisfiableExplanationPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/InconsistencyExplanationPanel.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/RepairPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/RepairPlanPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/UnsatisfiableExplanationPanel.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/MouseOverHintManager.java trunk/src/dl-learner/org/dllearner/tools/ore/RecentManager.java trunk/src/dl-learner/org/dllearner/tools/ore/minus.png trunk/src/dl-learner/org/dllearner/tools/ore/plus.png trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTableCellRenderer.java Removed Paths: ------------- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ORE.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ColorListCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/MouseOverHintManager.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RecentManager.java Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-08-24 13:27:45 UTC (rev 1830) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-08-25 15:57:36 UTC (rev 1831) @@ -49,16 +49,16 @@ private CachedExplanationGenerator gen; - private ExplanationManager(Reasoner reasoner) { + private ExplanationManager(OREManager oreMan) { - this.reasoner = reasoner; + this.reasoner = oreMan.getPelletReasoner().getReasoner(); this.manager = reasoner.getManager(); this.ontology = reasoner.getLoadedOntologies().iterator().next(); manager.addOntologyChangeListener(this); // manager.addOntologyChangeListener(reasoner); dataFactory = manager.getOWLDataFactory(); - RepairManager.getRepairManager(reasoner).addListener(this); + RepairManager.getRepairManager(oreMan).addListener(this); reasonerFactory = new PelletReasonerFactory(); rootFinder = new RootFinder(manager, reasoner, reasonerFactory); @@ -77,9 +77,9 @@ } public static synchronized ExplanationManager getInstance( - Reasoner reasoner) { + OREManager oreMan) { if (instance == null) { - instance = new ExplanationManager(reasoner); + instance = new ExplanationManager(oreMan); } return instance; } Deleted: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java 2009-08-24 13:27:45 UTC (rev 1830) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java 2009-08-25 15:57:36 UTC (rev 1831) @@ -1,427 +0,0 @@ -package org.dllearner.tools.ore; - -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.GridLayout; -import java.awt.HeadlessException; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.net.URI; -import java.util.Collections; -import java.util.List; -import java.util.Set; -import java.util.TreeSet; - -import javax.swing.BorderFactory; -import javax.swing.Box; -import javax.swing.ButtonGroup; -import javax.swing.DefaultListModel; -import javax.swing.JComponent; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JRadioButton; -import javax.swing.JScrollPane; -import javax.swing.JSeparator; -import javax.swing.JSplitPane; -import javax.swing.UIManager; -import javax.swing.UnsupportedLookAndFeelException; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; - -import org.dllearner.tools.ore.ui.ClassificationProgressMonitor; -import org.dllearner.tools.ore.ui.ExplanationTable; -import org.dllearner.tools.ore.ui.ImpactTable; -import org.dllearner.tools.ore.ui.StatusBar; -import org.dllearner.tools.ore.ui.UnsatClassesTableCellRenderer; -import org.dllearner.tools.ore.ui.wizard.panels.ExplanationTablePanel; -import org.dllearner.tools.ore.ui.wizard.panels.RepairPlanPanel; -import org.jdesktop.swingx.JXList; -import org.mindswap.pellet.PelletOptions; -import org.mindswap.pellet.owlapi.PelletReasonerFactory; -import org.mindswap.pellet.owlapi.Reasoner; -import org.mindswap.pellet.utils.progress.SwingProgressMonitor; -import org.semanticweb.owl.apibinding.OWLManager; -import org.semanticweb.owl.model.OWLAxiom; -import org.semanticweb.owl.model.OWLClass; -import org.semanticweb.owl.model.OWLOntology; -import org.semanticweb.owl.model.OWLOntologyChange; -import org.semanticweb.owl.model.OWLOntologyCreationException; -import org.semanticweb.owl.model.OWLOntologyManager; - -public class ExplanationPanel extends JPanel implements ListSelectionListener, - ActionListener,ImpactManagerListener, ExplanationManagerListener, RepairManagerListener{ - - private JXList unsatList; - private JSplitPane splitPane; - private JSplitPane statsSplitPane; - private JScrollPane listScrollPane; - private JScrollPane explanationsScrollPane; - private JComponent explanationsPanel; - private JPanel buttonExplanationsPanel; - private JPanel buttonPanel; - private ButtonGroup explanationType; - private JRadioButton regularButton; - private JRadioButton laconicButton; - - private UnsatClassesTableCellRenderer listRenderer; - - private ExplanationManager expManager; - private ImpactManager impManager; - private RepairManager repManager; - - private StatusBar statusBar; - - - private OWLClass unsatClass; - /** - * - */ - private static final long serialVersionUID = 2213073383532597460L; - - public ExplanationPanel(ExplanationManager expMan, ImpactManager impMan, RepairManager repMan) { - - - this.expManager = expMan; - this.impManager = impMan; - this.repManager = repMan; - - impManager.addListener(this); - setLayout(new BorderLayout()); - - Dimension minimumSize = new Dimension(400, 400); - - listRenderer = new UnsatClassesTableCellRenderer(expManager); - unsatList = new JXList(); - fillUnsatClassesList(); - unsatList.addListSelectionListener(this); -// unsatList.setCellRenderer(listRenderer); - listScrollPane = new JScrollPane(unsatList); - listScrollPane.setPreferredSize(minimumSize); - - explanationsPanel = new Box(1); - - JPanel pan = new JPanel(new BorderLayout()); - pan.add(explanationsPanel, BorderLayout.NORTH); - explanationsScrollPane = new JScrollPane(pan); - explanationsScrollPane.setPreferredSize(minimumSize); - explanationsScrollPane.setBorder(BorderFactory - .createLineBorder(Color.LIGHT_GRAY)); - explanationsScrollPane.getViewport().setOpaque(false); - explanationsScrollPane.getViewport().setBackground(null); - explanationsScrollPane.setOpaque(false); - - regularButton = new JRadioButton("regular", true); - regularButton.setActionCommand("regular"); - regularButton.addActionListener(this); - laconicButton = new JRadioButton("laconic"); - laconicButton.setActionCommand("laconic"); - laconicButton.addActionListener(this); - explanationType = new ButtonGroup(); - explanationType.add(regularButton); - explanationType.add(laconicButton); - buttonPanel = new JPanel(); - buttonPanel.add(regularButton); - buttonPanel.add(laconicButton); - - buttonExplanationsPanel = new JPanel(); - buttonExplanationsPanel.setLayout(new BorderLayout()); - buttonExplanationsPanel - .add(explanationsScrollPane, BorderLayout.CENTER); - buttonExplanationsPanel.add(buttonPanel, BorderLayout.NORTH); - - statsSplitPane = new JSplitPane(0); - statsSplitPane.setResizeWeight(1.0D); - statsSplitPane.setTopComponent(buttonExplanationsPanel); - - //repair panel - JPanel impactRepairPanel = new JPanel(); - impactRepairPanel.setLayout(new BorderLayout()); - impactRepairPanel.add(new JLabel("Repair plan"), BorderLayout.NORTH); - JSplitPane impRepSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); - impRepSplit.setOneTouchExpandable(true); - impRepSplit.setDividerLocation(600); - impRepSplit.setBorder(null); - impactRepairPanel.add(impRepSplit); - - JPanel impactPanel = new JPanel(); - impactPanel.setLayout(new BorderLayout()); - impactPanel.add(new JLabel("Lost entailments"), BorderLayout.NORTH); - JScrollPane impScr = new JScrollPane(new ImpactTable(impManager)); - impactPanel.add(impScr); - impRepSplit.setRightComponent(impactPanel); - - RepairPlanPanel repairPanel = new RepairPlanPanel(repManager); - impRepSplit.setLeftComponent(repairPanel); - - - statsSplitPane.setBottomComponent(impactRepairPanel); - - statsSplitPane.setBorder(null); - statsSplitPane.setDividerLocation(500); - statsSplitPane.setOneTouchExpandable(true); - - splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, listScrollPane, - statsSplitPane); - splitPane.setOneTouchExpandable(true); - splitPane.setDividerLocation(150); - splitPane.setBorder(null); - - add(splitPane); - - statusBar = new StatusBar(); - add(statusBar, BorderLayout.SOUTH); - } - - private void fillUnsatClassesList() { - DefaultListModel model = new DefaultListModel(); - Set<OWLClass> rootClasses = new TreeSet<OWLClass>(expManager - .getRootUnsatisfiableClasses()); - for (OWLClass root : rootClasses) { - model.addElement(root); - } - Set<OWLClass> derivedClasses = new TreeSet<OWLClass>(expManager - .getUnsatisfiableClasses()); - derivedClasses.removeAll(rootClasses); - for (OWLClass unsat : derivedClasses) { - model.addElement(unsat); - - } - unsatList.setModel(model); - } - - private void addExplanationTable(List<OWLAxiom> explanation, int number) { - - // DLSyntaxObjectRenderer r = new DLSyntaxObjectRenderer(); - // Vector<String> t = new Vector<String>(); - // for(OWLAxiom ax : explanation) - // t.add(r.render(ax)); - // model.addColumn("axiom", t); - - ExplanationTable expTable = new ExplanationTable(explanation, repManager, impManager, expManager, unsatClass); - explanationsPanel.add(new ExplanationTablePanel(expTable, number)); - - } - - private void clearExplanationsPanel() { - explanationsPanel.removeAll(); - } - - private void showLaconicExplanations() { - clearExplanationsPanel(); - int counter = 1; - for (List<OWLAxiom> explanation : expManager - .getUnsatisfiableExplanations(unsatClass)) { - addExplanationTable(explanation, counter); - counter++; - } - explanationsPanel.add(Box.createVerticalStrut(10)); - explanationsPanel.add(new JSeparator()); - explanationsPanel.add(Box.createVerticalStrut(10)); - this.updateUI(); - } - - private void showRegularExplanations() { - clearExplanationsPanel(); - int counter = 1; - for (List<OWLAxiom> explanation : expManager - .getUnsatisfiableExplanations(unsatClass)) { - addExplanationTable(explanation, counter); - counter++; - } - explanationsPanel.add(Box.createVerticalStrut(10)); - explanationsPanel.add(new JSeparator()); - explanationsPanel.add(Box.createVerticalStrut(10)); - this.updateUI(); - } - - private void showExplanations(){ - clearExplanationsPanel(); - int counter = 1; - for (List<OWLAxiom> explanation : expManager - .getUnsatisfiableExplanations(unsatClass)) { - addExplanationTable(explanation, counter); - counter++; - } - explanationsPanel.add(Box.createVerticalStrut(10)); - explanationsPanel.add(new JSeparator()); - explanationsPanel.add(Box.createVerticalStrut(10)); - this.updateUI(); - } - - @Override - public void valueChanged(ListSelectionEvent e) { - - unsatClass = (OWLClass) ((JXList) e.getSource()).getSelectedValue(); - -// OWLEditorKitFactory edFac = new OWLEditorKitFactory(); -// edFac.canLoad(URI.create("file:examples/ore/koala.owl")); -// -// try { -// EditorKit kit = edFac.createEditorKit(); -// } catch (Exception e2) { -// // TODO Auto-generated catch block -// e2.printStackTrace(); -// } -// -// OWLModelManager m = new OWLModelManagerImpl(); -// try { -// m.loadOntology(URI.create("file:examples/ore/koala.owl")); -// } catch (OWLOntologyCreationException e1) { -// // TODO Auto-generated catch block -// e1.printStackTrace(); -// } -// -// OWLExpressionCheckerFactory f = new ManchesterOWLExpressionCheckerFactory(m); -// OWLExpressionChecker<OWLDescription> checker = f.getOWLDescriptionChecker(); -// -// ExpressionEditor<OWLDescription> editor2 = new ExpressionEditor<OWLDescription>(); -// editor2.setVisible(true); -// editor.setDescription(unsatClass); - - - if (!unsatList.isSelectionEmpty()) { - showExplanations(); - } - - } - - @Override - public void actionPerformed(ActionEvent e) { - if (e.getActionCommand().equals("regular")) { - expManager.setLaconicMode(false); - } else if (e.getActionCommand().equals("laconic")) { - expManager.setLaconicMode(true); - - } - - } - - @Override - public void impactListChanged() { - // TODO Auto-generated method stub - - } - - @Override - public void repairPlanExecuted(List<OWLOntologyChange> changes) { - explanationsPanel.removeAll(); - - fillUnsatClassesList(); - repaint(); - } - - @Override - public void explanationLimitChanged() { - if(unsatClass != null){ - showExplanations(); - } - - } - - - public static void main(String[] args) { - - try { - String file = "file:examples/ore/tambis.owl"; - PelletOptions.USE_CLASSIFICATION_MONITOR = PelletOptions.MonitorType.SWING; - OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); - OWLOntology ontology = manager.loadOntologyFromPhysicalURI(URI - .create(file)); - - org.mindswap.pellet.utils.progress.ProgressMonitor mon = new SwingProgressMonitor(); - org.mindswap.pellet.utils.progress.ProgressMonitor m = new ClassificationProgressMonitor(); - JFrame fr = new JFrame(); - fr.setSize(new Dimension(400, 400)); - fr.setLayout(new BorderLayout()); - fr.add((JPanel)m); -// fr.setVisible(true); - PelletReasonerFactory reasonerFactory = new PelletReasonerFactory(); - Reasoner reasoner = reasonerFactory.createReasoner(manager); - reasoner.loadOntologies(Collections.singleton(ontology)); - reasoner.getKB().getTaxonomyBuilder().setProgressMonitor(mon); -// mon.taskStarted(); - - - reasoner.classify(); - - - - - -// try { -// String text = "Koala SubclassOf Class: Animal"; -// OWLEntityChecker checker = new EntityChecker(manager); -// ManchesterOWLSyntaxEditorParser parser = new ManchesterOWLSyntaxEditorParser(manager.getOWLDataFactory(),text); -// parser.setOWLEntityChecker(checker); -// parser.parseOntology(manager, ontology); -// parser.setBase(ontology.getURI().toString() + "#"); -// parser.parseDescription(); -// } catch (OWLOntologyChangeException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } catch (ParserException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } - - - - - ExplanationManager expManager = ExplanationManager - .getInstance(reasoner); - ImpactManager impManager = ImpactManager.getInstance( - reasoner); - RepairManager repManager= RepairManager.getRepairManager(reasoner); - ExplanationPanel panel = new ExplanationPanel(expManager, - impManager, repManager); - - UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - - JFrame test = new JFrame(); - test.setLayout(new GridLayout(0, 1)); - test.setSize(new Dimension(1400, 1000)); - test.add(panel); - test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - test.setVisible(true); - } catch (HeadlessException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (OWLOntologyCreationException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (ClassNotFoundException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (InstantiationException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IllegalAccessException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (UnsupportedLookAndFeelException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } - - @Override - public void explanationTypeChanged() { - // TODO Auto-generated method stub - - } - - @Override - public void repairPlanChanged() { - // TODO Auto-generated method stub - - } - - - - - - -} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java 2009-08-24 13:27:45 UTC (rev 1830) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java 2009-08-25 15:57:36 UTC (rev 1831) @@ -26,15 +26,15 @@ private OWLOntologyManager manager; private Reasoner reasoner; - private ImpactManager(Reasoner reasoner) { - this.reasoner = reasoner; + private ImpactManager(OREManager oreMan) { + this.reasoner = oreMan.getPelletReasoner().getReasoner(); this.ontology = reasoner.getLoadedOntologies().iterator().next(); this.manager = reasoner.getManager(); impact = new HashMap<OWLAxiom, Set<OWLAxiom>>(); selectedAxioms = new ArrayList<OWLAxiom>(); listeners = new ArrayList<ImpactManagerListener>(); ranker = new AxiomRanker(ontology, reasoner, manager); - RepairManager.getRepairManager(reasoner).addListener(this); + RepairManager.getRepairManager(oreMan).addListener(this); } @@ -50,9 +50,9 @@ listeners.remove(listener); } - public static synchronized ImpactManager getInstance(Reasoner reasoner) { + public static synchronized ImpactManager getInstance(OREManager oreMan) { if (instance == null) { - instance = new ImpactManager(reasoner); + instance = new ImpactManager(oreMan); } return instance; } Copied: trunk/src/dl-learner/org/dllearner/tools/ore/MouseOverHintManager.java (from rev 1830, trunk/src/dl-learner/org/dllearner/tools/ore/ui/MouseOverHintManager.java) =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/MouseOverHintManager.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/MouseOverHintManager.java 2009-08-25 15:57:36 UTC (rev 1831) @@ -0,0 +1,132 @@ +package org.dllearner.tools.ore; + +import java.awt.Component; +import java.awt.Container; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.util.Map; +import java.util.WeakHashMap; + +import javax.swing.JLabel; +import javax.swing.MenuElement; +import javax.swing.table.JTableHeader; + + + + + +public class MouseOverHintManager implements MouseListener { + + private Map<Component, String> hintMap; + + private JLabel hintLabel; + + + + public MouseOverHintManager( JLabel hintLabel ) { + + hintMap = new WeakHashMap<Component, String>(); + + this.hintLabel = hintLabel; + + } + + + + public void addHintFor( Component comp, String hintText ) { + + hintMap.put( comp, hintText ); + + } + + + + public void enableHints( Component comp ) { + + comp.addMouseListener( this ); + + if ( comp instanceof Container ) { + + Component[] components = ((Container)comp).getComponents(); + + for ( int i=0; i<components.length; i++ ) + + enableHints( components[i] ); + + } + + if ( comp instanceof MenuElement ) { + + MenuElement[] elements = ((MenuElement)comp).getSubElements(); + + for ( int i=0; i<elements.length; i++ ) + + enableHints( elements[i].getComponent() ); + + } + + } + + + + private String getHintFor( Component comp ) { + + String hint = (String)hintMap.get(comp); + + if ( hint == null ) { + + if ( comp instanceof JLabel ) + + hint = (String)hintMap.get(((JLabel)comp).getLabelFor()); + + else if ( comp instanceof JTableHeader ) + + hint = (String)hintMap.get(((JTableHeader)comp).getTable()); + + } + + return hint; + + } + + + + + + public void mouseEntered( MouseEvent e ) { + + Component comp = (Component)e.getSource(); + + String hint; + + do { + + hint = getHintFor(comp); + + comp = comp.getParent(); + + } while ( (hint == null) && (comp != null) ); + + if ( hint != null ) + + hintLabel.setText( hint ); + + } + + + + public void mouseExited( MouseEvent e ) { + + hintLabel.setText( " " ); + + } + + + + public void mouseClicked( MouseEvent e ) {} + + public void mousePressed( MouseEvent e ) {} + + public void mouseReleased( MouseEvent e ) {} + +} Deleted: trunk/src/dl-learner/org/dllearner/tools/ore/ORE.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ORE.java 2009-08-24 13:27:45 UTC (rev 1830) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ORE.java 2009-08-25 15:57:36 UTC (rev 1831) @@ -1,763 +0,0 @@ -/** - * Copyright (C) 2007-2008, 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.ore; - -import java.io.File; -import java.io.IOException; -import java.io.StringWriter; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URL; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.Vector; - -import javax.swing.JLabel; - -import org.dllearner.algorithms.celoe.CELOE; -import org.dllearner.core.ComponentInitException; -import org.dllearner.core.ComponentManager; -import org.dllearner.core.KnowledgeSource; -import org.dllearner.core.LearningAlgorithm; -import org.dllearner.core.LearningProblem; -import org.dllearner.core.LearningProblemUnsupportedException; -import org.dllearner.core.ReasonerComponent; -import org.dllearner.core.configurators.ComponentFactory; -import org.dllearner.core.owl.Description; -import org.dllearner.core.owl.Individual; -import org.dllearner.core.owl.Intersection; -import org.dllearner.core.owl.NamedClass; -import org.dllearner.core.owl.ObjectQuantorRestriction; -import org.dllearner.core.owl.Union; -import org.dllearner.kb.OWLFile; -import org.dllearner.learningproblems.ClassLearningProblem; -import org.dllearner.learningproblems.EvaluatedDescriptionClass; -import org.dllearner.reasoning.FastInstanceChecker; -import org.dllearner.reasoning.OWLAPIReasoner; -import org.dllearner.reasoning.PelletReasoner; -import org.dllearner.tools.ore.ui.DescriptionLabel; -import org.mindswap.pellet.exceptions.InconsistentOntologyException; -import org.semanticweb.owl.model.OWLAxiom; -import org.semanticweb.owl.model.OWLException; - -import com.clarkparsia.explanation.io.manchester.ManchesterSyntaxExplanationRenderer; - -/** - * This class contains init methods, and is used as broker between wizard and OWL-API. - * @author Lorenz Buehmann - * - */ -public class ORE { - - private LearningAlgorithm la; - - private OWLFile ks; - private LearningProblem lp; - private ComponentManager cm; - - private ReasonerComponent fastReasoner; - - private PelletReasoner pelletReasoner; - - - private NamedClass class2Learn; - private EvaluatedDescriptionClass newClassDescription; - - - private OntologyModifier modifier; - - private String baseURI; - private Map<String, String> prefixes; - - private double noise = 0.0; - - private File owlFile; - - - public ORE() { - - cm = ComponentManager.getInstance(); - - } - - // step 1: detect knowledge sources - - /** - * Applying knowledge source. - */ - public void setKnowledgeSource(File f) { - this.owlFile = f; - - ks = cm.knowledgeSource(OWLFile.class); - try { - ks.getConfigurator().setUrl(f.toURI().toURL()); - } catch (MalformedURLException e2) { - // TODO Auto-generated catch block - e2.printStackTrace(); - } - - try { - ks.init(); - } catch (ComponentInitException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } - - public void setKnowledgeSourceFromURI(URI uri){ - ks = cm.knowledgeSource(OWLFile.class); - try { - ks.getConfigurator().setUrl(uri.toURL()); - } catch (MalformedURLException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } - try { - ks.init(); - } catch (ComponentInitException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - public void initPelletReasoner(){ - pelletReasoner = cm.reasoner(PelletReasoner.class, ks); - try { - pelletReasoner.init(); - } catch (ComponentInitException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - pelletReasoner.loadOntologies(); - } - - public void loadOntology(){ - pelletReasoner.loadOntologies(); - } - - public boolean consistentOntology() throws InconsistentOntologyException{ - return pelletReasoner.isConsistent(); - } - - public PelletReasoner getPelletReasoner(){ - return pelletReasoner; - } - - - /** - * Initialize the reasoners. - */ - public void initReasoners(){ - - fastReasoner = cm.reasoner(FastInstanceChecker.class, ks); - try { - fastReasoner.init(); - } catch (ComponentInitException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - pelletReasoner.loadOntologies(); - pelletReasoner.classify(); - modifier = new OntologyModifier(pelletReasoner); - baseURI = fastReasoner.getBaseURI(); - prefixes = fastReasoner.getPrefixes(); - - } - - public String getInconsistencyExplanationsString(){ - ManchesterSyntaxExplanationRenderer renderer = new ManchesterSyntaxExplanationRenderer(); - StringWriter buffer = new StringWriter(); - renderer.startRendering(buffer); - try { - renderer.render(getInconsistencyExplanations()); - } catch (UnsupportedOperationException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (OWLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - renderer.endRendering(); - return buffer.toString(); - } - - private Set<Set<OWLAxiom>> getInconsistencyExplanations(){ - return pelletReasoner.getInconsistencyReasons(); - } - - - public OntologyModifier getModifier() { - return modifier; - } - - - public EvaluatedDescriptionClass getNewClassDescription() { - return newClassDescription; - } - - - public String getBaseURI() { - return baseURI; - } - - public Map<String, String> getPrefixes() { - return prefixes; - } - - - public ReasonerComponent getFastReasoner() { - return fastReasoner; - } - - public void setLearningProblem(){ - - lp = ComponentFactory.getClassLearningProblem(fastReasoner, getClass2LearnAsURL()); - - try { - lp.init(); - } catch (ComponentInitException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - private URL getClass2LearnAsURL(){ - URL classURL = null; - try { - classURL = new URL(class2Learn.toString()); - } catch (MalformedURLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - return classURL; - - } - - public void setNoise(double noise){ - System.out.println("setze noise auf" + noise); - cm.applyConfigEntry(la, "noisePercentage", noise); - try { - la.init(); - } catch (ComponentInitException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - this.noise = noise; - } - - public void setLearningAlgorithm(){ - - try { - la = ComponentFactory.getCELOE(lp, fastReasoner); - cm.applyConfigEntry(la, "useNegation", false); - } catch (LearningProblemUnsupportedException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } - - - try { - la.init(); - } catch (ComponentInitException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } - - /** - * Sets the class that has to be learned. - * @param oldClass class that is chosen to be (re)learned - */ - public void setClassToLearn(NamedClass class2Learn){ - this.class2Learn = class2Learn; - } - - public void init(){ - - this.setLearningProblem(); - this.setLearningAlgorithm(); - - } - - /** - * Starts the learning algorithm, setting noise value and ignored concepts. - * - */ - public void start(){ - - try { - la.init(); - } catch (ComponentInitException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - la.start(); - - } - - public void setNewClassDescription(EvaluatedDescriptionClass newClassDescription) { - this.newClassDescription = newClassDescription; - } - - public LearningAlgorithm getLa() { - return la; - } - - public NamedClass getIgnoredConcept() { - return class2Learn; - } - - - - /** - * Retrieves description parts that might cause inconsistency - for negative examples only. - * @param ind - * @param desc - */ - public Set<Description> getNegCriticalDescriptions(Individual ind, Description desc){ - - Set<Description> criticals = new HashSet<Description>(); - List<Description> children = desc.getChildren(); - - if(pelletReasoner.hasType(desc, ind)){ - - if(children.size() >= 2){ - - if(desc instanceof Intersection){ - for(Description d: children){ - criticals.addAll(getNegCriticalDescriptions(ind, d)); - } - } else if(desc instanceof Union){ - for(Description d: children){ - if(pelletReasoner.hasType(d, ind)){ - criticals.addAll(getNegCriticalDescriptions(ind, d)); - } - } - } - } else{ - criticals.add(desc); - } - } - - return criticals; - } - /** - * Retrieves the description parts, that might cause inconsistency - for negative examples. - * @param ind - * @param desc - * @return vector of JLabel - */ - public Collection<JLabel> descriptionToJLabelNeg(Individual ind, Description desc){ - - Collection<JLabel> criticals = new Vector<JLabel>(); - List<Description> children = desc.getChildren(); - -// try { - if(fastReasoner.hasType(desc, ind)){ - - if(children.size() >= 2){ - - if(desc instanceof Intersection){ - criticals.add(new JLabel("(")); - for(int i = 0; i<children.size()-1; i++){ - criticals.addAll(descriptionToJLabelNeg(ind, desc.getChild(i))); - criticals.add(new JLabel("and")); - - } - criticals.addAll(descriptionToJLabelNeg(ind, desc.getChild(children.size()-1))); - criticals.add(new JLabel(")")); - } else if(desc instanceof Union){ - criticals.add(new JLabel("(")); - for(int i = 0; i<children.size()-1; i++){ - if(fastReasoner.hasType(desc.getChild(i), ind)){ - criticals.addAll(descriptionToJLabelNeg(ind, desc.getChild(i))); - } else{ - criticals.add(new JLabel(desc.getChild(i).toManchesterSyntaxString(baseURI, prefixes))); - } - criticals.add(new JLabel("or")); - } - if(fastReasoner.hasType(desc.getChild(children.size()-1), ind)){ - criticals.addAll(descriptionToJLabelNeg(ind, desc.getChild(children.size()-1))); - } else{ - criticals.add(new JLabel(desc.getChild(children.size()-1).toManchesterSyntaxString(baseURI, prefixes))); - } - criticals.add(new JLabel(")")); - - - } - } else{ - - criticals.add(new DescriptionLabel(desc, "neg")); - } - } else{ - criticals.add(new JLabel(desc.toManchesterSyntaxString(baseURI, prefixes))); - } -// } catch (ReasoningMethodUnsupportedException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } - - return criticals; - } - - /** - * Retrieves the description parts that might cause inconsistency - for positive examples. - * @param ind - * @param desc - * @return vector of JLabel - */ - public Collection<JLabel> descriptionToJLabelPos(Individual ind, Description desc){ - - Collection<JLabel> criticals = new Vector<JLabel>(); - List<Description> children = desc.getChildren(); - -// try { - if(!fastReasoner.hasType(desc, ind)){ - - if(children.size() >= 2){ - - if(desc instanceof Union){ - criticals.add(new JLabel("(")); - for(int i = 0; i<children.size()-1; i++){ - criticals.addAll(descriptionToJLabelPos(ind, desc.getChild(i))); - criticals.add(new JLabel("or")); - } - criticals.addAll(descriptionToJLabelPos(ind, desc.getChild(children.size()-1))); - criticals.add(new JLabel(")")); - } else if(desc instanceof Intersection){ - criticals.add(new JLabel("(")); - for(int i = 0; i<children.size()-1; i++){ - if(!fastReasoner.hasType(desc.getChild(i), ind)){ - criticals.addAll(descriptionToJLabelPos(ind, desc.getChild(i))); - } else{ - criticals.add(new JLabel(desc.getChild(i).toManchesterSyntaxString(baseURI, prefixes))); - } - criticals.add(new JLabel("and")); - } - if(!fastReasoner.hasType(desc.getChild(children.size()-1), ind)){ - criticals.addAll(descriptionToJLabelPos(ind, desc.getChild(children.size()-1))); - } else{ - criticals.add(new JLabel(desc.getChild(children.size()-1).toManchesterSyntaxString(baseURI, prefixes))); - } - criticals.add(new JLabel(")")); - } - } else{ - criticals.add(new DescriptionLabel(desc, "pos")); - } - } else{ - criticals.add(new JLabel(desc.toManchesterSyntaxString(baseURI, prefixes))); - } -// } catch (ReasoningMethodUnsupportedException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } - - return criticals; - } - - /** - * Returns individuals that are in range of property. - * @param objRestr - * @param ind - */ - public Set<Individual> getIndividualsInPropertyRange(ObjectQuantorRestriction objRestr, Individual ind){ - - Set<Individual> individuals = pelletReasoner.getIndividuals(objRestr.getChild(0)); - individuals.remove(ind); - - return individuals; - } - - /** - * Returns individuals that are not in range of property. - * @param objRestr - * @param ind - */ - public Set<Individual> getIndividualsNotInPropertyRange(ObjectQuantorRestriction objRestr, Individual ind){ - - - Set<Individual> allIndividuals = new HashSet<Individual>(); - - for(Individual i : pelletReasoner.getIndividuals()){ - -// try { - if(!fastReasoner.hasType(objRestr.getChild(0), i)){ - allIndividuals.add(i); - } -// } catch (ReasoningMethodUnsupportedException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } - } - - - return allIndividuals; - } - - /** - * Returns classes where individual might moved to. - * @param ind the individual - * @return set of classes - */ - public Set<NamedClass> getpossibleClassesMoveTo(Individual ind){ - Set<NamedClass> moveClasses = new HashSet<NamedClass>(); - for(NamedClass nc : pelletReasoner.getNamedClasses()){ - if(!pelletReasoner.hasType(nc, ind)){ - moveClasses.add(nc); - } - } - moveClasses.remove(class2Learn); - - return moveClasses; - } - - /** - * Returns classes where individual might moved from. - * @param ind the individual - * @return set of classes - */ - public Set<NamedClass> getpossibleClassesMoveFrom(Individual ind){ - Set<NamedClass> moveClasses = new HashSet<NamedClass>(); - for(NamedClass nc : pelletReasoner.getNamedClasses()){ - if(pelletReasoner.hasType(nc, ind)){ - moveClasses.add(nc); - } - } - moveClasses.remove(class2Learn); - - return moveClasses; - } - - /** - * Update reasoners ontology. - */ - public void updateReasoner(){ -// fastReasoner = cm.reasoner(FastInstanceChecker.class, new OWLAPIOntology(modifier.getOntology())); -// try { -// fastReasoner.init(); -// } catch (ComponentInitException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } -// -// -// try { -// pelletReasoner.init(); -// } catch (ComponentInitException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } - - - setLearningAlgorithm(); - } - - /** - * Get the complement classes where individual is asserted to. - * @param desc - * @param ind - */ - public Set<NamedClass> getComplements(Description desc, Individual ind){ - - Set<NamedClass> complements = new HashSet<NamedClass>(); - System.out.println(pelletReasoner.getComplementClasses(desc)); - for(NamedClass nc : pelletReasoner.getNamedClasses()){ - if(!(nc.toString().endsWith("Thing"))){ - if(pelletReasoner.hasType(nc, ind)){ - if(modifier.isComplement(desc, nc)){ - complements.add(nc); - } - } - } - } - - - return complements; - } - - - - public static void main(String[] args){ - try{ - ComponentManager cm = ComponentManager.getInstance(); - - // create knowledge source - KnowledgeSource source = cm.knowledgeSource(OWLFile.class); - String example = "examples/ore/inconsistent.owl"; - cm.applyConfigEntry(source, "url", new File(example).toURI().toURL()); - source.init(); - - // create OWL API reasoning service with standard settings - ReasonerComponent reasoner = cm.reasoner(OWLAPIReasoner.class, source); - reasoner.init(); - - // create a learning problem and set positive and negative examples - LearningProblem lp = cm.learningProblem(ClassLearningProblem.class, reasoner); -// cm.applyConfigEntry(lp, "type", "superClass"); - cm.applyConfigEntry(lp, "classToDescribe", "http://cohse.semanticweb.org/ontologies/people#mad+cow"); - lp.init(); - - // create the learning algorithm - LearningAlgorithm la = null; - try { - la = cm.learningAlgorithm(CELOE.class, lp, reasoner); - la.init(); - } catch (LearningProblemUnsupportedException e) { - e.printStackTrace(); - } - - // start the algorithm and print the best concept found - la.start(); - - System.out.println(la.getCurrentlyBestEvaluatedDescriptions(10, 0.8, true)); - } catch (MalformedURLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (ComponentInitException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } -} - - - - - - -} - - - -// public static void main(String[] args){ -// -// final ORE test = new ORE(); -// -// File owlFile = new File("src/dl-learner/org/dllearner/tools/ore/neg_has_all.owl"); -// -// test.setKnowledgeSource(owlFile); -// test.initReasoners(); -// -// Individual subject = new Individual("http://example.com/father#patrick"); -// Description newClass = new Intersection(new NamedClass("http://example.com/father#female"), -// new Negation(new NamedClass("http://example.com/father#bird"))); -// Description desc = new NamedClass("http://example.com/father#bird"); -// -// Description range = new ObjectAllRestriction(new ObjectProperty("http://example.com/father#hasChild"), -// new NamedClass("http://example.com/father#female")); -// ObjectAllRestriction role = new ObjectAllRestriction(new ObjectProperty("http://example.com/father#hasChild"), -// range); -// System.out.println(role.toManchesterSyntaxString(test.getBaseURI(), test.getPrefixes())); -// try { -// System.out.println(test.fastReasoner.instanceCheck(role, subject)); -// } catch (ReasoningMethodUnsupportedException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } -// test.modifier.addObjectProperty(subject, role, new Individual("http://example.com/father#anna")); -// test.updateReasoner(); -// try { -// System.out.println(test.fastReasoner.instanceCheck(role, subject)); -// } catch (ReasoningMethodUnsupportedException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } -// test.modifier.saveOntology(); -// -// -// -// - -// System.out.println(test.owlReasoner.getInconsistentClasses()); -// test.getModi().reason(); - -// -// Individual subject = new Individual("http://example.com/father#anton"); -// -// Description range = new ObjectAllRestriction(new ObjectProperty("http://example.com/father#hasChild"), -// new NamedClass("http://example.com/father#female")); -// ObjectAllRestriction role = new ObjectAllRestriction(new ObjectProperty("http://example.com/father#hasChild"), -// range); -// Description d = new Intersection(new NamedClass("http://example.com/father#male"), role); -// try { -// System.out.println(test.fastReasoner.instanceCheck(d, subject)); -// } catch (ReasoningMethodUnsupportedException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } -// System.out.println("vorher" + test.modi.ontology.getAxioms()); -// Individual object = new Individual("http://example.com/father#markus"); -// test.modi.addObjectProperty(subject, role, object); -// test.updateReasoner(); -// try { -// System.out.println(test.fastReasoner.instanceCheck(d, subject)); -// } catch (ReasoningMethodUnsupportedException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } - - -// test.modi.reason(); - -// Individual ind = new Individual("http://example.com/father#heinz"); -// Description d1 = new Intersection(new NamedClass("http://example.com/father#male"), new ObjectAllRestriction(new ObjectProperty("http://example.com/father#hasChild"), new NamedClass("http://example.com/father#male"))); -// System.out.println(test.reasoner2.instanceCheck(d, ind)); - - -// test.setConcept(new NamedClass("http://example.com/father#father")); -// test.setPosNegExamples(); -// System.out.println(test.posExamples); -// System.out.println(test.negExamples); -// test.start(); -// Individual ind = new Individual("http://www.test.owl#lorenz"); - -// test.modi.addClassAssertion(ind, new NamedClass("http://www.test.owl#B")); -// System.out.println(test.reasoner2.getInconsistentClasses()); -// Description d = new Intersection(new NamedClass("http://www.test.owl#A"), new Union(new NamedClass("http://www.test.owl#B"), -// new NamedClass("http://www.test.owl#C"))); -// System.out.println(d); -// System.out.println(test.getCriticalDescriptions(ind, d)); -// JFrame testFrame = new JFrame(); -// JPanel j = new JPanel(); -// testFrame.add(j); -// testFrame.setSize(new Dimension(400, 400)); -// for(JLabel jLab : test.DescriptionToJLabel(ind, d)) -// j.add(jLab); -// testFrame.setVisible(true); -//} - - - - - - - - - - Copied: trunk/src/dl-learner/org/dllearner/tools/ore/RecentManager.java (from rev 1830, trunk/src/dl-learner/org/dllearner/tools/ore/ui/RecentManager.java) =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/RecentManager.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/RecentManager.java 2009-08-25 15:57:36 UTC (rev 1831) @@ -0,0 +1,86 @@ +package org.dllearner.tools.ore; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.net.URI; +import java.util.ArrayList; +import java.util.List; + + +public class RecentManager { + + private static RecentManager instance; + private List<URI> uriList; + private File file; + + public RecentManager(){ + uriList = new ArrayList<URI>(); + file = new File("src/dl-learner/org/dllearner/tools/ore/recent.txt"); + } + + public static synchronized RecentManager getInstance() { + if (instance == null) { + instance = new RecentManager(); + } + return instance; + } + + public void addURI(URI uri){ + if(!uriList.contains(uri)){ + uriList.add(uri); + } + + } + + public List<URI> getURIs(){ + uriList.clear(); + deserialize(); + return uriList; + } + + public void serialize() { + try { + FileOutputStream fileStream = new FileOutputStream(file); + ObjectOutputStream outputStream = new ObjectOutputStream( + new BufferedOutputStream(fileStream)); + try { + outputStream.writeObject(uriList); + } finally { + outputStream.close(); + } + + } catch (IOException e) { + e.printStackTrace(); + } + + } + + @SuppressWarnings("unchecked") + private void deserialize() { + try { + FileInputStream fileStream = new FileInputStream(file); + ObjectInputStream inputStream = new ObjectInputStream( + new BufferedInputStream(fileStream)); + + try { + List<URI> list = (List<URI>) inputStream.readObject(); + uriList.addAll(list); + } finally { + inputStream.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + + } + + +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java 2009-08-24 13:27:45 UTC (rev 1830) +++ trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java 2009-08-25 15:57:36 UTC (rev 1831) @@ -5,6 +5,7 @@ import java.util.Stack; import org.mindswap.pellet.owlapi.Reasoner; +import org.semanticweb.owl.model.AddAxiom; import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLOntology; import org.semanticweb.owl.model.OWLOntologyChange; @@ -19,6 +20,7 @@ private OWLAxiom actual; private List<OWLAxiom> axioms2Remove; + private List<OWLAxiom> axioms2Keep; private List<RepairManagerListener> listeners; private OWLOntology ontology; private OWLOntologyManager manager; @@ -27,12 +29,14 @@ private Stack<List<OWLOntologyChange>> undoStack; private Stack<List<OWLOntologyChange>> redoStack; - private RepairManager(Reasoner reasoner) { - this.reasoner = reasoner; + private RepairManager(OREManager oreMan) { + this.reasoner = oreMan.getPelletReasoner().getReasoner(); this.ontology = reasoner.getLoadedOntologies().iterator().next(); this.manager = reasoner.getManager(); axioms2Remove = new ArrayList<OWLAxiom>(); + axioms2Keep = new ArrayList<OWLAxiom>(); + listeners = new ArrayList<RepairManagerListener>(); undoStack = new Stack<List<OWLOntologyChange>>(); @@ -52,9 +56,9 @@ listeners.remove(listener); } - public static synchronized RepairManager getRepairManager(Reasoner reasoner) { + public static synchronized RepairManager getRepairManager(OREManager oreMan) { if (instance == null) { - instance = new RepairManager(reasoner); + instance = new RepairManager(oreMan); } return instance; } @@ -69,6 +73,16 @@ fireRepairPlanChanged(); } + public void addAxiom2Keep(OWLAxiom ax){ + axioms2Keep.add(ax); + fireRepairPlanChanged(); + } + + public void removeAxiom2Keep(OWLAxiom ax){ + axioms2Keep.remove(ax); + fireRepairPlanChanged(); + } + public boolean isSelected(OWLAxiom ax){ return axioms2Remove.contains(ax); } @@ -77,11 +91,18 @@ return axioms2Remove; } + public List<OWLAxiom> getAxioms2Keep(){ + return axioms2Keep; + } + public void executeRepairPlan(){ List<OWLOntologyChange> changes = new ArrayList<OWLOntologyChange>(); for(OWLAxiom ax : axioms2Remove){ changes.add(new RemoveAxiom(ontology, ax)); } + for(OWLAxiom ax : axioms2Keep){ + changes.add(new AddAxiom(ontology, ax)); + } try { manager.applyChanges(changes); } catch (OWLOntologyChangeException e) { @@ -90,6 +111,7 @@ } undoStack.push(changes); axioms2Remove.clear(); + axioms2Keep.clear(); fireRepairPlanExecuted(changes); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java 2009-08-24 13:27:45 UTC (rev 1830) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java 2009-08-25 15:57:36 UTC (rev 1831) @@ -8,6 +8,7 @@ import java.util.Set; import java.util.Map.Entry; +import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.RepairManager; import org.dllearner.tools.ore.RepairManagerListener; import org.dllearner.tools.ore.explanation.laconic.LaconicExplanationGenerator; @@ -48,7 +49,7 @@ laconicExplanationCache = new HashMap<OWLAxiom, Set<Explanation>>(); lastRequestedRegularSize = new HashMap<OWLAxiom, Integer>(); lastRequestedLaconicSize = new HashMap<OWLAxiom, Integer>(); - RepairManager.getRepairManager(reasoner).addListener(this); + RepairManager.getRepairManager(OREManager.getInstance()).addListener(this); // regularExpGen = new PelletExplanation(manager, Collections.singleton(ontology)); // laconicExpGen = new LaconicExplanationGenerator(manager, new PelletReasonerFactory(), Collections.singleton(ontology)); @@ -144,18 +145,28 @@ @Override public void repairPlanExecuted(List<OWLOntologyChange> changes) { + Map<OWLAxiom, Set<Explanation>> copy = new HashMap<OWLAxiom, Set<Explanation>>(); for(OWLOntologyChange change : changes){ - if(change instanceof RemoveAxiom){System.out.println(changes); + if(change instanceof RemoveAxiom){ for(Entry<OWLAxiom, Set<Explanation>> entry: regularExplanationCache.entrySet()){ + Set<Explanation> explanationsCopy = new HashSet<Explanation>(); for(Explanation explanation : entry.getValue()){ if(explanation.getAxioms().contains(change.getAxiom())){ - entry.getValue().remove(explanation);System.out.println("test"); + explanationsCopy.add(explanation); } } + if(!explanationsCopy.isEmpty()){ + copy.put(entry.getKey(), explanationsCopy); + } + } } } + for(Entry<OWLAxiom, Set<Explanation>> copyEntry : copy.entrySet()){ + regularExplanationCache.get(copyEntry.getKey()).removeAll(copyEntry.getValue()); + + } } } Added: trunk/src/dl-learner/org/dllearner/tools/ore/minus.png =================================================================== (Binary files differ) Property changes on: trunk/src/dl-learner/org/dllearner/tools/ore/minus.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/src/dl-learner/org/dllearner/tools/ore/plus.png =================================================================== (Binary files differ) Property changes on: trunk/src/dl-learner/org/dllearner/tools/ore/plus.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: trunk/src/dl-learner/org/dllearner/tools/ore/recent.txt =================================================================== (Binary files differ) Deleted: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ColorListCellRenderer.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ColorListCellRenderer.java 2009-08-24 13:27:45 UTC (rev 1830) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ColorListCellRenderer.java 2009-08-25 15:57:36 UTC (rev 1831) @@ -1,79 +0,0 @@ -/** - * Copyright (C) 2007-2008, 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.ore.ui; - -import java.awt.Color; -import java.awt.Component; - -import javax.swing.JLabel; -import javax.swing.JList; -import javax.swing.ListCellRenderer; - -import org.dllearner.core.owl.Individual; -import org.dllearner.core.owl.NamedClass; -import org.dllearner.tools.ore.ORE; - -/** - * List cell renderer for colored lines to provide better view on list values. - * @author Lorenz Buehmann - * - */ -public class ColorListCellRenderer extends JLabel implements ListCellRenderer { - - private static final long serialVersionUID = -7592805113197759247L; - private ORE ore; - - public ColorListCellRenderer(ORE ore) { - setOpaque(true); - this.ore = ore; - } - - public Component getListCellRendererComponent(JList list, Object value, - int index, boolean isSelected, boolean cellHasFocus) { - - if(value instanceof NamedClass){ - setText(((NamedClass) value).toManchesterSyntaxString(ore.getBaseURI(), ore.getPrefixes())); - } else if(value instanceof Individual){ - setText(((Individual) value).toManchesterSyntaxString(ore.getBaseURI(), ore.getPrefixes())); - } - Color background; - Color foreground; - - if (index % 2 == 0 && !isSelected) { - background = new Color(242, 242, 242); - foreground = Color.BLACK; - - } else if(isSelected){ - - background = Color.LIGHT_GRAY; - foreground = Color.BLACK; - }else{ - background = Color.WHITE; - foreground = Color.BLACK; - } - - setForeground(foreground); - setBackground(background); - - return this; - } - -} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/DescriptionLabel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/DescriptionLabel.java 2009-08-24 13:27:45 UTC (rev 1830) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/DescriptionLabel.java 2009-08-25 15:57:36 UTC (rev 1831) @@ -42,7 +42,6 @@ import org.dllearner.core.owl.ObjectCardinalityRestriction; import org.dllearner.core.owl.ObjectSomeRestriction; import org.dllearner.core.owl.Thing; -import org.dllearner.tools.ore.ORE; import org.dllearner.tools.ore.OREManager; /** Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java 2009-08-24 13:27:45 UTC (rev 1830) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java 2009-08-25 15:57:36 UTC (rev 1831) @@ -20,43 +20,39 @@ import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; -import org.dllearner.tools.ore.ExplanationManager; -import org.dllearner.tools.ore.ImpactManager; +import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.RepairManager; import org.dllearner.tools.ore.RepairManagerListener; import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.decorator.HighlighterFactory; +import org.protege.editor.core.Disposable; import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLClass; import org.semanticweb.owl.model.OWLOntologyChange; -public class ExplanationTable extends JXTable implements RepairManagerListener{ +public class ExplanationTable extends JXTable implements RepairManagerListener, Disposable{ /** * */ private static final long serialVersionUID = 5580730282611559609L; - private List<OWLAxiom> explanation; private RepairManager repMan; - private ImpactManager impMan; - public ExplanationTable(List<OWLAxiom> explanation, RepairManager repMan, - ImpactManager impMan, ExplanationManager expMan, OWLClass cl) { - this.explanation = explanation; - this.repMan = repMan; - this.impMan = impMan; + public ExplanationTable(List<OWLAxiom> explanation, OWLClass cl) { + + repMan = RepairManager.getRepairManager(OREManager.getInstance()); + repMan.addListener(this); setBackground(Color.WHITE); setHighlighters(HighlighterFactory.createAlternateStriping()); setAutoResizeMode(JTable.AUTO_RESIZE_OFF); - setModel(new ExplanationTableModel(explanation, expMan, impMan, repMan, - cl)); - getColumn(0).setCellRenderer(new OWLSyntaxTableCellRenderer(repMan)); + setModel(new ExplanationTableModel(explanation, cl)); TableColumn column4 = getColumn(3); column4.setCellRenderer(new ButtonCellRenderer()); column4.setCellEditor(new ButtonCellEditor()); column4.setResizable(false); + setRowHeight(getRowHeight() + 4); setColumnSizes(); getSelectionModel().addListSelectionListener( new ListSelectionListener() { @@ -113,10 +109,7 @@ }); } - private OWLAxiom getOWLAxiomAtRow(int rowIndex){ - return ((ExplanationTableModel)getModel()).getOWLAxiomAtRow(rowIndex); - } - + private void setColumnSizes(){ getColumn(1).setMaxWidth(30); getColumn(2).setMaxWidth(30); @@ -125,14 +118,6 @@ private void changeSelection() { -// -// if(getSelectedRow() >=0){ -// OWLAxiom rowAxiom = getOWLAxiomAtRow(getSelectedRow()); -// impMan.setActualAxiom(rowAxiom); -// } else { -// impMan.setActualAxiom(null); -// } - } class ButtonCellRenderer extends JButton implements TableCellRenderer{ @@ -211,8 +196,16 @@ repaint(); } + + @Override + public void dispose() throws Exception { + repMan.removeListener(this); + + } + + } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java 2009-08-24 13:27:45 UTC (rev 1830) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java 2009-08-25 15:57:36 UTC (rev 1831) @@ -1,12 +1,12 @@ package org.dllearner.tools.ore.ui; -import java.util.ArrayList; import java.util.List; import javax.swing.table.AbstractTableModel; import org.dllearner.tools.ore.ExplanationManager; import org.dllearner.tools.ore.ImpactManager; +import org.dllearner.... [truncated message content] |