%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
<%@page import="edu.cornell.mannlib.vitro.webapp.utils.jena.SesameSyncUtils"%>
<%@page import="com.hp.hpl.jena.rdf.model.ModelFactory"%>
<%@page import="com.hp.hpl.jena.shared.Lock"%>
<%@page import="edu.cornell.mannlib.vitro.webapp.dao.jena.JenaModelUtils"%>
<%@page import="com.hp.hpl.jena.rdf.model.Model"%>
<%@page import="edu.cornell.mannlib.vitro.webapp.dao.jena.JenaBaseDao"%>
<%@page import="java.io.InputStream"%>
<%@page import="java.util.Properties"%>
<%@ page import="edu.cornell.mannlib.vitro.webapp.controller.Controllers" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@taglib prefix="vitro" uri="/WEB-INF/tlds/VitroUtils.tld" %>
<%@page import="edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.UseMiscellaneousAdminPages" %>
<% request.setAttribute("requestedActions", new UseMiscellaneousAdminPages()); %>
<%!
final String SESAME_PROPS_PATH = "/WEB-INF/classes/sesame.sync.properties" ;
final String SESAME_SERVER = "vitro.sesame.server" ;
final String SESAME_REPOSITORY = "vitro.sesame.repository" ;
final String SESAME_CONTEXT = "vitro.sesame.context" ;
final String USER_SPARQL_QUERY =
"PREFIX rdf: \n" +
"PREFIX vitro: \n\n" +
"DESCRIBE ?user WHERE { \n " +
" ?user rdf:type vitro:User \n" +
"}";
%>
<%
long startTime = System.currentTimeMillis();
Properties sesameProperties = new Properties();
InputStream propStream = getServletContext().getResourceAsStream(SESAME_PROPS_PATH);
if (propStream == null) {
response.setStatus(500, "Sesame properties not found at " + SESAME_PROPS_PATH);
return;
}
sesameProperties.load(propStream);
String sesameLocation = sesameProperties.getProperty(SESAME_SERVER);
if (sesameLocation == null) {
response.setStatus(500, "Missing property " + SESAME_SERVER);
}
String sesameRepository = sesameProperties.getProperty(SESAME_REPOSITORY);
if (sesameRepository == null) {
response.setStatus(500, "Missing property " + SESAME_REPOSITORY);
}
String contextId = sesameProperties.getProperty(SESAME_CONTEXT);
Model fullModel = (Model) getServletContext().getAttribute(JenaBaseDao.JENA_ONT_MODEL_ATTRIBUTE_NAME);
// Copy the model to avoid locking the main model during sync. Assumes enough memory.
Model copyModel = ModelFactory.createDefaultModel();
fullModel.enterCriticalSection(Lock.READ);
try {
copyModel.add(fullModel);
} finally {
fullModel.leaveCriticalSection();
}
Model userDataToRetract = ModelFactory.createDefaultModel();
Query userDataQuery = QueryFactory.create(USER_SPARQL_QUERY);
QueryExecution qe = QueryExecutionFactory.create(userDataQuery, copyModel);
qe.execDescribe(userDataToRetract);
copyModel.remove(userDataToRetract);
System.out.println("Not sharing " + userDataToRetract.size() + " statements of user data");
System.out.println("Using Sesame server at " + sesameLocation);
System.out.println("Using Sesame repository at " + sesameRepository);
System.out.println("Using context " + contextId);
try {
(new SesameSyncUtils()).writeModelToSesameContext(copyModel, sesameLocation, sesameRepository, contextId);
} catch (Throwable t) {
t.printStackTrace();
throw new Error(t);
}
System.out.println((System.currentTimeMillis() - startTime) + " ms to sync");
%>
<%@page import="com.hp.hpl.jena.rdf.model.StmtIterator"%>
<%@page import="com.hp.hpl.jena.rdf.model.Statement"%>
<%@page import="com.hp.hpl.jena.query.Query"%>
<%@page import="com.hp.hpl.jena.query.QueryFactory"%>
<%@page import="com.hp.hpl.jena.query.QueryExecution"%>
<%@page import="com.hp.hpl.jena.query.QueryExecutionFactory"%>
Sync successful