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
+ }
+
+
+ propStatement-adviseeIn.ftl
+
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>
+ <#if statement.degreeLabel??>
+ ${statement.degreeAbbr!statement.degreeLabel!}
+ <#if statement.dateTimeStart?? || statement.dateTimeEnd?? > ${i18n().candidate},<#else> ${i18n().candidate}#if>
+ #if>
+ <#elseif statement.advisingRelLabel??>
+ ${statement.advisingRelLabel!statement.localName}
+ #if>
+ #local>
+
+ ${linkedIndividual} <@dt.yearIntervalSpan "${statement.dateTimeStart!}" "${statement.dateTimeEnd!}" />
+ #macro>
\ 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}#if>
#if>
- <#elseif statement.advisoryLabel??>
- ${statement.advisoryLabel!statement.localName}
+ <#elseif statement.advisingRelLabel??>
+ ${statement.advisingRelLabel!statement.localName}
#if>
#local>
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!}
#macro>
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 @@
#if>
#local>
- ${linkedIndividual} ${roleLabel!} <@dt.yearIntervalSpan "${statement.dateTimeStart!}" "${statement.dateTimeEnd!}" />
+ ${linkedIndividual} ${roleLabel!} <@dt.yearIntervalSpan "${statement.dateTimeStart!}" "${statement.dateTimeEnd!}" />
#macro>
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"] />
+#if>
+
+<#--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">
+#if>
+
+<#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>
+
+<#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=""/>
+#if>
+
+<#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>
+ <#if subjAreaLabelDisplayValue?has_content >
+ <#assign subjAreaLabelValue = subjAreaLabelDisplayValue />
+ #if>
+
+
+
+
+ <#--Checking if any required fields are empty-->
+ <#if lvf.submissionErrorExists(editSubmission, "advisingRelType")>
+ ${i18n().select_advising_relationship_type}
+ #if>
+ <#list submissionErrors?keys as errorFieldName>
+ <#if errorFieldName == "startField">
+ <#if submissionErrors[errorFieldName]?contains("before")>
+ ${i18n().start_year_must_precede_end}
+ <#else>
+ ${submissionErrors[errorFieldName]}
+ #if>
+
+ <#elseif errorFieldName == "endField">
+ <#if submissionErrors[errorFieldName]?contains("after")>
+ ${i18n().end_year_must_be_later}
+ <#else>
+ ${submissionErrors[errorFieldName]}
+ #if>
+ <#elseif errorFieldName == "advisingRelType">
+ <#else>
+ ${submissionErrors[errorFieldName]}
+ #if>
+ #list>
+
+
+#if>
+
+<@lvf.unsupportedBrowser urls.base />
+
+
+ <#--Need to draw edit elements for dates here-->
+ <#assign htmlForElements = editConfiguration.pageData.htmlForElements />
+ <#if htmlForElements?keys?seq_contains("startField")>
+
+ ${htmlForElements["startField"]} ${yearHint}
+ #if>
+
+ <#if htmlForElements?keys?seq_contains("endField")>
+
+ ${htmlForElements["endField"]} ${yearHint}
+ #if>
+ <#--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)