<%-- $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 %> <% } 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" : [ "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