From 85e9e16659d1fd5abf093a1b94f8271275787bd2 Mon Sep 17 00:00:00 2001 From: brianjlowe Date: Wed, 6 Nov 2013 12:45:59 -0500 Subject: [PATCH 1/2] supporting stub deletion annotation in faux properties --- .../vitro/webapp/dao/jena/ObjectPropertyDaoJena.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyDaoJena.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyDaoJena.java index 4031627d2..cb4ea280a 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyDaoJena.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyDaoJena.java @@ -319,7 +319,7 @@ public class ObjectPropertyDaoJena extends PropertyDaoJena implements ObjectProp " ?updateLevel ?editLinkSuppressed ?addLinkSuppressed ?deleteLinkSuppressed \n" + " ?collateBySubclass ?displayLimit ?individualSortProperty \n" + " ?entitySortDirection ?selectFromExisting ?offerCreateNew \n" + - " ?publicDescription \n" + + " ?publicDescription ?stubDeletion \n" + " WHERE { \n" + " ?context config:configContextFor <" + propertyURI + "> . \n"; if (domainURI != null) { @@ -349,6 +349,7 @@ public class ObjectPropertyDaoJena extends PropertyDaoJena implements ObjectProp " OPTIONAL { ?configuration <" + PROPERTY_SELECTFROMEXISTINGANNOT.getURI() + "> ?selectFromExisting } \n" + " OPTIONAL { ?configuration <" + PROPERTY_OFFERCREATENEWOPTIONANNOT.getURI() + "> ?offerCreateNew } \n" + " OPTIONAL { ?configuration <" + PUBLIC_DESCRIPTION_ANNOT.getURI() + "> ?publicDescription } \n" + + " OPTIONAL { ?configuration <" + PROPERTY_STUBOBJECTPROPERTYANNOT.getURI() + "> ?stubDeletion } \n" + "}"; Query q = QueryFactory.create(propQuery); @@ -432,6 +433,10 @@ public class ObjectPropertyDaoJena extends PropertyDaoJena implements ObjectProp if (offerCreateNewLit != null) { op.setOfferCreateNewOption(offerCreateNewLit.getBoolean()); } + Literal stubDeletionLit = qsoln.getLiteral("stubDeletion"); + if (stubDeletionLit != null) { + op.setStubObjectRelation(stubDeletionLit.getBoolean()); + } Literal publicDescriptionLit = qsoln.getLiteral("publicDescription"); if (publicDescriptionLit != null) { op.setPublicDescription(publicDescriptionLit.getLexicalForm()); From bc0cf6be639662afdd19cfb5afa2091297476008 Mon Sep 17 00:00:00 2001 From: j2blake Date: Wed, 6 Nov 2013 13:07:08 -0500 Subject: [PATCH 2/2] VIVO-483 Obsolete VIVO URIs in Vitro search code. Break out the mechanism for building a list of Additional URI Finder instances. Override that in VIVO. Move AdditionalURIsForContextNodes to VIVO. References to obsolete URIs are in comments. --- .../AdditionalURIsForContextNodes.java | 811 ------------------ .../search/indexing/AdditionalUriFinders.java | 30 + .../vitro/webapp/search/solr/SolrSetup.java | 27 +- .../AdditionalURIsForContextNodesTest.java | 670 --------------- 4 files changed, 32 insertions(+), 1506 deletions(-) delete mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/search/indexing/AdditionalURIsForContextNodes.java create mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/search/indexing/AdditionalUriFinders.java delete mode 100644 webapp/test/edu/cornell/mannlib/vitro/webapp/search/indexing/AdditionalURIsForContextNodesTest.java diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/indexing/AdditionalURIsForContextNodes.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/indexing/AdditionalURIsForContextNodes.java deleted file mode 100644 index 96216d636..000000000 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/indexing/AdditionalURIsForContextNodes.java +++ /dev/null @@ -1,811 +0,0 @@ -/* $This file is distributed under the terms of the license in /doc/license.txt$ */ - -package edu.cornell.mannlib.vitro.webapp.search.indexing; - -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 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.search.beans.StatementToURIsToUpdate; - -public class AdditionalURIsForContextNodes implements StatementToURIsToUpdate { - - private OntModel model; - private Set alreadyChecked; - private long accumulatedTime = 0; - - private static final List multiValuedQueriesForAgent = new ArrayList(); - private static final String multiValuedQueryForInformationResource; - private static final List multiValuedQueriesForRole = new ArrayList(); - private static final ListqueryList; - - private Log log = LogFactory.getLog(AdditionalURIsForContextNodes.class); - - - public AdditionalURIsForContextNodes( OntModel jenaOntModel){ - this.model = jenaOntModel; - } - - @Override - public List findAdditionalURIsToIndex(Statement stmt) { - - if( stmt != null ){ - long start = System.currentTimeMillis(); - - ListurisToIndex = new ArrayList(); - if(stmt.getSubject() != null && stmt.getSubject().isURIResource() ){ - String subjUri = stmt.getSubject().getURI(); - if( subjUri != null && ! alreadyChecked.contains( subjUri )){ - urisToIndex.addAll( findAdditionalURIsToIndex(subjUri)); - alreadyChecked.add(subjUri); - } - } - - if( stmt.getObject() != null && stmt.getObject().isURIResource() ){ - String objUri = stmt.getSubject().getURI(); - if( objUri != null && ! alreadyChecked.contains(objUri)){ - urisToIndex.addAll( findAdditionalURIsToIndex(objUri)); - alreadyChecked.add(objUri); - } - } - - accumulatedTime += (System.currentTimeMillis() - start ) ; - return urisToIndex; - }else{ - return Collections.emptyList(); - } - } - - @Override - public void startIndexing() { - alreadyChecked = new HashSet(); - accumulatedTime = 0L; - } - - @Override - public void endIndxing() { - log.debug( "Accumulated time for this run of the index: " + accumulatedTime + " msec"); - alreadyChecked = null; - } - - protected List findAdditionalURIsToIndex(String uri) { - - 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(); - } - } - - if( log.isDebugEnabled() ) - log.debug( "additional uris for " + uri + " are " + uriList); - - return uriList; - } - - - private static final String prefix = "prefix owl: \n" - + " prefix vitroDisplay: \n" - + " prefix rdf: \n" - + " prefix core: \n" - + " prefix foaf: \n" - + " prefix obo: \n" - + " prefix vcard: \n" - + " prefix event: \n" - + " prefix rdfs: \n" - + " prefix localNav: \n" - + " prefix bibo: \n"; - - static{ - - // If a person changes then update - // organizations for positions - multiValuedQueriesForAgent.add(prefix + - "SELECT DISTINCT \n" + - " (str(?i) as ?positionInOrganization) \n" + - " WHERE {\n" - - + "?uri rdf:type foaf:Agent ; core:relatedBy ?c . \n" - + " ?c rdf:type core:Position . \n" - - + " OPTIONAL { ?c core:relates ?i . ?i rdf:type foaf:Organization } . \n" - + " }"); - - // If a person changes then update - // advisee, linkedAuthor and informationResource - multiValuedQueriesForAgent.add(prefix + - "SELECT (str(?d) as ?advisee) \n" + - " (str(?f) as ?linkedAuthor) (str(?h) as ?linkedInformationResource) WHERE { {\n" - - + "?uri rdf:type foaf:Agent . \n" - + "?uri core:relatedBy ?c . \n" - + "?c rdf:type core:AdvisingRelationship . \n" - + "?c core:relates ?d . \n" - + "?d rdf:type core:AdviseeRole . \n" - + "?d obo:RO_0000052 ?e . \n" - + "?e rdf:type foaf:Person . \n" - + "} \n" - + "UNION { \n" - + " ?uri rdf:type foaf:Agent . \n" - + " ?uri core:relatedBy ?c . \n" - + " ?c rdf:type core:Authorship . \n" - + " OPTIONAL {?c core:relates ?f . \n" - + " ?f rdf:type foaf:Person . } \n" - + " OPTIONAL { ?c core:relates ?h . \n" - + " ?h rdf:type obo:IAO_0000030 . } \n" - + " } } "); - - // If a person changes then update - // award giver - multiValuedQueriesForAgent.add(prefix + - "SELECT (str(?d) as ?awardConferredBy) \n" + - "WHERE {\n" - - + "?uri rdf:type foaf:Agent ; ?b ?c . \n" - + " ?c rdf:type core:AwardReceipt . \n" - - + " OPTIONAL { ?c core:assignedBy ?d . } . \n" - + " }"); - - // If a person changes then update - // organization for role - multiValuedQueriesForAgent.add(prefix + - "SELECT (str(?Organization) as ?organization) \n" + - "WHERE {\n" - - + "?uri rdf:type foaf:Agent ; ?b ?c . \n" - + " ?c rdf:type obo:BFO_0000023 ; obo:BFO_0000054 ?Organization .\n" - + " }"); - - // If a person changes then update - // organization in educational training - multiValuedQueriesForAgent.add(prefix + - "SELECT \n" + - "(str(?e) as ?trainingAtOrganization) WHERE {\n" - - + " ?uri rdf:type foaf:Agent ; ?b ?c . \n" - + " ?c rdf:type core:EducationalProcess . \n" - - + " OPTIONAL { ?c obo:RO_0000057 ?e . \n" - + " ?e rdf:type foaf:Organization . } . " - +"}"); - - // If an organization changes then update - // people in head of relations - multiValuedQueriesForAgent.add( - " # for organization, get leader \n" + - prefix + - "SELECT \n" + - "(str(?e) as ?LeaderPerson ) WHERE {\n" - - + " ?uri rdf:type foaf:Agent . \n" - + " ?uri core:contributingRole ?c . \n" - + " ?c rdf:type core:LeaderRole . \n" - - + " OPTIONAL { ?c obo:RO_0000052 ?e . \n" - + " ?e rdf:type foaf:Person . } . " - +"}"); - - } - - //multivalued query for core:InformationResource - static { - - multiValuedQueryForInformationResource = prefix + - "SELECT (str(?b) as ?linkedAuthor) (str(?d) as ?linkedInformationResource) \n" - + "(str(?f) as ?editor) \n" + - "(str(?i) as ?features) WHERE {\n" - - + " ?uri rdf:type obo:IAO_0000030 . \n" - - + " OPTIONAL { ?uri core:relatedBy ?a . \n" - + " ?a rdf:type core:Authorship . \n" - + " ?a core:relates ?b . ?b rdf:type foaf:Person .\n" - + " ?a core:relates ?d . ?d rdf:type obo:IAO_0000030 .\n" - + "} . " - - + " OPTIONAL { ?uri core:relatedBy ?e . \n" - + " ?e rdf:type core:Editorship . \n" - + " ?e core:relates ?f . ?f rdf:type foaf:Person .\n" - + "} . " - + " OPTIONAL { ?uri core:features ?i . } . \n" - - +"}" ; - - } - - protected static List queriesForAuthorship(){ - List queries = new ArrayList(); - - //get additional URIs of information resources from author side - queries.add( - prefix - + "SELECT (str(?a) as ?infoResource) WHERE {\n" - - + " ?uri rdf:type foaf:Person . \n" - + " ?uri core:relatedBy ?aship .\n" - + " ?aship rdf:type core:Authorship .\n" - + "OPTIONAL { ?aship core:relates ?a . ?a rdf:type obo:IAO_0000030 } .\n" - +"}" ); - - //get additional URIs of authors from information resource side - queries.add( - prefix - + "SELECT (str(?a) as ?author ) WHERE {\n" - - + " ?uri rdf:type obo:IAO_0000030 . \n" - + " ?uri core:relatedBy ?aship . ?aship rdf:type core:Authorship . \n" - + "OPTIONAL { ?aship core:relates ?a . ?a rdf:type foaf:Person } .\n" - +"}" ); - return queries; - } - - protected static List queriesForURLLink(){ - List queries = new ArrayList(); - - //get additional URIs when URLLink is changed - queries.add( - prefix - + "SELECT (str(?x) as ?individual) WHERE {\n" - - + " ?i rdf:type vcard:Individual . \n" - + " ?i vcard:hasURL ?uri . \n" - + " ?i obo:ARG_2000029 ?x . \n" - +"}" ); - - return queries; - } - - protected static List queriesForEducationalTraining(){ - List queries = new ArrayList(); - - //if person changes, no additional URIs need to be - //changed because the person is not displayed on the - //degree individual or on the degree granting organization - - //if the degree changes, the person needs to be updated - //since the degree name is shown on the person page. - queries.add( - prefix - + " SELECT (str(?person) as ?personUri) WHERE {\n" - - + " ?uri rdf:type core:AcademicDegree . \n" - + " ?uri core:relatedBy ?awardedDegree .\n" - + " ?awardedDegree rdf:type core:AwardedDegree .\n" - + " ?awardedDegree core:relates ?person .\n" - + " ?person rdf:type foaf:Person .\n" - +"}" ); - - //if the organization changes the person needs to be updated - //since the organization name is shown on the person page. - queries.add( - prefix - + " SELECT (str(?person) as ?personUri) WHERE {\n" - - + " ?uri rdf:type foaf:Organization . \n" - + " ?uri obo:RO_0000056 ?edTrainingNode .\n" - + " ?edTrainingNode rdf:type core:EducationalProcess . \n" - + " ?edTrainingNode obo:RO_0000057 ?person . \n" - + " ?person rdf:type foaf:Person ." - +"}" ); - return queries; - } - - protected static List queriesForPosition(){ - List queries = new ArrayList(); - - //If an organization changes, update people - queries.add( - prefix - + " SELECT (str(?person) as ?personUri) WHERE {\n" - - + " ?uri rdf:type foaf:Organization . \n" - + " ?uri core:relatedBy ?positionNode .\n" - + " ?positionNode rdf:type core:Position .\n" - + " ?positionNode core:relates ?person . \n" - + " ?person rdf:type foaf:Person .\n" - +"}" ); - - - //if people change, update organizations - queries.add( - prefix - + " SELECT (str(?org) as ?orgUri) WHERE {\n" - - + " ?uri rdf:type foaf:Person . \n" - + " ?uri core:relatedBy ?positionNode .\n" - + " ?positionNode rdf:type core:Position .\n" - + " ?positionNode core:relates ?org . \n" - + " ?org rdf:type foaf:Organization .\n" - +"}" ); - return queries; - } - - static{ - // core:AttendeeRole - // If the person changes, update the attendee role in organization - // core:AttendeeRole applies to events, not organizations; updating accordingly - tlw72 - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?event) \n " + - "WHERE {\n" - + "?uri rdf:type foaf:Person . \n" - + "?uri obo:RO_0000053 ?c . \n" - + "?c rdf:type core:AttendeeRole . \n" - + "?c obo:BFO_0000054 ?d . \n" - + "?d rdf:type event:Event .\n" - + " }"); - - // If the organization changes, update the attendee role of person - // core:AttendeeRole applies to events, not organizations; updating accordingly - tlw72 - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?person) \n" + - "WHERE {\n" - - + "?uri rdf:type event:Event . \n" - + "?uri obo:BFO_0000055 ?c . \n" - + "?c rdf:type core:AttendeeRole . \n" - + "?c obo:RO_0000052 ?d . \n" - + "?d rdf:type foaf:Person .\n" - + " }"); - - // core:ClinicalRole -- core:clinicalRoleOf - - // If the person changes, update the clinical role in project - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?project) \n" + - "WHERE {\n" - + "?uri rdf:type foaf:Person . \n" - + "?uri obo:RO_0000053 ?c . \n" - + "?c rdf:type core:ClinicalRole . \n" - + "?c obo:BFO_0000054 ?d .\n" - + "?d rdf:type core:Project .\n" - + " }"); - - - // If the person changes, update the clinical role in service - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?service) \n" + - "WHERE {\n" - + "?uri rdf:type foaf:Person . \n" - + "?uri obo:RO_0000053 ?c . \n" - + "?c rdf:type core:ClinicalRole . \n" - + "?c core:roleContributesTo ?d .\n" - + "?d rdf:type obo:ERO_0000005 .\n" - + " }"); - - // If the project changes, update the clinical role of person - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?person) \n" + - "WHERE {\n" - + "?uri rdf:type core:Project . \n" - + "?uri obo:BFO_0000055 ?c . \n" - + "?c rdf:type core:ClinicalRole . \n" - + "?c obo:RO_0000052 ?d .\n " - + "?d rdf:type foaf:Person .\n " - + " }"); - - // If the service changes, update the clinical role of person - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?person) \n" + - "WHERE {\n" - + "?uri rdf:type obo:ERO_0000005 . \n" - + "?uri core:contributingRole ?c . \n" - + "?c rdf:type core:ClinicalRole . \n" - + "?c obo:RO_0000052 ?d .\n " - + "?d rdf:type foaf:Person .\n " - + " }"); - - // If the person changes, update the leader role in organization - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?organization) \n" + - "WHERE {\n" - + "?uri rdf:type foaf:Person . \n" - + "?uri obo:RO_0000053 ?c . \n" - + "?c rdf:type core:LeaderRole . \n" - + "?c core:roleContributesTo ?d .\n" - + "?d rdf:type foaf:Organization .\n " - + " }"); - - // If the organization changes, update the leader role of person - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?person) \n" + - "WHERE {\n" - + "?uri rdf:type foaf:Organization . \n" - + "?uri core:contributingRole ?c . \n" - + "?c rdf:type core:LeaderRole . \n" - + "?c obo:RO_0000052 ?d .\n " - + "?d rdf:type foaf:Person .\n " - + " }"); - - // core:MemberRole -- core:memberRoleOf - - // If the person changes, update the member role in organization - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?organization) \n" + - "WHERE \n{" - + "?uri rdf:type foaf:Person . \n" - + "?uri obo:RO_0000053 ?c . \n" - + "?c rdf:type core:MemberRole . \n" - + "?c core:roleContributesTo ?d .\n" - + "?d rdf:type foaf:Organization .\n " - + " }"); - - // If the organization changes, update the member role of person - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?person) \n" + - "WHERE {" - + "?uri rdf:type foaf:Organization . \n" - + "?uri core:contributingRole ?c . \n" - + "?c rdf:type core:MemberRole . \n" - + "?c obo:RO_0000052 ?d .\n " - + "?d rdf:type foaf:Person .\n " - + " }"); - - // core:OrganizerRole -- core:organizerRoleOf - - // If the person changes, update the organizer role in organization - // organizerRole appplies to events not organizations; updating accordingly - tlw72 - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?event) \n" + - "WHERE {" - + "?uri rdf:type foaf:Person . \n" - + "?uri obo:RO_0000053 ?c . \n" - + "?c rdf:type core:OrganizerRole .\n" - + "?c obo:BFO_0000054 ?d .\n" - + "?d rdf:type event:Event .\n " - + " }"); - - // If the organization changes, update the organizer role of person - // organizerRole appplies to events not organizations; updating accordingly - tlw72 - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?person) \n" + - "WHERE {\n" - + "?uri rdf:type event:Event . \n" - + "?uri obo:BFO_0000055 ?c . \n" - + "?c rdf:type core:OrganizerRole . \n" - + "?c obo:RO_0000052 ?d .\n " - + "?d rdf:type foaf:Person .\n " - + " }"); - - // core:OutreachProviderRole -- core:outreachProviderRoleOf - - // If the person changes, update the outreach provider role in organization - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?organization) \n" + - "WHERE {\n" - + "?uri rdf:type foaf:Person . \n" - + "?uri obo:RO_0000053 ?c . \n" - + "?c rdf:type core:OutreachProviderRole .\n" - + "?c core:roleContributesTo ?d .\n" - + "?d rdf:type foaf:Organization .\n " - + " }"); - - // If the organization changes, update the outreach provider role of person - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?person) \n" + - "WHERE {\n" - + "?uri rdf:type foaf:Organization . \n" - + "?uri core:contributingRole ?c . \n" - + "?c rdf:type core:OutreachProviderRole . \n" - + "?c obo:RO_0000052 ?d .\n " - + "?d rdf:type foaf:Person .\n " - + " }"); - - // core:PresenterRole -- core:presenterRoleOf - - // If the person changes, update the presentation - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?presentation) \n" + - "WHERE {\n" - + "?uri rdf:type foaf:Person . \n" - + "?uri obo:RO_0000053 ?c . \n" - + " ?c rdf:type core:PresenterRole . \n" - + " ?c obo:BFO_0000054 ?d .\n" - + " ?d rdf:type core:Presentation . \n" - + " }"); - - // If the presentation changes, update the person - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?person) \n" + - "WHERE {\n" - + "?uri rdf:type core:Presentation . \n" - + "?uri obo:BFO_0000055 ?c . \n" - + " ?c rdf:type core:PresenterRole . \n " - + "?c obo:RO_0000052 ?d .\n " - + "?d rdf:type foaf:Person .\n " - + " }"); - - // core:ResearcherRole -- core:researcherRoleOf - - // If the person changes, update the grant - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?grant) \n" + - "WHERE {\n" - + "?uri rdf:type foaf:Person . \n" - + "?uri obo:RO_0000053 ?c . \n" - + " ?c rdf:type core:ResearcherRole . \n " - + " ?c core:relatedBy ?d .\n" - + " ?d rdf:type core:Grant . \n" - + " }"); - - // If the grant changes, update the researcher - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?person) \n" + - "WHERE {\n" - + "?uri rdf:type core:Grant . \n" - + "?uri core:relates ?c . \n" - + " ?c rdf:type core:ResearcherRole . \n " - + " ?c obo:RO_0000052 ?d .\n" - + "?d rdf:type foaf:Person .\n " - + " }"); - - // If the grant changes, update the principal investigator - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?person) \n" + - "WHERE {\n" - + "?uri rdf:type core:Grant . \n" - + " ?uri core:relates ?c . \n" - + " ?c rdf:type core:PrincipalInvestigatorRole . \n " - + " ?c obo:RO_0000052 ?d .\n" - + "?d rdf:type foaf:Person .\n " - + " }"); - - // If the grant changes, update the co-principal investigator - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?person) \n" + - "WHERE {\n" - + "?uri rdf:type core:Grant . \n" - + " ?uri core:relates ?c . \n" - + " ?c rdf:type core:CoPrincipalInvestigatorRole . \n " - + " ?c obo:RO_0000052 ?d .\n" - + "?d rdf:type foaf:Person .\n " - + " }"); - - - // If the grant changes, update the investigator - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?person) \n" + - "WHERE {\n" - + "?uri rdf:type core:Grant . \n" - + " ?uri core:relates ?c . \n" - + " ?c rdf:type core:InvestigatorRole . \n " - + " ?c obo:RO_0000052 ?d .\n" - + "?d rdf:type foaf:Person .\n " - + " }"); - - // If the person changes, update the project - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?project) \n" + - "WHERE {\n" - + "?uri rdf:type foaf:Person . \n" - + "?uri obo:RO_0000053 ?c . \n" - + " ?c rdf:type core:ResearcherRole . \n " - + " ?c obo:BFO_0000054 ?d .\n" - + " ?d rdf:type core:Project . \n" - + " }"); - - // If the project changes, update the researcher - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?person) \n" + - "WHERE {\n" - + "?uri rdf:type core:Project . \n" - + " ?uri obo:BFO_0000055 ?c .\n" - + " ?c rdf:type core:ResearcherRole . \n " - + " ?c obo:RO_0000052 ?d .\n" - + "?d rdf:type foaf:Person .\n " - + " }"); - - // core:EditorRole -- core:editorRoleOf, core:forInformationResource (person, informationresource) - - // If the person changes, update the editor role of the info resource - // changing foaf:Organization to info content entity. Org no longer applies here - tlw72 - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?informationResource) \n" + - "WHERE {\n" - + "?uri rdf:type foaf:Person . \n" - + "?uri obo:RO_0000053 ?c . \n" - + " ?c rdf:type core:EditorRole . \n " - + " ?c core:roleContributesTo ?d .\n" - + "?d rdf:type obo:IAO_0000030 .\n " - + " }"); - - - // If the info respource changes, update the editor role of person - // changing foaf:Organization to info content entity. Org no longer applies here - tlw72 - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?person) \n" + - "WHERE {\n" - + "?uri rdf:type obo:IAO_0000030 . \n" - + "?uri core:contributingRole ?c . \n" - + " ?c rdf:type core:EditorRole . \n " - + " ?c obo:RO_0000052 ?d .\n" - + "?d rdf:type foaf:Person .\n " - + " }"); - - // Next two queries are covered by the previous two. Commenting them out - tlw72 - // If the person changes, update the information resource associated with editor role -/* multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?informationResource) \n" + - "WHERE {\n" - - + "?uri rdf:type foaf:Person ; ?b ?c . \n" - + " ?c rdf:type core:EditorRole ; core:forInformationResource ?d .\n" - + " }"); - - // If the organization changes, update the information resource associated with editor role - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?informationResource) \n" + - "WHERE {\n" - - + "?uri rdf:type foaf:Organization ; ?b ?c . \n" - + " ?c rdf:type core:EditorRole ; core:forInformationResource ?d .\n" - + " }"); -*/ - // core:ServiceProviderRole -- core:serviceProviderRoleOf - - // If the person changes, update the service provider role in organization - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?organization) \n" + - "WHERE {\n" - + "?uri rdf:type foaf:Person . \n" - + "?uri obo:RO_0000053 ?c . \n" - + " ?c rdf:type obo:ERO_0000012 . \n" - + " ?c core:roleContributesTo ?d .\n" - + " ?d rdf:type foaf:Organization .\n " - + " }"); - - // If the organization changes, update the service provider role of person - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?person) \n" + - "WHERE {\n" - + "?uri rdf:type foaf:Organization . \n" - + "?uri core:contributingRole ?c . \n" - + " ?c rdf:type obo:ERO_0000012 . \n " - + " ?c obo:RO_0000052 ?d .\n" - + "?d rdf:type foaf:Person .\n " - + " }"); - - - // core:TeacherRole -- core:teacherRoleOf - - // If the person changes, update the teacher role in organization - // updated to make this an Event (e.g., a course) not an organization - tlw72 - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?event) \n" + - "WHERE {\n" - + "?uri rdf:type foaf:Person . \n" - + "?uri obo:RO_0000053 ?c . \n" - + " ?c rdf:type core:TeacherRole . \n" - + " ?c obo:BFO_0000054 ?d .\n" - + " ?d rdf:type event:Event .\n " - + " }"); - - // If the organization changes, update the teacher role of person - // updated to make this an Event (e.g., a course) not an organization - tlw72 - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?person) \n" + - "WHERE {\n" - + "?uri rdf:type event:Event . \n" - + "?uri obo:BFO_0000055 ?c . \n" - + " ?c rdf:type core:TeacherRole . \n " - + " ?c obo:RO_0000052 ?d .\n" - + "?d rdf:type foaf:Person .\n " - + " }"); - - - // core:ReviewerRole -- core:forInformationResource, core:reviewerRoleOf -// core:PeerReviewerRole -- core:forInformationResource, core:reviewerRoleOf - - // If the person changes, update the reviewer role in organization - // There is no relationship between a reviewerRole and an organization; commenting - // the next two queries out - tlw72 -/* multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?organization) \n" + - "WHERE {\n" - - + "?uri rdf:type foaf:Person ; ?b ?c . \n" - + " ?c rdf:type core:ReviewerRole ; core:roleIn ?d .\n" - + " }"); - - - // If the organization changes, update the reviewer role of person - - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?person) \n" + - "WHERE {\n" - - + "?uri rdf:type foaf:Organization ; ?b ?c . \n" - + " ?c rdf:type core:ReviewerRole ; core:reviewerRoleOf ?d .\n" - + " }"); -*/ - // If the person changes, update the information resource associated with reviewer role - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?informationResource) \n " + - "WHERE {\n" - + "?uri rdf:type foaf:Person . \n" - + "?uri obo:RO_0000053 ?c . \n" - + " ?c rdf:type core:ReviewerRole . \n" - + " ?c core:roleContributesTo ?d .\n" - + " ?d rdf:type obo:IAO_0000030 .\n " - + " }"); - - // If the organization changes, update the information resource associated with reviewer role - multiValuedQueriesForRole.add(prefix + - "SELECT (str(?d) as ?informationResource) \n" + - "WHERE {\n" - + "?uri rdf:type obo:IAO_0000030 . \n" - + "?uri core:contributingRole ?c . \n" - + " ?c rdf:type core:ReviewerRole. \n " - + " ?c obo:RO_0000052 ?d .\n" - + "?d rdf:type foaf:Person .\n " - + " }"); - - } - - static{ - List tmpList = new ArrayList(); - tmpList.add(multiValuedQueryForInformationResource); - tmpList.addAll(multiValuedQueriesForAgent); - tmpList.addAll(multiValuedQueriesForRole); - tmpList.addAll( queriesForAuthorship()); - tmpList.addAll(queriesForURLLink()); - tmpList.addAll(queriesForEducationalTraining()); - tmpList.addAll(queriesForPosition()); - - queryList = Collections.unmodifiableList(tmpList); - } - -} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/indexing/AdditionalUriFinders.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/indexing/AdditionalUriFinders.java new file mode 100644 index 000000000..498d74334 --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/indexing/AdditionalUriFinders.java @@ -0,0 +1,30 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +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.search.beans.StatementToURIsToUpdate; + +/** + * Make a list of StatementToURIsToUpdate objects for use by the + * IndexBuidler. + */ +public class AdditionalUriFinders { + + public static List getList(OntModel jenaOntModel, + IndividualDao indDao) { + // TODO How many of these are only relevant to VIVO? + List uriFinders = new ArrayList<>(); + uriFinders.add(new AdditionalURIsForDataProperties()); + uriFinders.add(new AdditionalURIsForObjectProperties(jenaOntModel)); + uriFinders.add(new AdditionalURIsForTypeStatements()); + uriFinders.add(new URIsForClassGroupChange(indDao)); + return uriFinders; + } + +} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/solr/SolrSetup.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/solr/SolrSetup.java index d8f72363c..04ae6971d 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/solr/SolrSetup.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/solr/SolrSetup.java @@ -2,8 +2,6 @@ package edu.cornell.mannlib.vitro.webapp.search.solr; -import java.net.MalformedURLException; -import java.net.URL; import java.util.ArrayList; import java.util.List; @@ -18,7 +16,6 @@ import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.vocabulary.OWL; import edu.cornell.mannlib.vitro.webapp.config.ConfigurationProperties; -import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao; import edu.cornell.mannlib.vitro.webapp.dao.ModelAccess; import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; @@ -29,13 +26,9 @@ import edu.cornell.mannlib.vitro.webapp.dao.jena.ModelContext; import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFServiceFactory; import edu.cornell.mannlib.vitro.webapp.rdfservice.impl.RDFServiceUtils; import edu.cornell.mannlib.vitro.webapp.search.beans.StatementToURIsToUpdate; -import edu.cornell.mannlib.vitro.webapp.search.indexing.AdditionalURIsForContextNodes; -import edu.cornell.mannlib.vitro.webapp.search.indexing.AdditionalURIsForDataProperties; -import edu.cornell.mannlib.vitro.webapp.search.indexing.AdditionalURIsForObjectProperties; -import edu.cornell.mannlib.vitro.webapp.search.indexing.AdditionalURIsForTypeStatements; +import edu.cornell.mannlib.vitro.webapp.search.indexing.AdditionalUriFinders; import edu.cornell.mannlib.vitro.webapp.search.indexing.IndexBuilder; import edu.cornell.mannlib.vitro.webapp.search.indexing.SearchReindexingListener; -import edu.cornell.mannlib.vitro.webapp.search.indexing.URIsForClassGroupChange; import edu.cornell.mannlib.vitro.webapp.search.solr.documentBuilding.DocumentModifier; import edu.cornell.mannlib.vitro.webapp.search.solr.documentBuilding.ExcludeBasedOnNamespace; import edu.cornell.mannlib.vitro.webapp.search.solr.documentBuilding.ExcludeBasedOnType; @@ -140,7 +133,7 @@ public class SolrSetup implements javax.servlet.ServletContextListener{ wadf = new WebappDaoFactoryFiltering(wadf, vf); // make objects that will find additional URIs for context nodes etc - List uriFinders = makeURIFinders(jenaOntModel,wadf.getIndividualDao()); + List uriFinders = AdditionalUriFinders.getList(jenaOntModel,wadf.getIndividualDao()); // Make the IndexBuilder IndexBuilder builder = new IndexBuilder( solrIndexer, wadf, uriFinders ); @@ -159,22 +152,6 @@ public class SolrSetup implements javax.servlet.ServletContextListener{ } - /** - * Make a list of StatementToURIsToUpdate objects for use by the - * IndexBuidler. - * @param indDao - */ - public List makeURIFinders( OntModel jenaOntModel, IndividualDao indDao ){ - List uriFinders = new ArrayList(); - uriFinders.add( new AdditionalURIsForDataProperties() ); - uriFinders.add( new AdditionalURIsForObjectProperties(jenaOntModel) ); - uriFinders.add( new AdditionalURIsForContextNodes(jenaOntModel) ); - uriFinders.add( new AdditionalURIsForTypeStatements() ); - uriFinders.add( new URIsForClassGroupChange( indDao )); - return uriFinders; - } - - @Override public void contextDestroyed(ServletContextEvent sce) { IndexBuilder builder = (IndexBuilder)sce.getServletContext().getAttribute(IndexBuilder.class.getName()); diff --git a/webapp/test/edu/cornell/mannlib/vitro/webapp/search/indexing/AdditionalURIsForContextNodesTest.java b/webapp/test/edu/cornell/mannlib/vitro/webapp/search/indexing/AdditionalURIsForContextNodesTest.java deleted file mode 100644 index f73674d80..000000000 --- a/webapp/test/edu/cornell/mannlib/vitro/webapp/search/indexing/AdditionalURIsForContextNodesTest.java +++ /dev/null @@ -1,670 +0,0 @@ -/* $This file is distributed under the terms of the license in /doc/license.txt$ */ - -package edu.cornell.mannlib.vitro.webapp.search.indexing; - -import static org.junit.Assert.assertTrue; - -import java.io.StringReader; -import java.util.List; - -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; - - -public class AdditionalURIsForContextNodesTest { - - @Test - public void testPositionChanges(){ - String n3 = - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \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 ); - - //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"); - assertTrue("did not find org for context node", uris.contains("http://caruso-laptop.mannlib.cornell.edu:8090/vivo/individual/n5423" )); - - //if the org changes then the person needs to be updated - uris = uriFinder.findAdditionalURIsToIndex( "http://caruso-laptop.mannlib.cornell.edu:8090/vivo/individual/n5423"); - assertTrue("did not find person for context node", uris.contains("http://caruso-laptop.mannlib.cornell.edu:8090/vivo/individual/n932" )); - } - - @Test - public void testPersonOnOrgChange() { - - String n3 ="@prefix dc: . \n" + - "@prefix rdfs: . \n" + - "@prefix swrl: . \n" + - "@prefix vitro: . \n" + - "@prefix xsd: . \n" + - "@prefix swrlb: . \n" + - "@prefix owl: . \n" + - "@prefix rdf: . \n" + - "@prefix core: . \n" + - "@prefix vivo: . \n" + - "@prefix obo: . \n" + - " " + - " \n" + - " a owl:Thing , core:Role , core:LeaderRole ; \n" + - " rdfs:label \"head\"^^xsd:string ; \n" + - " vitro:mostSpecificType \n" + - " core:LeaderRole ; \n" + - " core:dateTimeInterval \n" + - " ; \n" + - " obo:RO_0000052 ; \n" + - " core:roleContributesTo . \n" + - " \n" + - " a , owl:Thing , , core:ClinicalOrganization ; \n" + - " rdfs:label \"Organization XYZ\"^^xsd:string ; \n" + - " vitro:mostSpecificType \n" + - " core:ClinicalOrganization ; \n" + - " 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 ); - - //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(){ - String n3= - - " \"1, Test\" . \n " + -// " \"1\"^^ . \n " + -// " \"Test\"^^ . \n " + - " . \n " + - " . \n " + - " . \n " + - " . \n " + - " . \n " + - - - " \"Leader Role\"^^ . \n " + - " . \n " + - " . \n " + - " . \n " + - " . \n " + - " . \n " + - " . \n " + - - " \"University1\"^^ . \n " + - " . \n " + - " .\n " + - " . \n " + - " . \n " + - " . \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 ); - - //if the person changes then the university needs to be updated - List uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n2027"); - assertTrue("did not find org for context node", uris.contains("http://vivo.scripps.edu/individual/n7080" )); - - //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" )); - - - } - - - @Test - public void testMemberRoleChanges(){ - String n3 = - - " . \n " + - " \"2, Test\" . \n " + -// " \"2\"^^ . \n " + -// " \"Test\"^^ . \n " + - " . \n " + - " . \n " + - " . \n " + - " . \n " + - - " \"Member Role\"^^ . \n " + - " . \n " + - " . \n " + - " . \n " + - " . \n " + - " . \n " + - " . \n " + - " . \n " + - - - " \"University2\"^^ . \n " + - " . \n " + - " . \n " + - " . \n " + - " . \n " + - " . \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 ); - - //if the person changes then the university needs to be updated - List uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n4519"); - assertTrue("did not find org for context node", uris.contains("http://vivo.scripps.edu/individual/n6004" )); - - //if the university changes then the person needs to be updated - uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n6004"); - assertTrue("did not find person for context node", uris.contains("http://vivo.scripps.edu/individual/n4519" )); - - - } - - - @Test - public void testClinicalRoleChangesForProject(){ - - String n3 = - - " \"3, Test\" . \n" + -// " \"3\"^^ .\n" + -// " \"Test\"^^ . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - - " . \n" + - " \"Clinical Role\"^^ . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - - " \"Project1\"^^ . \n" + - " . \n" + - " . \n" + - " . \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 ); - - //if the person changes then the project needs to be updated - List uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n4858"); - assertTrue("did not find project for clinical role", uris.contains("http://vivo.scripps.edu/individual/n5177" )); - - //if the project changes then the person needs to be updated - uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n5177"); - assertTrue("did not find person for clinical role", uris.contains("http://vivo.scripps.edu/individual/n4858" )); - - } - - @Test - public void testClinicalRoleChangesForService(){ - - String n3 = - - " \"4, Test\" . \n" + -// " \"4\"^^ . \n" + -// " \"Test\"^^ . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - - " . \n" + - " \"Clinical Role 2\"^^ . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - - " \"Service1\"^^ . \n" + - " . \n" + - " . \n" + - " . \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 ); - - //if the person changes then the service needs to be updated - List uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n5651"); - assertTrue("did not find service for clinical role", uris.contains("http://vivo.scripps.edu/individual/n4442" )); - - //if the service changes then the person needs to be updated - uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n4442"); - assertTrue("did not find person for clinical role", uris.contains("http://vivo.scripps.edu/individual/n5651" )); - - - } - - - @Test - public void testPresenterRoleChangesForPresentation(){ - String n3 = - " . \n" + - " \"5, Test\" . \n" + -// " \"5\"^^ . \n" + -// " \"Test\"^^ . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - - " . \n" + - " \"Presenter Role\"^^ . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - - " \"Presentation 1\"^^ . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \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 ); - - //if the person changes then the presentation needs to be updated - List uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n5596"); - assertTrue("did not find service for clinical role", uris.contains("http://vivo.scripps.edu/individual/n1305" )); - - //if the presentation changes then the person needs to be updated - uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n1305"); - assertTrue("did not find person for clinical role", uris.contains("http://vivo.scripps.edu/individual/n5596" )); - - } - - - @Test - public void testPresenterRoleChangesForInvitedTalk(){ - String n3 = - - " . \n " + - " \"6, Test\" . \n " + -// " \"6\"^^ . \n " + -// " \"Test\"^^ . \n " + - " . \n " + - " . \n " + - " . \n " + - " . \n " + - - " . \n " + - " \"Presenter Role 2\"^^ . \n " + - " . \n " + - " . \n " + - " . \n " + - " . \n " + - " . \n " + - " . \n " + - - " \"Invited Talk 1\"^^ . \n " + - " . \n " + - " . \n " + - " . \n " + - " . \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 ); - - //if the person changes then the invited talk needs to be updated - List uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n4112"); - assertTrue("did not find invited talk for person", uris.contains("http://vivo.scripps.edu/individual/n4107" )); - - //if the invited talk changes then the person needs to be updated - uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n4107"); - assertTrue("did not find person for invited talk", uris.contains("http://vivo.scripps.edu/individual/n4112" )); - - } - - - @Test - public void testResearcherRoleForGrant(){ - - String n3 = - - " \"7, Test\" . \n" + -// " \"7\"^^ . \n" + -// " \"Test\"^^ . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - - " \"Researcher Role\"^^ . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - - " \"Grant1\"^^ . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \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 ); - - //if the person changes then the grant needs to be updated - List uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n4957"); - assertTrue("did not find service for clinical role", uris.contains("http://vivo.scripps.edu/individual/n4252" )); - - //if the grant changes then the person needs to be updated - uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n4252"); - assertTrue("did not find person for clinical role", uris.contains("http://vivo.scripps.edu/individual/n4957" )); - - - } - - @Test - public void testResearcherRoleForProject(){ - - String n3 = - - " \"8, Test\" . \n " + -// " \"8\"^^ . \n " + -// " \"Test\"^^ . \n " + - " . \n " + - " . \n " + - " . \n " + - " . \n " + - " . \n " + - - " \"Researcher Role 2\"^^ . \n " + - " . \n " + - " . \n " + - " . \n " + - " . \n " + - " . \n " + - " . \n " + - " . \n " + - - - " \"Project2\"^^ . \n " + - " . \n " + - " . \n " + - " . \n " + - " . \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 ); - - //if the person changes then the project needs to be updated - List uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n2029"); - assertTrue("did not find service for clinical role", uris.contains("http://vivo.scripps.edu/individual/n564" )); - - //if the project changes then the person needs to be updated - uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n564"); - assertTrue("did not find person for clinical role", uris.contains("http://vivo.scripps.edu/individual/n2029" )); - - - } - - @Test - public void testPrincipalInvestigatorRoleChanges(){ - - String n3 = - - " . \n" + - " \"8, Test\" . \n" + -// " \"8\"^^ . \n" + -// " \"Test\"^^ . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - - " \"Grant 2\"^^ . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \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 ); - - //if the person changes then the grant needs to be updated - List uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n2368"); - assertTrue("did not find grant for pi", uris.contains("http://vivo.scripps.edu/individual/n1742" )); - - //if the grant changes then the person needs to be updated - uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n1742"); - assertTrue("did not find pi for grant", uris.contains("http://vivo.scripps.edu/individual/n2368" )); - - - } - - @Test - public void testCoPrincipalInvestigatorRoleChanges(){ - - String n3 = - - " \"9, Test\" . \n" + -// " \"9\"^^ . \n" + -// " \"Test\"^^ . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - - " \"Grant 3\"^^ . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \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 ); - - //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" )); - - //if the grant changes then the copi needs to be updated - uris = uriFinder.findAdditionalURIsToIndex( "http://vivo.scripps.edu/individual/n4931"); - assertTrue("did not find co-pi for grant", uris.contains("http://vivo.scripps.edu/individual/n1373" )); - - } - - - @Test - public void testInvestigatorRoleChanges(){ - - String n3 = - - " \"10, Test\" . \n" + -// " \"10\"^^ . \n" + -// " \"Test\"^^ . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \n" + - - " \"Grant 4\"^^ . \n" + - " . \n" + - " . \n" + - " . \n" + - " . \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 ); - - //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" )); - - //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" )); - - - - } - - -}