diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/JenaIngestController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/JenaIngestController.java index adc58c56f..6d1b2c346 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/JenaIngestController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/JenaIngestController.java @@ -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 attachedModels = new HashMap(); @@ -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"); } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/RDFUploadController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/RDFUploadController.java index b0788456f..ab7052233 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/RDFUploadController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/RDFUploadController.java @@ -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, diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/jena/model/RDFServiceModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/jena/model/RDFServiceModel.java index 99b41ad85..6e89e5a95 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/jena/model/RDFServiceModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/jena/model/RDFServiceModel.java @@ -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