From: <lor...@us...> - 2009-06-07 21:01:09
|
Revision: 1792 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1792&view=rev Author: lorenz_b Date: 2009-06-07 21:01:00 +0000 (Sun, 07 Jun 2009) Log Message: ----------- integrated 'unsatisfiable_explanation'-step into wizard structure Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/InconsistencyExplanationPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/InconsistencyExplanationPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/WizardController.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/UnsatisfiableExplanationPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/UnsatisfiableExplanationPanelDescriptor.java Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-06-07 16:43:07 UTC (rev 1791) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-06-07 21:01:00 UTC (rev 1792) @@ -121,6 +121,17 @@ return explanations; } + public Set<Set<OWLAxiom>> getUnsatisfiableExplanations(OWLClass unsat, int count){ + Set<Set<OWLAxiom>> explanations = regularExplanationCache.get(unsat); + if(explanations == null){ + explanations = regularExpGen.getUnsatisfiableExplanations(unsat, count); + regularExplanationCache.put(unsat, explanations); + } + + return explanations; + } + + public Set<Set<OWLAxiom>> getLaconicUnsatisfiableExplanations(OWLClass unsat){ Set<Set<OWLAxiom>> explanations = laconicExplanationCache.get(unsat); OWLSubClassAxiom unsatAxiom; @@ -171,6 +182,13 @@ } + public Set<List<OWLAxiom>> getOrderedUnsatisfiableExplanations(OWLClass unsat, int count){ + + return getOrderedExplanations(dataFactory.getOWLSubClassAxiom(unsat, dataFactory.getOWLNothing()), + getUnsatisfiableExplanations(unsat, count)); + + } + public Set<List<OWLAxiom>> getOrderedLaconicUnsatisfiableExplanations(OWLClass unsat){ return getOrderedExplanations(dataFactory.getOWLSubClassAxiom(unsat, dataFactory.getOWLNothing()), Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java 2009-06-07 16:43:07 UTC (rev 1791) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java 2009-06-07 21:01:00 UTC (rev 1792) @@ -291,7 +291,7 @@ public static void main(String[] args) { try { - String file = "file:examples/ore/koala.owl"; + String file = "file:examples/ore/tambis.owl"; PelletOptions.USE_CLASSIFICATION_MONITOR = PelletOptions.MonitorType.SWING; OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); OWLOntology ontology = manager.loadOntologyFromPhysicalURI(URI @@ -303,7 +303,7 @@ fr.setSize(new Dimension(400, 400)); fr.setLayout(new BorderLayout()); fr.add((JPanel)m); - fr.setVisible(true); +// fr.setVisible(true); PelletReasonerFactory reasonerFactory = new PelletReasonerFactory(); Reasoner reasoner = reasonerFactory.createReasoner(manager); reasoner.loadOntologies(Collections.singleton(ontology)); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/InconsistencyExplanationPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/InconsistencyExplanationPanel.java 2009-06-07 16:43:07 UTC (rev 1791) +++ trunk/src/dl-learner/org/dllearner/tools/ore/InconsistencyExplanationPanel.java 2009-06-07 21:01:00 UTC (rev 1792) @@ -106,7 +106,7 @@ } - public void clearExplanationsPanel(){System.out.println("Clearing explanations"); + public void clearExplanationsPanel(){ explanationsPanel.removeAll(); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/InconsistencyExplanationPanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/InconsistencyExplanationPanelDescriptor.java 2009-06-07 16:43:07 UTC (rev 1791) +++ trunk/src/dl-learner/org/dllearner/tools/ore/InconsistencyExplanationPanelDescriptor.java 2009-06-07 21:01:00 UTC (rev 1792) @@ -116,7 +116,7 @@ @Override public void repairPlanExecuted() { - System.out.println("repair plan executed"); + showExplanations(); panel.repaint(); setNextButtonEnabled2ConsistentOntology(); Added: trunk/src/dl-learner/org/dllearner/tools/ore/UnsatisfiableExplanationPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/UnsatisfiableExplanationPanel.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/UnsatisfiableExplanationPanel.java 2009-06-07 21:01:00 UTC (rev 1792) @@ -0,0 +1,172 @@ +package org.dllearner.tools.ore; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.event.ActionListener; +import java.util.List; + +import javax.swing.BorderFactory; +import javax.swing.Box; +import javax.swing.ButtonGroup; +import javax.swing.DefaultListModel; +import javax.swing.JComponent; +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.event.ListSelectionListener; + +import org.jdesktop.swingx.JXList; +import org.semanticweb.owl.model.OWLAxiom; +import org.semanticweb.owl.model.OWLClass; + +public class UnsatisfiableExplanationPanel extends JPanel{ + + 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 UnsatClassesListCellRenderer listRenderer; + + private ExplanationManager expMan; + private ImpactManager impMan; + + + + private OWLClass unsatClass; + + public UnsatisfiableExplanationPanel(ExplanationManager expMan, ImpactManager impMan){ + this.expMan = expMan; + this.impMan = impMan; + + + setLayout(new BorderLayout()); + + Dimension minimumSize = new Dimension(400, 400); + + listRenderer = new UnsatClassesListCellRenderer(expMan); + unsatList = new JXList(); + + + 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"); + + laconicButton = new JRadioButton("laconic"); + laconicButton.setActionCommand("laconic"); + + 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(impMan)); + impactPanel.add(impScr); + impRepSplit.setRightComponent(impactPanel); + + RepairPlanPanel repairPanel = new RepairPlanPanel(impMan); + 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); + } + + public void fillUnsatClassesList(List<OWLClass> unsatClasses) { + DefaultListModel model = new DefaultListModel(); + for(OWLClass cl : unsatClasses){ + model.addElement(cl); + } + + unsatList.setModel(model); + } + + public void clearExplanationsPanel() { + + explanationsPanel.removeAll(); + } + + public void addExplanation(List<OWLAxiom> explanation, OWLClass unsat, int counter) { + ExplanationTable expTable = new ExplanationTable(explanation, impMan, + expMan, unsat); + explanationsPanel.add(new ExplanationTablePanel(expTable, counter)); + + explanationsPanel.add(Box.createVerticalStrut(10)); + explanationsPanel.add(new JSeparator()); + explanationsPanel.add(Box.createVerticalStrut(10)); + this.updateUI(); + } + + public void addActionListeners(ActionListener aL) { + regularButton.addActionListener(aL); + laconicButton.addActionListener(aL); + } + + public void addListSelectionListener(ListSelectionListener l){ + unsatList.addListSelectionListener(l); + } + + +} Added: trunk/src/dl-learner/org/dllearner/tools/ore/UnsatisfiableExplanationPanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/UnsatisfiableExplanationPanelDescriptor.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/UnsatisfiableExplanationPanelDescriptor.java 2009-06-07 21:01:00 UTC (rev 1792) @@ -0,0 +1,147 @@ +package org.dllearner.tools.ore; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.TreeSet; + +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; + +import org.jdesktop.swingx.JXList; +import org.mindswap.pellet.owlapi.Reasoner; +import org.semanticweb.owl.model.OWLAxiom; +import org.semanticweb.owl.model.OWLClass; + +public class UnsatisfiableExplanationPanelDescriptor extends + WizardPanelDescriptor implements ActionListener, ImpactManagerListener, ListSelectionListener{ + + public static final String IDENTIFIER = "UNSATISFIABLE_PANEL"; + public static final String INFORMATION = ""; + + private UnsatisfiableExplanationPanel panel; + private ExplanationManager expMan; + private ImpactManager impMan; + private Reasoner reasoner; + private boolean laconicMode = false; + private OWLClass unsatClass; + + public UnsatisfiableExplanationPanelDescriptor(){ + setPanelDescriptorIdentifier(IDENTIFIER); + } + + public void init() { + reasoner = getWizardModel().getOre().getPelletReasoner() + .getReasoner(); + expMan = ExplanationManager.getExplanationManager(reasoner); + impMan = ImpactManager.getImpactManager(reasoner); + impMan.addListener(this); + panel = new UnsatisfiableExplanationPanel(expMan, impMan); + panel.addActionListeners(this); + panel.addListSelectionListener(this); + setPanelComponent(panel); + + + + } + + private void showLaconicExplanations() { + panel.clearExplanationsPanel(); + expMan.setLaconicMode(true); + int counter = 1; + for (List<OWLAxiom> explanation : expMan + .getOrderedLaconicUnsatisfiableExplanations(unsatClass)) { + panel.addExplanation(explanation, unsatClass, counter); + counter++; + } + + } + + private void showRegularExplanations() { + panel.clearExplanationsPanel(); + expMan.setLaconicMode(false); + int counter = 1; + for (List<OWLAxiom> explanation : expMan + .getOrderedUnsatisfiableExplanations(unsatClass)) { + panel.addExplanation(explanation, unsatClass, counter); + counter++; + } + } + + private void showExplanations(){ + if(laconicMode) { + showLaconicExplanations(); + } else { + showRegularExplanations(); + } + } + + @Override + public Object getNextPanelDescriptor() { + return ClassPanelOWLDescriptor.IDENTIFIER; + } + + @Override + public Object getBackPanelDescriptor() { + return KnowledgeSourcePanelDescriptor.IDENTIFIER; + } + + @Override + public void aboutToDisplayPanel() { + fillUnsatClassesList(); + getWizard().getInformationField().setText(INFORMATION); + + } + + @Override + public void actionPerformed(ActionEvent e) { + if (e.getActionCommand().equals("regular")) { + laconicMode = false; + } else if (e.getActionCommand().equals("laconic")) { + laconicMode = true; + } + showExplanations(); + + } + + @Override + public void axiomForImpactChanged() { + // TODO Auto-generated method stub + + } + + @Override + public void repairPlanExecuted() { + panel.clearExplanationsPanel(); + + fillUnsatClassesList(); + panel.repaint(); + + } + + private void fillUnsatClassesList(){ + List<OWLClass> unsatClasses = new ArrayList<OWLClass>(); + Set<OWLClass> rootClasses = new TreeSet<OWLClass>(expMan + .getRootUnsatisfiableClasses()); + unsatClasses.addAll(rootClasses); + Set<OWLClass> derivedClasses = new TreeSet<OWLClass>(expMan + .getUnsatisfiableClasses()); + derivedClasses.removeAll(rootClasses); + + unsatClasses.addAll(derivedClasses); + panel.fillUnsatClassesList(unsatClasses); + } + + @Override + public void valueChanged(ListSelectionEvent e) { + JXList unsatList = (JXList) e.getSource(); + unsatClass = (OWLClass)unsatList.getSelectedValue(); + if (!unsatList.isSelectionEmpty()) { + showExplanations(); + } + + } + +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/WizardController.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/WizardController.java 2009-06-07 16:43:07 UTC (rev 1791) +++ trunk/src/dl-learner/org/dllearner/tools/ore/WizardController.java 2009-06-07 21:01:00 UTC (rev 1792) @@ -21,17 +21,13 @@ package org.dllearner.tools.ore; -import java.awt.Dimension; import java.awt.event.ActionListener; import java.util.List; import java.util.Set; import java.util.concurrent.ExecutionException; import javax.swing.DefaultListModel; -import javax.swing.JDialog; import javax.swing.JOptionPane; -import javax.swing.JProgressBar; -import javax.swing.SwingUtilities; import javax.swing.SwingWorker; import org.dllearner.core.owl.Description; @@ -85,18 +81,19 @@ private void nextButtonPressed() { WizardModel model = wizard.getModel(); - WizardPanelDescriptor descriptor = model.getCurrentPanelDescriptor(); + WizardPanelDescriptor currentPanelDescriptor = model.getCurrentPanelDescriptor(); ORE ore = model.getOre(); // If it is a finishable panel, close down the dialog. Otherwise, // get the ID that the current panel identifies as the next panel, // and display it. - Object nextPanelDescriptor = descriptor.getNextPanelDescriptor(); + Object nextPanelDescriptor = currentPanelDescriptor.getNextPanelDescriptor(); WizardPanelDescriptor nextDescriptor = model.getPanelHashMap().get(nextPanelDescriptor); - - if(nextPanelDescriptor.equals("CLASS_CHOOSE_OWL_PANEL")){ + + if(currentPanelDescriptor.getPanelDescriptorIdentifier().equals + (KnowledgeSourcePanelDescriptor.IDENTIFIER)){ ore.initPelletReasoner(); - + if(!ore.consistentOntology()){ @@ -115,11 +112,36 @@ } else { - ((ClassPanelOWLDescriptor) nextDescriptor).getOwlClassPanel().getModel().clear(); - new ConceptRetriever(nextPanelDescriptor).execute(); + ore.getPelletReasoner().classify(); + if(ore.getPelletReasoner().getInconsistentClasses().size() > 0 ){ + UnsatisfiableExplanationPanelDescriptor unsatDescriptor = new UnsatisfiableExplanationPanelDescriptor(); + wizard.registerWizardPanel(UnsatisfiableExplanationPanelDescriptor.IDENTIFIER, unsatDescriptor); + ((UnsatisfiableExplanationPanelDescriptor)model.getPanelHashMap().get(UnsatisfiableExplanationPanelDescriptor.IDENTIFIER)).init(); + wizard.registerWizardPanel(UnsatisfiableExplanationPanelDescriptor.IDENTIFIER, unsatDescriptor); + nextPanelDescriptor = UnsatisfiableExplanationPanelDescriptor.IDENTIFIER; + } else { + + nextPanelDescriptor = ClassPanelOWLDescriptor.IDENTIFIER; + ((ClassPanelOWLDescriptor) nextDescriptor).getOwlClassPanel().getModel().clear(); + new ConceptRetriever(nextPanelDescriptor).execute(); + } + } } + if(currentPanelDescriptor.equals(InconsistencyExplanationPanelDescriptor.IDENTIFIER)){ + ore.getPelletReasoner().classify(); + if(ore.getPelletReasoner().getInconsistentClasses().size() > 0 ){ + + } else { + nextPanelDescriptor = KnowledgeSourcePanelDescriptor.IDENTIFIER; + } + } + if(currentPanelDescriptor.getPanelDescriptorIdentifier().equals(UnsatisfiableExplanationPanelDescriptor.IDENTIFIER)){ + nextPanelDescriptor = ClassPanelOWLDescriptor.IDENTIFIER; + ((ClassPanelOWLDescriptor) nextDescriptor).getOwlClassPanel().getModel().clear(); + new ConceptRetriever(nextPanelDescriptor).execute(); + } if(nextPanelDescriptor.equals("LEARNING_PANEL")){ ore.init(); @@ -144,7 +166,7 @@ Description oldClass = model.getOre().getIgnoredConcept(); List<OWLOntologyChange> changes = ore.getModifier().rewriteClassDescription(newDesc, oldClass); - ((RepairPanelDescriptor) descriptor).getOntologyChanges().addAll(changes); + ((RepairPanelDescriptor) currentPanelDescriptor).getOntologyChanges().addAll(changes); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |