package eu.geoknow.generator.rdf;
import org.apache.log4j.Logger;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class VirtuosoGraphGroupManager implements GraphGroupManager {
private static final Logger log = Logger.getLogger(GraphGroupManager.class);
private static final String jdbcDriver = "virtuoso.jdbc4.Driver";
private String connectionString;
private String user;
private String password;
private Connection connection;
public VirtuosoGraphGroupManager(String connectionString, String user, String password) {
this.connectionString = connectionString;
this.user = user;
this.password = password;
}
@Override
public void createGraphGroup(String group) throws Exception {
executeUpdate(getConnection(), "DB.DBA.RDF_GRAPH_GROUP_CREATE('" + group + "', 0)");
}
@Override
public void addGraph(String group, String graph) throws Exception {
executeUpdate(getConnection(), "DB.DBA.RDF_GRAPH_GROUP_INS('" + group + "', '" + graph + "')");
}
@Override
public void removeGraph(String group, String graph) throws Exception {
executeUpdate(getConnection(), "DB.DBA.RDF_GRAPH_GROUP_DEL('" + group + "', '" + graph + "')");
}
@Override
public void dropGroup(String group) throws Exception {
executeUpdate(getConnection(), "DB.DBA.RDF_GRAPH_GROUP_DROP('" + group + "', 1)");
}
private Connection getConnection() throws ClassNotFoundException, SQLException {
if (connection==null || connection.isClosed()) {
Class.forName(jdbcDriver);
connection = DriverManager.getConnection(connectionString, user, password);
}
return connection;
}
public void close() throws SQLException {
if (connection!=null)
connection.close();
}
private void executeUpdate(Connection conn, String query) throws SQLException {
log.info("EXECUTE: " + query);
Statement stmt = conn.createStatement();
try {
stmt.executeUpdate(query);
} finally {
stmt.close();
}
}
}