<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%> <%-- Custom form for managing webpages associated with an individual Object properties: core:webpage (range: core:URLLink) core:webpageOf (domain: core:URLLink) (inverse of core:webpage) Class: core:URLLink - the link to be added to the individual Data properties of core:URLLink: core:linkURI core:linkAnchorText core:rank --%> <%@ 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.beans.VClass" %> <%@ page import="edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.EditConfiguration" %> <%@ page import="edu.cornell.mannlib.vitro.webapp.controller.VitroRequest" %> <%@ page import="edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory" %> <%@ page import="edu.cornell.mannlib.vitro.webapp.beans.DataProperty" %> <%@ page import="edu.cornell.mannlib.vitro.webapp.dao.DataPropertyDao" %> <%@ page import="edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary"%> <%@ page import="edu.cornell.mannlib.vitro.webapp.web.MiscWebUtils"%> <%@ 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.addWebpageToIndividual.jsp"); %> <% VitroRequest vreq = new VitroRequest(request); WebappDaoFactory wdf = vreq.getWebappDaoFactory(); vreq.setAttribute("defaultNamespace", wdf.getDefaultNamespace()); String propertyUri = (String) request.getAttribute("predicateUri"); String objectUri = (String) request.getAttribute("objectUri"); String stringDatatypeUriJson = MiscWebUtils.escape(XSD.xstring.toString()); String uriDatatypeUriJson = MiscWebUtils.escape(XSD.anyURI.toString()); %> <%-- Enter here any class names to be used for constructing INDIVIDUALS_VIA_VCLASS pick lists These are then referenced in the field's ObjectClassUri but not elsewhere. NOTE that this class may not exist in the model, in which the only choice of type that will show up is "web page", which will insert no new statements and just create links of type vitro:Link --%> <%-- Then enter a SPARQL query for each field, by convention concatenating the field id with "Existing" to convey that the expression is used to retrieve any existing value for the field in an existing individual. Each of these must then be referenced in the sparqlForExistingLiterals section of the JSON block below and in the literalsOnForm --%> SELECT ?urlExisting WHERE { ?link <${linkUrl}> ?urlExisting } <%-- Pair the "existing" query with the skeleton of what will be asserted for a new statement involving this field. The actual assertion inserted in the model will be created via string substitution into the ? variables. NOTE the pattern of punctuation (a period after the prefix URI and after the ?field) --%> ?link <${linkUrl}> ?url . SELECT ?anchorExisting WHERE { ?link <${linkAnchor}> ?anchorExisting } ?link <${linkAnchor}> ?anchor . SELECT ?rankExisting WHERE { ?link <${rank}> ?rankExisting } ?link <${rank}> ?rank . <%-- When not retrieving a literal via a datatype property, put the SPARQL statement into the SparqlForExistingUris --%> ?subject <${webpageProperty}> ?link . ?link <${inverseProperty}> ?subject . ?link a <${linkClass}> ; <${linkUrl}> ?url ; <${linkAnchor}> ?anchor ; <${rank}> ?rank . { "formUrl" : "${formUrl}", "editKey" : "${editKey}", "urlPatternToReturnTo" : "${returnPathAfterSubmit}", "subject" : ["subject", "${subjectUriJson}" ], "predicate" : ["predicate", "${predicateUriJson}" ], "object" : ["link", "${objectUriJson}", "URI" ], "n3required" : [ "${n3ForEdit}" ], "n3optional" : [ ], "newResources" : { "link" : "${defaultNamespace}" }, "urisInScope" : { }, "literalsInScope" : { }, "urisOnForm" : [ ], "literalsOnForm" : [ "url", "anchor", "rank" ], "filesOnForm" : [ ], "sparqlForLiterals" : { }, "sparqlForUris" : { }, "sparqlForExistingLiterals" : { "url" : "${urlQuery}", "anchor" : "${anchorQuery}", "rank" : "${rankQuery}" }, "sparqlForExistingUris" : { }, "fields" : { "url" : { "newResource" : "false", "validators" : [ "nonempty", "datatype:${uriDatatypeUriJson}" , "httpUrl" ], "optionsType" : "UNDEFINED", "literalOptions" : [ ], "predicateUri" : "", "objectClassUri" : "", "rangeDatatypeUri" : "${uriDatatypeUriJson}", "rangeLang" : "", "assertions" : [ "${urlAssertion}" ] }, "anchor" : { "newResource" : "false", "validators" : [ "nonempty", "datatype:${stringDatatypeUriJson}" ], "optionsType" : "UNDEFINED", "literalOptions" : [ ], "predicateUri" : "", "objectClassUri" : "", "rangeDatatypeUri" : "${stringDatatypeUriJson}", "rangeLang" : "", "assertions" : [ "${anchorAssertion}" ] }, "rank" : { "newResource" : "false", "validators" : [ ], "optionsType" : "UNDEFINED", "literalOptions" : [ ], "predicateUri" : "", "objectClassUri" : "", "rangeDatatypeUri" : "${stringDatatypeUriJson}", "rangeLang" : "", "assertions" : [ "${rankAssertion}" ] } } } <% 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); } Model model = (Model)application.getAttribute("jenaOntModel"); if( objectUri != null ){ editConfig.prepareForObjPropUpdate(model); }else{ editConfig.prepareForNonUpdate(model); } /* get some data to make the form more useful */ String subjectName = ((Individual)request.getAttribute("subject")).getName(); String submitLabel=""; String title=" webpage for " + subjectName; if (objectUri != null) { title = "Edit" + title; submitLabel = "Save changes"; } else { title = "Create" + title; submitLabel = "Create link"; } List customJs = new ArrayList(Arrays.asList(JavaScript.JQUERY_UI.path(), JavaScript.CUSTOM_FORM_UTILS.path(), "/js/browserUtils.js", "/edit/forms/js/manageWebpagesForIndividual.js" )); request.setAttribute("customJs", customJs); List customCss = new ArrayList(Arrays.asList(Css.JQUERY_UI.path(), Css.CUSTOM_FORM.path() )); request.setAttribute("customCss", customCss); %>

<%= title %>

" >

If left blank, the URL will be used when displaying a link to this webpage.