From db6e2dd358e4ee1b2fe61eec8b64591f60054584 Mon Sep 17 00:00:00 2001 From: tworrall Date: Thu, 10 Oct 2013 10:14:55 -0400 Subject: [PATCH] VIVO-340 new custom form et al for advisee in and a refactored form for the advisor side --- .../themes/wilma/i18n/all_es.properties | 8 +- .../config/listViewConfig-adviseeIn.xml | 238 ++++++++++ .../config/listViewConfig-advisorIn.xml | 176 +++++--- .../individual/propStatement-adviseeIn.ftl | 33 ++ .../individual/propStatement-advisorIn.ftl | 4 +- .../individual/propStatement-default.ftl | 2 +- .../individual/propStatement-relatedRole.ftl | 2 +- .../edit/forms/js/adviseeRelationshipUtils.js | 114 +++++ ...ipUtils.js => advisorRelationshipUtils.js} | 16 +- .../forms/personHasAdviseeRelationship.ftl | 245 ++++++++++ ...p.ftl => personHasAdvisorRelationship.ftl} | 6 +- rdf/display/everytime/PropertyConfig.n3 | 87 +++- .../n3editing/PersonHasAdvisorsValidator.java | 95 ++++ ...PersonHasAdviseeRelationshipGenerator.java | 417 ++++++++++++++++++ ...ersonHasAdvisorRelationshipGenerator.java} | 8 +- themes/wilma/i18n/all.properties | 10 +- 16 files changed, 1357 insertions(+), 104 deletions(-) create mode 100644 productMods/config/listViewConfig-adviseeIn.xml create mode 100644 productMods/templates/freemarker/body/partials/individual/propStatement-adviseeIn.ftl create mode 100644 productMods/templates/freemarker/edit/forms/js/adviseeRelationshipUtils.js rename productMods/templates/freemarker/edit/forms/js/{advisingRelationshipUtils.js => advisorRelationshipUtils.js} (82%) create mode 100644 productMods/templates/freemarker/edit/forms/personHasAdviseeRelationship.ftl rename productMods/templates/freemarker/edit/forms/{personHasAdvisingRelationship.ftl => personHasAdvisorRelationship.ftl} (98%) create mode 100644 src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/PersonHasAdvisorsValidator.java create mode 100644 src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/PersonHasAdviseeRelationshipGenerator.java rename src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/{PersonHasAdvisingRelationshipGenerator.java => PersonHasAdvisorRelationshipGenerator.java} (98%) diff --git a/languages/example/themes/wilma/i18n/all_es.properties b/languages/example/themes/wilma/i18n/all_es.properties index 1753870f..484980a3 100644 --- a/languages/example/themes/wilma/i18n/all_es.properties +++ b/languages/example/themes/wilma/i18n/all_es.properties @@ -99,8 +99,9 @@ temporal_graph_capitalized = Gráfico temporal websites = Websites advisee_label = etiqueta aconsejado +advisor_label = etiqueta asesor candidate = candidato -advisory_label = Etiqueta de advertencia +advisingRel_label = Etiqueta de advertencia editor_abbreviated = Ed. volume_abbreviated = Ed. @@ -453,10 +454,13 @@ degree_candidacy = Candidatura Grado subject_area = Asignatura selected_subject_area = Tema Seleccionado Area selected_advisee = Aconsejado Seleccionado +selected_advisor = Asesor Seleccionado advisee_capitalized = Aconsejado +advisor_capitalized = Asesor advising_relationship_type = Asesoramiento Tipo de Relacion select_advising_relationship_type = Por favor seleccione una Asesoría Tipo de relación. -advising_relationship_entry_for = asesorar a la entrada de la relación +advisor_relationship_entry_for = la entrade para la relación asesor +advisee_relationship_entry_for = la entrade para la relación aconsejada years_participating = Años de Participación award_or_honor_for = premio o el honor de diff --git a/productMods/config/listViewConfig-adviseeIn.xml b/productMods/config/listViewConfig-adviseeIn.xml new file mode 100644 index 00000000..293bca38 --- /dev/null +++ b/productMods/config/listViewConfig-adviseeIn.xml @@ -0,0 +1,238 @@ + + + + + + + + PREFIX foaf: <http://xmlns.com/foaf/0.1/> + PREFIX afn: <http://jena.hpl.hp.com/ARQ/function#> + PREFIX bibo: <http://purl.org/ontology/bibo/> + PREFIX core: <http://vivoweb.org/ontology/core#> + PREFIX owl: <http://www.w3.org/2002/07/owl#> + PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> + PREFIX vitro: <http://vitro.mannlib.cornell.edu/ns/vitro/0.7#> + + SELECT DISTINCT ?subclass + ?adviseeRole + ?advisingRel + ?advisingRelLabel + ?localName + ?advisor + ?advisorLabel + ?degreeLabel + ?degreeAbbr + ?dateTimeStart + ?dateTimeEnd + + WHERE { + ?subject ?property ?adviseeRole . + ?adviseeRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + LET ( ?localName := afn:localname(?advisingRel) ) + OPTIONAL { ?advisingRel rdfs:label ?advisingRelLabel } + OPTIONAL { ?advisingRel core:relates ?advisor . + ?advisor a foaf:Person . + ?advisor <http://purl.obolibrary.org/obo/RO_0000053> ?advisorRole . + ?advisorRole a core:AdvisorRole . + OPTIONAL { ?advisor rdfs:label ?advisorLabel } + } + OPTIONAL { ?advisingRel core:relates ?degree . + ?degree a core:AcademicDegree . + OPTIONAL { ?degree rdfs:label ?degreeLabel } + OPTIONAL { ?degree core:abbreviation ?degreeAbbr } + } + + OPTIONAL { ?advisingRel vitro:mostSpecificType ?subclass . + ?subclass rdfs:subClassOf core:AdvisingRelationship + } + + OPTIONAL { ?advisingRel core:dateTimeInterval ?dateTimeInterval + OPTIONAL { ?dateTimeInterval core:start ?dateTimeStartValue . + ?dateTimeStartValue core:dateTime ?dateTimeStart + } + } + OPTIONAL { ?advisingRel core:dateTimeInterval ?dateTimeInterval + OPTIONAL { ?dateTimeInterval core:end ?dateTimeEndValue . + ?dateTimeEndValue core:dateTime ?dateTimeEnd + } + } + + } ORDER BY ?subclass DESC(?dateTimeEnd) + + + + PREFIX core: <http://vivoweb.org/ontology/core#> + PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> + CONSTRUCT { + ?subclass rdfs:subClassOf core:AdvisingRelationship + } WHERE { + ?subclass rdfs:subClassOf core:AdvisingRelationship + } + + + + PREFIX core: <http://vivoweb.org/ontology/core#> + PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> + CONSTRUCT { + ?subject ?property ?adviseeRole . + ?adviseeRole a core:AdviseeRole . + ?adviseeRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . + ?advisingRel ?advisingRelProperty ?advisingRelValue . + ?advisingRel rdfs:label ?advisingRelLabel . + } WHERE { + { + ?subject ?property ?adviseeRole . + ?adviseeRole a core:AdviseeRole . + ?adviseeRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship + } UNION { + ?subject ?property ?adviseeRole . + ?adviseeRole a core:AdviseeRole . + ?adviseeRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . + ?advisingRel ?advisingRelProperty ?advisingRelValue + } UNION { + ?subject ?property ?adviseeRole . + ?adviseeRole a core:AdviseeRole . + ?adviseeRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . + ?advisingRel ?advisingRelProperty ?advisingRelValue . + ?advisingRel rdfs:label ?advisingRelLabel + } + } + + + + PREFIX bibo: <http://purl.org/ontology/bibo/> + PREFIX core: <http://vivoweb.org/ontology/core#> + PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> + PREFIX foaf: <http://xmlns.com/foaf/0.1/> + + CONSTRUCT { + ?subject ?property ?adviseeRole . + ?adviseeRole a core:AdviseeRole . + ?adviseeRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . + ?advisingRel core:relates ?advisor . + ?advisor a foaf:Person . + ?advisor rdfs:label ?advisorLabel . + ?advisor <http://purl.obolibrary.org/obo/RO_0000053> ?advisorRole . + ?advisorRole a core:AdvisorRole . + ?advisingRel core:relates ?degree . + ?degree a core:AcademicDegree . + ?degree rdfs:label ?degreeLabel . + ?degree core:abbreviation ?degreeAbbr + } WHERE { + { + ?subject ?property ?adviseeRole . + ?adviseeRole a core:AdviseeRole . + ?adviseeRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . + } UNION { + ?subject ?property ?adviseeRole . + ?adviseeRole a core:AdviseeRole . + ?adviseeRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . + ?advisingRel core:relates ?advisor . + ?advisor a foaf:Person . + ?advisor <http://purl.obolibrary.org/obo/RO_0000053> ?advisorRole . + ?advisorRole a core:AdvisorRole + } UNION { + ?subject ?property ?adviseeRole . + ?adviseeRole a core:AdviseeRole . + ?adviseeRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . + ?advisingRel core:relates ?advisor . + ?advisor a foaf:Person . + ?advisor <http://purl.obolibrary.org/obo/RO_0000053> ?advisorRole . + ?advisorRole a core:AdvisorRole . + ?advisor rdfs:label ?advisorLabel + } UNION { + ?subject ?property ?adviseeRole . + ?adviseeRole a core:AdviseeRole . + ?adviseeRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . + ?advisingRel core:relates ?degree . + ?degree a core:AcademicDegree . + } UNION { + ?subject ?property ?adviseeRole . + ?adviseeRole a core:AdviseeRole . + ?adviseeRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . + ?advisingRel core:relates ?degree . + ?degree a core:AcademicDegree . + ?degree rdfs:label ?degreeLabel + } UNION { + ?subject ?property ?adviseeRole . + ?adviseeRole a core:AdviseeRole . + ?adviseeRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . + ?advisingRel core:relates ?degree . + ?degree a core:AcademicDegree . + ?degree rdfs:label ?degreeLabel . + ?degree core:abbreviation ?degreeAbbr + } + } + + + + PREFIX core: <http://vivoweb.org/ontology/core#> + CONSTRUCT { + ?subject ?property ?adviseeRole . + ?adviseeRole a core:AdviseeRole . + ?adviseeRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . + ?award core:dateTimeInterval ?dateTimeInterval . + ?dateTimeInterval core:start ?dateTimeStartValue . + ?dateTimeStartValue core:dateTime ?dateTimeStart + } WHERE { + ?subject ?property ?advisingRel . + ?adviseeRole a core:AdviseeRole . + ?adviseeRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . + ?award core:dateTimeInterval ?dateTimeInterval . + ?dateTimeInterval core:start ?dateTimeStartValue . + ?dateTimeStartValue core:dateTime ?dateTimeStart + } + + + + PREFIX core: <http://vivoweb.org/ontology/core#> + CONSTRUCT { + ?subject ?property ?adviseeRole . + ?adviseeRole a core:AdviseeRole . + ?adviseeRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . + ?award core:dateTimeInterval ?dateTimeInterval . + ?dateTimeInterval core:end ?dateTimeEndValue . + ?dateTimeEndValue core:dateTime ?dateTimeEnd + } WHERE { + ?subject ?property ?adviseeRole . + ?adviseeRole a core:AdviseeRole . + ?adviseeRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . + ?award core:dateTimeInterval ?dateTimeInterval . + ?dateTimeInterval core:end ?dateTimeEndValue . + ?dateTimeEndValue core:dateTime ?dateTimeEnd + } + + + + diff --git a/productMods/config/listViewConfig-advisorIn.xml b/productMods/config/listViewConfig-advisorIn.xml index 8fb1498c..68dcaab6 100644 --- a/productMods/config/listViewConfig-advisorIn.xml +++ b/productMods/config/listViewConfig-advisorIn.xml @@ -14,8 +14,9 @@ PREFIX vitro: <http://vitro.mannlib.cornell.edu/ns/vitro/0.7#> SELECT DISTINCT ?subclass - ?advisory - ?advisoryLabel + ?advisorRole + ?advisingRel + ?advisingRelLabel ?localName ?advisee ?adviseeLabel @@ -25,38 +26,38 @@ ?dateTimeEnd WHERE { - ?subject ?property ?advisory . - ?advisory core:relates ?advisor . - ?advisor <http://purl.obolibrary.org/obo/RO_0000053> ?advisorRole . - LET ( ?localName := afn:localname(?advisory) ) - OPTIONAL { ?advisory rdfs:label ?advisoryLabel } - OPTIONAL { ?advisory core:relates ?advisee . + ?subject ?property ?advisorRole . + ?advisorRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + LET ( ?localName := afn:localname(?advisingRel) ) + OPTIONAL { ?advisingRel rdfs:label ?advisingRelLabel } + OPTIONAL { ?advisingRel core:relates ?advisee . ?advisee a foaf:Person . - ?advisee <http://purl.obolibrary.org/obo/RO_0000053> ?adviseeRole + ?advisee <http://purl.obolibrary.org/obo/RO_0000053> ?adviseeRole . + ?adviseeRole a core:AdviseeRole . OPTIONAL { ?advisee rdfs:label ?adviseeLabel } } - OPTIONAL { ?advisory core:relates ?degree . + OPTIONAL { ?advisingRel core:relates ?degree . ?degree a core:AcademicDegree . OPTIONAL { ?degree rdfs:label ?degreeLabel } OPTIONAL { ?degree core:abbreviation ?degreeAbbr } } - OPTIONAL { ?advisory vitro:mostSpecificType ?subclass . + OPTIONAL { ?advisingRel vitro:mostSpecificType ?subclass . ?subclass rdfs:subClassOf core:AdvisingRelationship } - OPTIONAL { ?advisory core:dateTimeInterval ?dateTimeInterval + OPTIONAL { ?advisingRel core:dateTimeInterval ?dateTimeInterval OPTIONAL { ?dateTimeInterval core:start ?dateTimeStartValue . ?dateTimeStartValue core:dateTime ?dateTimeStart } } - OPTIONAL { ?advisory core:dateTimeInterval ?dateTimeInterval + OPTIONAL { ?advisingRel core:dateTimeInterval ?dateTimeInterval OPTIONAL { ?dateTimeInterval core:end ?dateTimeEndValue . ?dateTimeEndValue core:dateTime ?dateTimeEnd } } - FILTER ( ?subject != ?advisee ) } ORDER BY ?subclass DESC(?dateTimeEnd) @@ -69,48 +70,44 @@ ?subclass rdfs:subClassOf core:AdvisingRelationship } - + PREFIX core: <http://vivoweb.org/ontology/core#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> CONSTRUCT { - ?subject ?property ?advisory . - ?advisory a core:AdvisingRelationship . - ?advisory ?advisoryProperty ?advisoryValue . - ?advisory rdfs:label ?advisoryLabel . - ?advisory core:relates ?advisor . - ?advisor <http://purl.obolibrary.org/obo/RO_0000053> ?advisorRole . - ?advisorRole a core:AdvisorRole + ?subject ?property ?advisorRole . + ?advisorRole a core:AdvisorRole . + ?advisorRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . + ?advisingRel ?advisingRelProperty ?advisingRelValue . + ?advisingRel rdfs:label ?advisingRelLabel . } WHERE { { - ?subject ?property ?advisory . - ?advisory a core:AdvisingRelationship + ?subject ?property ?advisorRole . + ?advisorRole a core:AdvisorRole . + ?advisorRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship } UNION { - ?subject ?property ?advisory . - ?advisory a core:AdvisingRelationship . - ?advisory ?advisoryProperty ?advisoryValue + ?subject ?property ?advisorRole . + ?advisorRole a core:AdvisorRole . + ?advisorRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . + ?advisingRel ?advisingRelProperty ?advisingRelValue } UNION { - ?subject ?property ?advisory . - ?advisory a core:AdvisingRelationship . - ?advisory ?advisoryProperty ?advisoryValue . - ?advisory rdfs:label ?advisoryLabel - } UNION { - ?subject ?property ?advisory . - ?advisory a core:AdvisingRelationship . - ?advisory ?advisoryProperty ?advisoryValue . - ?advisory core:relates ?advisor . - ?advisor <http://purl.obolibrary.org/obo/RO_0000053> ?advisorRole . - ?advisorRole a core:AdvisorRole + ?subject ?property ?advisorRole . + ?advisorRole a core:AdvisorRole . + ?advisorRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . + ?advisingRel ?advisingRelProperty ?advisingRelValue . + ?advisingRel rdfs:label ?advisingRelLabel } } - OPTIONAL { ?advisory core:relates ?advisee . - ?advisee a foaf:Person . - ?advisee <http://purl.obolibrary.org/obo/RO_0000053> ?adviseeRole - - - PREFIX bibo: <http://purl.org/ontology/bibo/> PREFIX core: <http://vivoweb.org/ontology/core#> @@ -118,51 +115,72 @@ PREFIX foaf: <http://xmlns.com/foaf/0.1/> CONSTRUCT { - ?subject ?property ?advisory . - ?advisory a core:AdvisingRelationship . - ?advisory core:relates ?advisee . + ?subject ?property ?advisorRole . + ?advisorRole a core:AdvisorRole . + ?advisorRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . + ?advisingRel core:relates ?advisee . ?advisee a foaf:Person . ?advisee rdfs:label ?adviseeLabel . ?advisee <http://purl.obolibrary.org/obo/RO_0000053> ?adviseeRole . ?adviseeRole a core:AdviseeRole . - ?advisory core:relates ?degree . + ?advisingRel core:relates ?degree . ?degree a core:AcademicDegree . ?degree rdfs:label ?degreeLabel . ?degree core:abbreviation ?degreeAbbr } WHERE { { - ?subject ?property ?advisory . - ?advisory a core:AdvisingRelationship . + ?subject ?property ?advisorRole . + ?advisorRole a core:AdvisorRole . + ?advisorRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . } UNION { - ?subject ?property ?advisory. - ?advisory a core:AdvisingRelationship . - ?advisory core:relates ?advisee . + ?subject ?property ?advisorRole . + ?advisorRole a core:AdvisorRole . + ?advisorRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . + ?advisingRel core:relates ?advisee . ?advisee a foaf:Person . ?advisee <http://purl.obolibrary.org/obo/RO_0000053> ?adviseeRole . ?adviseeRole a core:AdviseeRole } UNION { - ?subject ?property ?advisory . - ?advisory a core:AdvisingRelationship . - ?advisory core:relates ?advisee . + ?subject ?property ?advisorRole . + ?advisorRole a core:AdvisorRole . + ?advisorRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . + ?advisingRel core:relates ?advisee . ?advisee a foaf:Person . ?advisee <http://purl.obolibrary.org/obo/RO_0000053> ?adviseeRole . ?adviseeRole a core:AdviseeRole . ?advisee rdfs:label ?adviseeLabel } UNION { - ?subject ?property ?advisory . - ?advisory a core:AdvisingRelationship . - ?advisory core:relates ?degree . + ?subject ?property ?advisorRole . + ?advisorRole a core:AdvisorRole . + ?advisorRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . + ?advisingRel core:relates ?degree . ?degree a core:AcademicDegree . } UNION { - ?subject ?property ?advisory . - ?advisory a core:AdvisingRelationship . - ?advisory core:relates ?degree . + ?subject ?property ?advisorRole . + ?advisorRole a core:AdvisorRole . + ?advisorRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . + ?advisingRel core:relates ?degree . ?degree a core:AcademicDegree . ?degree rdfs:label ?degreeLabel } UNION { - ?subject ?property ?advisory . - ?advisory a core:AdvisingRelationship . - ?advisory core:relates ?degree . + ?subject ?property ?advisorRole . + ?advisorRole a core:AdvisorRole . + ?advisorRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . + ?advisingRel core:relates ?degree . ?degree a core:AcademicDegree . ?degree rdfs:label ?degreeLabel . ?degree core:abbreviation ?degreeAbbr @@ -173,14 +191,20 @@ PREFIX core: <http://vivoweb.org/ontology/core#> CONSTRUCT { - ?subject ?property ?advisory . - ?advisory a core:AdvisingRelationship . + ?subject ?property ?advisorRole . + ?advisorRole a core:AdvisorRole . + ?advisorRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . ?award core:dateTimeInterval ?dateTimeInterval . ?dateTimeInterval core:start ?dateTimeStartValue . ?dateTimeStartValue core:dateTime ?dateTimeStart } WHERE { - ?subject ?property ?advisory . - ?advisory a core:AdvisingRelationship . + ?subject ?property ?advisingRel . + ?advisorRole a core:AdvisorRole . + ?advisorRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . ?award core:dateTimeInterval ?dateTimeInterval . ?dateTimeInterval core:start ?dateTimeStartValue . ?dateTimeStartValue core:dateTime ?dateTimeStart @@ -190,14 +214,20 @@ PREFIX core: <http://vivoweb.org/ontology/core#> CONSTRUCT { - ?subject ?property ?advisory . - ?advisory a core:AdvisingRelationship . + ?subject ?property ?advisorRole . + ?advisorRole a core:AdvisorRole . + ?advisorRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . ?award core:dateTimeInterval ?dateTimeInterval . ?dateTimeInterval core:end ?dateTimeEndValue . ?dateTimeEndValue core:dateTime ?dateTimeEnd } WHERE { - ?subject ?property ?advisory . - ?advisory a core:AdvisingRelationship . + ?subject ?property ?advisorRole . + ?advisorRole a core:AdvisorRole . + ?advisorRole core:relatedBy ?advisingRel . + ?subject core:relatedBy ?advisingRel . + ?advisingRel a core:AdvisingRelationship . ?award core:dateTimeInterval ?dateTimeInterval . ?dateTimeInterval core:end ?dateTimeEndValue . ?dateTimeEndValue core:dateTime ?dateTimeEnd diff --git a/productMods/templates/freemarker/body/partials/individual/propStatement-adviseeIn.ftl b/productMods/templates/freemarker/body/partials/individual/propStatement-adviseeIn.ftl new file mode 100644 index 00000000..745da733 --- /dev/null +++ b/productMods/templates/freemarker/body/partials/individual/propStatement-adviseeIn.ftl @@ -0,0 +1,33 @@ +<#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> + +<#-- Custom object property statement view for http://vivoweb.org/ontology/core#mailingAddress. + + This template must be self-contained and not rely on other variables set for the individual page, because it + is also used to generate the property statement during a deletion. + --> +<#import "lib-datetime.ftl" as dt> +<@showAdviseeIn statement /> + +<#-- Use a macro to keep variable assignments local; otherwise the values carry over to the + next statement --> +<#macro showAdviseeIn statement> + <#-- It's possible that adviseeIn relationships were created before the custom form and only have + an rdfs:label. So check to see if there's an advisor first. If not, just display the label. --> + <#local linkedIndividual> + <#if statement.advisor??> + <#if statement.degreeLabel?? || statement.dateTimeStart?? || statement.dateTimeEnd?? > + ${statement.advisorLabel!}, + <#else> + ${statement.advisorLabel!} + + <#if statement.degreeLabel??> + ${statement.degreeAbbr!statement.degreeLabel!} + <#if statement.dateTimeStart?? || statement.dateTimeEnd?? > ${i18n().candidate},<#else> ${i18n().candidate} + + <#elseif statement.advisingRelLabel??> + ${statement.advisingRelLabel!statement.localName} + + + + ${linkedIndividual} <@dt.yearIntervalSpan "${statement.dateTimeStart!}" "${statement.dateTimeEnd!}" /> + \ No newline at end of file diff --git a/productMods/templates/freemarker/body/partials/individual/propStatement-advisorIn.ftl b/productMods/templates/freemarker/body/partials/individual/propStatement-advisorIn.ftl index 1813bc2b..00814e57 100644 --- a/productMods/templates/freemarker/body/partials/individual/propStatement-advisorIn.ftl +++ b/productMods/templates/freemarker/body/partials/individual/propStatement-advisorIn.ftl @@ -24,8 +24,8 @@ ${statement.degreeAbbr!statement.degreeLabel!} <#if statement.dateTimeStart?? || statement.dateTimeEnd?? > ${i18n().candidate},<#else> ${i18n().candidate} - <#elseif statement.advisoryLabel??> - ${statement.advisoryLabel!statement.localName} + <#elseif statement.advisingRelLabel??> + ${statement.advisingRelLabel!statement.localName} diff --git a/productMods/templates/freemarker/body/partials/individual/propStatement-default.ftl b/productMods/templates/freemarker/body/partials/individual/propStatement-default.ftl index 9c1bda31..a32c31dc 100644 --- a/productMods/templates/freemarker/body/partials/individual/propStatement-default.ftl +++ b/productMods/templates/freemarker/body/partials/individual/propStatement-default.ftl @@ -10,7 +10,7 @@ <#macro showStatement statement> <#-- The query retrieves a type only for Persons. Post-processing will remove all but one. --> - ${statement.label!statement.localName!} ${statement.title!statement.type!} + ${statement.label!statement.localName!}  ${statement.title!statement.type!} diff --git a/productMods/templates/freemarker/body/partials/individual/propStatement-relatedRole.ftl b/productMods/templates/freemarker/body/partials/individual/propStatement-relatedRole.ftl index ac0a470c..e11838f0 100644 --- a/productMods/templates/freemarker/body/partials/individual/propStatement-relatedRole.ftl +++ b/productMods/templates/freemarker/body/partials/individual/propStatement-relatedRole.ftl @@ -49,6 +49,6 @@ - ${linkedIndividual} ${roleLabel!} <@dt.yearIntervalSpan "${statement.dateTimeStart!}" "${statement.dateTimeEnd!}" /> + ${linkedIndividual} ${roleLabel!} <@dt.yearIntervalSpan "${statement.dateTimeStart!}" "${statement.dateTimeEnd!}" /> diff --git a/productMods/templates/freemarker/edit/forms/js/adviseeRelationshipUtils.js b/productMods/templates/freemarker/edit/forms/js/adviseeRelationshipUtils.js new file mode 100644 index 00000000..1ec2ab53 --- /dev/null +++ b/productMods/templates/freemarker/edit/forms/js/adviseeRelationshipUtils.js @@ -0,0 +1,114 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +var adviseeRelUtils = { + + onLoad: function(subject,blankSentinel) { + this.subjName = ''; + if ( subject ) { this.subjName = subject; } + + this.sentinel = ''; + if ( blankSentinel ) { this.sentinel = blankSentinel; } + + this.initObjectReferences(); + this.bindEventListeners(); + + $.extend(this, vitro.customFormUtils); + $.extend(this, i18nStrings); + + if ( this.findValidationErrors() ) { + this.resetLastNameLabel(); + } + }, + + initObjectReferences: function() { + + this.form = $('#personHasAdvisingRelationship'); + this.adRelshiplabel = $('#advisingRelLabel'); + this.advisor = $('#advisor'); + this.subjArea = $('#SubjectArea'); + this.firstName = $('#firstName'); + this.lastName = $('#lastName'); + this.advisorUri = $('#advisorUri'); + this.subjAreaUri = $('#subjAreaUri'); + this.saveAdvisorLabel = $('#saveAdvisorLabel'); + this.advisorAcSelection = $('div#advisorAcSelection'); + + + // may not need this + this.firstName.attr('disabled', ''); + + }, + + bindEventListeners: function() { + this.idCache = {}; + + // we want to use the advisor label in the relationship label. + // since the former gets cleared on submit in some cases, store + // the value in a hidden field and map to relationship label + this.advisor.change( function(objEvent) { + window.setTimeout('adviseeRelUtils.mapAdvisorValue()', 180); + }); + this.advisor.blur( function(objEvent) { + window.setTimeout('adviseeRelUtils.mapAdvisorValue()', 180); + }); + + + this.form.submit(function() { + adviseeRelUtils.resolveAdvisorNames(); + adviseeRelUtils.buildAdvisingRelLabel(); + alert(this.adRelshiplabel.val()); + return false; + }); + }, + + mapAdvisorValue: function() { + if ( this.advisorAcSelection.attr('class').indexOf('userSelected') != -1 ) { + this.saveAdvisorLabel.val(this.advisor.val()); + } + }, + resolveAdvisorNames: function() { + var firstName, + lastName, + name; + + // If selecting an existing person, don't submit name fields + if (this.advisorUri.val() == '' || this.advisorUri.val() == this.sentinel ) { + firstName = this.firstName.val(); + lastName = this.advisor.val(); + + name = lastName; + if (firstName) { + name += ', ' + firstName; + } + this.advisor.val(name); + this.lastName.val(lastName); + } + else { + this.firstName.attr('disabled', 'disabled'); + this.lastName.attr('disabled', 'disabled'); + } + + }, + + buildAdvisingRelLabel: function() { + alert("here"); + if ( this.advisor.val() != "" ) { + this.adRelshiplabel.val(this.advisor.val() + " " + adviseeRelUtils.advisingString + " " + this.subjName); + } + else if ( this.saveAdvisorLabel.val() != "" ){ + this.adRelshiplabel.val(this.saveAdvisorLabel.val() + " " + adviseeRelUtils.advisingString + " " + this.subjName); + } + else { + this.adRelshiplabel.val(this.subjName + " " + adviseeRelUtils.advisingRelationshipString); + } + }, + + resetLastNameLabel: function() { + var indx = this.advisor.val().indexOf(", "); + if ( indx != -1 ) { + var temp = this.advisor.val().substr(0,indx); + this.advisor.val(temp); + } + } + +} diff --git a/productMods/templates/freemarker/edit/forms/js/advisingRelationshipUtils.js b/productMods/templates/freemarker/edit/forms/js/advisorRelationshipUtils.js similarity index 82% rename from productMods/templates/freemarker/edit/forms/js/advisingRelationshipUtils.js rename to productMods/templates/freemarker/edit/forms/js/advisorRelationshipUtils.js index a7ad71ef..efa89fe4 100644 --- a/productMods/templates/freemarker/edit/forms/js/advisingRelationshipUtils.js +++ b/productMods/templates/freemarker/edit/forms/js/advisorRelationshipUtils.js @@ -1,6 +1,6 @@ /* $This file is distributed under the terms of the license in /doc/license.txt$ */ -var advisingRelUtils = { +var advisorRelUtils = { onLoad: function(subject,blankSentinel) { this.subjName = ''; @@ -46,16 +46,16 @@ var advisingRelUtils = { // since the former gets cleared on submit in some cases, store // the value in a hidden field and map to relationship label this.advisee.change( function(objEvent) { - window.setTimeout('advisingRelUtils.mapAdviseeValue()', 180); + window.setTimeout('advisorRelUtils.mapAdviseeValue()', 180); }); this.advisee.blur( function(objEvent) { - window.setTimeout('advisingRelUtils.mapAdviseeValue()', 180); + window.setTimeout('advisorRelUtils.mapAdviseeValue()', 180); }); this.form.submit(function() { - advisingRelUtils.resolveAdviseeNames(); - advisingRelUtils.buildAdvisingRelLabel(); + advisorRelUtils.resolveAdviseeNames(); + advisorRelUtils.buildAdvisingRelLabel(); }); }, @@ -90,13 +90,13 @@ var advisingRelUtils = { buildAdvisingRelLabel: function() { if ( this.advisee.val() != "" ) { - this.adRelshiplabel.val(this.subjName + " " + advisingRelUtils.advisingString + " " + this.advisee.val()); + this.adRelshiplabel.val(this.subjName + " " + advisorRelUtils.advisingString + " " + this.advisee.val()); } else if ( this.saveAdviseeLabel.val() != "" ){ - this.adRelshiplabel.val(this.subjName + " " + advisingRelUtils.advisingString + " " + this.saveAdviseeLabel.val()); + this.adRelshiplabel.val(this.subjName + " " + advisorRelUtils.advisingString + " " + this.saveAdviseeLabel.val()); } else { - this.adRelshiplabel.val(this.subjName + " " + advisingRelUtils.advisingRelationshipString); + this.adRelshiplabel.val(this.subjName + " " + advisorRelUtils.advisingRelationshipString); } }, diff --git a/productMods/templates/freemarker/edit/forms/personHasAdviseeRelationship.ftl b/productMods/templates/freemarker/edit/forms/personHasAdviseeRelationship.ftl new file mode 100644 index 00000000..1a281d84 --- /dev/null +++ b/productMods/templates/freemarker/edit/forms/personHasAdviseeRelationship.ftl @@ -0,0 +1,245 @@ +<#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> +<#--The blank sentinel indicates what value should be put in a URI when no autocomplete result has been selected. +If the blank value is non-null or non-empty, n3 editing for an existing object will remove the original relationship +if nothing is selected for that object--> + +<#assign blankSentinel = "" /> +<#if editConfigurationConstants?has_content && editConfigurationConstants?keys?seq_contains("BLANK_SENTINEL")> + <#assign blankSentinel = editConfigurationConstants["BLANK_SENTINEL"] /> + + +<#--This flag is for clearing the label field on submission for an existing object being selected from autocomplete. +Set this flag on the input acUriReceiver where you would like this behavior to occur. --> +<#assign flagClearLabelForExisting = "flagClearLabelForExisting" /> + +<#import "lib-vivo-form.ftl" as lvf> + +<#--Retrieve certain edit configuration information--> +<#if editConfiguration.objectUri?has_content> + <#assign editMode = "edit"> +<#else> + <#assign editMode = "add"> + + +<#assign htmlForElements = editConfiguration.pageData.htmlForElements /> + +<#--Retrieve variables needed--> +<#assign advisorValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "existingAdvisor") /> +<#assign advisorLabelValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "advisorLabel") /> +<#assign advisorLabelDisplayValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "advisorLabelDisplay") /> +<#assign firstNameValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "firstName") /> +<#assign lastNameValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "lastName") /> +<#assign advisingRelTypeValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "advisingRelType") /> +<#assign advisingRelLabelValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "advisingRelLabel") /> +<#assign subjAreaValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "existingSubjArea") /> +<#assign subjAreaLabelValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "subjAreaLabel") /> +<#assign subjAreaLabelDisplayValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "subjAreaLabelDisplay") /> +<#assign degreeValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "degree") /> +<#assign acFilterForIndividuals = "['" + editConfiguration.subjectUri + "']" /> +<#assign sparqlForAcFilter = editConfiguration.pageData.sparqlForAcFilter /> + +<#--If edit submission exists, then retrieve validation errors if they exist--> +<#if editSubmission?has_content && editSubmission.submissionExists = true && editSubmission.validationErrors?has_content> + <#assign submissionErrors = editSubmission.validationErrors/> + + +<#if editMode == "edit"> + <#assign titleVerb="${i18n().edit_capitalized}"> + <#assign submitButtonText="${i18n().save_changes}"> + <#assign disabledVal="disabled"> +<#else> + <#assign titleVerb="${i18n().create_capitalized}"> + <#assign submitButtonText="${i18n().create_entry}"> + <#assign disabledVal=""/> + + +<#assign requiredHint = " *" /> +<#assign yearHint = "(${i18n().year_hint_format})" /> + +

${titleVerb} ${i18n().advisee_relationship_entry_for} ${editConfiguration.subjectName}

+ +<#--Display error messages if any--> +<#if submissionErrors?has_content> + <#if advisorLabelDisplayValue?has_content > + <#assign advisorLabelValue = advisorLabelDisplayValue /> + + <#if subjAreaLabelDisplayValue?has_content > + <#assign subjAreaLabelValue = subjAreaLabelDisplayValue /> + + + + + +<@lvf.unsupportedBrowser urls.base /> + +
+ +
+

+ + <#assign advisingRelTypeOpts = editConfiguration.pageData.advisingRelType /> + <#if editMode == "edit"> + <#list advisingRelTypeOpts?keys as key> + <#if advisingRelTypeValue = key > + ${advisingRelTypeOpts[key]} + + + + <#else> + + +

+

+ + +
+ + +

+ +
+

+

+ +
+ +

+ + + +

+
+

+ + + (${i18n().verify_match_capitalized} ${i18n().or} + ${i18n().change_selection}) +

+ <#--When no autocomplete value is selected, the value of this field will be set to the 'blank sentinel'. + When an autocomplete value is selected, the 'flagClearLabelField' attribute will clear out the associated label input. --> + +
+ +

+ + + <#assign degreeOpts = editConfiguration.pageData.degree /> + +

+ +

+

${i18n().years_participating}

+

+ <#--Need to draw edit elements for dates here--> + <#assign htmlForElements = editConfiguration.pageData.htmlForElements /> + <#if htmlForElements?keys?seq_contains("startField")> + + ${htmlForElements["startField"]} ${yearHint} + +
+ <#if htmlForElements?keys?seq_contains("endField")> + + ${htmlForElements["endField"]} ${yearHint} + + <#--End draw elements--> + + + + +

+ ${i18n().or} + ${i18n().cancel_link} +

+ +

* ${i18n().required_fields}

+ +
+ +
+<#assign sparqlQueryUrl = "${urls.base}/ajax/sparqlQuery" > +<#assign doNotRemoveOriginalObject = "true" /> + + + + +${stylesheets.add('')} +${stylesheets.add('')} +${stylesheets.add('')} + +${scripts.add('', + '', + '', + '', + '', + '', + '')} + + diff --git a/productMods/templates/freemarker/edit/forms/personHasAdvisingRelationship.ftl b/productMods/templates/freemarker/edit/forms/personHasAdvisorRelationship.ftl similarity index 98% rename from productMods/templates/freemarker/edit/forms/personHasAdvisingRelationship.ftl rename to productMods/templates/freemarker/edit/forms/personHasAdvisorRelationship.ftl index a07281a0..e1e3d332 100644 --- a/productMods/templates/freemarker/edit/forms/personHasAdvisingRelationship.ftl +++ b/productMods/templates/freemarker/edit/forms/personHasAdvisorRelationship.ftl @@ -56,7 +56,7 @@ Set this flag on the input acUriReceiver where you would like this behavior to o <#assign requiredHint = " *" /> <#assign yearHint = "(${i18n().year_hint_format})" /> -

${titleVerb} ${i18n().advising_relationship_entry_for} ${editConfiguration.subjectName}

+

${titleVerb} ${i18n().advisor_relationship_entry_for} ${editConfiguration.subjectName}

<#--Display error messages if any--> <#if submissionErrors?has_content> @@ -226,7 +226,7 @@ var i18nStrings = { @@ -236,7 +236,7 @@ ${stylesheets.add('', '', - '', + '', '', '', '', diff --git a/rdf/display/everytime/PropertyConfig.n3 b/rdf/display/everytime/PropertyConfig.n3 index b9867932..a98b2a32 100644 --- a/rdf/display/everytime/PropertyConfig.n3 +++ b/rdf/display/everytime/PropertyConfig.n3 @@ -315,11 +315,26 @@ local:educationalTrainingConfig a :ObjectPropertyDisplayConfig ; vitro:customEntryFormAnnot "edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.PersonHasEducationalTraining"^^ ; :propertyGroup . +local:adviseeRoleContext a :ConfigContext ; + :hasConfiguration local:adviseeRoleConfig ; + :configContextFor ; + :qualifiedByDomain ; + :qualifiedBy . + +local:adviseeRoleConfig a :ObjectPropertyDisplayConfig ; + :listViewConfigFile "listViewConfig-adviseeIn.xml"^^xsd:string ; + :displayName "advisee in" ; + vitro:displayRankAnnot 30; + vitro:hiddenFromDisplayBelowRoleLevelAnnot role:public ; + vitro:prohibitedFromUpdateBelowRoleLevelAnnot role:public ; + vitro:customEntryFormAnnot "edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.PersonHasAdviseeRelationshipGenerator"^^ ; + :propertyGroup . + local:advisorRoleContext a :ConfigContext ; :hasConfiguration local:advisorRoleConfig ; - :configContextFor ; + :configContextFor ; :qualifiedByDomain ; - :qualifiedBy . + :qualifiedBy . local:advisorRoleConfig a :ObjectPropertyDisplayConfig ; :listViewConfigFile "listViewConfig-advisorIn.xml"^^xsd:string ; @@ -327,13 +342,13 @@ local:advisorRoleConfig a :ObjectPropertyDisplayConfig ; vitro:displayRankAnnot 40; vitro:hiddenFromDisplayBelowRoleLevelAnnot role:public ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot role:public ; - vitro:customEntryFormAnnot "edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.PersonHasAdvisingRelationshipGenerator"^^ ; + vitro:customEntryFormAnnot "edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.PersonHasAdvisorRelationshipGenerator"^^ ; :propertyGroup . local:informationResourceInAuthorshipContext a :ConfigContext ; :hasConfiguration local:informationResourceInAuthorshipConfig ; :configContextFor ; - :qualifiedByDomain ; + :qualifiedByDomain ; :qualifiedBy . local:informationResourceInAuthorshipConfig a :ObjectPropertyDisplayConfig ; @@ -511,13 +526,13 @@ local:inEventSeriesConfig a :ObjectPropertyDisplayConfig ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot role:public ; :propertyGroup . -local:awardReceiptsContext a :ConfigContext ; - :hasConfiguration local:awardReceiptsConfig ; +local:awardOrHonorReceiptsContext a :ConfigContext ; + :hasConfiguration local:awardOrHonorReceiptsConfig ; :configContextFor ; :qualifiedByDomain ; :qualifiedBy . -local:awardReceiptsConfig a :ObjectPropertyDisplayConfig ; +local:awardOrHonorReceiptsConfig a :ObjectPropertyDisplayConfig ; :listViewConfigFile "listViewConfig-default.xml"^^xsd:string ; :displayName "receipts" ; vitro:displayRankAnnot 3; @@ -525,3 +540,61 @@ local:awardReceiptsConfig a :ObjectPropertyDisplayConfig ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot role:public ; :propertyGroup . +local:awardReceiptsContext a :ConfigContext ; + :hasConfiguration local:awardReceiptsConfig ; + :configContextFor ; + :qualifiedByDomain ; + :qualifiedBy . + +local:awardReceiptsConfig a :ObjectPropertyDisplayConfig ; + :listViewConfigFile "listViewConfig-default.xml"^^xsd:string ; + :displayName "receipt of" ; + vitro:displayRankAnnot 1; + vitro:hiddenFromDisplayBelowRoleLevelAnnot role:public ; + vitro:prohibitedFromUpdateBelowRoleLevelAnnot role:public ; + :propertyGroup . + +local:awardReceiptsAwardForContext a :ConfigContext ; + :hasConfiguration local:awardReceiptsAwardForConfig ; + :configContextFor ; + :qualifiedByDomain ; + :qualifiedBy . + +local:awardReceiptsAwardForConfig a :ObjectPropertyDisplayConfig ; + :listViewConfigFile "listViewConfig-default.xml"^^xsd:string ; + :displayName "award or honor for" ; + vitro:displayRankAnnot 2; + vitro:hiddenFromDisplayBelowRoleLevelAnnot role:public ; + vitro:prohibitedFromUpdateBelowRoleLevelAnnot role:public ; + :propertyGroup . + +### roles using the BFO_0000055 property ### + +local:bfo_0000055Context a :ConfigContext ; + :hasConfiguration local:bfo_0000055Config ; + :configContextFor ; + :qualifiedBy . + +local:bfo_0000055Config a :ObjectPropertyDisplayConfig ; + :listViewConfigFile "listViewConfig-relatedRole.xml"^^xsd:string ; + :displayName "participant" ; + vitro:displayRankAnnot 1; + vitro:hiddenFromDisplayBelowRoleLevelAnnot role:public ; + vitro:prohibitedFromUpdateBelowRoleLevelAnnot role:public ; + :propertyGroup . + +### grant roles using the core:relates property ### + +local:grantRelatesContext a :ConfigContext ; + :hasConfiguration local:grantRelatesConfig ; + :configContextFor ; + :qualifiedByDomain ; + :qualifiedBy . + +local:grantRelatesConfig a :ObjectPropertyDisplayConfig ; + :listViewConfigFile "listViewConfig-relatedRole.xml"^^xsd:string ; + :displayName "contributor" ; + vitro:displayRankAnnot 1; + vitro:hiddenFromDisplayBelowRoleLevelAnnot role:public ; + vitro:prohibitedFromUpdateBelowRoleLevelAnnot role:public ; + :propertyGroup . diff --git a/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/PersonHasAdvisorsValidator.java b/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/PersonHasAdvisorsValidator.java new file mode 100644 index 00000000..b13aa7c0 --- /dev/null +++ b/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/PersonHasAdvisorsValidator.java @@ -0,0 +1,95 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.edit.n3editing; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.hp.hpl.jena.rdf.model.Literal; + +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.N3ValidatorVTwo; +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.MultiValueEditSubmission; + +public class PersonHasAdvisorsValidator implements N3ValidatorVTwo { + + private static String MISSING_FIRST_NAME_ERROR = "You must enter a value in the First Name field."; + private static String MISSING_LAST_NAME_ERROR = "You must enter a value in the Last Name field."; + private static String MALFORMED_LAST_NAME_ERROR = "The last name field may not contain a comma. Please enter first name in First Name field."; + + @Override + public Map validate(EditConfigurationVTwo editConfig, + MultiValueEditSubmission editSub) { + Map> urisFromForm = editSub.getUrisFromForm(); + Map> literalsFromForm = editSub.getLiteralsFromForm(); + + Map errors = new HashMap(); + + List adviseeUri = urisFromForm.get("existingAdvisor"); + if (allListElementsEmpty(adviseeUri) || adviseeUri.contains(">SUBMITTED VALUE WAS BLANK<")) { + adviseeUri = null; + } + // If there's an adviseeUri, then we're done. The firstName and lastName fields are + // disabled and so don't get submitted. + if (adviseeUri != null) { + return null; + } + + //Expecting only one first name in this case + //To Do: update logic if multiple first names considered + Literal firstName = null; + List firstNameList = literalsFromForm.get("firstName"); + if(firstNameList != null && firstNameList.size() > 0) { + firstName = firstNameList.get(0); + } + if( firstName != null && + firstName.getLexicalForm() != null && + "".equals(firstName.getLexicalForm()) ) + firstName = null; + + + List lastNameList = literalsFromForm.get("lastName"); + Literal lastName = null; + if(lastNameList != null && lastNameList.size() > 0) { + lastName = lastNameList.get(0); + } + String lastNameValue = ""; + if (lastName != null) { + lastNameValue = lastName.getLexicalForm(); + if( "".equals(lastNameValue) ) { + lastName = null; + } + } + + if (lastName == null) { + errors.put("lastName", MISSING_LAST_NAME_ERROR); + // Don't reject space in the last name: de Vries, etc. + } else if (lastNameValue.contains(",")) { + errors.put("lastName", MALFORMED_LAST_NAME_ERROR); + } + + if (firstName == null) { + errors.put("firstName", MISSING_FIRST_NAME_ERROR); + } + + return errors.size() != 0 ? errors : null; + } + + private boolean allListElementsEmpty(List checkList) { + if(checkList == null) + return true; + if(checkList.isEmpty()) { + return true; + } + boolean allEmpty = true; + for(String s: checkList) { + if(s.length() != 0){ + allEmpty = false; + break; + } + } + return allEmpty; + } + +} diff --git a/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/PersonHasAdviseeRelationshipGenerator.java b/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/PersonHasAdviseeRelationshipGenerator.java new file mode 100644 index 00000000..e3690e90 --- /dev/null +++ b/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/PersonHasAdviseeRelationshipGenerator.java @@ -0,0 +1,417 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators; + +import java.util.Arrays; +import java.util.HashMap; + +import javax.servlet.http.HttpSession; + +import com.hp.hpl.jena.vocabulary.XSD; + +import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; +import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.PersonHasAdvisorsValidator; +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.DateTimeIntervalValidationVTwo; +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.DateTimeWithPrecisionVTwo; +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUtils; +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ChildVClassesWithParent; +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo; +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.IndividualsViaVClassOptions; +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation; + +public class PersonHasAdviseeRelationshipGenerator extends VivoBaseGenerator implements + EditConfigurationGenerator { + + final static String advisingRelClass = vivoCore + "AdvisingRelationship"; + final static String subjAreaClass = "http://www.w3.org/2004/02/skos/core#Concept"; + final static String degreeClass = vivoCore+"AcademicDegree"; + final static String advisorClass = foaf + "Person"; + final static String advisorRoleClass = "http://vivoweb.org/ontology/core#AdvisorRole"; + final static String adviseeRoleClass = "http://vivoweb.org/ontology/core#AdviseeRole"; + final static String advisingRelToInterval = vivoCore + "dateTimeInterval"; + final static String intervalType = vivoCore + "DateTimeInterval"; + final static String intervalToStart = vivoCore + "start"; + final static String intervalToEnd = vivoCore + "end"; + final static String dateTimeValueType = vivoCore + "DateTimeValue"; + final static String dateTimeValue = vivoCore + "dateTime"; + final static String dateTimePrecision = vivoCore + "dateTimePrecision"; + + public PersonHasAdviseeRelationshipGenerator() {} + + @Override + public EditConfigurationVTwo getEditConfiguration(VitroRequest vreq, + HttpSession session) throws Exception { + + EditConfigurationVTwo conf = new EditConfigurationVTwo(); + + initBasics(conf, vreq); + initPropertyParameters(vreq, session, conf); + initObjectPropForm(conf, vreq); + + conf.setTemplate("personHasAdviseeRelationship.ftl"); + + conf.setVarNameForSubject("person"); + conf.setVarNameForPredicate("predicate"); + conf.setVarNameForObject("adviseeRole"); + + conf.setN3Required( Arrays.asList( n3ForNewAdvisingRelationship, + advisingRelLabelAssertion, + advisingRelTypeAssertion ) ); + conf.setN3Optional( Arrays.asList( n3ForNewAdvisorAssertion, + n3ForExistingAdvisorAssertion, + degreeAssertion, + firstNameAssertion, + lastNameAssertion, + n3ForExistingSubjAreaAssertion, //relationship to existing subject area + n3ForNewSubjAreaAssertion, //this will include all the new information that needs to be captured + n3ForStart, + n3ForEnd ) ); + + conf.addNewResource("advisingRelationship", DEFAULT_NS_FOR_NEW_RESOURCE); + conf.addNewResource("newAdvisor", DEFAULT_NS_FOR_NEW_RESOURCE); + conf.addNewResource("vcardAdvisor", DEFAULT_NS_FOR_NEW_RESOURCE); + conf.addNewResource("vcardName", DEFAULT_NS_FOR_NEW_RESOURCE); + conf.addNewResource("adviseeRole", DEFAULT_NS_FOR_NEW_RESOURCE); + conf.addNewResource("advisorRole", DEFAULT_NS_FOR_NEW_RESOURCE); + conf.addNewResource("newSubjArea", DEFAULT_NS_FOR_NEW_RESOURCE); + conf.addNewResource("intervalNode", DEFAULT_NS_FOR_NEW_RESOURCE); + conf.addNewResource("startNode", DEFAULT_NS_FOR_NEW_RESOURCE); + conf.addNewResource("endNode", DEFAULT_NS_FOR_NEW_RESOURCE); + + //uris in scope: none + //literals in scope: none + + conf.setUrisOnform(Arrays.asList("advisingRelType", "existingSubjArea", "degree", "existingAdvisor")); + conf.setLiteralsOnForm(Arrays.asList("advisingRelLabel", "subjAreaLabel", "advisorLabel", "firstName", "lastName", "subjAreaLabelDisplay", "advisorLabelDisplay" )); + + conf.addSparqlForExistingLiteral("advisingRelLabel", advisingRelLabelQuery); + conf.addSparqlForExistingLiteral("advisorLabel", advisorLabelQuery); + conf.addSparqlForExistingLiteral("subjAreaLabel", subjAreaLabelQuery); + conf.addSparqlForExistingLiteral("startField-value", existingStartDateQuery); + conf.addSparqlForExistingLiteral("endField-value", existingEndDateQuery); + + conf.addSparqlForExistingUris("advisingRelType", advisingRelTypeQuery); + conf.addSparqlForExistingUris("adviseeRole", existingAdviseeRoleQuery); + conf.addSparqlForExistingUris("advisorRole", existingAdvisorRoleQuery); + conf.addSparqlForExistingUris("existingSubjArea", subjAreaQuery); + conf.addSparqlForExistingUris("existingAdvisor", advisorQuery); + conf.addSparqlForExistingUris("degree", degreeQuery); + conf.addSparqlForExistingUris("intervalNode",existingIntervalNodeQuery); + conf.addSparqlForExistingUris("startNode", existingStartNodeQuery); + conf.addSparqlForExistingUris("endNode", existingEndNodeQuery); + conf.addSparqlForExistingUris("startField-precision", existingStartPrecisionQuery); + conf.addSparqlForExistingUris("endField-precision", existingEndPrecisionQuery); + + conf.addField( new FieldVTwo(). + setName("advisingRelType"). + setValidators( list("nonempty") ). + setOptions( new ChildVClassesWithParent(advisingRelClass)) + ); + + conf.addField( new FieldVTwo(). + setName("advisingRelLabel"). + setRangeDatatypeUri(XSD.xstring.toString() ). + setValidators( list("datatype:" + XSD.xstring.toString()) ) + ); + + conf.addField( new FieldVTwo(). + setName("firstName"). + setRangeDatatypeUri(XSD.xstring.toString() ). + setValidators( list("datatype:" + XSD.xstring.toString()) ) + ); + + conf.addField( new FieldVTwo(). + setName("lastName"). + setRangeDatatypeUri(XSD.xstring.toString() ). + setValidators( list("datatype:" + XSD.xstring.toString()) ) + ); + + conf.addField( new FieldVTwo(). // options set by auto complete JS + setName("existingSubjArea") + ); + + conf.addField( new FieldVTwo(). + setName("subjAreaLabel"). + setRangeDatatypeUri(XSD.xstring.toString() ). + setValidators( list("datatype:" + XSD.xstring.toString()) ) + ); + + conf.addField( new FieldVTwo(). + setName("degree"). + setOptions( + new IndividualsViaVClassOptions(degreeClass)) + ); + + conf.addField( new FieldVTwo(). // options set by auto complete JS + setName("existingAdvisor") + ); + + conf.addField( new FieldVTwo(). + setName("advisorLabel"). + setRangeDatatypeUri(XSD.xstring.toString() ). + setValidators( list("datatype:" + XSD.xstring.toString()) ) + ); + + conf.addField( new FieldVTwo(). + setName("subjAreaLabelDisplay"). + setRangeDatatypeUri(XSD.xstring.toString() ). + setValidators( list("datatype:" + XSD.xstring.toString()) ) + ); + + conf.addField( new FieldVTwo(). + setName("advisorLabelDisplay"). + setRangeDatatypeUri(XSD.xstring.toString() ). + setValidators( list("datatype:" + XSD.xstring.toString()) ) + ); + + conf.addField( new FieldVTwo().setName("startField"). + setEditElement( + new DateTimeWithPrecisionVTwo(null, + VitroVocabulary.Precision.YEAR.uri(), + VitroVocabulary.Precision.NONE.uri()) + ) + ); + + conf.addField( new FieldVTwo().setName("endField"). + setEditElement( + new DateTimeWithPrecisionVTwo(null, + VitroVocabulary.Precision.YEAR.uri(), + VitroVocabulary.Precision.NONE.uri()) + ) + ); + + conf.addValidator(new DateTimeIntervalValidationVTwo("startField","endField")); + conf.addValidator(new AntiXssValidation()); + conf.addValidator(new PersonHasAdvisorsValidator()); + addFormSpecificData(conf, vreq); + + prepare(vreq, conf); + return conf; + } + + /* N3 assertions */ + + final static String n3ForNewAdvisingRelationship = + "@prefix vivo: <" + vivoCore + "> . \n\n" + + "?person ?advisingRelationship . \n" + + "?advisingRelationship a <" + advisingRelClass + "> . \n" + + "?advisingRelationship ?person . \n" + + "?advisingRelationship ?adviseeRole . \n" + + "?adviseeRole a <" + adviseeRoleClass + "> . \n" + + "?adviseeRole ?advisingRelationship . \n" + + "?person ?adviseeRole . \n" + + "?adviseeRole ?person . "; + + final static String advisingRelLabelAssertion = + "?advisingRelationship <"+ label + "> ?advisingRelLabel ."; + + final static String advisingRelTypeAssertion = + "?advisingRelationship a ?advisingRelType ."; + + final static String n3ForNewAdvisorAssertion = + "?advisingRelationship ?newAdvisor . \n" + + "?newAdvisor ?advisingRelationship . \n" + + "?newAdvisor <" + label + "> ?advisorLabel . \n" + + "?newAdvisor a <" + advisorClass + "> . \n" + + "?newAdvisor ?advisorRole . \n" + + "?advisorRole ?newAdvisor . \n" + + "?advisorRole a <" + advisorRoleClass + "> . \n" + + "?advisingRelationship ?advisorRole . \n" + + "?advisorRole ?advisingRelationship . "; + + final static String n3ForExistingAdvisorAssertion = + "?advisingRelationship ?existingAdvisor . \n" + + "?existingAdvisor ?advisingRelationship . \n" + + "?existingAdvisor ?advisorRole . \n" + + "?advisorRole ?existingAdvisor . \n" + + "?advisorRole a <" + advisorRoleClass + "> . \n" + + "?advisingRelationship ?advisorRole . \n" + + "?advisorRole ?advisingRelationship . "; + + final static String firstNameAssertion = + "@prefix vcard: . \n" + + "?newAdvisor ?vcardAdvisor . \n" + + "?vcardAdvisor ?newAdvisor . \n" + + "?vcardAdvisor a . \n" + + "?vcardAdvisor vcard:hasName ?vcardName . \n" + + "?vcardName a . \n" + + "?vcardName vcard:givenName ?firstName ."; + + final static String lastNameAssertion = + "@prefix vcard: . \n" + + "?newAdvisor ?vcardAdvisor . \n" + + "?vcardAdvisor ?newAdvisor . \n" + + "?vcardAdvisor a . \n" + + "?vcardAdvisor vcard:hasName ?vcardName . \n" + + "?vcardName a . \n" + + "?vcardName vcard:familyName ?lastName ."; + + final static String degreeAssertion = + "?advisingRelationship ?degree . \n" + + "?degree ?advisingRelationship . "; + + //This is for an existing subject area + //Where we only need the existing subject area label + final static String n3ForExistingSubjAreaAssertion = + "?advisingRelationship ?existingSubjArea . \n" + + "?existingSubjArea ?advisingRelationship . "; + //For new subject area, we include all new information + //new subject area should always be a new resource + //and the following should only get evaluated + //when there is something in the label + + final static String n3ForNewSubjAreaAssertion = + "?advisingRelationship ?newSubjArea . \n" + + "?newSubjArea ?advisingRelationship . \n" + + "?newSubjArea <"+ label + "> ?subjAreaLabel . \n" + + "?newSubjArea a <" + subjAreaClass + "> . "; + + final static String n3ForStart = + "?advisingRelationship <" + advisingRelToInterval + "> ?intervalNode . \n" + + "?intervalNode a <" + intervalType + "> . \n" + + "?intervalNode <" + intervalToStart + "> ?startNode . \n" + + "?startNode a <" + dateTimeValueType + "> . \n" + + "?startNode <" + dateTimeValue + "> ?startField-value . \n" + + "?startNode <" + dateTimePrecision + "> ?startField-precision . \n"; + + final static String n3ForEnd = + "?advisingRelationship <" + advisingRelToInterval + "> ?intervalNode . \n" + + "?intervalNode a <" + intervalType + "> . \n" + + "?intervalNode <" + intervalToEnd + "> ?endNode . \n" + + "?endNode a <" + dateTimeValueType + "> . \n" + + "?endNode <" + dateTimeValue + "> ?endField-value . \n" + + "?endNode <" + dateTimePrecision + "> ?endField-precision . \n"; + + /* Queries for editing an existing entry */ + + final static String advisingRelTypeQuery = + "PREFIX vitro: <" + VitroVocabulary.vitroURI + "> \n" + + "SELECT ?advisingRelType WHERE { \n" + + " ?advisingRelationship vitro:mostSpecificType ?advisingRelType . \n" + + "}"; + + final static String advisorQuery = + "SELECT ?existingAdvisor WHERE { \n" + + " ?advisingRelationship ?existingAdvisor . \n" + + " ?existingAdvisor a <" + advisorClass + "> . \n" + + " FILTER (?person != ?existingAdvisor) . \n" + + "}"; + + final static String existingAdviseeRoleQuery = + "SELECT ?adviseeRole WHERE { \n" + + "?advisingRelationship ?adviseeRole . \n" + + "?adviseeRole a <" + adviseeRoleClass + "> . \n" + + "}"; + + final static String existingAdvisorRoleQuery = + "SELECT ?advisorRole WHERE { \n" + + " ?advisingRelationship ?advisorRole . \n" + + " ?advisorRole a <" + advisorRoleClass + "> . \n" + + "}"; + + final static String advisorLabelQuery = + "SELECT ?existingAdvisorLabel WHERE { \n" + + " ?advisingRelationship ?existingAdvisor . \n" + + " ?existingAdvisor a <" + advisorClass + "> . \n" + + " ?existingAdvisor <" + label + "> ?existingAdvisorLabel . \n" + + " FILTER (?person != ?existingAdvisor) . \n" + + "}"; + + final static String subjAreaQuery = + "SELECT ?existingSubjArea WHERE { \n" + + " ?advisingRelationship ?existingSubjArea . \n" + + " ?existingSubjArea a . \n" + + " ?existingSubjArea ?type \n" + + " FILTER (?type != ) . \n" + + "}"; + + final static String subjAreaLabelQuery = + "SELECT ?existingSubjAreaLabel WHERE { \n" + + " ?advisingRelationship ?existingSubjArea . \n" + + " ?existingSubjArea a . \n" + + " ?existingSubjArea <" + label + "> ?existingSubjAreaLabel . \n" + + " ?existingSubjArea ?type \n" + + " FILTER (?type != ) . \n" + + "}"; + + final static String advisingRelLabelQuery = + "SELECT ?existingAdvisingRelLabel WHERE { \n" + + " ?advisingRelationship <" + label + "> ?existingAdvisingRelLabel . \n" + + "}"; + + final static String degreeQuery = + "SELECT ?existingDegree WHERE {\n"+ + " ?advisingRelationship ?existingDegree . \n" + + " ?existingDegree a <" + degreeClass + "> . \n" + + "}"; + + + final static String existingStartDateQuery = + "SELECT ?existingDateStart WHERE { \n" + + " ?advisingRelationship <" + advisingRelToInterval + "> ?intervalNode . \n" + + " ?intervalNode a <" + intervalType + "> . \n" + + " ?intervalNode <" + intervalToStart + "> ?startNode . \n" + + " ?startNode a <" + dateTimeValueType +"> . \n" + + " ?startNode <" + dateTimeValue + "> ?existingDateStart . }"; + + final static String existingEndDateQuery = + "SELECT ?existingEndDate WHERE { \n" + + " ?advisingRelationship <" + advisingRelToInterval + "> ?intervalNode . \n" + + " ?intervalNode a <" + intervalType + "> . \n " + + " ?intervalNode <" + intervalToEnd + "> ?endNode . \n" + + " ?endNode a <" + dateTimeValueType + "> . \n" + + " ?endNode <" + dateTimeValue + "> ?existingEndDate . }"; + + final static String existingIntervalNodeQuery = + "SELECT ?existingIntervalNode WHERE { \n" + + " ?advisingRelationship <" + advisingRelToInterval + "> ?existingIntervalNode . \n" + + " ?existingIntervalNode a <" + intervalType + "> . }"; + + final static String existingStartNodeQuery = + "SELECT ?existingStartNode WHERE { \n" + + " ?advisingRelationship <" + advisingRelToInterval + "> ?intervalNode . \n" + + " ?intervalNode a <" + intervalType + "> . \n" + + " ?intervalNode <" + intervalToStart + "> ?existingStartNode . \n" + + " ?existingStartNode a <" + dateTimeValueType + "> .} "; + + final static String existingEndNodeQuery = + "SELECT ?existingEndNode WHERE { \n" + + " ?advisingRelationship <" + advisingRelToInterval + "> ?intervalNode . \n" + + " ?intervalNode a <" + intervalType + "> . \n" + + " ?intervalNode <" + intervalToEnd + "> ?existingEndNode . \n" + + " ?existingEndNode a <" + dateTimeValueType + "> } "; + + final static String existingStartPrecisionQuery = + "SELECT ?existingStartPrecision WHERE { \n" + + " ?advisingRelationship <" + advisingRelToInterval + "> ?intervalNode . \n" + + " ?intervalNode a <" + intervalType + "> . \n" + + " ?intervalNode <" + intervalToStart + "> ?startNode . \n" + + " ?startNode a <" + dateTimeValueType + "> . \n" + + " ?startNode <" + dateTimePrecision + "> ?existingStartPrecision . }"; + + final static String existingEndPrecisionQuery = + "SELECT ?existingEndPrecision WHERE { \n" + + " ?advisingRelationship <" + advisingRelToInterval + "> ?intervalNode . \n" + + " ?intervalNode a <" + intervalType + "> . \n" + + " ?intervalNode <" + intervalToEnd + "> ?endNode . \n" + + " ?endNode a <" + dateTimeValueType + "> . \n" + + " ?endNode <" + dateTimePrecision + "> ?existingEndPrecision . }"; + + public void addFormSpecificData(EditConfigurationVTwo editConfiguration, VitroRequest vreq) { + HashMap formSpecificData = new HashMap(); + formSpecificData.put("sparqlForAcFilter", getSparqlForAcFilter(vreq)); + editConfiguration.setFormSpecificData(formSpecificData); + } + + public String getSparqlForAcFilter(VitroRequest vreq) { + String subject = EditConfigurationUtils.getSubjectUri(vreq); + String predicate = EditConfigurationUtils.getPredicateUri(vreq); + //Get all objects for existing predicate, filters out results from addition and edit + String query = "SELECT ?objectVar WHERE { " + + "<" + subject + "> <" + predicate + "> ?objectVar .} "; + return query; + } + +} diff --git a/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/PersonHasAdvisingRelationshipGenerator.java b/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/PersonHasAdvisorRelationshipGenerator.java similarity index 98% rename from src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/PersonHasAdvisingRelationshipGenerator.java rename to src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/PersonHasAdvisorRelationshipGenerator.java index fe137c04..5d52904b 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/PersonHasAdvisingRelationshipGenerator.java +++ b/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/PersonHasAdvisorRelationshipGenerator.java @@ -21,7 +21,7 @@ import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.IndividualsViaVClassOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation; -public class PersonHasAdvisingRelationshipGenerator extends VivoBaseGenerator implements +public class PersonHasAdvisorRelationshipGenerator extends VivoBaseGenerator implements EditConfigurationGenerator { final static String advisingRelClass = vivoCore + "AdvisingRelationship"; @@ -38,7 +38,7 @@ public class PersonHasAdvisingRelationshipGenerator extends VivoBaseGenerator im final static String dateTimeValue = vivoCore + "dateTime"; final static String dateTimePrecision = vivoCore + "dateTimePrecision"; - public PersonHasAdvisingRelationshipGenerator() {} + public PersonHasAdvisorRelationshipGenerator() {} @Override public EditConfigurationVTwo getEditConfiguration(VitroRequest vreq, @@ -50,11 +50,11 @@ public class PersonHasAdvisingRelationshipGenerator extends VivoBaseGenerator im initPropertyParameters(vreq, session, conf); initObjectPropForm(conf, vreq); - conf.setTemplate("personHasAdvisingRelationship.ftl"); + conf.setTemplate("personHasAdvisorRelationship.ftl"); conf.setVarNameForSubject("person"); conf.setVarNameForPredicate("predicate"); - conf.setVarNameForObject("advisingRelationship"); + conf.setVarNameForObject("advisorRole"); conf.setN3Required( Arrays.asList( n3ForNewAdvisingRelationship, advisingRelLabelAssertion, diff --git a/themes/wilma/i18n/all.properties b/themes/wilma/i18n/all.properties index f44baabf..6879e455 100644 --- a/themes/wilma/i18n/all.properties +++ b/themes/wilma/i18n/all.properties @@ -107,8 +107,9 @@ temporal_graph_capitalized = Temporal Graph websites = Websites advisee_label = advisee label +advisor_label = advisor label candidate = candidate -advisory_label = advisory label +advisingRel_label = advisory label editor_abbreviated = Ed. volume_abbreviated = Ed. @@ -467,10 +468,13 @@ degree_candidacy = Degree Candidacy subject_area = Subject Area selected_subject_area = Selected Subject Area selected_advisee = Selected Advisee +selected_advisor = Selected Advisor advisee_capitalized = Advisee +advisor_capitalized = Advisor advising_relationship_type = Advising Relationship Type select_advising_relationship_type = Please select an Advising Relationship Type. -advising_relationship_entry_for = advising relationship entry for +advisor_relationship_entry_for = advisor relationship entry for +advisee_relationship_entry_for = advisee relationship entry for years_participating = Years of Participation award_or_honor_for = award or honor for @@ -687,7 +691,7 @@ error_processing_author_request = Error processing request: author not removed author_capitalized = Author or_add_new_one = or add a new one. -vocabulary_service_error = An error was encountered in executing this search. +vocabulary_service_unavailable = An error was encountered in executing this search. no_serch_results_found = No search results were found. label_type = Label (Type) label_altLabels = Label (Alternate Labels)