/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 1997-2007.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.http.webclient.repository.modify.remove;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.validation.BindException;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;
import org.openrdf.http.webclient.SessionKeys;
import org.openrdf.http.webclient.properties.ResourcePropertyEditor;
import org.openrdf.http.webclient.properties.UriPropertyEditor;
import org.openrdf.http.webclient.properties.ValuePropertyEditor;
import org.openrdf.model.Resource;
import org.openrdf.model.URI;
import org.openrdf.model.Value;
import org.openrdf.repository.RepositoryConnection;
import org.openrdf.repository.RepositoryException;
import org.openrdf.repository.http.HTTPRepository;
/**
* @author Herko ter Horst
*/
public class RemoveStatementsController extends SimpleFormController {
final Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) {
HttpSession session = request.getSession();
HTTPRepository repo = (HTTPRepository)session.getAttribute(SessionKeys.REPOSITORY_KEY);
binder.registerCustomEditor(Resource.class, new ResourcePropertyEditor(repo.getValueFactory()));
binder.registerCustomEditor(URI.class, new UriPropertyEditor(repo.getValueFactory()));
binder.registerCustomEditor(Value.class, new ValuePropertyEditor(repo.getValueFactory()));
}
@Override
protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command,
BindException errors)
{
logger.info("Removing statements...");
String actionResult = "repository.modify.remove.statements.success";
RemovalSpecification toRemove = (RemovalSpecification)command;
HTTPRepository repo = (HTTPRepository)request.getSession().getAttribute(SessionKeys.REPOSITORY_KEY);
RepositoryConnection conn = null;
try {
conn = repo.getConnection();
conn.remove(toRemove.getSubject(), toRemove.getPredicate(), toRemove.getObject(),
toRemove.getContexts());
conn.commit();
logger.info("Remove committed.");
}
catch (RepositoryException e) {
logger.warn("Unable to clear repository", e);
actionResult = "repository.modify.remove.statements.failure";
}
finally {
if (conn != null) {
try {
conn.close();
}
catch (RepositoryException e) {
e.printStackTrace();
}
}
}
return new ModelAndView(getSuccessView(), "actionResult", actionResult);
}
}