package org.emile.cirilo.business;
import java.io.File;
import java.text.MessageFormat;
import java.util.ResourceBundle;
import javax.swing.JOptionPane;
import com.bigdata.rdf.sail.webapp.client.ConnectOptions;
import com.bigdata.rdf.sail.webapp.client.JettyResponseListener;
import com.bigdata.rdf.sail.webapp.client.RemoteRepository;
import com.bigdata.rdf.sail.webapp.client.RemoteRepository.RemoveOp;
import com.bigdata.rdf.sail.webapp.client.RemoteRepositoryManager;
import org.eclipse.jetty.client.*;
import org.eclipse.jetty.client.util.BasicAuthentication;
import org.eclipse.jetty.client.api.AuthenticationStore;
import org.apache.log4j.Logger;
import org.emile.cirilo.Common;
import org.emile.cirilo.ServiceNames;
import org.emile.cirilo.User;
import org.openrdf.rio.RDFFormat;
import voodoosoft.jroots.core.CServiceProvider;
public class BlazeGraphFactory {
private static Logger log = Logger.getLogger(BlazeGraphFactory.class);
final private String BLAZEGRAPH = "Blazegraph";
private String sparqlEndPoint;
private RemoteRepositoryManager repository;
private HttpClient client;
public BlazeGraphFactory () {
try {
User user = (User) CServiceProvider.getService(ServiceNames.CURRENT_USER);
String host = user.getSesameUrl();
sparqlEndPoint = host.substring(0,host.lastIndexOf("/")+1)+"bigdata";
client = new HttpClient();
AuthenticationStore auth = client.getAuthenticationStore();
auth.addAuthentication(new BasicAuthentication(new java.net.URI(sparqlEndPoint), BLAZEGRAPH, user.getSesameUser(), user.getSesamePasswd()));
this.client.start();
this.repository = new RemoteRepositoryManager(sparqlEndPoint, false, client, null);
} catch (Exception e) {
log.error(e.getLocalizedMessage(),e);
}
}
public void close() {
try {
this.client.stop();
this.repository.close();
} catch (Exception e) {
log.error(e.getLocalizedMessage(),e);
}
}
public boolean getStatus() {
boolean ret = true;
try {
final ConnectOptions opts = new ConnectOptions(sparqlEndPoint + "/status");
opts.method = "GET";
final JettyResponseListener response = this.repository.doConnect(opts);
this.repository.checkResponseCode(response); // can throw HttpException
} catch (Exception e) {
log.error(e.getLocalizedMessage(),e);
ret = false;
} finally {
if (!ret) show();
}
return ret;
}
public String getInfo() {
return this.sparqlEndPoint;
}
private void show() {
try {
ResourceBundle res = (ResourceBundle) CServiceProvider.getService(ServiceNames.RESOURCES);
MessageFormat msgFmt = new MessageFormat(res.getString("triplestoreerror"));
Object[] args = {BLAZEGRAPH};
JOptionPane.showMessageDialog(null, msgFmt.format(args), Common.WINDOW_HEADER, JOptionPane.ERROR_MESSAGE);
} catch (Exception e) {
log.error(e.getLocalizedMessage(),e);
}
}
public boolean insert(File fp, String context) {
try {
RemoteRepository.AddOp ao= new RemoteRepository.AddOp(fp, RDFFormat.RDFXML);
ao.setContext(new org.openrdf.model.impl.URIImpl(context));
this.repository.getRepositoryForDefaultNamespace().add(ao);
} catch (Exception e) {
log.error(e.getLocalizedMessage(),e);
return false;
}
return true;
}
public boolean removeAll() {
try {
RemoveOp ro = new RemoveOp(null,null,null);
this.repository.getRepositoryForDefaultNamespace().remove(ro);
} catch (Exception e) {
log.error(e.getLocalizedMessage(),e);
return false;
}
return true;
}
public boolean remove(String context) {
try {
RemoveOp ro = new RemoveOp(null,null,null,new org.openrdf.model.impl.URIImpl(context));
this.repository.getRepositoryForDefaultNamespace().remove(ro);
} catch (Exception e) {
log.error(e.getLocalizedMessage(),e);
return false;
}
return true;
}
public boolean update(File fp, String context) {
try {
remove(context);
return insert(fp, context);
} catch (Exception e) {
log.error(e.getLocalizedMessage(),e);
return false;
}
}
}