From: <lor...@us...> - 2009-05-17 19:43:30
|
Revision: 1752 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1752&view=rev Author: lorenz_b Date: 2009-05-17 19:43:11 +0000 (Sun, 17 May 2009) Log Message: ----------- extended explanation-gui showing lost entailments on axiom removal 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/ExplanationTablePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/OWLSyntaxTableCellRenderer.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManagerListener.java trunk/src/dl-learner/org/dllearner/tools/ore/ImpactTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ImpactTableModel.java Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-05-15 11:55:08 UTC (rev 1751) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-05-17 19:43:11 UTC (rev 1752) @@ -1,6 +1,5 @@ package org.dllearner.tools.ore; -import java.net.URI; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -14,7 +13,6 @@ import org.dllearner.tools.ore.explanation.RootFinder; import org.mindswap.pellet.owlapi.PelletReasonerFactory; import org.mindswap.pellet.owlapi.Reasoner; -import org.semanticweb.owl.apibinding.OWLManager; import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLClass; import org.semanticweb.owl.model.OWLDataFactory; @@ -22,7 +20,6 @@ import org.semanticweb.owl.model.OWLOntology; import org.semanticweb.owl.model.OWLOntologyChange; import org.semanticweb.owl.model.OWLOntologyChangeListener; -import org.semanticweb.owl.model.OWLOntologyCreationException; import org.semanticweb.owl.model.OWLOntologyManager; import org.semanticweb.owl.model.OWLSubClassAxiom; @@ -51,41 +48,45 @@ boolean ontologyChanged = true; - private ExplanationManager(String ontPath){ + + private ExplanationManager(OWLOntologyManager manager, Reasoner reasoner, + OWLOntology ontology) { regularExplanationCache = new HashMap<OWLClass, Set<Set<OWLAxiom>>>(); laconicExplanationCache = new HashMap<OWLClass, Set<Set<OWLAxiom>>>(); - - try { - manager = OWLManager.createOWLOntologyManager(); - manager.addOntologyChangeListener(this); - dataFactory = manager.getOWLDataFactory(); - ontology = manager.loadOntology(URI.create(ontPath)); - reasonerFactory = new PelletReasonerFactory(); - reasoner = reasonerFactory.createReasoner(manager); - reasoner.loadOntology(ontology); - reasoner.classify(); - - rootFinder = new RootFinder(manager, reasoner, reasonerFactory); - - regularExpGen = new PelletExplanation(manager, Collections.singleton(ontology)); - laconicExpGen = new LaconicExplanationGenerator(manager, reasonerFactory, Collections.singleton(ontology)); - - rootClasses = new HashSet<OWLClass>(); - unsatClasses = new HashSet<OWLClass>(); - } catch (OWLOntologyCreationException e) { - - e.printStackTrace(); - } + + this.manager = manager; + this.reasoner = reasoner; + this.ontology = ontology; + manager.addOntologyChangeListener(this); + dataFactory = manager.getOWLDataFactory(); + + reasonerFactory = new PelletReasonerFactory(); + + rootFinder = new RootFinder(manager, reasoner, reasonerFactory); + + regularExpGen = new PelletExplanation(manager, Collections + .singleton(ontology)); + laconicExpGen = new LaconicExplanationGenerator(manager, + reasonerFactory, Collections.singleton(ontology)); + + rootClasses = new HashSet<OWLClass>(); + unsatClasses = new HashSet<OWLClass>(); + } - public static synchronized ExplanationManager getExplanationManager(String ontPath){ - if(instance == null){ - instance = new ExplanationManager(ontPath); + public static synchronized ExplanationManager getExplanationManager( + OWLOntologyManager manager, Reasoner reasoner, OWLOntology ontology) { + if (instance == null) { + instance = new ExplanationManager(manager, reasoner, ontology); } return instance; } + public static synchronized ExplanationManager getExplanationManager(){ + return instance; + } + public Set<OWLClass> getUnsatisfiableClasses(){ computeRootUnsatisfiableClasses(); return unsatClasses; @@ -181,4 +182,21 @@ ontologyChanged = true; } + + public int getArity(OWLClass cl, OWLAxiom ax) { + int arity = 0; + Set<Set<OWLAxiom>> explanations = regularExplanationCache.get(cl); + + if(explanations != null){ + + for (Set<OWLAxiom> explanation : explanations) { + if (explanation.contains(ax)) { + arity++; + } + } + } + return arity; + } + + } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java 2009-05-15 11:55:08 UTC (rev 1751) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java 2009-05-17 19:43:11 UTC (rev 1752) @@ -4,9 +4,14 @@ 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; @@ -14,24 +19,33 @@ 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 javax.swing.table.DefaultTableModel; import org.jdesktop.swingx.JXList; -import org.jdesktop.swingx.JXTable; +import org.mindswap.pellet.owlapi.PelletReasonerFactory; +import org.mindswap.pellet.owlapi.Reasoner; +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.OWLOntologyCreationException; +import org.semanticweb.owl.model.OWLOntologyManager; -public class ExplanationPanel extends JPanel implements ListSelectionListener, ActionListener{ +public class ExplanationPanel extends JPanel implements ListSelectionListener, + ActionListener { private JXList unsatList; private JSplitPane splitPane; + private JSplitPane statsSplitPane; private JScrollPane listScrollPane; private JScrollPane explanationsScrollPane; private JComponent explanationsPanel; @@ -40,61 +54,50 @@ private ButtonGroup explanationType; private JRadioButton regularButton; private JRadioButton laconicButton; - private OWLSyntaxTableCellRenderer tableRenderer; + private UnsatClassesListCellRenderer listRenderer; + + private ExplanationManager expManager; + private ImpactManager impManager; + - private ExplanationManager manager; private OWLClass unsatClass; /** * */ private static final long serialVersionUID = 2213073383532597460L; - public ExplanationPanel(ExplanationManager manager){ + public ExplanationPanel(ExplanationManager expMan, ImpactManager impMan) { + - this.manager = manager; - + this.expManager = expMan; + this.impManager = impMan; + setLayout(new BorderLayout()); - + Dimension minimumSize = new Dimension(400, 400); - - tableRenderer = new OWLSyntaxTableCellRenderer(); - listRenderer = new UnsatClassesListCellRenderer(manager); - - - - DefaultListModel model = new DefaultListModel(); - for(OWLClass root : manager.getRootUnsatisfiableClasses()){ - model.addElement(root); - } - for(OWLClass unsat : manager.getUnsatisfiableClasses()){ - if(!model.contains(unsat)){ - model.addElement(unsat); - } - } - - unsatList = new JXList(model); - + listRenderer = new UnsatClassesListCellRenderer(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.setBorder(BorderFactory + .createLineBorder(Color.LIGHT_GRAY)); explanationsScrollPane.getViewport().setOpaque(false); - explanationsScrollPane.getViewport().setBackground(null); - explanationsScrollPane.setOpaque(false); - - + explanationsScrollPane.getViewport().setBackground(null); + explanationsScrollPane.setOpaque(false); + regularButton = new JRadioButton("regular", true); regularButton.setActionCommand("regular"); regularButton.addActionListener(this); @@ -107,69 +110,77 @@ buttonPanel = new JPanel(); buttonPanel.add(regularButton); buttonPanel.add(laconicButton); - + buttonExplanationsPanel = new JPanel(); buttonExplanationsPanel.setLayout(new BorderLayout()); - buttonExplanationsPanel.add(explanationsScrollPane, BorderLayout.CENTER); + buttonExplanationsPanel + .add(explanationsScrollPane, BorderLayout.CENTER); buttonExplanationsPanel.add(buttonPanel, BorderLayout.NORTH); + + statsSplitPane = new JSplitPane(0); + statsSplitPane.setResizeWeight(1.0D); + statsSplitPane.setTopComponent(buttonExplanationsPanel); - splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, listScrollPane, buttonExplanationsPanel); + JPanel impactPanel = new JPanel(); + impactPanel.setLayout(new BorderLayout()); + impactPanel.add(new JLabel("Lost entailments"), BorderLayout.NORTH); + JScrollPane scr = new JScrollPane(new ImpactTable(impManager)); + impactPanel.add(scr); + + statsSplitPane.setBottomComponent(impactPanel); + + 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); } - - - private void addExplanationTable(List<OWLAxiom> explanation, int number){ - - - JXTable expTable = new JXTable(); - DefaultTableModel model = new DefaultTableModel(); - model.addColumn("axiom", explanation.toArray()); - expTable.setModel(model); - expTable.setDefaultRenderer(Object.class, tableRenderer); - - - -// DLSyntaxObjectRenderer r = new DLSyntaxObjectRenderer(); -// Vector<String> t = new Vector<String>(); -// for(OWLAxiom ax : explanation) -// t.add(r.render(ax)); -// model.addColumn("axiom", t); -// expTable.setModel(new ExplanationTableModel()); -// expTable.setDefaultRenderer(JButton.class, new ExplanationTableCellRenderer(expTable.getDefaultRenderer(JButton.class))); -// expTable.addMouseListener(new JTableButtonMouseListener(expTable)); + 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); - expTable.getColumn(0).sizeWidthToFit(); - expTable.setSize(300, 300); - expTable.setEditable(false); - - - + } + 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); -// JPanel tablePanel = new JPanel();tablePanel.setLayout(new GridLayout(0,1)); -// -// tablePanel.add(expTable); -// tablePanel.setPreferredSize(new Dimension(300, 300)); -// tablePanel.setBorder(BorderFactory.createTitledBorder("explanation " + number)); - + ExplanationTable expTable = new ExplanationTable(explanation, impManager, expManager, unsatClass); explanationsPanel.add(new ExplanationTablePanel(expTable, number)); - + } - - private void clearExplanationsPanel(){ + + private void clearExplanationsPanel() { explanationsPanel.removeAll(); } - - private void showLaconicExplanations(){ + + private void showLaconicExplanations() { clearExplanationsPanel(); int counter = 1; - for(List<OWLAxiom> explanation : manager.getOrderedLaconicUnsatisfiableExplanations(unsatClass)){ + for (List<OWLAxiom> explanation : expManager + .getOrderedLaconicUnsatisfiableExplanations(unsatClass)) { addExplanationTable(explanation, counter); counter++; } @@ -178,11 +189,12 @@ explanationsPanel.add(Box.createVerticalStrut(10)); this.updateUI(); } - - private void showRegularExplanations(){ + + private void showRegularExplanations() { clearExplanationsPanel(); int counter = 1; - for(List<OWLAxiom> explanation : manager.getOrderedUnsatisfiableExplanations(unsatClass)){ + for (List<OWLAxiom> explanation : expManager + .getOrderedUnsatisfiableExplanations(unsatClass)) { addExplanationTable(explanation, counter); counter++; } @@ -191,49 +203,103 @@ explanationsPanel.add(Box.createVerticalStrut(10)); this.updateUI(); } - @Override public void valueChanged(ListSelectionEvent e) { - unsatClass = (OWLClass)((JXList)e.getSource()).getSelectedValue(); + 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(regularButton.isSelected()){ + + if (regularButton.isSelected()) { showRegularExplanations(); } else { showLaconicExplanations(); } - + } - - @Override public void actionPerformed(ActionEvent e) { - if(e.getActionCommand().equals("regular")){ + if (e.getActionCommand().equals("regular")) { showRegularExplanations(); - } else if(e.getActionCommand().equals("laconic") && !unsatList.isSelectionEmpty()){ + } else if (e.getActionCommand().equals("laconic") + && !unsatList.isSelectionEmpty()) { showLaconicExplanations(); - + } - + } - - public static void main(String[] args){ - - String file = "file:examples/ore/miniEconomy.owl"; - - ExplanationManager manager = ExplanationManager.getExplanationManager(file); - ExplanationPanel panel = new ExplanationPanel(manager); - - - JFrame test = new JFrame(); - test.setLayout(new GridLayout(0, 1)); - test.setSize(new Dimension(800, 500)); - test.add(panel); - test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - test.setVisible(true); - - + + public static void main(String[] args) { + + try { + String file = "file:examples/ore/koala.owl"; + OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); + OWLOntology ontology = manager.loadOntologyFromPhysicalURI(URI + .create(file)); + PelletReasonerFactory reasonerFactory = new PelletReasonerFactory(); + Reasoner reasoner = reasonerFactory.createReasoner(manager); + reasoner.loadOntologies(Collections.singleton(ontology)); + reasoner.classify(); + ExplanationManager expManager = ExplanationManager + .getExplanationManager(manager, reasoner, ontology); + ImpactManager impManager = ImpactManager.getImpactManager(manager, + reasoner, ontology); + ExplanationPanel panel = new ExplanationPanel(expManager, + impManager); + + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + + JFrame test = new JFrame(); + test.setLayout(new GridLayout(0, 1)); + test.setSize(new Dimension(1200, 700)); + 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(); + } + + } } -} Added: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationTable.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationTable.java 2009-05-17 19:43:11 UTC (rev 1752) @@ -0,0 +1,186 @@ +package org.dllearner.tools.ore; + +import java.awt.Color; +import java.awt.Component; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.util.List; + +import javax.swing.AbstractCellEditor; +import javax.swing.JButton; +import javax.swing.JTable; +import javax.swing.UIManager; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import javax.swing.table.TableCellEditor; +import javax.swing.table.TableCellRenderer; +import javax.swing.table.TableColumn; + +import org.jdesktop.swingx.JXTable; +import org.semanticweb.owl.model.OWLAxiom; +import org.semanticweb.owl.model.OWLClass; + +public class ExplanationTable extends JXTable implements ImpactManagerListener{ + + /** + * + */ + private static final long serialVersionUID = 5580730282611559609L; + + private List<OWLAxiom> explanation; + private ImpactManager impMan; + + public ExplanationTable(List<OWLAxiom> explanation, ImpactManager impMan, ExplanationManager expMan, OWLClass cl) { + this.explanation = explanation; + this.impMan = impMan; + setBackground(Color.WHITE); + setAutoResizeMode(JTable.AUTO_RESIZE_OFF); + setModel(new ExplanationTableModel(explanation, expMan, impMan, cl)); + getColumn(0).setCellRenderer(new OWLSyntaxTableCellRenderer(impMan)); + TableColumn column4 = getColumn(3); + column4.setCellRenderer(new ButtonCellRenderer()); + column4.setCellEditor(new ButtonCellEditor()); + column4.setResizable(false); + setColumnSizes(); + getSelectionModel().addListSelectionListener(new ListSelectionListener(){ + + + final ExplanationTable table; + + @Override + public void valueChanged(ListSelectionEvent e) { + + table.changeSelection(); + + } + { + table = ExplanationTable.this; + + } + + }); + + addFocusListener(new FocusListener() { + + final ExplanationTable table; + + public void focusGained(FocusEvent focusevent) + { + } + + public void focusLost(FocusEvent e) + { + table.clearSelection(); + table.changeSelection(); + + } + + + + + { + + table = ExplanationTable.this; + + } + }); + } + + private OWLAxiom getOWLAxiomAtRow(int rowIndex){ + return ((ExplanationTableModel)getModel()).getOWLAxiomAtRow(rowIndex); + } + + private void setColumnSizes(){ + getColumn(1).setMaxWidth(30); + getColumn(2).setMaxWidth(30); + getColumn(3).setMaxWidth(80); + } + + private void changeSelection() { + + + if(getSelectedRow() >=0){ + OWLAxiom rowAxiom = getOWLAxiomAtRow(getSelectedRow()); + impMan.setActualAxiom(rowAxiom); + } else { + impMan.setActualAxiom(null); + } + + } + + class ButtonCellRenderer extends JButton implements TableCellRenderer{ + + /** + * + */ + private static final long serialVersionUID = 1962950956976967243L; + + + @Override + public Component getTableCellRendererComponent(JTable table, Object value, + boolean isSelected, boolean hasFocus, int row, int column) { + if (isSelected) { + setForeground(table.getSelectionForeground()); + setBackground(table.getSelectionBackground()); + } else { + setForeground(table.getForeground()); + setBackground(UIManager.getColor("Button.background")); + } + setText( (value ==null) ? "" : value.toString() ); + return this; + } + + + } + + class ButtonCellEditor extends AbstractCellEditor implements + TableCellEditor, ActionListener { + /** + * + */ + private static final long serialVersionUID = 9017452102605141646L; + JTable table; + JButton editButton; + String text; + + + public ButtonCellEditor() { + super(); + + editButton = new JButton(); + editButton.setFocusPainted(false); + editButton.addActionListener(this); + } + + + @Override + public Component getTableCellEditorComponent(JTable table, + Object value, boolean isSelected, int row, int column) { + text = (value == null) ? "" : value.toString(); + editButton.setText(text); + return editButton; + } + + @Override + public Object getCellEditorValue() { + return text; + } + + @Override + public void actionPerformed(ActionEvent e) { + fireEditingStopped(); + } + } + + @Override + public void axiomForImpactChanged() { + repaint(); + + } + + + + +} Added: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationTableModel.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationTableModel.java 2009-05-17 19:43:11 UTC (rev 1752) @@ -0,0 +1,99 @@ +package org.dllearner.tools.ore; + +import java.util.ArrayList; +import java.util.List; + +import javax.swing.table.AbstractTableModel; + +import org.semanticweb.owl.model.OWLAxiom; +import org.semanticweb.owl.model.OWLClass; + +public class ExplanationTableModel extends AbstractTableModel { + + + /** + * + */ + private static final long serialVersionUID = -4537633628250304813L; + private List<OWLAxiom> axioms; + private List<Boolean> remove; + private ExplanationManager expMan; + private ImpactManager impMan; + private OWLClass unsat; + + public ExplanationTableModel(List<OWLAxiom> axioms, ExplanationManager expMan, ImpactManager impMan, OWLClass cl){ + this.axioms = axioms; + this.expMan = expMan; + this.impMan = impMan; + this.unsat = cl; + remove = new ArrayList<Boolean>(); + for(int i = 0; i < axioms.size(); i++){ + remove.add(false); + } + } + + @Override + public int getColumnCount() { + return 4; + } + + @Override + public int getRowCount() { + return axioms.size(); + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + if(columnIndex == 0 && rowIndex >=0){ + return axioms.get(rowIndex); + } else if(columnIndex == 1){ + return expMan.getArity(unsat, axioms.get(rowIndex)); + } else if(columnIndex == 2) { + return Boolean.valueOf(impMan.isSelected(getOWLAxiomAtRow(rowIndex)));//remove.get(rowIndex); + } else { + return "rewrite"; + } + + } + + + @Override + public void setValueAt(Object value, int rowIndex, int columnIndex) { + if(columnIndex == 2){ + OWLAxiom ax = getOWLAxiomAtRow(rowIndex); + if(impMan.isSelected(ax)){ + impMan.removeAxiomFromImpactList(ax); + } else { + impMan.addAxiom2ImpactList(ax); + } + } + super.setValueAt(value, rowIndex, columnIndex); + } + + @Override + public Class<? extends Object> getColumnClass(int columnIndex){ + if(columnIndex == 0) { + return OWLAxiom.class; + } else if(columnIndex == 1){ + return int.class; + } else if(columnIndex == 2) { + return Boolean.class; + } else { + return String.class; + } + } + + @Override + public boolean isCellEditable(int rowIndex, int columnIndex) { + if(columnIndex == 2 || columnIndex == 3) + return true; + return false; + } + + public OWLAxiom getOWLAxiomAtRow(int rowIndex){ + return axioms.get(rowIndex); + } + + + +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationTablePanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationTablePanel.java 2009-05-15 11:55:08 UTC (rev 1751) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationTablePanel.java 2009-05-17 19:43:11 UTC (rev 1752) @@ -23,6 +23,7 @@ this.explanationTable = explanationTable; this.explanationNumber = explanationNumber; createGUI(); + } private void createGUI(){ Added: trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java 2009-05-17 19:43:11 UTC (rev 1752) @@ -0,0 +1,89 @@ +package org.dllearner.tools.ore; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.dllearner.tools.ore.explanation.AxiomRanker; +import org.mindswap.pellet.owlapi.Reasoner; +import org.semanticweb.owl.model.OWLAxiom; +import org.semanticweb.owl.model.OWLOntology; +import org.semanticweb.owl.model.OWLOntologyManager; + +public class ImpactManager { + + private static ImpactManager instance; + private Map<OWLAxiom, Set<OWLAxiom>> impact; + private AxiomRanker ranker; + private OWLAxiom actual; + private List<OWLAxiom> selectedAxioms; + private List<ImpactManagerListener> listeners; + + private ImpactManager(OWLOntologyManager manager, Reasoner reasoner, OWLOntology ontology) { + impact = new HashMap<OWLAxiom, Set<OWLAxiom>>(); + selectedAxioms = new ArrayList<OWLAxiom>(); + listeners = new ArrayList<ImpactManagerListener>(); + ranker = new AxiomRanker(ontology, reasoner, manager.getOWLDataFactory()); + + } + + private ImpactManager(){ + + } + + public void addListener(ImpactManagerListener listener){ + listeners.add(listener); + } + + public void removeListener(ImpactManagerListener listener){ + listeners.remove(listener); + } + + public static synchronized ImpactManager getImpactManager(OWLOntologyManager manager, Reasoner reasoner, OWLOntology ontology) { + if (instance == null) { + instance = new ImpactManager(manager, reasoner, ontology); + } + return instance; + } + + + public Set<OWLAxiom> getImpactAxioms() { + Set<OWLAxiom> imp = impact.get(actual); + if (imp == null) { + imp = new HashSet<OWLAxiom>(); + impact.put(actual, imp); + imp.addAll(ranker.computeImpactSOS(actual)); + } + return imp; + } + + public void setActualAxiom(OWLAxiom ax){ + actual = ax; + fireAxiomForImpactChanged(); + } + + public void addAxiom2ImpactList(OWLAxiom ax){ + selectedAxioms.add(ax); + fireAxiomForImpactChanged(); + } + + public void removeAxiomFromImpactList(OWLAxiom ax){ + selectedAxioms.remove(ax); + fireAxiomForImpactChanged(); + } + + public boolean isSelected(OWLAxiom ax){ + return selectedAxioms.contains(ax); + } + + private void fireAxiomForImpactChanged(){ + for(ImpactManagerListener listener : listeners){ + listener.axiomForImpactChanged(); + } + } + + +} Added: trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManagerListener.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManagerListener.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManagerListener.java 2009-05-17 19:43:11 UTC (rev 1752) @@ -0,0 +1,5 @@ +package org.dllearner.tools.ore; + +public interface ImpactManagerListener { + public abstract void axiomForImpactChanged(); +} Added: trunk/src/dl-learner/org/dllearner/tools/ore/ImpactTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ImpactTable.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ImpactTable.java 2009-05-17 19:43:11 UTC (rev 1752) @@ -0,0 +1,27 @@ +package org.dllearner.tools.ore; + +import java.awt.Color; + +import org.jdesktop.swingx.JXTable; + +public class ImpactTable extends JXTable { + + /** + * + */ + private static final long serialVersionUID = 4146762679753151490L; + + public ImpactTable(ImpactManager manager){ + super(new ImpactTableModel(manager)); + + setShowHorizontalLines(true); + setGridColor(Color.LIGHT_GRAY); + setTableHeader(null); + getColumnModel().getColumn(0).setCellRenderer(new OWLSyntaxTableCellRenderer()); + setRowHeight(getRowHeight() + 4); + + } + + + +} Added: trunk/src/dl-learner/org/dllearner/tools/ore/ImpactTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ImpactTableModel.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ImpactTableModel.java 2009-05-17 19:43:11 UTC (rev 1752) @@ -0,0 +1,61 @@ +package org.dllearner.tools.ore; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import javax.swing.table.AbstractTableModel; + +import org.semanticweb.owl.model.OWLAxiom; + +public class ImpactTableModel extends AbstractTableModel implements ImpactManagerListener +{ + + /** + * + */ + private static final long serialVersionUID = 6109818990550020196L; + private ImpactManager impMan; + private List<OWLAxiom> impact; + + public ImpactTableModel(ImpactManager impMan) + { + + impact = new ArrayList<OWLAxiom>(); + this.impMan = impMan; + impMan.addListener(this); + rebuildData(); + } + + private void rebuildData() + { + impact.clear(); + impact.addAll(impMan.getImpactAxioms()); + Collections.sort(impact); + fireTableDataChanged(); + } + + + + public int getRowCount() + { + return impact.size(); + } + + public int getColumnCount() + { + return 1; + } + + public Object getValueAt(int rowIndex, int columnIndex) + { + return impact.get(rowIndex); + } + + + @Override + public void axiomForImpactChanged() { + rebuildData(); + + } +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OWLSyntaxTableCellRenderer.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OWLSyntaxTableCellRenderer.java 2009-05-15 11:55:08 UTC (rev 1751) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OWLSyntaxTableCellRenderer.java 2009-05-17 19:43:11 UTC (rev 1752) @@ -22,10 +22,12 @@ private StringWriter buffer; private TextBlockWriter writer; private ManchesterSyntaxObjectRenderer renderer; + private ImpactManager impMan; // private List<String> oldAxioms; - public OWLSyntaxTableCellRenderer(){ + public OWLSyntaxTableCellRenderer(ImpactManager impMan){ super(); + this.impMan = impMan; buffer = new StringWriter(); writer = new TextBlockWriter(buffer); renderer = new ManchesterSyntaxObjectRenderer(writer); @@ -34,12 +36,24 @@ // oldAxioms = new ArrayList<String>(); } + + public OWLSyntaxTableCellRenderer(){ + super(); + buffer = new StringWriter(); + writer = new TextBlockWriter(buffer); + renderer = new ManchesterSyntaxObjectRenderer(writer); + renderer.setWrapLines( false ); + renderer.setSmartIndent( true ); + } + @Override protected void setValue(Object value) { if(value instanceof OWLAxiom){ - - + boolean striked = false; + if(impMan != null && impMan.isSelected((OWLAxiom)value)){ + striked = true; + } ((OWLAxiom)value).accept(renderer); writer.flush(); @@ -71,6 +85,10 @@ StringBuffer bf = new StringBuffer(); bf.append("<html>"); + if(striked){ + bf.append("<strike>"); + } + String token; while(st.hasMoreTokens()){ token = st.nextToken(); @@ -88,8 +106,12 @@ bf.append(" " + token + " "); } } + if(striked){ + bf.append("</strike>"); + } bf.append("</html>"); newAxiom = bf.toString(); + setText(newAxiom); // oldAxioms.add(buffer.toString()); buffer.getBuffer().delete(0, buffer.toString().length()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |