package edu.kit.aifb.cumulus.cli;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.openrdf.model.Statement;
import org.openrdf.query.GraphQuery;
import org.openrdf.query.GraphQueryResult;
import org.openrdf.query.QueryLanguage;
import org.openrdf.repository.sail.SailRepository;
import org.openrdf.repository.sail.SailRepositoryConnection;
import edu.kit.aifb.cumulus.cli.log.MessageCatalog;
import edu.kit.aifb.cumulus.store.Store;
import edu.kit.aifb.cumulus.store.sesame.CumulusRDFSail;
/**
* Removes all results from the given SPARQL query.
*
* @author Andreas Wagner
* @author Andrea Gazzarini
* @since 1.0
*/
public class Remove extends Command {
@Override
Options getOptions() {
final Option inputO = new Option("q", "sparql construct query string. all its bindings will be removed.");
inputO.setArgs(1);
inputO.setRequired(true);
final Option verboseO = new Option("v", "verbose (default: false)");
verboseO.setArgs(1);
final Option storageO = new Option("s", "storage layout to use (triple|quad) (needs to match webapp configuration)");
storageO.setArgs(1);
final Option helpO = new Option("h", "print help");
final Options options = new Options();
options.addOption(inputO);
options.addOption(storageO);
options.addOption(helpO);
return options;
}
@Override
public void doExecute(final CommandLine commandLine, final Store store) {
final String query = commandLine.getOptionValue("q");
final boolean verbose = commandLine.hasOption("v");
SailRepository repo = null;
SailRepositoryConnection con = null;
try {
CumulusRDFSail sail = new CumulusRDFSail(store);
sail.initialize();
repo = new SailRepository(sail);
con = repo.getConnection();
final GraphQuery parsed_query = con.prepareGraphQuery(QueryLanguage.SPARQL, query);
int counter = 0;
for (final GraphQueryResult result = parsed_query.evaluate(); result.hasNext();) {
final Statement stmt = result.next();
con.remove(stmt);
if (verbose) {
_log.info(MessageCatalog._00024_DELETED_STATEMENT, stmt);
}
counter++;
}
_log.info(MessageCatalog._00025_DELETE_REPORT, counter);
} catch (final Exception exception) {
_log.error(MessageCatalog._00026_NWS_SYSTEM_INTERNAL_FAILURE, exception);
return;
} finally {
if (con != null) {
// CHECKSTYLE:OFF
try { con.close(); } catch (Exception ignore) {};
// CHECKSTYLE: ON
}
if (repo != null) {
// CHECKSTYLE:OFF
try { repo.shutDown(); } catch (Exception ignore) {};
// CHECKSTYLE: ON
}
}
}
}