VIVO-773 continue clean up of model makers
This commit is contained in:
parent
68cfef81cd
commit
c44df14ec1
7 changed files with 27 additions and 546 deletions
|
@ -69,9 +69,6 @@ import edu.cornell.mannlib.vitro.webapp.dao.ModelAccess;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.ModelAccess.ModelID;
|
import edu.cornell.mannlib.vitro.webapp.dao.ModelAccess.ModelID;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.OntologyDao;
|
import edu.cornell.mannlib.vitro.webapp.dao.OntologyDao;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.RDFServiceGraph;
|
import edu.cornell.mannlib.vitro.webapp.dao.jena.RDFServiceGraph;
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.RDFServiceModelMaker;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.VitroJenaSDBModelMaker;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.VitroJenaSpecialModelMaker;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.event.EditEvent;
|
import edu.cornell.mannlib.vitro.webapp.dao.jena.event.EditEvent;
|
||||||
import edu.cornell.mannlib.vitro.webapp.rdfservice.ChangeSet;
|
import edu.cornell.mannlib.vitro.webapp.rdfservice.ChangeSet;
|
||||||
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService;
|
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService;
|
||||||
|
@ -86,8 +83,7 @@ import edu.cornell.mannlib.vitro.webapp.utils.jena.JenaOutputUtils;
|
||||||
import edu.cornell.mannlib.vitro.webapp.utils.jena.WorkflowOntology;
|
import edu.cornell.mannlib.vitro.webapp.utils.jena.WorkflowOntology;
|
||||||
|
|
||||||
public class JenaIngestController extends BaseEditController {
|
public class JenaIngestController extends BaseEditController {
|
||||||
|
private static final Log log = LogFactory.getLog(JenaIngestController.class);
|
||||||
private static final Log log = LogFactory.getLog(JenaIngestController.class);
|
|
||||||
|
|
||||||
private static final String INGEST_MENU_JSP = "/jenaIngest/ingestMenu.jsp";
|
private static final String INGEST_MENU_JSP = "/jenaIngest/ingestMenu.jsp";
|
||||||
private static final String LIST_MODELS_JSP = "/jenaIngest/listModels.jsp";
|
private static final String LIST_MODELS_JSP = "/jenaIngest/listModels.jsp";
|
||||||
|
@ -113,9 +109,7 @@ 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;
|
private static final String WHICH_MODEL_MAKER = "jenaIngestModelMakerID";
|
||||||
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>();
|
||||||
|
|
||||||
|
@ -129,7 +123,7 @@ public class JenaIngestController extends BaseEditController {
|
||||||
|
|
||||||
VitroRequest vreq = new VitroRequest(request);
|
VitroRequest vreq = new VitroRequest(request);
|
||||||
ModelMaker maker = getVitroJenaModelMaker(vreq);
|
ModelMaker maker = getVitroJenaModelMaker(vreq);
|
||||||
String modelType = getModelType(vreq, maker);
|
String modelType = getModelType(vreq);
|
||||||
|
|
||||||
String actionStr = vreq.getParameter("action");
|
String actionStr = vreq.getParameter("action");
|
||||||
actionStr = (actionStr != null) ? actionStr : "";
|
actionStr = (actionStr != null) ? actionStr : "";
|
||||||
|
@ -197,7 +191,6 @@ public class JenaIngestController extends BaseEditController {
|
||||||
|
|
||||||
maker = getVitroJenaModelMaker(vreq);
|
maker = getVitroJenaModelMaker(vreq);
|
||||||
request.setAttribute("modelNames", maker.listModels().toList());
|
request.setAttribute("modelNames", maker.listModels().toList());
|
||||||
request.setAttribute("jenaIngestModelMaker", maker);
|
|
||||||
|
|
||||||
RequestDispatcher rd = request.getRequestDispatcher(
|
RequestDispatcher rd = request.getRequestDispatcher(
|
||||||
Controllers.BASIC_JSP);
|
Controllers.BASIC_JSP);
|
||||||
|
@ -214,30 +207,19 @@ public class JenaIngestController extends BaseEditController {
|
||||||
showModelList(vreq, maker, modelType);
|
showModelList(vreq, maker, modelType);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isUsingMainStoreForIngest(VitroRequest vreq) {
|
public static boolean isUsingMainStoreForIngest(HttpServletRequest req) {
|
||||||
Boolean storeState = (Boolean) vreq.getSession().getAttribute(INGEST_STORE_ATTR);
|
return CONFIGURATION != req.getSession().getAttribute(WHICH_MODEL_MAKER);
|
||||||
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 = ModelAccess.on(getServletContext()).getModelMaker(CONFIGURATION);
|
ModelMaker vjmm = ModelAccess.on(getServletContext()).getModelMaker(CONFIGURATION);
|
||||||
vreq.getSession().setAttribute("jenaIngestModelMaker", vjmm);
|
vreq.getSession().setAttribute(WHICH_MODEL_MAKER, CONFIGURATION);
|
||||||
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 = ModelAccess.on(getServletContext()).getModelMaker(CONTENT);
|
ModelMaker vsmm = ModelAccess.on(getServletContext()).getModelMaker(CONTENT);
|
||||||
vreq.getSession().setAttribute("jenaIngestModelMaker", vsmm);
|
vreq.getSession().setAttribute(WHICH_MODEL_MAKER, CONTENT);
|
||||||
setUsingMainStoreForIngest(vreq, MAIN_STORE_STATE);
|
|
||||||
showModelList(vreq, vsmm, "sdb");
|
showModelList(vreq, vsmm, "sdb");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -427,7 +409,7 @@ public class JenaIngestController extends BaseEditController {
|
||||||
doConnectDB(vreq);
|
doConnectDB(vreq);
|
||||||
if ("SDB".equals(tripleStore)) {
|
if ("SDB".equals(tripleStore)) {
|
||||||
getServletContext().setAttribute("modelT", "sdb");
|
getServletContext().setAttribute("modelT", "sdb");
|
||||||
getServletContext().setAttribute("info", "SDB models");
|
getServletContext().setAttribute("info", "SDB models");
|
||||||
vreq.setAttribute("modelType", "sdb");
|
vreq.setAttribute("modelType", "sdb");
|
||||||
vreq.setAttribute("infoLine", "SDB models");
|
vreq.setAttribute("infoLine", "SDB models");
|
||||||
} else {
|
} else {
|
||||||
|
@ -727,27 +709,10 @@ public class JenaIngestController extends BaseEditController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ModelMaker getVitroJenaModelMaker(HttpServletRequest request){
|
protected String getModelType(VitroRequest vreq) {
|
||||||
return getVitroJenaModelMaker(request,getServletContext());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected Model getModel( String name, HttpServletRequest request ){
|
|
||||||
return JenaIngestController.getModel(name, request, getServletContext());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected String getModelType(VitroRequest vreq, ModelMaker maker) {
|
|
||||||
String modelType = vreq.getParameter("modelType");
|
String modelType = vreq.getParameter("modelType");
|
||||||
maker = (maker instanceof VitroJenaSpecialModelMaker)
|
|
||||||
? ((VitroJenaSpecialModelMaker) maker).getInnerModelMaker()
|
|
||||||
: maker;
|
|
||||||
if (modelType == null) {
|
if (modelType == null) {
|
||||||
if (maker instanceof RDFServiceModelMaker) {
|
if (isUsingMainStoreForIngest(vreq)) {
|
||||||
modelType = "sdb";
|
|
||||||
} else if (maker instanceof VitroJenaSDBModelMaker) {
|
|
||||||
modelType = "sdb";
|
modelType = "sdb";
|
||||||
} else {
|
} else {
|
||||||
modelType = "rdb";
|
modelType = "rdb";
|
||||||
|
@ -956,13 +921,10 @@ public class JenaIngestController extends BaseEditController {
|
||||||
|
|
||||||
public void doConnectDB(VitroRequest vreq) {
|
public void doConnectDB(VitroRequest vreq) {
|
||||||
String tripleStore = vreq.getParameter("tripleStore");
|
String tripleStore = vreq.getParameter("tripleStore");
|
||||||
ServletContext ctx = getServletContext();
|
|
||||||
ModelMaker vjmm = ModelAccess.on(ctx).getModelMaker(CONFIGURATION);
|
|
||||||
ModelMaker vsmm = ModelAccess.on(ctx).getModelMaker(CONTENT);
|
|
||||||
if("SDB".equals(tripleStore)) {
|
if("SDB".equals(tripleStore)) {
|
||||||
vreq.getSession().setAttribute("jenaIngestModelMaker",vsmm);
|
vreq.getSession().setAttribute(WHICH_MODEL_MAKER,CONTENT);
|
||||||
} else {
|
} else {
|
||||||
vreq.getSession().setAttribute("jenaIngestModelMaker",vjmm);
|
vreq.getSession().setAttribute(WHICH_MODEL_MAKER,CONFIGURATION);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1242,12 +1204,6 @@ public class JenaIngestController extends BaseEditController {
|
||||||
if(modelType.equals("rdb")){
|
if(modelType.equals("rdb")){
|
||||||
vreq.setAttribute("modelType", "rdb");
|
vreq.setAttribute("modelType", "rdb");
|
||||||
vreq.setAttribute("infoLine", "RDB models");
|
vreq.setAttribute("infoLine", "RDB models");
|
||||||
} else if (maker instanceof VitroJenaSDBModelMaker ||
|
|
||||||
(maker instanceof VitroJenaSpecialModelMaker &&
|
|
||||||
((VitroJenaSpecialModelMaker) maker).getInnerModelMaker()
|
|
||||||
instanceof VitroJenaSDBModelMaker)) {
|
|
||||||
vreq.setAttribute("modelType", "sdb");
|
|
||||||
vreq.setAttribute("infoLine", "SDB models");
|
|
||||||
} else {
|
} else {
|
||||||
vreq.setAttribute("modelType", "sdb");
|
vreq.setAttribute("modelType", "sdb");
|
||||||
vreq.setAttribute("infoLine", "main store models");
|
vreq.setAttribute("infoLine", "main store models");
|
||||||
|
@ -1272,7 +1228,7 @@ public class JenaIngestController extends BaseEditController {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Model getModel(String name, HttpServletRequest request, ServletContext context) {
|
public static Model getModel(String name, HttpServletRequest request) {
|
||||||
if ("vitro:jenaOntModel".equals(name)) {
|
if ("vitro:jenaOntModel".equals(name)) {
|
||||||
return ModelAccess.on(request.getSession()).getJenaOntModel();
|
return ModelAccess.on(request.getSession()).getJenaOntModel();
|
||||||
} else if ("vitro:baseOntModel".equals(name)) {
|
} else if ("vitro:baseOntModel".equals(name)) {
|
||||||
|
@ -1280,13 +1236,20 @@ public class JenaIngestController extends BaseEditController {
|
||||||
} else if ("vitro:inferenceOntModel".equals(name)) {
|
} else if ("vitro:inferenceOntModel".equals(name)) {
|
||||||
return ModelAccess.on(request.getSession()).getInferenceOntModel();
|
return ModelAccess.on(request.getSession()).getInferenceOntModel();
|
||||||
} else {
|
} else {
|
||||||
return getVitroJenaModelMaker(request,context).getModel(name);
|
return getVitroJenaModelMaker(request).getModel(name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static ModelMaker getVitroJenaModelMaker(HttpServletRequest request, ServletContext context) {
|
protected static ModelMaker getVitroJenaModelMaker(HttpServletRequest req){
|
||||||
ModelMaker myVjmm = (ModelMaker) request.getSession().getAttribute("jenaIngestModelMaker");
|
ServletContext ctx = req.getSession().getServletContext();
|
||||||
myVjmm = (myVjmm == null) ? ModelAccess.on(context).getModelMaker(CONTENT) : myVjmm;
|
if (isUsingMainStoreForIngest(req)) {
|
||||||
return new VitroJenaSpecialModelMaker(myVjmm, request);
|
return ModelAccess.on(ctx).getModelMaker(CONTENT);
|
||||||
|
} else {
|
||||||
|
return ModelAccess.on(ctx).getModelMaker(CONFIGURATION);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -261,7 +261,7 @@ public class RDFUploadController extends JenaIngestController {
|
||||||
} finally {
|
} finally {
|
||||||
rdfService.close();
|
rdfService.close();
|
||||||
}
|
}
|
||||||
String modelType = getModelType(request, maker);
|
String modelType = getModelType(request);
|
||||||
showModelList(request, maker, modelType);
|
showModelList(request, maker, modelType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,6 @@ import edu.cornell.mannlib.vitro.webapp.dao.jena.OntModelSelector;
|
||||||
* VitroModelSource.openModelIfPresent(string)
|
* VitroModelSource.openModelIfPresent(string)
|
||||||
* ServletContext.getAttribute("pelletOntModel")
|
* ServletContext.getAttribute("pelletOntModel")
|
||||||
* VitroJenaModelMaker
|
* VitroJenaModelMaker
|
||||||
* VitroJenaSpecialModelMaker
|
|
||||||
* JenaDataSourceSetupBase.getApplicationDataSource(ctx)
|
* JenaDataSourceSetupBase.getApplicationDataSource(ctx)
|
||||||
* JenaDataSourceSetupBase.getStartupDataset()
|
* JenaDataSourceSetupBase.getStartupDataset()
|
||||||
* HttpSession.getAttribute("jenaAuditModel")
|
* HttpSession.getAttribute("jenaAuditModel")
|
||||||
|
|
|
@ -1,346 +0,0 @@
|
||||||
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
|
||||||
|
|
||||||
package edu.cornell.mannlib.vitro.webapp.dao.jena;
|
|
||||||
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.text.Collator;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
|
|
||||||
import com.hp.hpl.jena.graph.Graph;
|
|
||||||
import com.hp.hpl.jena.graph.GraphMaker;
|
|
||||||
import com.hp.hpl.jena.graph.Node;
|
|
||||||
import com.hp.hpl.jena.query.Dataset;
|
|
||||||
import com.hp.hpl.jena.query.Query;
|
|
||||||
import com.hp.hpl.jena.query.QueryExecution;
|
|
||||||
import com.hp.hpl.jena.query.QueryExecutionFactory;
|
|
||||||
import com.hp.hpl.jena.query.QueryFactory;
|
|
||||||
import com.hp.hpl.jena.rdf.model.Literal;
|
|
||||||
import com.hp.hpl.jena.rdf.model.Model;
|
|
||||||
import com.hp.hpl.jena.rdf.model.ModelFactory;
|
|
||||||
import com.hp.hpl.jena.rdf.model.ModelMaker;
|
|
||||||
import com.hp.hpl.jena.rdf.model.ModelReader;
|
|
||||||
import com.hp.hpl.jena.rdf.model.RDFNode;
|
|
||||||
import com.hp.hpl.jena.rdf.model.Resource;
|
|
||||||
import com.hp.hpl.jena.rdf.model.Statement;
|
|
||||||
import com.hp.hpl.jena.rdf.model.StmtIterator;
|
|
||||||
import com.hp.hpl.jena.sdb.SDBFactory;
|
|
||||||
import com.hp.hpl.jena.sdb.Store;
|
|
||||||
import com.hp.hpl.jena.sdb.StoreDesc;
|
|
||||||
import com.hp.hpl.jena.sdb.sql.SDBConnection;
|
|
||||||
import com.hp.hpl.jena.sdb.util.StoreUtils;
|
|
||||||
import com.hp.hpl.jena.util.iterator.ExtendedIterator;
|
|
||||||
import com.hp.hpl.jena.util.iterator.WrappedIterator;
|
|
||||||
import com.hp.hpl.jena.vocabulary.RDFS;
|
|
||||||
|
|
||||||
public class VitroJenaSDBModelMaker implements ModelMaker {
|
|
||||||
|
|
||||||
private final static Log log = LogFactory.getLog(VitroJenaSDBModelMaker.class);
|
|
||||||
|
|
||||||
private StoreDesc storeDesc = null;
|
|
||||||
private DataSource ds = null;
|
|
||||||
private SDBConnection conn = null;
|
|
||||||
private SDBGraphConnectionGenerator connGen = null;
|
|
||||||
|
|
||||||
public static final String METADATA_MODEL_URI =
|
|
||||||
"http://vitro.mannlib.cornell.edu/ns/vitro/sdb/metadata";
|
|
||||||
|
|
||||||
public static final String HAS_NAMED_MODEL_URI =
|
|
||||||
"http://vitro.mannlib.cornell.edu/ns/vitro/sdb/hasNamedModel";
|
|
||||||
|
|
||||||
private Resource sdbResource; // a resource representing the SDB database
|
|
||||||
|
|
||||||
public VitroJenaSDBModelMaker(StoreDesc storeDesc, DataSource ds)
|
|
||||||
throws SQLException {
|
|
||||||
|
|
||||||
this.storeDesc = storeDesc;
|
|
||||||
this.ds = ds;
|
|
||||||
connGen = new SDBGraphConnectionGenerator(ds);
|
|
||||||
|
|
||||||
Store store = getStore();
|
|
||||||
try {
|
|
||||||
setUpMetadata(store);
|
|
||||||
} finally {
|
|
||||||
store.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final int MAX_TRIES = 10;
|
|
||||||
|
|
||||||
private Store getStore() {
|
|
||||||
Store store = null;
|
|
||||||
boolean goodStore = false;
|
|
||||||
int tries = 0;
|
|
||||||
while (!goodStore && tries < MAX_TRIES) {
|
|
||||||
tries++;
|
|
||||||
if (conn == null) {
|
|
||||||
try {
|
|
||||||
conn = new SDBConnection(connGen.generateConnection());
|
|
||||||
} catch (SQLException sqle) {
|
|
||||||
throw new RuntimeException(
|
|
||||||
"Unable to get SQL connection", sqle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
store = SDBFactory.connectStore(conn, storeDesc);
|
|
||||||
try {
|
|
||||||
if (!StoreUtils.isFormatted(store)) {
|
|
||||||
// initialize the store
|
|
||||||
try {
|
|
||||||
store.getTableFormatter().create();
|
|
||||||
store.getTableFormatter().truncate();
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new RuntimeException(
|
|
||||||
"Unable to format store for " +
|
|
||||||
"VitroJenaSDBModelMaker", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (SQLException sqle) {
|
|
||||||
conn.close();
|
|
||||||
conn = null;
|
|
||||||
}
|
|
||||||
if (conn != null) {
|
|
||||||
if (isWorking(store)) {
|
|
||||||
goodStore = true;
|
|
||||||
} else {
|
|
||||||
conn.close();
|
|
||||||
conn = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (store == null) {
|
|
||||||
throw new RuntimeException(
|
|
||||||
"Unable to connect to SDB store after " +
|
|
||||||
MAX_TRIES + " attempts");
|
|
||||||
}
|
|
||||||
return store;
|
|
||||||
}
|
|
||||||
|
|
||||||
Model getMetadataModel() {
|
|
||||||
return getModel(METADATA_MODEL_URI);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setUpMetadata(Store store) {
|
|
||||||
Model metadataModel = getMetadataModel();
|
|
||||||
|
|
||||||
if (metadataModel.size() == 0) {
|
|
||||||
// set up the model name metadata to avoid expensive calls to
|
|
||||||
// listNames()
|
|
||||||
Resource sdbRes = metadataModel.createResource();
|
|
||||||
this.sdbResource = sdbRes;
|
|
||||||
Iterator nameIt = SDBFactory.connectDataset(store).listNames();
|
|
||||||
while (nameIt.hasNext()) {
|
|
||||||
String name = (String) nameIt.next();
|
|
||||||
metadataModel.add(sdbResource,metadataModel.getProperty(
|
|
||||||
HAS_NAMED_MODEL_URI),name);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
StmtIterator stmtIt = metadataModel.listStatements(
|
|
||||||
(Resource) null, metadataModel.getProperty(
|
|
||||||
HAS_NAMED_MODEL_URI),(RDFNode) null);
|
|
||||||
if (stmtIt.hasNext()) {
|
|
||||||
Statement stmt = stmtIt.nextStatement();
|
|
||||||
sdbResource = stmt.getSubject();
|
|
||||||
}
|
|
||||||
stmtIt.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isWorking(Store store) {
|
|
||||||
Dataset d = SDBFactory.connectDataset(store);
|
|
||||||
try {
|
|
||||||
String validationQuery = "ASK { <" + RDFS.Resource.getURI() + "> " +
|
|
||||||
" <" + RDFS.isDefinedBy.getURI() + "> " +
|
|
||||||
" <" + RDFS.Resource.getURI() + "> }";
|
|
||||||
Query q = QueryFactory.create(validationQuery);
|
|
||||||
QueryExecution qe = QueryExecutionFactory.create(q, d);
|
|
||||||
try {
|
|
||||||
qe.execAsk();
|
|
||||||
return true;
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.error(e, e);
|
|
||||||
return false;
|
|
||||||
} finally {
|
|
||||||
qe.close();
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
d.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void close() {
|
|
||||||
getStore().close();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Model createModel(String modelName) {
|
|
||||||
Model model = getModel(modelName);
|
|
||||||
Model metadataModel = getMetadataModel();
|
|
||||||
try {
|
|
||||||
metadataModel.add(
|
|
||||||
sdbResource,metadataModel.getProperty(
|
|
||||||
HAS_NAMED_MODEL_URI), modelName);
|
|
||||||
} finally {
|
|
||||||
metadataModel.close();
|
|
||||||
}
|
|
||||||
return model;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Model createModel(String arg0, boolean arg1) {
|
|
||||||
// TODO Figure out if we can offer a "create if not found" option using SDB
|
|
||||||
return createModel(arg0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public GraphMaker getGraphMaker() {
|
|
||||||
throw new UnsupportedOperationException(
|
|
||||||
"GraphMaker not supported by " + this.getClass().getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean hasModel(String arg0) {
|
|
||||||
Model metadataModel = getMetadataModel();
|
|
||||||
try {
|
|
||||||
StmtIterator stmtIt = metadataModel.listStatements(
|
|
||||||
sdbResource, metadataModel.getProperty(
|
|
||||||
HAS_NAMED_MODEL_URI), arg0);
|
|
||||||
try {
|
|
||||||
return stmtIt.hasNext();
|
|
||||||
} finally {
|
|
||||||
if (stmtIt != null) {
|
|
||||||
stmtIt.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
metadataModel.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public ExtendedIterator<String> listModels() {
|
|
||||||
Model metadataModel = getMetadataModel();
|
|
||||||
try {
|
|
||||||
return listModelNames(metadataModel);
|
|
||||||
} finally {
|
|
||||||
metadataModel.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private ExtendedIterator<String> listModelNames(Model metadataModel) {
|
|
||||||
Set<String> modelNameSet = new HashSet<String>();
|
|
||||||
|
|
||||||
Iterator<RDFNode> metadataNameIt = metadataModel.listObjectsOfProperty(
|
|
||||||
metadataModel.getProperty(HAS_NAMED_MODEL_URI));
|
|
||||||
while (metadataNameIt.hasNext()) {
|
|
||||||
RDFNode rdfNode = metadataNameIt.next();
|
|
||||||
if (rdfNode.isLiteral()) {
|
|
||||||
modelNameSet.add(((Literal) rdfNode).getLexicalForm());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Iterator<Node> storeNameIt = StoreUtils.storeGraphNames(getStore());
|
|
||||||
while (storeNameIt.hasNext()){
|
|
||||||
Node node = storeNameIt.next();
|
|
||||||
modelNameSet.add(node.getURI());
|
|
||||||
}
|
|
||||||
|
|
||||||
List<String> modelNameList = new ArrayList<String>();
|
|
||||||
modelNameList.addAll(modelNameSet);
|
|
||||||
Collections.sort(modelNameList, Collator.getInstance());
|
|
||||||
|
|
||||||
return WrappedIterator.create(modelNameList.iterator());
|
|
||||||
}
|
|
||||||
|
|
||||||
public Model openModel(String arg0, boolean arg1) {
|
|
||||||
return SDBFactory.connectNamedModel(getStore(),arg0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void removeModel(String arg0) {
|
|
||||||
Model m = getModel(arg0);
|
|
||||||
m.removeAll(null,null,null);
|
|
||||||
Model metadataModel = getMetadataModel();
|
|
||||||
try {
|
|
||||||
metadataModel.remove(sdbResource, metadataModel.getProperty(
|
|
||||||
HAS_NAMED_MODEL_URI),metadataModel.createLiteral(arg0));
|
|
||||||
} finally {
|
|
||||||
metadataModel.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Model addDescription(Model arg0, Resource arg1) {
|
|
||||||
throw new UnsupportedOperationException(
|
|
||||||
"addDescription not supported by " + this.getClass().getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
public Model createModelOver(String arg0) {
|
|
||||||
throw new UnsupportedOperationException(
|
|
||||||
"createModelOver not supported by " + this.getClass().getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
public Model getDescription() {
|
|
||||||
throw new UnsupportedOperationException(
|
|
||||||
"createModelOver not supported by " + this.getClass().getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
public Model getDescription(Resource arg0) {
|
|
||||||
throw new UnsupportedOperationException(
|
|
||||||
"getDescription not supported by "+this.getClass().getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
public Model openModel() {
|
|
||||||
return SDBFactory.connectDefaultModel(getStore());
|
|
||||||
}
|
|
||||||
|
|
||||||
public Model createDefaultModel() {
|
|
||||||
return SDBFactory.connectDefaultModel(getStore());
|
|
||||||
}
|
|
||||||
|
|
||||||
public Model createFreshModel() {
|
|
||||||
throw new UnsupportedOperationException(
|
|
||||||
"createFreshModel not supported by " + this.getClass().getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated
|
|
||||||
*/
|
|
||||||
public Model createModel() {
|
|
||||||
return SDBFactory.connectDefaultModel(getStore());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated
|
|
||||||
*/
|
|
||||||
public Model getModel() {
|
|
||||||
return SDBFactory.connectDefaultModel(getStore());
|
|
||||||
}
|
|
||||||
|
|
||||||
public Model openModel(String arg0) {
|
|
||||||
return SDBFactory.connectDefaultModel(getStore());
|
|
||||||
}
|
|
||||||
|
|
||||||
public Model openModelIfPresent(String arg0) {
|
|
||||||
return (this.hasModel(arg0))
|
|
||||||
? SDBFactory.connectNamedModel(getStore(),arg0)
|
|
||||||
: null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Model getModel(String modelName) {
|
|
||||||
SDBGraphGenerator graphGen = new SDBGraphGenerator(
|
|
||||||
connGen, storeDesc, modelName);
|
|
||||||
Graph g = new RegeneratingGraph(
|
|
||||||
SDBFactory.connectNamedGraph(getStore(), modelName), graphGen);
|
|
||||||
return ModelFactory.createModelForGraph(g);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Model getModel(String arg0, ModelReader arg1) {
|
|
||||||
throw new UnsupportedOperationException(
|
|
||||||
"getModel(String, ModelReader) not supported by " +
|
|
||||||
this.getClass().getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,131 +0,0 @@
|
||||||
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
|
||||||
|
|
||||||
package edu.cornell.mannlib.vitro.webapp.dao.jena;
|
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
|
|
||||||
import com.hp.hpl.jena.graph.GraphMaker;
|
|
||||||
import com.hp.hpl.jena.rdf.model.Model;
|
|
||||||
import com.hp.hpl.jena.rdf.model.ModelMaker;
|
|
||||||
import com.hp.hpl.jena.rdf.model.ModelReader;
|
|
||||||
import com.hp.hpl.jena.util.iterator.ExtendedIterator;
|
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.dao.ModelAccess;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Wraps a model maker and returns Models from the servlet context when
|
|
||||||
* certain model URIs are requested
|
|
||||||
* @author bjl23
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class VitroJenaSpecialModelMaker implements ModelMaker {
|
|
||||||
|
|
||||||
private static final Log log = LogFactory.getLog(VitroJenaSpecialModelMaker.class.getName());
|
|
||||||
|
|
||||||
private ModelMaker innerModelMaker;
|
|
||||||
private HttpServletRequest request;
|
|
||||||
|
|
||||||
public VitroJenaSpecialModelMaker(ModelMaker mm, HttpServletRequest request) {
|
|
||||||
this.innerModelMaker = mm;
|
|
||||||
this.request = request;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ModelMaker getInnerModelMaker() {
|
|
||||||
return this.innerModelMaker;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void close() {
|
|
||||||
innerModelMaker.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Model createModel(String arg0) {
|
|
||||||
return innerModelMaker.createModel(arg0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Model createModel(String arg0, boolean arg1) {
|
|
||||||
Model specialModel = getSpecialModel(arg0);
|
|
||||||
return (specialModel != null) ? specialModel : innerModelMaker.createModel(arg0,arg1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public GraphMaker getGraphMaker() {
|
|
||||||
return innerModelMaker.getGraphMaker();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean hasModel(String arg0) {
|
|
||||||
return ( (getSpecialModel(arg0) != null) || innerModelMaker.hasModel(arg0) );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Won't list the special models
|
|
||||||
*/
|
|
||||||
public ExtendedIterator listModels() {
|
|
||||||
return innerModelMaker.listModels();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Model openModel(String arg0, boolean arg1) {
|
|
||||||
Model specialModel = getSpecialModel(arg0);
|
|
||||||
return (specialModel != null) ? specialModel : innerModelMaker.openModel(arg0,arg1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void removeModel(String arg0) {
|
|
||||||
innerModelMaker.removeModel(arg0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Model createModelOver(String arg0) {
|
|
||||||
Model specialModel = getSpecialModel(arg0);
|
|
||||||
return (specialModel != null) ? specialModel : createModelOver(arg0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Model createDefaultModel() {
|
|
||||||
return innerModelMaker.createDefaultModel();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Model createFreshModel() {
|
|
||||||
return innerModelMaker.createFreshModel();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Model openModel(String arg0) {
|
|
||||||
Model specialModel = getSpecialModel(arg0);
|
|
||||||
return (specialModel != null) ? specialModel : innerModelMaker.openModel(arg0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Model openModelIfPresent(String arg0) {
|
|
||||||
Model specialModel = getSpecialModel(arg0);
|
|
||||||
return (specialModel != null) ? specialModel : innerModelMaker.openModelIfPresent(arg0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Model getModel(String arg0) {
|
|
||||||
Model specialModel = getSpecialModel(arg0);
|
|
||||||
return (specialModel != null) ? specialModel : innerModelMaker.getModel(arg0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Model getModel(String arg0, ModelReader arg1) {
|
|
||||||
Model specialModel = getSpecialModel(arg0);
|
|
||||||
return (specialModel != null) ? specialModel : innerModelMaker.getModel(arg0,arg1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This will trap for strings like "vitro:jenaOntModel" and return the
|
|
||||||
* appropriate in-memory model used by the current webapp context.
|
|
||||||
* To use this functionality, the VitroJenaModelMaker must be constructed
|
|
||||||
* with a VitroRequest parameter
|
|
||||||
*/
|
|
||||||
private Model getSpecialModel(String modelName) {
|
|
||||||
if (request != null) {
|
|
||||||
if ("vitro:jenaOntModel".equals(modelName)) {
|
|
||||||
return ModelAccess.on(request.getSession()).getJenaOntModel();
|
|
||||||
} else if ("vitro:baseOntModel".equals(modelName)) {
|
|
||||||
return ModelAccess.on(request.getSession()).getBaseOntModel();
|
|
||||||
} else if ("vitro:inferenceOntModel".equals(modelName)) {
|
|
||||||
return ModelAccess.on(request.getSession()).getInferenceOntModel();
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -27,7 +27,7 @@ public abstract class DataGetterBase implements DataGetter {
|
||||||
}else if( CONTEXT_DISPLAY_MODEL.equals(modelName)){
|
}else if( CONTEXT_DISPLAY_MODEL.equals(modelName)){
|
||||||
return ModelAccess.on(context).getDisplayModel();
|
return ModelAccess.on(context).getDisplayModel();
|
||||||
}else if( ! StringUtils.isEmpty( modelName)){
|
}else if( ! StringUtils.isEmpty( modelName)){
|
||||||
Model model = JenaIngestController.getModel( modelName, vreq, context);
|
Model model = JenaIngestController.getModel( modelName, vreq);
|
||||||
if( model == null )
|
if( model == null )
|
||||||
throw new IllegalAccessError("Cannot get model <" + modelName +"> for DataGetter.");
|
throw new IllegalAccessError("Cannot get model <" + modelName +"> for DataGetter.");
|
||||||
else
|
else
|
||||||
|
|
|
@ -29,11 +29,7 @@ function init(){
|
||||||
<td>
|
<td>
|
||||||
<form name="sdbform" action="ingest" method="get">
|
<form name="sdbform" action="ingest" method="get">
|
||||||
<input type="hidden" name="action" value="sdbModels"/>
|
<input type="hidden" name="action" value="sdbModels"/>
|
||||||
<% if ("SDB models".equals(request.getAttribute("infoLine"))) { %>
|
|
||||||
<input type="submit" name="submit" value="SDB Models"/>
|
|
||||||
<% } else { %>
|
|
||||||
<input type="submit" name="submit" value="Main Store Models"/>
|
<input type="submit" name="submit" value="Main Store Models"/>
|
||||||
<% } %>
|
|
||||||
</form>
|
</form>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
|
|
Loading…
Add table
Reference in a new issue