diff --git a/webapp/web/edit/forms/dateTimeIntervalForm.jsp b/webapp/web/edit/forms/dateTimeIntervalForm.jsp new file mode 100644 index 000000000..3ca6cd0d6 --- /dev/null +++ b/webapp/web/edit/forms/dateTimeIntervalForm.jsp @@ -0,0 +1,256 @@ +<%-- $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="edu.cornell.mannlib.vitro.webapp.edit.elements.DateTimeWithPrecision"%> +<%@ page import="edu.cornell.mannlib.vitro.webapp.edit.n3editing.Field"%> + +<%@ 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.dateTimeIntervalForm.jsp"); +%> +<% + VitroRequest vreq = new VitroRequest(request); + WebappDaoFactory wdf = vreq.getWebappDaoFactory(); + vreq.setAttribute("defaultNamespace", ""); //empty string triggers default new URI behavior +%> + + +<%@page import="edu.cornell.mannlib.vitro.webapp.edit.n3editing.DateTimeIntervalValidation"%> + + + + + + + + + + + + + +<%-- Assertions for adding a new interval --%> + + ?subject <${toDateTimeInterval}> ?intervalNode . + ?intervalNode <${type}> <${intervalType}> . + ?intervalNode <${intervalToStart}> ?startNode . + ?startNode <${type}> <${dateTimeValueType}> . + ?startNode <${dateTimeValue}> ?startField.value . + ?startNode <${dateTimePrecision}> ?startField.precision . + + + + ?subject <${toDateTimeInterval}> ?intervalNode . + ?intervalNode <${type}> <${intervalType}> . + ?intervalNode <${intervalToEnd}> ?endNode . + ?endNode <${type}> <${dateTimeValueType}> . + ?endNode <${dateTimeValue}> ?endField.value . + ?endNode <${dateTimePrecision}> ?endField.precision . + + +<%-- Queries for editing an existing role --%> + + + SELECT ?existingIntervalNode WHERE { + ?subject <${toDateTimeInterval}> ?existingIntervalNode . + ?existingIntervalNode <${type}> <${intervalType}> . } + + + + SELECT ?existingStartNode WHERE { + ?subject <${toDateTimeInterval}> ?existingIntervalNode . + ?intervalNode <${type}> <${intervalType}> . + ?intervalNode <${intervalToStart}> ?existingStartNode . + ?existingStartNode <${type}> <${dateTimeValueType}> .} + + + + SELECT ?existingDateStart WHERE { + ?subject <${toDateTimeInterval}> ?existingIntervalNode . + ?intervalNode <${type}> <${intervalType}> . + ?intervalNode <${intervalToStart}> ?startNode . + ?startNode <${type}> <${dateTimeValueType}> . + ?startNode <${dateTimeValue}> ?existingDateStart . } + + + + SELECT ?existingStartPrecision WHERE { + ?subject <${toDateTimeInterval}> ?existingIntervalNode . + ?intervalNode <${type}> <${intervalType}> . + ?intervalNode <${intervalToStart}> ?startNode . + ?startNode <${type}> <${dateTimeValueType}> . + ?startNode <${dateTimePrecision}> ?existingStartPrecision . } + + + + + SELECT ?existingEndNode WHERE { + ?subject <${toDateTimeInterval}> ?existingIntervalNode . + ?intervalNode <${type}> <${intervalType}> . + ?intervalNode <${intervalToEnd}> ?existingEndNode . + ?existingEndNode <${type}> <${dateTimeValueType}> .} + + + + SELECT ?existingEndDate WHERE { + ?subject <${toDateTimeInterval}> ?existingIntervalNode . + ?intervalNode <${type}> <${intervalType}> . + ?intervalNode <${intervalToEnd}> ?endNode . + ?endNode <${type}> <${dateTimeValueType}> . + ?endNode <${dateTimeValue}> ?existingEndDate . } + + + + SELECT ?existingEndPrecision WHERE { + ?subject <${toDateTimeInterval}> ?existingIntervalNode . + ?intervalNode <${type}> <${intervalType}> . + ?intervalNode <${intervalToEnd}> ?endNode . + ?endNode <${type}> <${dateTimeValueType}> . + ?endNode <${dateTimePrecision}> ?existingEndPrecision . } + + +<%-- 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" : ["subject", "${subjectUriJson}" ], + "predicate" : ["toDateTimeInterval", "${predicateUriJson}" ], + "object" : ["intervalNode", "${objectUriJson}", "URI" ], + + "n3required" : [ ], + + "n3optional" : [ "${n3ForStart}", "${n3ForEnd}" ], + + "newResources" : { "intervalNode" : "${defaultNamespace}", + "startNode" : "${defaultNamespace}", + "endNode" : "${defaultNamespace}" }, + + "urisInScope" : { }, + "literalsInScope": { }, + "urisOnForm" : [ ], + "literalsOnForm" : [ ], + "filesOnForm" : [ ], + "sparqlForLiterals" : { }, + "sparqlForUris" : { }, + "sparqlForExistingLiterals" : { + "startField.value" : "${existingStartDateQuery}", + "endField.value" : "${existingEndDateQuery}" + }, + "sparqlForExistingUris" : { + "intervalNode" : "${existingIntervalNodeQuery}", + "startNode" : "${existingStartNodeQuery}", + "endNode" : "${existingEndNodeQuery}", + "startField.precision": "${existingStartPrecisionQuery}", + "endField.precision" : "${existingEndPrecisionQuery}" + }, + "fields" : { + "startField" : { + "newResource" : "false", + "validators" : [ ], + "optionsType" : "UNDEFINED", + "literalOptions" : [ ], + "predicateUri" : "", + "objectClassUri" : "", + "rangeDatatypeUri" : "", + "rangeLang" : "", + "assertions" : ["${n3ForStart}"] + }, + "endField" : { + "newResource" : "false", + "validators" : [ ], + "optionsType" : "UNDEFINED", + "literalOptions" : [ ], + "predicateUri" : "", + "objectClassUri" : "", + "rangeDatatypeUri" : "", + "rangeLang" : "", + "assertions" : ["${n3ForEnd}"] + } + } +} + + +<% + 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); + + //setup date time edit elements + Field startField = editConfig.getField("startField"); + // arguments for DateTimeWithPrecision are (fieldName, minimumPrecision, [requiredLevel]) + startField.setEditElement(new DateTimeWithPrecision(startField, VitroVocabulary.Precision.YEAR.uri(), VitroVocabulary.Precision.SECOND.uri())); + Field endField = editConfig.getField("endField"); + endField.setEditElement(new DateTimeWithPrecision(endField, VitroVocabulary.Precision.YEAR.uri(), VitroVocabulary.Precision.SECOND.uri())); + } + + editConfig.addValidator(new DateTimeIntervalValidation("startField","endField") ); + + Model model = (Model) application.getAttribute("jenaOntModel"); + + if (objectUri != null) { // editing existing + editConfig.prepareForObjPropUpdate(model); + } else { // adding new + editConfig.prepareForNonUpdate(model); + } + + String subjectName = ((Individual) request.getAttribute("subject")).getName(); +%> + + + +

${titleVerb} date time interval for <%= subjectName %>

+ +
" > + + + + +

+ + +