/**
*
*/
package org.hyperdata.scute.sparql.panels;
import java.awt.BorderLayout;
import java.awt.event.FocusListener;
import javax.swing.JEditorPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.query.ResultSetFactory;
import com.hp.hpl.jena.query.ResultSetFormatter;
import com.hp.hpl.jena.sparql.resultset.SPARQLResult;
import org.hyperdata.scute.rdf.RdfUtils;
import org.hyperdata.scute.sparql.SparqlContainer;
import org.hyperdata.scute.sparql.SparqlEvent;
import org.hyperdata.scute.sparql.SparqlListener;
import org.hyperdata.scute.sparql.table.TableResultsPane;
import org.hyperdata.scute.syntax.ScuteEditorKit;
import org.hyperdata.scute.system.Log;
/**
* @author danny
*
*/
public class SparqlResultsPanel extends JPanel implements SparqlListener {
private TextResultsPanel textPane;
private XMLResultsPanel xmlPane;
// private BetterJTable table = new BetterJTable();
private TableResultsPane tablePane;
private HTTPPanel httpPane;
public SparqlResultsPanel() {
super(new BorderLayout());
textPane = new TextResultsPanel();
textPane.setEditorKit(new ScuteEditorKit("Turtle")); // for CONSTRUCTed
// results
xmlPane = new XMLResultsPanel();
xmlPane.setEditorKit(new ScuteEditorKit("XML"));
tablePane = new TableResultsPane();
httpPane = new HTTPPanel();
JTabbedPane tabs = new JTabbedPane(SwingConstants.BOTTOM);
tabs.addTab("Table", tablePane); // it has its own scroll
tabs.addTab("XML", new JScrollPane(xmlPane));
tabs.addTab("Text", new JScrollPane(textPane));
tabs.addTab("HTTP", new JScrollPane(httpPane));
add(tabs, BorderLayout.CENTER);
}
public void addFocusListener(FocusListener focusListener){
textPane.addFocusListener(focusListener);
xmlPane.addFocusListener(focusListener);
tablePane.addFocusListener(focusListener);
httpPane.addFocusListener(focusListener);
}
public void populate(String resultString) {
try {
xmlPane.setText(resultString);
} catch (Error error) {
System.err.println("SparqlResultsPanel: " + error.getMessage());
// ignore - probably Interrupted attempt to acquire write lock
}
}
/**
* @param resultSet
*/
private void populate(ResultSet results) {
ResultSet resultSet = ResultSetFactory.copyResults(results);
tablePane.setResults(resultSet);
textPane.setText(ResultSetFormatter.asText(resultSet));
xmlPane.setText(ResultSetFormatter.asXMLString(resultSet));
}
public void populate(SPARQLResult result) {
String resultString = "...";
if (result.isBoolean()) {
resultString = Boolean.toString(result.getBooleanResult());
textPane.setText(resultString);
}
if (result.isModel()) {
resultString = RdfUtils.modelToString(result.getModel());
textPane.setText(resultString); // will do for now
}
if (result.isResultSet()) {
populate(result.getResultSet());
}
}
/*
* (non-Javadoc)
*
* @see
* org.hyperdata.scute.sparql.SparqlListener#sparqlEvent(org.hyperdata.scute
* .sparql.SparqlEvent)
*/
@Override
public void sparqlEvent(SparqlEvent sparqlEvent) {
SparqlContainer sparqlContainer = (SparqlContainer) sparqlEvent
.getSource();
if (sparqlContainer.getResultsText() == null) {
clearViews();
}
populate(sparqlContainer.getResultsText());
populate(sparqlContainer.getResultSet());
populateHTTPPane(sparqlContainer.getHTTPText());
}
/**
*
*/
private void clearViews() {
tablePane.clear();
httpPane.setText("");
xmlPane.setText("");
textPane.setText("");
}
/**
* @param httpText
*/
private void populateHTTPPane(String httpText) {
httpPane.setText(httpText);
}
/**
* @return
*/
public JEditorPane getXmlPane() {
return xmlPane;
}
}