diff --git a/src/edu/cornell/mannlib/vitro/webapp/search/indexing/AdditionalURIsForContextNodes.java b/src/edu/cornell/mannlib/vitro/webapp/search/indexing/AdditionalURIsForContextNodes.java index 90bbc95e..06d10992 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/search/indexing/AdditionalURIsForContextNodes.java +++ b/src/edu/cornell/mannlib/vitro/webapp/search/indexing/AdditionalURIsForContextNodes.java @@ -12,26 +12,21 @@ import java.util.Set; import org.apache.commons.logging.Log; 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.query.QuerySolution; import com.hp.hpl.jena.query.QuerySolutionMap; import com.hp.hpl.jena.query.ResultSet; -import com.hp.hpl.jena.query.Syntax; import com.hp.hpl.jena.rdf.model.RDFNode; import com.hp.hpl.jena.rdf.model.Resource; import com.hp.hpl.jena.rdf.model.ResourceFactory; import com.hp.hpl.jena.rdf.model.Statement; -import com.hp.hpl.jena.shared.Lock; +import edu.cornell.mannlib.vitro.webapp.dao.jena.QueryUtils; +import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService; import edu.cornell.mannlib.vitro.webapp.search.beans.StatementToURIsToUpdate; public class AdditionalURIsForContextNodes implements StatementToURIsToUpdate { - private OntModel model; + private final RDFService rdfService; private Set alreadyChecked; private long accumulatedTime = 0; @@ -43,8 +38,8 @@ public class AdditionalURIsForContextNodes implements StatementToURIsToUpdate { private Log log = LogFactory.getLog(AdditionalURIsForContextNodes.class); - public AdditionalURIsForContextNodes( OntModel jenaOntModel){ - this.model = jenaOntModel; + public AdditionalURIsForContextNodes( RDFService rdfService){ + this.rdfService = rdfService; } @Override @@ -93,42 +88,27 @@ public class AdditionalURIsForContextNodes implements StatementToURIsToUpdate { List uriList = new ArrayList(); - for(String query : queryList){ - - //log.info("Executing query: "+ query); - - QuerySolutionMap initialBinding = new QuerySolutionMap(); - Resource uriResource = ResourceFactory.createResource(uri); - initialBinding.add("uri", uriResource); - - Query sparqlQuery = QueryFactory.create( query, Syntax.syntaxARQ); - model.getLock().enterCriticalSection(Lock.READ); - try{ - QueryExecution qExec = QueryExecutionFactory.create(sparqlQuery, model, initialBinding); - try{ - ResultSet results = qExec.execSelect(); - while(results.hasNext()){ - QuerySolution soln = results.nextSolution(); - Iterator iter = soln.varNames() ; - while( iter.hasNext()){ - String name = iter.next(); - RDFNode node = soln.get( name ); - if( node != null ){ - uriList.add("" + node.toString()); - }else{ - log.debug(name + " is null"); - } - } - } - }catch(Throwable t){ - log.error(t,t); - } finally{ - qExec.close(); - } - }finally{ - model.getLock().leaveCriticalSection(); - } - } + for (String query : queryList) { + QuerySolutionMap initialBinding = new QuerySolutionMap(); + Resource uriResource = ResourceFactory.createResource(uri); + initialBinding.add("uri", uriResource); + + ResultSet results = QueryUtils.getQueryResults(query, + initialBinding, rdfService); + while (results.hasNext()) { + QuerySolution soln = results.nextSolution(); + Iterator iter = soln.varNames(); + while (iter.hasNext()) { + String name = iter.next(); + RDFNode node = soln.get(name); + if (node != null) { + uriList.add("" + node.toString()); + } else { + log.debug(name + " is null"); + } + } + } + } if( log.isDebugEnabled() ) log.debug( "additional uris for " + uri + " are " + uriList); diff --git a/src/edu/cornell/mannlib/vitro/webapp/search/indexing/AdditionalUriFinders.java b/src/edu/cornell/mannlib/vitro/webapp/search/indexing/AdditionalUriFinders.java index 6c48cded..727c545a 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/search/indexing/AdditionalUriFinders.java +++ b/src/edu/cornell/mannlib/vitro/webapp/search/indexing/AdditionalUriFinders.java @@ -5,9 +5,8 @@ package edu.cornell.mannlib.vitro.webapp.search.indexing; import java.util.ArrayList; import java.util.List; -import com.hp.hpl.jena.ontology.OntModel; - import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao; +import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService; import edu.cornell.mannlib.vitro.webapp.search.beans.StatementToURIsToUpdate; /** @@ -16,12 +15,12 @@ import edu.cornell.mannlib.vitro.webapp.search.beans.StatementToURIsToUpdate; */ public class AdditionalUriFinders { - public static List getList(OntModel jenaOntModel, + public static List getList(RDFService rdfService, IndividualDao indDao) { List uriFinders = new ArrayList<>(); uriFinders.add(new AdditionalURIsForDataProperties()); - uriFinders.add(new AdditionalURIsForObjectProperties(jenaOntModel)); - uriFinders.add(new AdditionalURIsForContextNodes(jenaOntModel)); + uriFinders.add(new AdditionalURIsForObjectProperties(rdfService)); + uriFinders.add(new AdditionalURIsForContextNodes(rdfService)); uriFinders.add(new AdditionalURIsForTypeStatements()); uriFinders.add(new URIsForClassGroupChange(indDao)); return uriFinders; diff --git a/test/edu/cornell/mannlib/vitro/webapp/search/indexing/AdditionalURIsForContextNodesTest.java b/test/edu/cornell/mannlib/vitro/webapp/search/indexing/AdditionalURIsForContextNodesTest.java index f73674d8..7e0a348b 100644 --- a/test/edu/cornell/mannlib/vitro/webapp/search/indexing/AdditionalURIsForContextNodesTest.java +++ b/test/edu/cornell/mannlib/vitro/webapp/search/indexing/AdditionalURIsForContextNodesTest.java @@ -12,11 +12,13 @@ import org.junit.Test; import com.hp.hpl.jena.ontology.OntModel; import com.hp.hpl.jena.rdf.model.ModelFactory; -import edu.cornell.mannlib.vitro.webapp.search.indexing.AdditionalURIsForContextNodes; +import edu.cornell.mannlib.vitro.webapp.rdfservice.impl.jena.model.RDFServiceModel; public class AdditionalURIsForContextNodesTest { + private AdditionalURIsForContextNodes uriFinder; + @Test public void testPositionChanges(){ String n3 = @@ -59,12 +61,7 @@ public class AdditionalURIsForContextNodesTest { " . \n" + " . \n" ; - //make a test model with an person, an authorship context node and a book - OntModel model = ModelFactory.createOntologyModel(); - model.read( new StringReader(n3), null, "N3"); - - //make an AdditionalURIsForContextNodesTest object with that model - AdditionalURIsForContextNodes uriFinder = new AdditionalURIsForContextNodes( model ); + populateModelAndCreateUriFinder(n3); //if the person changes then the org needs to be updated List uris = uriFinder.findAdditionalURIsToIndex( "http://caruso-laptop.mannlib.cornell.edu:8090/vivo/individual/n932"); @@ -107,21 +104,15 @@ public class AdditionalURIsForContextNodesTest { " core:contributingRole . \n" + " a , owl:Thing , . \n"; - //make a test model with an person, an authorship context node and a book - OntModel model = ModelFactory.createOntologyModel(); - model.read( new StringReader(n3), null, "N3"); - - - //make an AdditionalURIsForContextNodesTest object with that model - AdditionalURIsForContextNodes uriFinder = new AdditionalURIsForContextNodes( model ); + populateModelAndCreateUriFinder(n3); //get additional uris for org List uris = uriFinder.findAdditionalURIsToIndex( "http://caruso-laptop.mannlib.cornell.edu:8090/vivo/individual/n2592"); assertTrue("did not find person for context node", uris.contains("http://vivo.scripps.edu/individual/n14979" )); - } + @Test public void testLeaderRoleChanges(){ @@ -153,13 +144,7 @@ public class AdditionalURIsForContextNodesTest { " . \n " + " . \n " ; - - //make a test model with an person, a leader role node and a university - OntModel model = ModelFactory.createOntologyModel(); - model.read( new StringReader(n3), null, "N3"); - - //make an AdditionalURIsForContextNodesTest object with that model - AdditionalURIsForContextNodes uriFinder = new AdditionalURIsForContextNodes( model ); + populateModelAndCreateUriFinder(n3); //if the person changes then the university needs to be updated List uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n2027"); @@ -168,8 +153,6 @@ public class AdditionalURIsForContextNodesTest { //if the university changes then the person needs to be updated uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n7080"); assertTrue("did not find person for context node", uris.contains("http://vivo.scripps.edu/individual/n2027" )); - - } @@ -204,14 +187,7 @@ public class AdditionalURIsForContextNodesTest { " . \n " + " . \n " ; - - - //make a test model with an person, a member role node and a university - OntModel model = ModelFactory.createOntologyModel(); - model.read( new StringReader(n3), null, "N3"); - - //make an AdditionalURIsForContextNodesTest object with that model - AdditionalURIsForContextNodes uriFinder = new AdditionalURIsForContextNodes( model ); + populateModelAndCreateUriFinder(n3); //if the person changes then the university needs to be updated List uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n4519"); @@ -254,15 +230,8 @@ public class AdditionalURIsForContextNodesTest { " . \n" + " . \n" + " . \n" ; - - - //make a test model with an person, a clinical role node and a project - OntModel model = ModelFactory.createOntologyModel(); - model.read( new StringReader(n3), null, "N3"); - - //make an AdditionalURIsForContextNodesTest object with that model - AdditionalURIsForContextNodes uriFinder = new AdditionalURIsForContextNodes( model ); + populateModelAndCreateUriFinder(n3); //if the person changes then the project needs to be updated List uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n4858"); @@ -303,12 +272,7 @@ public class AdditionalURIsForContextNodesTest { " . \n" + " . \n" ; - //make a test model with an person, a clinical role node and a service - OntModel model = ModelFactory.createOntologyModel(); - model.read( new StringReader(n3), null, "N3"); - - //make an AdditionalURIsForContextNodesTest object with that model - AdditionalURIsForContextNodes uriFinder = new AdditionalURIsForContextNodes( model ); + populateModelAndCreateUriFinder(n3); //if the person changes then the service needs to be updated List uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n5651"); @@ -350,13 +314,7 @@ public class AdditionalURIsForContextNodesTest { " . \n" + " . \n" ; - - //make a test model with an person, a presenter role node and a presentation - OntModel model = ModelFactory.createOntologyModel(); - model.read( new StringReader(n3), null, "N3"); - - //make an AdditionalURIsForContextNodesTest object with that model - AdditionalURIsForContextNodes uriFinder = new AdditionalURIsForContextNodes( model ); + populateModelAndCreateUriFinder(n3); //if the person changes then the presentation needs to be updated List uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n5596"); @@ -398,13 +356,8 @@ public class AdditionalURIsForContextNodesTest { " . \n " + " . \n " + " . \n " ; - - //make a test model with an person, a presenter role node and an invited talk - OntModel model = ModelFactory.createOntologyModel(); - model.read( new StringReader(n3), null, "N3"); - - //make an AdditionalURIsForContextNodesTest object with that model - AdditionalURIsForContextNodes uriFinder = new AdditionalURIsForContextNodes( model ); + + populateModelAndCreateUriFinder(n3); //if the person changes then the invited talk needs to be updated List uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n4112"); @@ -447,13 +400,7 @@ public class AdditionalURIsForContextNodesTest { " . \n" + " . \n" ; - - //make a test model with an person, a researcher role node and a grant - OntModel model = ModelFactory.createOntologyModel(); - model.read( new StringReader(n3), null, "N3"); - - //make an AdditionalURIsForContextNodesTest object with that model - AdditionalURIsForContextNodes uriFinder = new AdditionalURIsForContextNodes( model ); + populateModelAndCreateUriFinder(n3); //if the person changes then the grant needs to be updated List uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n4957"); @@ -497,14 +444,7 @@ public class AdditionalURIsForContextNodesTest { " . \n " + " . \n " ; - - - //make a test model with an person, a researcher role node and a project - OntModel model = ModelFactory.createOntologyModel(); - model.read( new StringReader(n3), null, "N3"); - - //make an AdditionalURIsForContextNodesTest object with that model - AdditionalURIsForContextNodes uriFinder = new AdditionalURIsForContextNodes( model ); + populateModelAndCreateUriFinder(n3); //if the person changes then the project needs to be updated List uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n2029"); @@ -548,13 +488,7 @@ public class AdditionalURIsForContextNodesTest { " . \n" + " . \n" ; - - //make a test model with an person, a principal investigator role node and a grant - OntModel model = ModelFactory.createOntologyModel(); - model.read( new StringReader(n3), null, "N3"); - - //make an AdditionalURIsForContextNodesTest object with that model - AdditionalURIsForContextNodes uriFinder = new AdditionalURIsForContextNodes( model ); + populateModelAndCreateUriFinder(n3); //if the person changes then the grant needs to be updated List uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n2368"); @@ -598,13 +532,8 @@ public class AdditionalURIsForContextNodesTest { " . \n" + " . \n" ; - //make a test model with an person, a co-principal investigator role node and a grant - OntModel model = ModelFactory.createOntologyModel(); - model.read( new StringReader(n3), null, "N3"); - - //make an AdditionalURIsForContextNodesTest object with that model - AdditionalURIsForContextNodes uriFinder = new AdditionalURIsForContextNodes( model ); - + populateModelAndCreateUriFinder(n3); + //if the copi changes then the grant needs to be updated List uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n1373"); assertTrue("did not find grant for co-pi", uris.contains("http://vivo.scripps.edu/individual/n4931" )); @@ -646,14 +575,8 @@ public class AdditionalURIsForContextNodesTest { " . \n" + " . \n" ; - - //make a test model with an person, a investigator role node and a grant - OntModel model = ModelFactory.createOntologyModel(); - model.read( new StringReader(n3), null, "N3"); - - //make an AdditionalURIsForContextNodesTest object with that model - AdditionalURIsForContextNodes uriFinder = new AdditionalURIsForContextNodes( model ); - + populateModelAndCreateUriFinder(n3); + //if the investigator changes then the grant needs to be updated List uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n5282"); assertTrue("did not find grant for investigator", uris.contains("http://vivo.scripps.edu/individual/n160" )); @@ -661,10 +584,21 @@ public class AdditionalURIsForContextNodesTest { //if the grant changes then the investigator needs to be updated uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n160"); assertTrue("did not find investigator for grant", uris.contains("http://vivo.scripps.edu/individual/n5282" )); - - } - - + + // ---------------------------------------------------------------------- + // Helper methods + // ---------------------------------------------------------------------- + + /** + * Build a Model from this N3 string, and create a URI Finder based on that + * Model. + */ + private void populateModelAndCreateUriFinder(String n3String) { + OntModel model = ModelFactory.createOntologyModel(); + model.read(new StringReader(n3String), null, "N3"); + uriFinder = new AdditionalURIsForContextNodes( + new RDFServiceModel(model)); + } }