VIVO-33 fix to allow RDB models to be uploaded to via ingest tools

This commit is contained in:
brianjlowe 2013-03-11 17:08:07 -04:00
parent e1f2832fbd
commit 811de3ec9f
3 changed files with 53 additions and 22 deletions

View file

@ -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");
} }

View file

@ -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,

View file

@ -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