NIHVIVO-2717 fixed graph keyword tokenization bug and switched WebappDaoFactorySDBPrep to set SDB union graph as JenaOntModel

This commit is contained in:
brianjlowe 2011-06-20 19:56:19 +00:00
parent 8170eadaa3
commit 1dd7d3c1d1
6 changed files with 29 additions and 29 deletions

View file

@ -151,18 +151,13 @@ public class SparqlQueryServlet extends BaseEditController {
String queryParam = vreq.getParameter("query"); String queryParam = vreq.getParameter("query");
boolean graphPresent = false; boolean graphPresent = false;
StringTokenizer tokenizer = new StringTokenizer(queryParam, " "); String[] tokens = queryParam.split("\\s");
while(tokenizer.hasMoreTokens()){ for(int i = 0; i < tokens.length; i++){
if("graph".equalsIgnoreCase(tokenizer.nextToken())){ if("graph".equalsIgnoreCase(tokens[i])){
graphPresent = true; return vreq.getDataset();
break;
} }
} }
Dataset dataset = vreq.getDataset();
if (dataset != null && graphPresent) {
return dataset;
}
DataSource dataSource = DatasetFactory.create(); DataSource dataSource = DatasetFactory.create();
dataSource.setDefaultModel(vreq.getJenaOntModel()); dataSource.setDefaultModel(vreq.getJenaOntModel());
return dataSource; return dataSource;

View file

@ -70,6 +70,10 @@ public class VitroRequest extends HttpServletRequestWrapper {
setAttribute("dataset", dataset); setAttribute("dataset", dataset);
} }
public void setJenaOntModel(OntModel ontModel) {
setAttribute("jenaOntModel", ontModel);
}
/** gets assertions + inferences WebappDaoFactory with no filtering **/ /** gets assertions + inferences WebappDaoFactory with no filtering **/
public WebappDaoFactory getFullWebappDaoFactory() { public WebappDaoFactory getFullWebappDaoFactory() {
Object webappDaoFactoryAttr = _req.getAttribute("fullWebappDaoFactory"); Object webappDaoFactoryAttr = _req.getAttribute("fullWebappDaoFactory");
@ -106,6 +110,10 @@ public class VitroRequest extends HttpServletRequestWrapper {
} }
public OntModel getJenaOntModel() { public OntModel getJenaOntModel() {
Object ontModel = getAttribute("jenaOntModel");
if (ontModel instanceof OntModel) {
return (OntModel) ontModel;
}
OntModel jenaOntModel = (OntModel)_req.getSession().getAttribute( JenaBaseDao.JENA_ONT_MODEL_ATTRIBUTE_NAME ); OntModel jenaOntModel = (OntModel)_req.getSession().getAttribute( JenaBaseDao.JENA_ONT_MODEL_ATTRIBUTE_NAME );
if ( jenaOntModel == null ) { if ( jenaOntModel == null ) {
jenaOntModel = (OntModel)_req.getSession().getServletContext().getAttribute( JenaBaseDao.JENA_ONT_MODEL_ATTRIBUTE_NAME ); jenaOntModel = (OntModel)_req.getSession().getServletContext().getAttribute( JenaBaseDao.JENA_ONT_MODEL_ATTRIBUTE_NAME );

View file

@ -334,13 +334,7 @@ public class IndividualController extends FreemarkerHttpServlet {
private ResponseValues doRdf(VitroRequest vreq, Individual individual, private ResponseValues doRdf(VitroRequest vreq, Individual individual,
ContentType rdfFormat) throws IOException, ServletException { ContentType rdfFormat) throws IOException, ServletException {
OntModel ontModel = null; OntModel ontModel = vreq.getJenaOntModel();
HttpSession session = vreq.getSession(false);
if( session != null )
ontModel = (OntModel)session.getAttribute("jenaOntModel");
if( ontModel == null)
ontModel = (OntModel)getServletContext().getAttribute("jenaOntModel");
String[] includes = vreq.getParameterValues("include"); String[] includes = vreq.getParameterValues("include");
Model newModel = getRDF(individual,ontModel,ModelFactory.createDefaultModel(),0,includes); Model newModel = getRDF(individual,ontModel,ModelFactory.createDefaultModel(),0,includes);

View file

@ -933,21 +933,18 @@ public class IndividualSDB extends IndividualImpl implements Individual {
if (ind.getModel().contains((Resource) null, RDF.type, (RDFNode) null)){ if (ind.getModel().contains((Resource) null, RDF.type, (RDFNode) null)){
tempModel = ind.getModel(); tempModel = ind.getModel();
} else { } else {
String[] graphVars = { "?g" };
String getTypes = String getTypes =
"CONSTRUCT{ <" + this.individualURI + "> <" + RDF.type + "CONSTRUCT{ <" + this.individualURI + "> <" + RDF.type +
"> ?types }\n" + "> ?types }\n" +
"WHERE{ GRAPH " + "WHERE{ GRAPH ?g"
((direct) + " { <" + this.individualURI +"> <" +RDF.type+ "> ?types } \n"
? "<http://vitro.mannlib.cornell.edu/default/vitro-kb-2>" + WebappDaoFactorySDB.getFilterBlock(
: "?g") graphVars, (direct
+ " { <" + this.individualURI +"> <" +RDF.type+ "> ?types } \n" ; ? WebappDaoFactorySDB.SDBDatasetMode
.ASSERTIONS_ONLY
if (!direct) { : datasetMode))
String[] graphVars = { "?g" }; + "} \n";
getTypes += WebappDaoFactorySDB.getFilterBlock(graphVars, datasetMode);
}
getTypes += "} \n";
DatasetWrapper w = getDatasetWrapper(); DatasetWrapper w = getDatasetWrapper();
Dataset dataset = w.getDataset(); Dataset dataset = w.getDataset();
dataset.getLock().enterCriticalSection(Lock.READ); dataset.getLock().enterCriticalSection(Lock.READ);

View file

@ -23,6 +23,7 @@ import edu.cornell.mannlib.vitro.webapp.servlet.setup.JenaDataSourceSetupBase;
public class WebappDaoFactorySDB extends WebappDaoFactoryJena { public class WebappDaoFactorySDB extends WebappDaoFactoryJena {
public static final String UNION_GRAPH = "urn:x-arq:UnionGraph";
private SDBDatasetMode datasetMode = SDBDatasetMode.ASSERTIONS_AND_INFERENCES; private SDBDatasetMode datasetMode = SDBDatasetMode.ASSERTIONS_AND_INFERENCES;
/** /**

View file

@ -21,7 +21,9 @@ import org.apache.commons.dbcp.BasicDataSource;
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.ontology.OntModelSpec;
import com.hp.hpl.jena.query.Dataset; import com.hp.hpl.jena.query.Dataset;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.sdb.SDBFactory; import com.hp.hpl.jena.sdb.SDBFactory;
import com.hp.hpl.jena.sdb.Store; import com.hp.hpl.jena.sdb.Store;
import com.hp.hpl.jena.sdb.StoreDesc; import com.hp.hpl.jena.sdb.StoreDesc;
@ -106,6 +108,9 @@ public class WebappDaoFactorySDBPrep implements Filter {
vreq.setWebappDaoFactory(wadf); vreq.setWebappDaoFactory(wadf);
vreq.setFullWebappDaoFactory(wadf); vreq.setFullWebappDaoFactory(wadf);
vreq.setDataset(dataset); vreq.setDataset(dataset);
vreq.setJenaOntModel(ModelFactory.createOntologyModel(
OntModelSpec.OWL_MEM, dataset.getNamedModel(
WebappDaoFactorySDB.UNION_GRAPH)));
} }
} catch (Throwable t) { } catch (Throwable t) {
log.error("Unable to filter request to set up SDB connection", t); log.error("Unable to filter request to set up SDB connection", t);