diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/OntologyController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/OntologyController.java index 498454afc..c44f66f2a 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/OntologyController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/OntologyController.java @@ -18,6 +18,7 @@ import org.apache.commons.logging.LogFactory; import com.hp.hpl.jena.ontology.OntModel; import com.hp.hpl.jena.ontology.OntResource; +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.Model; @@ -130,38 +131,49 @@ public class OntologyController extends VitroHttpServlet{ ontModel =(OntModel)session.getAttribute("jenaOntModel"); if( ontModel == null) ontModel = (OntModel)getServletContext().getAttribute("jenaOntModel"); - + + boolean found = false; + Model newModel = ModelFactory.createDefaultModel(); ontModel.enterCriticalSection(Lock.READ); - OntResource ontResource = ontModel.getOntResource(url); - if(ontResource == null) - ontResource = ontModel.getOntResource(url + "/"); - Model newModel = ModelFactory.createDefaultModel(); - if(ontResource != null){ - Resource resource = (Resource)ontResource; - try{ - String queryString = "Describe <" + resource.getURI() + ">"; - newModel = QueryExecutionFactory.create(QueryFactory.create(queryString), ontModel).execDescribe(); - } - finally{ - ontModel.leaveCriticalSection(); - } - } - else{ - ontModel.leaveCriticalSection(); - doNotFound(vreq,res); - return; - } + try{ + OntResource ontResource = ontModel.getOntResource(url); + if(ontResource == null) + ontResource = ontModel.getOntResource(url + "/"); + if(ontResource != null){ + found = true; + Resource resource = (Resource)ontResource; + QueryExecution qexec = null; + try{ + String queryString = "Describe <" + resource.getURI() + ">"; + qexec = QueryExecutionFactory.create(QueryFactory.create(queryString), ontModel); + newModel = qexec.execDescribe(); + } finally{ + qexec.close(); + } + } else { + found = false; + } + }finally{ + ontModel.leaveCriticalSection(); + } + + if( ! found ){ + //respond to HTTP outside of critical section + doNotFound(req,res); + return; + } else { + res.setContentType(rdfFormat.getMediaType()); + String format = ""; + if ( RDFXML_MIMETYPE.equals(rdfFormat.getMediaType())) + format = "RDF/XML"; + else if( N3_MIMETYPE.equals(rdfFormat.getMediaType())) + format = "N3"; + else if ( TTL_MIMETYPE.equals(rdfFormat.getMediaType())) + format ="TTL"; - res.setContentType(rdfFormat.getMediaType()); - String format = ""; - if ( RDFXML_MIMETYPE.equals(rdfFormat.getMediaType())) - format = "RDF/XML"; - else if( N3_MIMETYPE.equals(rdfFormat.getMediaType())) - format = "N3"; - else if ( TTL_MIMETYPE.equals(rdfFormat.getMediaType())) - format ="TTL"; - - newModel.write( res.getOutputStream(), format ); + newModel.write( res.getOutputStream(), format ); + return; + } } private static Pattern URI_PATTERN = Pattern.compile("^/ontology/([^/]*)/([^/]*)$"); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/RefactorOperationController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/RefactorOperationController.java index 8f73e0c2f..092a12cf6 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/RefactorOperationController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/RefactorOperationController.java @@ -22,6 +22,7 @@ import com.hp.hpl.jena.ontology.OntModel; import com.hp.hpl.jena.ontology.OntProperty; import com.hp.hpl.jena.ontology.OntResource; import com.hp.hpl.jena.query.Dataset; +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.query.QuerySolution; @@ -217,9 +218,11 @@ public class RefactorOperationController extends BaseEditController { queryStr += " union { GRAPH ?graph { ?subj ?prop <" + oldURIStr + ">}}}"; Dataset dataset = request.getDataset(); - dataset.getLock().enterCriticalSection(Lock.READ); + QueryExecution qexec = null; + dataset.getLock().enterCriticalSection(Lock.READ); try { - ResultSet resultSet = QueryExecutionFactory.create(QueryFactory.create(queryStr), dataset).execSelect(); + qexec = QueryExecutionFactory.create(QueryFactory.create(queryStr), dataset); + ResultSet resultSet = qexec.execSelect(); while (resultSet.hasNext()) { QuerySolution qs = resultSet.next(); @@ -245,6 +248,7 @@ public class RefactorOperationController extends BaseEditController { renameResourceInModel(model, userURI, oldURIStr, newURIStr, doNotify); } } finally { + if(qexec != null) qexec.close(); dataset.getLock().leaveCriticalSection(); } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/DataPropertyStatementDaoSDB.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/DataPropertyStatementDaoSDB.java index dac869b54..75053e564 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/DataPropertyStatementDaoSDB.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/DataPropertyStatementDaoSDB.java @@ -68,9 +68,12 @@ public class DataPropertyStatementDaoSDB extends DataPropertyStatementDaoJena DatasetWrapper w = dwf.getDatasetWrapper(); Dataset dataset = w.getDataset(); dataset.getLock().enterCriticalSection(Lock.READ); + QueryExecution qexec = null; try { - results = QueryExecutionFactory.create(QueryFactory.create(query), dataset).execConstruct(); + qexec = QueryExecutionFactory.create(QueryFactory.create(query), dataset); + results = qexec.execConstruct(); } finally { + if(qexec!=null) qexec.close(); dataset.getLock().leaveCriticalSection(); w.close(); } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/IndividualSDB.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/IndividualSDB.java index f7b3e6b92..1fba4da89 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/IndividualSDB.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/IndividualSDB.java @@ -18,6 +18,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.joda.time.DateTime; +import com.clarkparsia.pellet.sparqldl.engine.QueryExec; import com.hp.hpl.jena.ontology.OntModel; import com.hp.hpl.jena.ontology.OntModelSpec; import com.hp.hpl.jena.ontology.OntResource; @@ -509,12 +510,15 @@ public class IndividualSDB extends IndividualImpl implements Individual { DatasetWrapper w = getDatasetWrapper(); Dataset dataset = w.getDataset(); dataset.getLock().enterCriticalSection(Lock.READ); - try{ - _hasThumb = QueryExecutionFactory.create(QueryFactory.create(ask), dataset).execAsk(); + QueryExecution qexec = null; + try{ + qexec = QueryExecutionFactory.create(QueryFactory.create(ask), dataset); + _hasThumb = qexec.execAsk(); }catch(Exception ex){ _hasThumb = false; log.error(ex,ex); }finally{ + if(qexec!=null) qexec.close(); dataset.getLock().leaveCriticalSection(); w.close(); } @@ -670,11 +674,13 @@ public class IndividualSDB extends IndividualImpl implements Individual { DatasetWrapper w = getDatasetWrapper(); Dataset dataset = w.getDataset(); dataset.getLock().enterCriticalSection(Lock.READ); + QueryExecution qexec = null; try { String valuesOfProperty = "CONSTRUCT{ <" + this.individualURI + "> <" + propertyURI + "> ?object }" + "WHERE{ <" + this.individualURI + "> <" + propertyURI + "> ?object } \n"; - tempModel = QueryExecutionFactory.create(QueryFactory.create(valuesOfProperty), dataset).execConstruct(); + qexec = QueryExecutionFactory.create(QueryFactory.create(valuesOfProperty), dataset); + tempModel = qexec.execConstruct(); ontModel.add(tempModel.listStatements()); Resource ontRes = ontModel.getResource(this.individualURI); StmtIterator sit = ontRes.listProperties(ontRes.getModel().getProperty(propertyURI)); @@ -698,6 +704,7 @@ public class IndividualSDB extends IndividualImpl implements Individual { } } } finally { + if(qexec!=null) qexec.close(); tempModel.close(); ontModel.close(); dataset.getLock().leaveCriticalSection(); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/processEdit/EditN3Generator.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/processEdit/EditN3Generator.java index b2bc6cfad..e956a54a3 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/processEdit/EditN3Generator.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/processEdit/EditN3Generator.java @@ -40,6 +40,15 @@ public class EditN3Generator { return Collections.EMPTY_LIST; } + /** + * This is the method to use to substitute in URIs into variables of target N3 strings. + * This takes into account multiple values that would be returned from a select list. + * subInUris should no longer be used. + */ + public static List subInMultiUris(Map> varsToVals, List n3targets){ + return null; + } + public static List subInUris(Map varsToVals, List targets){ if( varsToVals == null || varsToVals.isEmpty() ) return targets; ArrayList outv = new ArrayList(); @@ -80,6 +89,15 @@ public class EditN3Generator { return outv; } + /** + * This is the method to use to substitute in Literals into variables of target N3 strings. + * This takes into account multiple values that would be returned from a select list. + * subInUris should no longer be used. + */ + public static List subInMultiLiterals(Map> varsToVals, List n3targets){ + return null; + } + public List subInLiterals(Map varsToVals, List targets){ if( varsToVals == null || varsToVals.isEmpty()) return targets; diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/beans/IndividualProhibitedFromSearchImpl.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/beans/IndividualProhibitedFromSearchImpl.java index 0e4413ef4..f745231dc 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/beans/IndividualProhibitedFromSearchImpl.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/beans/IndividualProhibitedFromSearchImpl.java @@ -9,6 +9,7 @@ import org.apache.commons.logging.LogFactory; import com.hp.hpl.jena.ontology.OntModel; 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.shared.Lock; @@ -37,11 +38,14 @@ public class IndividualProhibitedFromSearchImpl implements IndividualProhibitedF return true; boolean prohibited = false; + QueryExecution qexec = null; try { fullModel.getLock().enterCriticalSection(Lock.READ); Query query = makeAskQueryForUri( uri ); - prohibited = QueryExecutionFactory.create( query, fullModel).execAsk(); + qexec = QueryExecutionFactory.create( query, fullModel); + prohibited = qexec.execAsk(); } finally { + if( qexec != null ) qexec.close(); fullModel.getLock().leaveCriticalSection(); } if( prohibited ) diff --git a/webapp/test/edu/cornell/mannlib/vitro/webapp/edit/n3editing/processEdit/EditN3GeneratorTest.java b/webapp/test/edu/cornell/mannlib/vitro/webapp/edit/n3editing/processEdit/EditN3GeneratorTest.java new file mode 100644 index 000000000..2230085be --- /dev/null +++ b/webapp/test/edu/cornell/mannlib/vitro/webapp/edit/n3editing/processEdit/EditN3GeneratorTest.java @@ -0,0 +1,41 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.edit.n3editing.processEdit; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.junit.Assert; +import org.junit.Test; + +public class EditN3GeneratorTest { + + @Test + public void testSubInMultiUris() { +// String n3 = "?subject ?predicate ?multivalue." ; +// List strs = new ArrayList(); +// strs.add(n3); +// +// Map> keyToValues = new HashMap>(); +// List values = new ArrayList(); +// values.add("http://a.com/2"); +// values.add("http://b.com/ont#2"); +// values.add("http://c.com/individual/n23431"); +// keyToValues.put("multivalue", values); +// +// List n3results = EditN3Generator.subInMultiLiterals(keyToValues, strs); +// +// Assert.assertNotNull(n3results); +// Assert.assertTrue( n3results.size() == 1 ); +// String expected ="?subject ?predicate , , ."; +// Assert.assertEquals(expected, n3results); +// + //make a model, + //add statements + //prase resultn3 + //compare + } + +}