<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%> <%@ page import="java.util.List" %> <%@ page import="java.util.ArrayList" %> <%@ page import="java.util.Arrays" %> <%@ page import="com.hp.hpl.jena.rdf.model.Literal"%> <%@ page import="com.hp.hpl.jena.rdf.model.Model"%> <%@ page import="com.hp.hpl.jena.vocabulary.XSD" %> <%@ page import="edu.cornell.mannlib.vitro.webapp.beans.Individual"%> <%@ page import="edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary"%> <%@ page import="edu.cornell.mannlib.vitro.webapp.edit.n3editing.EditConfiguration"%> <%@ page import="edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory"%> <%@ page import="edu.cornell.mannlib.vitro.webapp.controller.VitroRequest"%> <%@ page import="edu.cornell.mannlib.vitro.webapp.web.MiscWebUtils"%> <%@page import="edu.cornell.mannlib.vitro.webapp.edit.n3editing.StartYearBeforeEndYear"%> <%@ page import="edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.JavaScript" %> <%@ page import="edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.Css" %> <%@ page import="org.apache.commons.logging.Log" %> <%@ page import="org.apache.commons.logging.LogFactory" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%> <%@ taglib prefix="v" uri="http://vitro.mannlib.cornell.edu/vitro/tags" %> <%! public static Log log = LogFactory.getLog("edu.cornell.mannlib.vitro.webapp.jsp.edit.forms.personHasPositionHistory.jsp"); %> <% VitroRequest vreq = new VitroRequest(request); WebappDaoFactory wdf = vreq.getWebappDaoFactory(); vreq.setAttribute("defaultNamespace", ""); //empty string triggers default new URI behavior request.setAttribute("stringDatatypeUriJson", MiscWebUtils.escape(XSD.xstring.toString())); request.setAttribute("gYearDatatypeUriJson", MiscWebUtils.escape(XSD.gYear.toString())); %> <%-- Define predicates used in n3 assertions and sparql queries --%> <%-- Assertions for adding a new role --%> ?org a ?orgType . ?org <${label}> ?orgLabel . ?position <${titlePred}> ?positionTitle ; <${label}> ?positionTitle . ?position a ?positionType . ?position <${startYearPred}> ?startYear . ?position <${endYearPred}> ?endYear . @prefix core: <${vivoCore}> . ?person core:personInPosition ?position . ?position a ?positionType ; core:positionForPerson ?person ; <${positionInOrgPred}> ?org . ?org <${orgForPositionPred}> ?position . ?position <${positionInOrgPred}> ?org . ?org <${orgForPositionPred}> ?position . <%-- Queries for editing an existing role --%> SELECT ?existingOrg WHERE { ?position <${positionInOrgPred}> ?existingOrg . } SELECT ?existingOrgLabel WHERE { ?position <${positionInOrgPred}> ?existingOrg . ?existingOrg <${label}> ?existingOrgLabel . } SELECT ?existingOrgType WHERE { ?position <${positionInOrgPred}> ?existingOrg . ?existingOrg a ?existingOrgType . } SELECT ?existingPositionTitle WHERE { ?position <${titlePred}> ?existingPositionTitle . } SELECT ?existingPositionType WHERE { ?position a ?existingPositionType . } SELECT ?existingStartYear WHERE { ?position <${startYearPred}> ?existingStartYear . } SELECT ?existingEndYear WHERE { ?position <${endYearPred}> ?existingEndYear . } ${positionClass} ${orgClass} <%-- Configure add vs. edit --%> <% String objectUri = (String) request.getAttribute("objectUri"); if (objectUri != null) { // editing existing entry %> <%-- Start year is required for an add but not an edit (so editors don't have to look up the start date in order to edit an existing entry with no start date). --%> <% } else { // adding new entry %> <% } %> { "formUrl" : "${formUrl}", "editKey" : "${editKey}", "urlPatternToReturnTo" : "/entity", "subject" : ["person", "${subjectUriJson}" ], "predicate" : ["predicate", "${predicateUriJson}" ], "object" : ["position", "${objectUriJson}", "URI" ], "n3required" : [ "${n3ForNewPosition}", "${positionTitleAssertion}", "${positionTypeAssertion}", "${orgLabelAssertion}", "${orgTypeAssertion}" ], "n3optional" : [ "${startYearAssertion}", "${endYearAssertion}" ], "newResources" : { "position" : "${defaultNamespace}", "org" : "${defaultNamespace}" }, "urisInScope" : { }, "literalsInScope": { }, "urisOnForm" : [ "org", "orgType", "positionType" ], "literalsOnForm" : [ "positionTitle", "orgLabel", "startYear", "endYear" ], "filesOnForm" : [ ], "sparqlForLiterals" : { }, "sparqlForUris" : { }, "sparqlForExistingLiterals" : { "orgLabel" : "${orgLabelQuery}", "positionTitle" : "${positionTitleQuery}", "startYear" : "${startYearQuery}", "endYear" : "${endYearQuery}" }, "sparqlForExistingUris" : { "org" : "${orgQuery}", "orgType" : "${orgTypeQuery}", "positionType" : "${positionTypeQuery}" }, "fields" : { "positionTitle" : { "newResource" : "false", "validators" : [ "nonempty" ], "optionsType" : "UNDEFINED", "literalOptions" : [ ], "predicateUri" : "", "objectClassUri" : "", "rangeDatatypeUri" : "${stringDatatypeUriJson}", "rangeLang" : "", "assertions" : [ "${positionTitleAssertion}" ] }, "positionType" : { "newResource" : "false", "validators" : [ "nonempty" ], "optionsType" : "CHILD_VCLASSES_WITH_PARENT", "literalOptions" : [ "Select one" ], "predicateUri" : "", "objectClassUri" : "${positionClassUriJson}", "rangeDatatypeUri" : "", "rangeLang" : "", "assertions" : [ "${positionTypeAssertion}" ] }, "org" : { "newResource" : "false", "validators" : [ ], "optionsType" : "INDIVIDUALS_VIA_VCLASS", "literalOptions" : [ "Select one" ], "predicateUri" : "", "objectClassUri" : "${orgClassUriJson}", "rangeDatatypeUri" : "", "rangeLang" : "", "assertions" : [ "${n3ForPositionToOrg}" ] }, "orgLabel" : { "newResource" : "false", "validators" : [ "nonempty" ], "optionsType" : "UNDEFINED", "literalOptions" : [ ], "predicateUri" : "", "objectClassUri" : "", "rangeDatatypeUri" : "${stringDatatypeUriJson}", "rangeLang" : "", "assertions" : [ "${orgLabelAssertion}" ] }, "orgType" : { "newResource" : "false", "validators" : [ "nonempty" ], "optionsType" : "CHILD_VCLASSES", "literalOptions" : [ "Select one" ], "predicateUri" : "", "objectClassUri" : "${orgClassUriJson}", "rangeDatatypeUri" : "", "rangeLang" : "", "assertions" : [ "${orgTypeAssertion}" ] }, "startYear" : { "newResource" : "false", "validators" : [ ${startYearRequired} "datatype:${gYearDatatypeUriJson}" ], "optionsType" : "UNDEFINED", "literalOptions" : [ ], "predicateUri" : "", "objectClassUri" : "", "rangeDatatypeUri" : "${gYearDatatypeUriJson}", "rangeLang" : "", "assertions" : ["${startYearAssertion}"] }, "endYear" : { "newResource" : "false", "validators" : [ "datatype:${gYearDatatypeUriJson}" ], "optionsType" : "UNDEFINED", "literalOptions" : [ ], "predicateUri" : "", "objectClassUri" : "", "rangeDatatypeUri" : "${gYearDatatypeUriJson}", "rangeLang" : "", "assertions" : ["${endYearAssertion}"] } } } <% log.debug(request.getAttribute("editjson")); EditConfiguration editConfig = EditConfiguration.getConfigFromSession(session,request); if (editConfig == null) { editConfig = new EditConfiguration((String) request.getAttribute("editjson")); EditConfiguration.putConfigInSession(editConfig,session); } editConfig.addValidator(new StartYearBeforeEndYear("startYear","endYear") ); Model model = (Model) application.getAttribute("jenaOntModel"); if (objectUri != null) { // editing existing editConfig.prepareForObjPropUpdate(model); } else { // adding new editConfig.prepareForNonUpdate(model); } List customJs = new ArrayList(Arrays.asList(JavaScript.JQUERY_UI.path(), JavaScript.CUSTOM_FORM_UTILS.path(), "/edit/forms/js/customFormWithAutocomplete.js" )); request.setAttribute("customJs", customJs); List customCss = new ArrayList(Arrays.asList(Css.JQUERY_UI.path(), Css.CUSTOM_FORM.path(), "/edit/forms/css/customFormWithAutocomplete.css" )); request.setAttribute("customCss", customCss); String subjectName = ((Individual) request.getAttribute("subject")).getName(); %>

${titleVerb} position entry for <%= subjectName %>

" >

<%--

needed to create wrapper for show/hide --%>

<%-- Store these values in hidden fields, because the displayed fields are disabled and don't submit. This ensures that when returning from a validation error, we retain the values. --%>
<%-- RY maybe make this a label and input field. See what looks best. --%>

(Verify this match)

* required fields