/* Copyright 2009 by the Oxford University Computing Laboratory
This file is part of HermiT.
HermiT is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
HermiT is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with HermiT. If not, see <http://www.gnu.org/licenses/>.
*/
package org.semanticweb.HermiT.debugger.commands;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import org.semanticweb.HermiT.debugger.Debugger;
import org.semanticweb.HermiT.model.AtomicConcept;
import org.semanticweb.HermiT.model.AtomicRole;
import org.semanticweb.HermiT.model.DLPredicate;
import org.semanticweb.HermiT.model.DescriptionGraph;
import org.semanticweb.HermiT.model.Equality;
import org.semanticweb.HermiT.model.Inequality;
import org.semanticweb.HermiT.tableau.Node;
public abstract class AbstractCommand implements DebuggerCommand {
protected final Debugger m_debugger;
public AbstractCommand(Debugger debugger) {
m_debugger=debugger;
}
protected void showTextInWindow(String string,String title) {
JTextArea textArea=new JTextArea(string);
textArea.setFont(Debugger.s_monospacedFont);
JScrollPane scrollPane=new JScrollPane(textArea);
scrollPane.setPreferredSize(new Dimension(400,300));
JFrame frame=new JFrame(title);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setContentPane(scrollPane);
frame.pack();
frame.setLocation(100,100);
frame.setVisible(true);
}
protected void selectConsoleWindow() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
if (m_debugger!=null)
m_debugger.getMainFrame().toFront();
}
});
}
protected DLPredicate getDLPredicate(String predicate) throws Exception {
if ("==".equals(predicate))
return Equality.INSTANCE;
else if ("!=".equals(predicate))
return Inequality.INSTANCE;
else if (predicate.startsWith("+"))
return AtomicConcept.create(m_debugger.getPrefixes().expandAbbreviatedIRI(predicate.substring(1)));
else if (predicate.startsWith("-"))
return AtomicRole.create(m_debugger.getPrefixes().expandAbbreviatedIRI(predicate.substring(1)));
else if (predicate.startsWith("$")) {
String graphName=m_debugger.getPrefixes().expandAbbreviatedIRI(predicate.substring(1));
for (DescriptionGraph descriptionGraph : m_debugger.getTableau().getPermanentDLOntology().getAllDescriptionGraphs())
if (graphName.equals(descriptionGraph.getName()))
return descriptionGraph;
return null;
}
else
return null;
}
/**
* @param node
* a node in the tableau
* @return "no" if node is not blocked; "directly by" plus "signature in cache" or the ID of the blocking node if the node is directly blocked; "indirectly by" plus "signature in cache" or the ID of the blocking node otherwise
*/
protected static String formatBlockingStatus(Node node) {
if (!node.isBlocked())
return "no";
else if (node.isDirectlyBlocked())
return "directly by "+(node.getBlocker()==Node.SIGNATURE_CACHE_BLOCKER ? "signature in cache" : node.getBlocker().getNodeID());
else
return "indirectly by "+(node.getBlocker()==Node.SIGNATURE_CACHE_BLOCKER ? "signature in cache" : node.getBlocker().getNodeID());
}
}