diff --git a/productMods/edit/forms/addGrantRoleToPerson.jsp b/productMods/edit/forms/addGrantRoleToPerson.jsp
index 2f182051..6e36d87d 100644
--- a/productMods/edit/forms/addGrantRoleToPerson.jsp
+++ b/productMods/edit/forms/addGrantRoleToPerson.jsp
@@ -48,7 +48,10 @@ This is intended to create a set of statements like:
String predicateUri = (String)request.getAttribute("predicateUri");
ObjectProperty op = wdf.getObjectPropertyDao().getObjectPropertyByURI( predicateUri );
if( op != null && op.getURIInverse() != null ){
- %> <%=op.getURIInverse()%> <%
+ %>
+<%@page import="edu.cornell.mannlib.vitro.webapp.edit.n3editing.Field"%>
+<%@page import="edu.cornell.mannlib.vitro.webapp.edit.elements.DateTimeWithPrecision"%>
+<%@page import="edu.cornell.mannlib.vitro.webapp.edit.n3editing.DateTimeIntervalValidation"%><%=op.getURIInverse()%> <%
}else{
%> <%
}
@@ -82,9 +85,22 @@ This is intended to create a set of statements like:
<%@page import="edu.cornell.mannlib.vitro.webapp.beans.ObjectProperty"%>
+
+
+
+
+
+
+
+
+
+
+
+
+
<% // set role type based on predicate
String subjectName = ((Individual) request.getAttribute("subject")).getName();
if ( ((String)request.getAttribute("predicateUri")).endsWith("hasPrincipalInvestigatorRole") ) { %>
@@ -124,16 +140,6 @@ if ( ((String)request.getAttribute("predicateUri")).endsWith("hasPrincipalInvest
-
-
- ?role <${startYearUri}> ?startYear .
-
-
-
-
- ?role <${endYearUri}> ?endYear .
-
-
@prefix core: <${vivoCore}> .
@prefix rdf: <${rdf}> .
@@ -152,6 +158,24 @@ if ( ((String)request.getAttribute("predicateUri")).endsWith("hasPrincipalInvest
?role ?inverseRolePredicate ?person.
+
+ ?role <${roleToInterval}> ?intervalNode .
+ ?intervalNode <${type}> <${intervalType}> .
+ ?intervalNode <${intervalToStart}> ?startNode .
+ ?startNode <${type}> <${dateTimeValueType}> .
+ ?startNode <${dateTimeValue}> ?startField.value .
+ ?startNode <${dateTimePrecision}> ?startField.precision .
+
+
+
+ ?role <${roleToInterval}> ?intervalNode .
+ ?intervalNode <${type}> <${intervalType}> .
+ ?intervalNode <${intervalToEnd}> ?endNode .
+ ?endNode <${type}> <${dateTimeValueType}> .
+ ?endNode <${dateTimeValue}> ?endField.value .
+ ?endNode <${dateTimePrecision}> ?endField.precision .
+
+
@prefix rdfs: <${rdfs}> .
?grant rdfs:label ?grantLabel .
@@ -165,22 +189,72 @@ if ( ((String)request.getAttribute("predicateUri")).endsWith("hasPrincipalInvest
?existingGrant rdfs:label ?existingGrantLabel . }
-
- PREFIX core: <${vivoCore}>
- SELECT ?existingStartYear WHERE { ?role core:startYear ?existingStartYear .}
-
-
-
-PREFIX core: <${vivoCore}>
- SELECT ?existingStartYear WHERE { ?role core:endYear ?existingStartYear .}
-
-
PREFIX core: <${vivoCore}>
SELECT ?existingGrant WHERE { ?role core:roleIn ?existingGrant . }
${vivoOnt}#Grant
+
+
+ SELECT ?existingIntervalNode WHERE {
+ ?role <${roleToInterval}> ?existingIntervalNode .
+ ?existingIntervalNode <${type}> <${intervalType}> . }
+
+
+
+ SELECT ?existingStartNode WHERE {
+ ?role <${roleToInterval}> ?intervalNode .
+ ?intervalNode <${type}> <${intervalType}> .
+ ?intervalNode <${intervalToStart}> ?existingStartNode .
+ ?existingStartNode <${type}> <${dateTimeValueType}> .}
+
+
+
+ SELECT ?existingDateStart WHERE {
+ ?role <${roleToInterval}> ?intervalNode .
+ ?intervalNode <${type}> <${intervalType}> .
+ ?intervalNode <${intervalToStart}> ?startNode .
+ ?startNode <${type}> <${dateTimeValueType}> .
+ ?startNode <${dateTimeValue}> ?existingDateStart . }
+
+
+
+ SELECT ?existingStartPrecision WHERE {
+ ?role <${roleToInterval}> ?intervalNode .
+ ?intervalNode <${type}> <${intervalType}> .
+ ?intervalNode <${intervalToStart}> ?startNode .
+ ?startNode <${type}> <${dateTimeValueType}> .
+ ?startNode <${dateTimePrecision}> ?existingStartPrecision . }
+
+
+
+ SELECT ?existingEndNode WHERE {
+ ?role <${roleToInterval}> ?intervalNode .
+ ?intervalNode <${type}> <${intervalType}> .
+ ?intervalNode <${intervalToEnd}> ?existingEndNode .
+ ?existingEndNode <${type}> <${dateTimeValueType}> .}
+
+
+
+ SELECT ?existingEndDate WHERE {
+ ?role <${roleToInterval}> ?intervalNode .
+ ?intervalNode <${type}> <${intervalType}> .
+ ?intervalNode <${intervalToEnd}> ?endNode .
+ ?endNode <${type}> <${dateTimeValueType}> .
+ ?endNode <${dateTimeValue}> ?existingEndDate . }
+
+
+
+ SELECT ?existingEndPrecision WHERE {
+ ?role <${roleToInterval}> ?intervalNode .
+ ?intervalNode <${type}> <${intervalType}> .
+ ?intervalNode <${intervalToEnd}> ?endNode .
+ ?endNode <${type}> <${dateTimeValueType}> .
+ ?endNode <${dateTimePrecision}> ?existingEndPrecision . }
+
+
+
{
"formUrl" : "${formUrl}",
@@ -191,23 +265,36 @@ PREFIX core: <${vivoCore}>
"predicate" : ["rolePredicate", "${predicateUriJson}" ],
"object" : ["role", "${objectUriJson}", "URI" ],
- "n3required" : [ "${n3ForGrantRole}", "${startYearAssertion}" ],
+ "n3required" : [ "${n3ForGrantRole}" ],
- "n3optional" : [ "${n3ForGrantLabel}", "${n3ForInverse}", "${endYearAssertion}" ],
+ "n3optional" : [ "${n3ForGrantLabel}", "${n3ForInverse}", "${n3ForStart}", "${n3ForEnd}" ],
"newResources" : { "role" : "${defaultNamespace}",
- "grant" : "${defaultNamespace}" },
-
+ "grant" : "${defaultNamespace}",
+ "intervalNode" : "${defaultNamespace}",
+ "startNode" : "${defaultNamespace}",
+ "endNode" : "${defaultNamespace}" },
"urisInScope" : { "roleType" : "${roleType}",
"inverseRolePredicate" : "${inversePredicate}" },
"literalsInScope": { },
"urisOnForm" : [ "grant" ],
- "literalsOnForm" : [ "grantLabel", "startYear", "endYear", "existingGrantLabel" ],
+ "literalsOnForm" : [ "grantLabel", "existingGrantLabel" ],
"filesOnForm" : [ ],
"sparqlForLiterals" : { },
"sparqlForUris" : { },
- "sparqlForExistingLiterals" : { "grantLabel":"${grantLabelQuery}" , "startYear":"${startYearQuery}", "endYear":"${endYearQuery}" },
- "sparqlForExistingUris" : { "grant":"${grantQuery}" },
+ "sparqlForExistingLiterals" : {
+ "grantLabel":"${grantLabelQuery}" ,
+ "startField.value" : "${existingStartDateQuery}",
+ "endField.value" : "${existingEndDateQuery}"
+ },
+ "sparqlForExistingUris" : {
+ "grant":"${grantQuery}",
+ "intervalNode" : "${existingIntervalNodeQuery}",
+ "startNode" : "${existingStartNodeQuery}",
+ "endNode" : "${existingEndNodeQuery}",
+ "startField.precision": "${existingStartPrecisionQuery}",
+ "endField.precision" : "${existingEndPrecisionQuery}"
+ },
"fields" : {
"grant" : {
"newResource" : "false",
@@ -242,27 +329,27 @@ PREFIX core: <${vivoCore}>
"rangeLang" : "",
"assertions" : [ ]
},
- "startYear" : {
+ "startField" : {
"newResource" : "false",
- "validators" : [ "nonempty", "datatype:${gYearDatatypeUriJson}" ],
+ "validators" : [ ],
"optionsType" : "UNDEFINED",
"literalOptions" : [ ],
"predicateUri" : "",
"objectClassUri" : "",
- "rangeDatatypeUri" : "${gYearDatatypeUriJson}",
+ "rangeDatatypeUri" : "",
"rangeLang" : "",
- "assertions" : ["${startYearAssertion}"]
+ "assertions" : [ "${n3ForStart}" ]
},
- "endYear" : {
+ "endField" : {
"newResource" : "false",
- "validators" : [ "datatype:${gYearDatatypeUriJson}" ],
+ "validators" : [ ],
"optionsType" : "UNDEFINED",
"literalOptions" : [ ],
"predicateUri" : "",
"objectClassUri" : "",
- "rangeDatatypeUri" : "${gYearDatatypeUriJson}",
+ "rangeDatatypeUri" : "",
"rangeLang" : "",
- "assertions" : ["${endYearAssertion}"]
+ "assertions" : ["${n3ForEnd}" ]
}
}
}
@@ -275,9 +362,19 @@ PREFIX core: <${vivoCore}>
if (editConfig == null) {
editConfig = new EditConfiguration((String) request.getAttribute("editjson"));
EditConfiguration.putConfigInSession(editConfig,session);
- }
-
- editConfig.addValidator(new StartYearBeforeEndYear("startYear","endYear") );
+ //setup date time edit elements
+ Field startField = editConfig.getField("startField");
+ startField.setEditElement(
+ new DateTimeWithPrecision(startField,
+ VitroVocabulary.Precision.YEAR.uri(),
+ VitroVocabulary.Precision.NONE.uri()));
+ Field endField = editConfig.getField("endField");
+ endField.setEditElement(
+ new DateTimeWithPrecision(endField,
+ VitroVocabulary.Precision.YEAR.uri(),
+ VitroVocabulary.Precision.NONE.uri()));
+ editConfig.addValidator(new DateTimeIntervalValidation("startField","endField") );
+ }
Model model = (Model) application.getAttribute("jenaOntModel");
String objectUri = (String) request.getAttribute("objectUri");
@@ -339,8 +436,8 @@ PREFIX core: <${vivoCore}>
Years of Participation in Grant
-
-
+
+