/**
*
*/
package org.hyperdata.scute.sparql.actions;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import javax.swing.JOptionPane;
import com.hp.hpl.jena.query.Dataset;
import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryException;
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.sparql.resultset.SPARQLResult;
import org.hyperdata.scute.main.Config;
import org.hyperdata.scute.main.Scute;
import org.hyperdata.scute.sparql.SparqlContainer;
import org.hyperdata.scute.sparql.SparqlHttp;
import org.hyperdata.scute.sparql.panels.SparqlRunToolbar;
import org.hyperdata.scute.sparql.panels.SparqlSourcePanel;
import org.hyperdata.scute.status.DummyTask;
import org.hyperdata.scute.status.StatusAction;
import org.hyperdata.scute.status.StatusEvent;
import org.hyperdata.scute.status.StatusMonitor;
import org.hyperdata.scute.system.Log;
import org.hyperdata.scute.validate.Validator;
/**
* @author danny
*
* TODO refactor! implement local
*/
public class RunQueryAction extends StatusAction {
// private SparqlContainer sparqlContainer;
private SparqlHttp sparqlHttp;
// private SparqlSourcePanel sourcePanel;
// private Validator validator;
// private Frame frame;
private SparqlRunToolbar sparqlRunToolbar;
/**
* @param frame
* @param string
* label
* @param sourcePanel
* @param validator
*/
// public RunQueryAction(Frame frame, String string, SparqlContainer
// sparqlContainer,
// SparqlSourcePanel sourcePanel, Validator validator) {
// super(string);
// this.frame = frame;
// this.sparqlContainer = sparqlContainer;
// this.sourcePanel = sourcePanel;
// this.validator = validator;
// sparqlHttp = new SparqlHttp();
// setStatusTask(sparqlHttp);
// }
/**
* @param sparqlRunToolbar
*/
public RunQueryAction(SparqlRunToolbar sparqlRunToolbar) {
super("Run");
this.sparqlRunToolbar = sparqlRunToolbar;
setStatusTask(new DummyTask());
}
/*
* (non-Javadoc)
*
* @see
* java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
@Override
public void actionPerformed(ActionEvent event) {
StatusEvent statusEvent = sparqlRunToolbar.getValidator().validate();
if (statusEvent.getStatus() != StatusMonitor.GREEN) {
JOptionPane.showMessageDialog(sparqlRunToolbar.getFrame(),
statusEvent.getDescription(), "Syntax Error",
JOptionPane.WARNING_MESSAGE);
return;
}
sparqlRunToolbar.initSparqlContainer();
// sparqlContainer.setQueryString(sourcePanel.getText());
// sparqlContainer.setEndpoint(sourcePanel.get)
if (sparqlRunToolbar.getSparqlContainer().isLocal()) {
runLocalQuery(event);
} else {
runRemoteQuery(event);
}
}
/**
*
*/
private void runRemoteQuery(ActionEvent event) {
System.out.println("runRemoteQuery sparqlHttp="+sparqlHttp);
if (sparqlHttp != null){
System.out.println("runRemoteQuery sparqlHttp.isRunning()="+sparqlHttp.isRunning());
}
if (sparqlHttp != null && sparqlHttp.isRunning()) {
stop();
return;
}
if (sparqlHttp == null) {
sparqlHttp = new SparqlHttp();
}
setStatusTask(sparqlHttp);
System.out.println("ENDPOINT RQA="
+ sparqlRunToolbar.getSparqlContainer().getEndpoint());
if (sparqlRunToolbar.getSparqlContainer().getEndpoint().getUri() == null) { // shouldn't
// get
// this far...
return;
}
sparqlHttp.init(sparqlRunToolbar.getSparqlContainer());
// sparqlHttp.addStatusListener(Scute.animatedCursor);
// sparqlRunToolbar.setCursor(null);
// setAnimateCursor(true);
super.actionPerformed(event);
}
/**
* @param event
*/
private void runLocalQuery(ActionEvent event) {
// TODO shift this to a Runnable
// TODO check if is running, stop
// TODO IMPLEMENTS!!!
// SPARQLResult result =
// runQuery(sparqlRunToolbar.getSparqlContainer().getQueryString());
Query query = null;
try {
query = QueryFactory.create(sparqlRunToolbar.getSparqlContainer()
.getQueryString(), Config.SPARQL_SYNTAX);
} catch (QueryException exception) {
Log.exception(exception);
}
SPARQLResult result = null;
Dataset dataset = sparqlRunToolbar.getSparqlContainer().getDataset();
QueryExecution qexec = QueryExecutionFactory.create(query, dataset);
if (query.isSelectType()) {
ResultSet rs = qexec.execSelect();
// rs = ResultSetFactory.copyResults(rs) ;
result = new SPARQLResult(rs);
}
if (query.isConstructType()) {
Model model = qexec.execConstruct();
result = new SPARQLResult(model);
}
if (query.isDescribeType()) {
Model model = qexec.execDescribe();
result = new SPARQLResult(model);
}
if (query.isAskType()) {
boolean b = qexec.execAsk();
result = new SPARQLResult(b);
}
// do something with result;
}
}