VIVO-33 fix to allow RDB models to be uploaded to via ingest tools
This commit is contained in:
parent
e1f2832fbd
commit
811de3ec9f
3 changed files with 53 additions and 22 deletions
|
@ -116,6 +116,9 @@ public class JenaIngestController extends BaseEditController {
|
||||||
private static final String RENAME_RESOURCE = "/jenaIngest/renameResource.jsp";
|
private static final String RENAME_RESOURCE = "/jenaIngest/renameResource.jsp";
|
||||||
private static final String RENAME_RESULT = "/jenaIngest/renameResult.jsp";
|
private static final String RENAME_RESULT = "/jenaIngest/renameResult.jsp";
|
||||||
private static final String CREATED_GRAPH_BASE_URI = "http://vitro.mannlib.cornell.edu/a/graph/";
|
private static final String CREATED_GRAPH_BASE_URI = "http://vitro.mannlib.cornell.edu/a/graph/";
|
||||||
|
public static final boolean MAIN_STORE_STATE = true;
|
||||||
|
public static final boolean AUXILIARY_STORE_STATE = false;
|
||||||
|
private static final String INGEST_STORE_ATTR = JenaIngestController.class.getName() + ".isUsingMainStoreForIngest";
|
||||||
|
|
||||||
private static final Map<String, Model> attachedModels = new HashMap<String, Model>();
|
private static final Map<String, Model> attachedModels = new HashMap<String, Model>();
|
||||||
|
|
||||||
|
@ -214,15 +217,30 @@ public class JenaIngestController extends BaseEditController {
|
||||||
showModelList(vreq, maker, modelType);
|
showModelList(vreq, maker, modelType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isUsingMainStoreForIngest(VitroRequest vreq) {
|
||||||
|
Boolean storeState = (Boolean) vreq.getSession().getAttribute(INGEST_STORE_ATTR);
|
||||||
|
if (storeState == null) {
|
||||||
|
return MAIN_STORE_STATE;
|
||||||
|
} else {
|
||||||
|
return storeState;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setUsingMainStoreForIngest(VitroRequest vreq, boolean storeState) {
|
||||||
|
vreq.getSession().setAttribute(INGEST_STORE_ATTR, storeState);
|
||||||
|
}
|
||||||
|
|
||||||
private void processRDBModelsRequest(VitroRequest vreq, ModelMaker maker, String modelType) {
|
private void processRDBModelsRequest(VitroRequest vreq, ModelMaker maker, String modelType) {
|
||||||
ModelMaker vjmm = (ModelMaker) getServletContext().getAttribute("vitroJenaModelMaker");
|
ModelMaker vjmm = (ModelMaker) getServletContext().getAttribute("vitroJenaModelMaker");
|
||||||
vreq.getSession().setAttribute("vitroJenaModelMaker", vjmm);
|
vreq.getSession().setAttribute("vitroJenaModelMaker", vjmm);
|
||||||
|
setUsingMainStoreForIngest(vreq, AUXILIARY_STORE_STATE);
|
||||||
showModelList(vreq, vjmm, "rdb");
|
showModelList(vreq, vjmm, "rdb");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processSDBModelsRequest(VitroRequest vreq, ModelMaker maker, String modelType) {
|
private void processSDBModelsRequest(VitroRequest vreq, ModelMaker maker, String modelType) {
|
||||||
ModelMaker vsmm = (ModelMaker) getServletContext().getAttribute("vitroJenaSDBModelMaker");
|
ModelMaker vsmm = (ModelMaker) getServletContext().getAttribute("vitroJenaSDBModelMaker");
|
||||||
vreq.getSession().setAttribute("vitroJenaModelMaker", vsmm);
|
vreq.getSession().setAttribute("vitroJenaModelMaker", vsmm);
|
||||||
|
setUsingMainStoreForIngest(vreq, MAIN_STORE_STATE);
|
||||||
showModelList(vreq, vsmm, "sdb");
|
showModelList(vreq, vsmm, "sdb");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -53,9 +53,7 @@ public class RDFUploadController extends JenaIngestController {
|
||||||
|
|
||||||
private static int maxFileSizeInBytes = 1024 * 1024 * 2000; //2000mb
|
private static int maxFileSizeInBytes = 1024 * 1024 * 2000; //2000mb
|
||||||
private static FileItem fileStream = null;
|
private static FileItem fileStream = null;
|
||||||
private static final String INGEST_MENU_JSP = "/jenaIngest/ingestMenu.jsp";
|
|
||||||
private static final String LOAD_RDF_DATA_JSP="/jenaIngest/loadRDFData.jsp";
|
private static final String LOAD_RDF_DATA_JSP="/jenaIngest/loadRDFData.jsp";
|
||||||
private static final String LIST_MODELS_JSP = "/jenaIngest/listModels.jsp";
|
|
||||||
|
|
||||||
public void doPost(HttpServletRequest rawRequest,
|
public void doPost(HttpServletRequest rawRequest,
|
||||||
HttpServletResponse response) throws ServletException, IOException {
|
HttpServletResponse response) throws ServletException, IOException {
|
||||||
|
@ -244,9 +242,11 @@ public class RDFUploadController extends JenaIngestController {
|
||||||
String languageStr = request.getParameter("language");
|
String languageStr = request.getParameter("language");
|
||||||
ModelMaker maker = getVitroJenaModelMaker(request);
|
ModelMaker maker = getVitroJenaModelMaker(request);
|
||||||
|
|
||||||
if (docLoc!=null && modelName != null) {
|
if (modelName == null) {
|
||||||
RDFService rdfService = RDFServiceUtils.getRDFServiceFactory(
|
request.setAttribute("title","Load RDF Data");
|
||||||
getServletContext()).getRDFService();
|
request.setAttribute("bodyJsp",LOAD_RDF_DATA_JSP);
|
||||||
|
} else {
|
||||||
|
RDFService rdfService = getRDFService(request, maker, modelName);
|
||||||
try {
|
try {
|
||||||
doLoadRDFData(modelName, docLoc, filePath, languageStr, rdfService);
|
doLoadRDFData(modelName, docLoc, filePath, languageStr, rdfService);
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -254,9 +254,6 @@ public class RDFUploadController extends JenaIngestController {
|
||||||
}
|
}
|
||||||
String modelType = getModelType(request, maker);
|
String modelType = getModelType(request, maker);
|
||||||
showModelList(request, maker, modelType);
|
showModelList(request, maker, modelType);
|
||||||
} else {
|
|
||||||
request.setAttribute("title","Load RDF Data");
|
|
||||||
request.setAttribute("bodyJsp",LOAD_RDF_DATA_JSP);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RequestDispatcher rd = request.getRequestDispatcher(
|
RequestDispatcher rd = request.getRequestDispatcher(
|
||||||
|
@ -272,6 +269,18 @@ public class RDFUploadController extends JenaIngestController {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private RDFService getRDFService(VitroRequest vreq, ModelMaker maker, String modelName) {
|
||||||
|
if (JenaIngestController.isUsingMainStoreForIngest(vreq)) {
|
||||||
|
log.debug("Using main RDFService");
|
||||||
|
return RDFServiceUtils.getRDFServiceFactory(
|
||||||
|
getServletContext()).getRDFService();
|
||||||
|
} else {
|
||||||
|
log.debug("Making RDFService for single model from ModelMaker");
|
||||||
|
Model m = maker.getModel(modelName);
|
||||||
|
return new RDFServiceModel(m);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private long operateOnModel(WebappDaoFactory webappDaoFactory,
|
private long operateOnModel(WebappDaoFactory webappDaoFactory,
|
||||||
OntModel mainModel,
|
OntModel mainModel,
|
||||||
Model changesModel,
|
Model changesModel,
|
||||||
|
|
|
@ -9,11 +9,12 @@ import org.apache.commons.io.IOUtils;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
|
import com.hp.hpl.jena.query.DataSource;
|
||||||
import com.hp.hpl.jena.query.Dataset;
|
import com.hp.hpl.jena.query.Dataset;
|
||||||
|
import com.hp.hpl.jena.query.DatasetFactory;
|
||||||
import com.hp.hpl.jena.rdf.model.Model;
|
import com.hp.hpl.jena.rdf.model.Model;
|
||||||
import com.hp.hpl.jena.rdf.model.ModelFactory;
|
import com.hp.hpl.jena.rdf.model.ModelFactory;
|
||||||
import com.hp.hpl.jena.shared.Lock;
|
import com.hp.hpl.jena.shared.Lock;
|
||||||
import com.hp.hpl.jena.sparql.core.DatasetImpl;
|
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.DatasetWrapper;
|
import edu.cornell.mannlib.vitro.webapp.dao.jena.DatasetWrapper;
|
||||||
import edu.cornell.mannlib.vitro.webapp.rdfservice.ChangeSet;
|
import edu.cornell.mannlib.vitro.webapp.rdfservice.ChangeSet;
|
||||||
|
@ -28,14 +29,25 @@ public class RDFServiceModel extends RDFServiceJena implements RDFService {
|
||||||
private final static Log log = LogFactory.getLog(RDFServiceModel.class);
|
private final static Log log = LogFactory.getLog(RDFServiceModel.class);
|
||||||
|
|
||||||
private Model model;
|
private Model model;
|
||||||
|
private String modelName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an RDFService to access a single default graph
|
||||||
|
* @param model
|
||||||
|
*/
|
||||||
public RDFServiceModel(Model model) {
|
public RDFServiceModel(Model model) {
|
||||||
this.model = model;
|
this.model = model;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected DatasetWrapper getDatasetWrapper() {
|
protected DatasetWrapper getDatasetWrapper() {
|
||||||
DatasetWrapper datasetWrapper = new DatasetWrapper(new DatasetImpl(model));
|
DataSource d = DatasetFactory.create();
|
||||||
|
if (modelName == null) {
|
||||||
|
d.setDefaultModel(this.model);
|
||||||
|
} else {
|
||||||
|
d.addNamedModel(this.modelName, model);
|
||||||
|
}
|
||||||
|
DatasetWrapper datasetWrapper = new DatasetWrapper(d);
|
||||||
return datasetWrapper;
|
return datasetWrapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,7 +62,7 @@ public class RDFServiceModel extends RDFServiceJena implements RDFService {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Dataset dataset = getDatasetWrapper().getDataset();
|
//Dataset dataset = getDatasetWrapper().getDataset();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for (Object o : changeSet.getPreChangeEvents()) {
|
for (Object o : changeSet.getPreChangeEvents()) {
|
||||||
|
@ -65,15 +77,7 @@ public class RDFServiceModel extends RDFServiceJena implements RDFService {
|
||||||
modelChange.setSerializedModel(new ByteArrayInputStream(bytes));
|
modelChange.setSerializedModel(new ByteArrayInputStream(bytes));
|
||||||
}
|
}
|
||||||
modelChange.getSerializedModel().mark(Integer.MAX_VALUE);
|
modelChange.getSerializedModel().mark(Integer.MAX_VALUE);
|
||||||
dataset.getLock().enterCriticalSection(Lock.WRITE);
|
operateOnModel(model, modelChange, null);
|
||||||
try {
|
|
||||||
Model model = (modelChange.getGraphURI() == null)
|
|
||||||
? dataset.getDefaultModel()
|
|
||||||
: dataset.getNamedModel(modelChange.getGraphURI());
|
|
||||||
operateOnModel(model, modelChange, dataset);
|
|
||||||
} finally {
|
|
||||||
dataset.getLock().leaveCriticalSection();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// notify listeners of triple changes
|
// notify listeners of triple changes
|
||||||
|
|
Loading…
Add table
Reference in a new issue