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_RESULT = "/jenaIngest/renameResult.jsp";
|
||||
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>();
|
||||
|
||||
|
@ -214,15 +217,30 @@ public class JenaIngestController extends BaseEditController {
|
|||
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) {
|
||||
ModelMaker vjmm = (ModelMaker) getServletContext().getAttribute("vitroJenaModelMaker");
|
||||
vreq.getSession().setAttribute("vitroJenaModelMaker", vjmm);
|
||||
setUsingMainStoreForIngest(vreq, AUXILIARY_STORE_STATE);
|
||||
showModelList(vreq, vjmm, "rdb");
|
||||
}
|
||||
|
||||
private void processSDBModelsRequest(VitroRequest vreq, ModelMaker maker, String modelType) {
|
||||
ModelMaker vsmm = (ModelMaker) getServletContext().getAttribute("vitroJenaSDBModelMaker");
|
||||
vreq.getSession().setAttribute("vitroJenaModelMaker", vsmm);
|
||||
setUsingMainStoreForIngest(vreq, MAIN_STORE_STATE);
|
||||
showModelList(vreq, vsmm, "sdb");
|
||||
}
|
||||
|
||||
|
|
|
@ -53,9 +53,7 @@ public class RDFUploadController extends JenaIngestController {
|
|||
|
||||
private static int maxFileSizeInBytes = 1024 * 1024 * 2000; //2000mb
|
||||
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 LIST_MODELS_JSP = "/jenaIngest/listModels.jsp";
|
||||
|
||||
public void doPost(HttpServletRequest rawRequest,
|
||||
HttpServletResponse response) throws ServletException, IOException {
|
||||
|
@ -244,9 +242,11 @@ public class RDFUploadController extends JenaIngestController {
|
|||
String languageStr = request.getParameter("language");
|
||||
ModelMaker maker = getVitroJenaModelMaker(request);
|
||||
|
||||
if (docLoc!=null && modelName != null) {
|
||||
RDFService rdfService = RDFServiceUtils.getRDFServiceFactory(
|
||||
getServletContext()).getRDFService();
|
||||
if (modelName == null) {
|
||||
request.setAttribute("title","Load RDF Data");
|
||||
request.setAttribute("bodyJsp",LOAD_RDF_DATA_JSP);
|
||||
} else {
|
||||
RDFService rdfService = getRDFService(request, maker, modelName);
|
||||
try {
|
||||
doLoadRDFData(modelName, docLoc, filePath, languageStr, rdfService);
|
||||
} finally {
|
||||
|
@ -254,10 +254,7 @@ public class RDFUploadController extends JenaIngestController {
|
|||
}
|
||||
String modelType = getModelType(request, maker);
|
||||
showModelList(request, maker, modelType);
|
||||
} else {
|
||||
request.setAttribute("title","Load RDF Data");
|
||||
request.setAttribute("bodyJsp",LOAD_RDF_DATA_JSP);
|
||||
}
|
||||
}
|
||||
|
||||
RequestDispatcher rd = request.getRequestDispatcher(
|
||||
Controllers.BASIC_JSP);
|
||||
|
@ -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,
|
||||
OntModel mainModel,
|
||||
Model changesModel,
|
||||
|
|
|
@ -9,11 +9,12 @@ import org.apache.commons.io.IOUtils;
|
|||
import org.apache.commons.logging.Log;
|
||||
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.DatasetFactory;
|
||||
import com.hp.hpl.jena.rdf.model.Model;
|
||||
import com.hp.hpl.jena.rdf.model.ModelFactory;
|
||||
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.rdfservice.ChangeSet;
|
||||
|
@ -28,14 +29,25 @@ public class RDFServiceModel extends RDFServiceJena implements RDFService {
|
|||
private final static Log log = LogFactory.getLog(RDFServiceModel.class);
|
||||
|
||||
private Model model;
|
||||
private String modelName;
|
||||
|
||||
/**
|
||||
* Create an RDFService to access a single default graph
|
||||
* @param model
|
||||
*/
|
||||
public RDFServiceModel(Model model) {
|
||||
this.model = model;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -50,7 +62,7 @@ public class RDFServiceModel extends RDFServiceJena implements RDFService {
|
|||
return false;
|
||||
}
|
||||
|
||||
Dataset dataset = getDatasetWrapper().getDataset();
|
||||
//Dataset dataset = getDatasetWrapper().getDataset();
|
||||
|
||||
try {
|
||||
for (Object o : changeSet.getPreChangeEvents()) {
|
||||
|
@ -65,15 +77,7 @@ public class RDFServiceModel extends RDFServiceJena implements RDFService {
|
|||
modelChange.setSerializedModel(new ByteArrayInputStream(bytes));
|
||||
}
|
||||
modelChange.getSerializedModel().mark(Integer.MAX_VALUE);
|
||||
dataset.getLock().enterCriticalSection(Lock.WRITE);
|
||||
try {
|
||||
Model model = (modelChange.getGraphURI() == null)
|
||||
? dataset.getDefaultModel()
|
||||
: dataset.getNamedModel(modelChange.getGraphURI());
|
||||
operateOnModel(model, modelChange, dataset);
|
||||
} finally {
|
||||
dataset.getLock().leaveCriticalSection();
|
||||
}
|
||||
operateOnModel(model, modelChange, null);
|
||||
}
|
||||
|
||||
// notify listeners of triple changes
|
||||
|
|
Loading…
Add table
Reference in a new issue