NIHVIVO-144 Enable adding new primary or additional link from front end

This commit is contained in:
rjy7 2010-03-24 21:41:33 +00:00
parent 6a6a9de920
commit 7f3ba68290
8 changed files with 386 additions and 102 deletions

View file

@ -12,17 +12,21 @@ import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
public class FrontEndEditingUtils { public class FrontEndEditingUtils {
public static final List<String> VITRO_NS_PROPS_FOR_FRONT_END_EDITING = Arrays.asList(VitroVocabulary.BLURB, public static final List<String> VITRO_NS_DATAPROPS = Arrays.asList(VitroVocabulary.BLURB,
VitroVocabulary.CITATION, VitroVocabulary.CITATION,
VitroVocabulary.DESCRIPTION, VitroVocabulary.DESCRIPTION,
VitroVocabulary.IMAGETHUMB, VitroVocabulary.IMAGETHUMB,
VitroVocabulary.LABEL, VitroVocabulary.LABEL,
VitroVocabulary.LINK_ANCHOR, VitroVocabulary.MONIKER
VitroVocabulary.MONIKER, // VitroVocabulary.RDF_TYPE,
VitroVocabulary.PRIMARY_LINK // VitroVocabulary.TIMEKEY
//, RDF_TYPE, TIMEKEY
); );
public static final List<String> VITRO_NS_OBJECT_PROPS = Arrays.asList(VitroVocabulary.ADDITIONAL_LINK,
VitroVocabulary.PRIMARY_LINK
);
public static String getVitroNsPropDatatypeUri(String propName) { public static String getVitroNsPropDatatypeUri(String propName) {
//Resource datatype = propName == TIMEKEY ? XSD.dateTime : XSD.xstring; //Resource datatype = propName == TIMEKEY ? XSD.dateTime : XSD.xstring;
//return datatype.getURI(); //return datatype.getURI();

View file

@ -107,7 +107,6 @@ public class PropertyEditLinks extends TagSupport{
Individual entity = (Individual)pageContext.getRequest().getAttribute("entity"); Individual entity = (Individual)pageContext.getRequest().getAttribute("entity");
LinkStruct[] links = null; LinkStruct[] links = null;
String themeDir = (String)pageContext.getAttribute("themeDir");
//get context prefix needs to end with a slash like "/vivo/" or "/" //get context prefix needs to end with a slash like "/vivo/" or "/"
String contextPath = ((HttpServletRequest)pageContext.getRequest()).getContextPath(); String contextPath = ((HttpServletRequest)pageContext.getRequest()).getContextPath();
@ -118,27 +117,45 @@ public class PropertyEditLinks extends TagSupport{
if( item instanceof ObjectPropertyStatement ){ if( item instanceof ObjectPropertyStatement ){
ObjectPropertyStatement prop = (ObjectPropertyStatement)item; ObjectPropertyStatement prop = (ObjectPropertyStatement)item;
links = doObjPropStmt( prop, themeDir, policyToAccess(ids, policy, prop), contextPath ); links = doObjPropStmt( prop, policyToAccess(ids, policy, prop), contextPath );
} else if( item instanceof DataPropertyStatement ){ } else if( item instanceof DataPropertyStatement ){
DataPropertyStatement prop = (DataPropertyStatement)item; DataPropertyStatement prop = (DataPropertyStatement)item;
links = doDataPropStmt( prop, themeDir, policyToAccess(ids, policy, prop), contextPath ); links = doDataPropStmt( prop, policyToAccess(ids, policy, prop), contextPath );
} else if (entity == null) { } else if (entity == null) {
log.error("unable to find an Individual in request using var name 'entity'"); log.error("unable to find an Individual in request using var name 'entity'");
return SKIP_BODY; return SKIP_BODY;
} else if( item instanceof ObjectProperty ){ } else if( item instanceof ObjectProperty ){
ObjectProperty prop = (ObjectProperty)item; ObjectProperty prop = (ObjectProperty)item;
links = doObjProp( prop, entity, themeDir, policyToAccess(ids, policy, entity.getURI(), prop), contextPath ); links = doObjProp( prop, entity, policyToAccess(ids, policy, entity.getURI(), prop), contextPath );
} else if( item instanceof DataProperty ){ } else if( item instanceof DataProperty ){
DataProperty prop = (DataProperty)item; // a DataProperty populated for this subject individual DataProperty prop = (DataProperty)item; // a DataProperty populated for this subject individual
links = doDataProp( prop, entity, themeDir,policyToAccess(ids, policy, entity.getURI(), prop), contextPath ) ; links = doDataProp( prop, entity, policyToAccess(ids, policy, entity.getURI(), prop),contextPath );
} else if (item instanceof String && isVitroNsProp((String) item)) {
// Vitro namespace property
} else if (item instanceof String) {
String predicateUri = (String) item;
String subjectUri = entity.getURI(); String subjectUri = entity.getURI();
if (data != null) { // links to edit or delete an existing value if (isVitroNsDataProp(predicateUri)) {
DataPropertyStatement dps = (DataPropertyStatement) new DataPropertyStatementImpl(subjectUri, (String)item, data); if (data == null) { // link to add a new value
links = doVitroNamespacePropStmt( dps, entity, themeDir, policyToAccess(ids, policy, dps), contextPath ); links = doVitroNsDataProp( subjectUri, predicateUri, policyToAccess(ids, policy, subjectUri, predicateUri), contextPath );
} else { // link to add a new value } else { // links to edit or delete an existing value
links = doVitroNsProp( subjectUri, (String)item, themeDir, policyToAccess(ids, policy, subjectUri, (String)item), contextPath ) ; DataPropertyStatement dps = (DataPropertyStatement) new DataPropertyStatementImpl(subjectUri, predicateUri, data);
links = doVitroNsDataPropStmt( dps, entity, policyToAccess(ids, policy, dps), contextPath );
} }
} else if (isVitroNsObjectProp(predicateUri)) {
if (data == null) { // link to add a new value
links = doObjProp( subjectUri, predicateUri, policyToAccess(ids, policy, subjectUri, predicateUri), contextPath );
} else { // links to edit or delete an existing value
DataPropertyStatement dps = (DataPropertyStatement) new DataPropertyStatementImpl(subjectUri, predicateUri, data);
//links = doVitroNsObjPropStmt( dps, entity, policyToAccess(ids, policy, dps), contextPath );
}
}
else {
log.error("PropertyEditLinks cannot make links for an object of type " + predicateUri);
return SKIP_BODY;
}
} else { } else {
log.error("PropertyEditLinks cannot make links for an object of type "+item.getClass().getName()); log.error("PropertyEditLinks cannot make links for an object of type "+item.getClass().getName());
return SKIP_BODY; return SKIP_BODY;
@ -164,7 +181,7 @@ public class PropertyEditLinks extends TagSupport{
return SKIP_BODY; return SKIP_BODY;
} }
protected LinkStruct[] doDataProp(DataProperty dprop, Individual entity, String themeDir, EditLinkAccess[] allowedAccessTypeArray, String contextPath) { protected LinkStruct[] doDataProp(DataProperty dprop, Individual entity, EditLinkAccess[] allowedAccessTypeArray, String contextPath) {
if( allowedAccessTypeArray == null || dprop == null || allowedAccessTypeArray.length == 0 ) { if( allowedAccessTypeArray == null || dprop == null || allowedAccessTypeArray.length == 0 ) {
log.debug("null or empty access type array in doDataProp for dprop "+dprop.getPublicName()+"; most likely just a property prohibited from editing"); log.debug("null or empty access type array in doDataProp for dprop "+dprop.getPublicName()+"; most likely just a property prohibited from editing");
return empty_array; return empty_array;
@ -191,7 +208,7 @@ public class PropertyEditLinks extends TagSupport{
return links; return links;
} }
protected LinkStruct[] doVitroNsProp(String subjectUri, String propertyUri, String themeDir, EditLinkAccess[] allowedAccessTypeArray, String contextPath) { protected LinkStruct[] doVitroNsDataProp(String subjectUri, String propertyUri, EditLinkAccess[] allowedAccessTypeArray, String contextPath) {
if( allowedAccessTypeArray == null || subjectUri == null || allowedAccessTypeArray.length == 0 ) { if( allowedAccessTypeArray == null || subjectUri == null || allowedAccessTypeArray.length == 0 ) {
log.debug("null or empty access type array in doDataProp for vitro namespace property " + propertyUri + "; most likely just a property prohibited from editing"); log.debug("null or empty access type array in doDataProp for vitro namespace property " + propertyUri + "; most likely just a property prohibited from editing");
return empty_array; return empty_array;
@ -229,18 +246,29 @@ public class PropertyEditLinks extends TagSupport{
return links; return links;
} }
// Used for ontology object properties
protected LinkStruct[] doObjProp(ObjectProperty oprop, Individual entity, String themeDir, EditLinkAccess[] allowedAccessTypeArray, String contextPath) { protected LinkStruct[] doObjProp(ObjectProperty oprop, Individual entity, EditLinkAccess[] allowedAccessTypeArray, String contextPath) {
if( allowedAccessTypeArray == null || oprop == null || allowedAccessTypeArray.length == 0 ) { if( allowedAccessTypeArray == null || oprop == null || allowedAccessTypeArray.length == 0 ) {
log.debug("null or empty access type array in doObjProp for oprop "+oprop.getDomainPublic()+"; most likely just a property prohibited from editing"); log.debug("null or empty access type array in doObjProp for oprop "+oprop.getDomainPublic()+"; most likely just a property prohibited from editing");
return empty_array; return empty_array;
} }
return doObjProp(entity.getURI(), oprop.getURI(), allowedAccessTypeArray, contextPath);
}
// Used for Vitro namespace object properties
protected LinkStruct[] doObjProp(String subjectUri, String predicateUri, EditLinkAccess[] allowedAccessTypeArray, String contextPath) {
if( allowedAccessTypeArray == null || subjectUri == null || allowedAccessTypeArray.length == 0 ) {
log.debug("null or empty access type array in doObjProp for oprop "+ predicateUri +"; most likely just a property prohibited from editing");
return empty_array;
}
LinkStruct[] links = new LinkStruct[1]; LinkStruct[] links = new LinkStruct[1];
if( contains( allowedAccessTypeArray, EditLinkAccess.ADDNEW )){ if( contains( allowedAccessTypeArray, EditLinkAccess.ADDNEW )){
String url= makeRelativeHref(contextPath + "edit/editRequestDispatch.jsp", String url= makeRelativeHref(contextPath + "edit/editRequestDispatch.jsp",
"subjectUri", entity.getURI(), "subjectUri", subjectUri,
"predicateUri", oprop.getURI()); "predicateUri", predicateUri);
LinkStruct ls = new LinkStruct(); LinkStruct ls = new LinkStruct();
ls.setHref( url ); ls.setHref( url );
ls.setType("add"); ls.setType("add");
@ -250,7 +278,7 @@ public class PropertyEditLinks extends TagSupport{
return links; return links;
} }
protected LinkStruct[] doDataPropStmt(DataPropertyStatement dpropStmt, String themeDir, EditLinkAccess[] allowedAccessTypeArray, String contextPath) { protected LinkStruct[] doDataPropStmt(DataPropertyStatement dpropStmt, EditLinkAccess[] allowedAccessTypeArray, String contextPath) {
if( allowedAccessTypeArray == null || dpropStmt == null || allowedAccessTypeArray.length == 0 ) { if( allowedAccessTypeArray == null || dpropStmt == null || allowedAccessTypeArray.length == 0 ) {
log.info("null or empty access type array in doDataPropStmt for "+dpropStmt.getDatapropURI()); log.info("null or empty access type array in doDataPropStmt for "+dpropStmt.getDatapropURI());
return empty_array; return empty_array;
@ -300,56 +328,7 @@ public class PropertyEditLinks extends TagSupport{
return links; return links;
} }
protected LinkStruct[] doObjPropStmt(ObjectPropertyStatement opropStmt, String themeDir2, EditLinkAccess[] allowedAccessTypeArray, String contextPath) { protected LinkStruct[] doVitroNsDataPropStmt(DataPropertyStatement dpropStmt, Individual subject, EditLinkAccess[] allowedAccessTypeArray, String contextPath) {
if( allowedAccessTypeArray == null || opropStmt == null || allowedAccessTypeArray.length == 0 ) {
log.info("null or empty access type array in doObjPropStmt for "+opropStmt.getPropertyURI());
return empty_array;
}
LinkStruct[] links = new LinkStruct[2];
int index=0;
if( contains( allowedAccessTypeArray, EditLinkAccess.MODIFY ) ){
log.debug("permission found to UPDATE object property statement "+opropStmt.getPropertyURI()+" so icon created");
String url = ( contains( allowedAccessTypeArray, EditLinkAccess.DELETE ) )
? makeRelativeHref(contextPath + "edit/editRequestDispatch.jsp",
"subjectUri", opropStmt.getSubjectURI(),
"predicateUri", opropStmt.getPropertyURI(),
"objectUri", opropStmt.getObjectURI())
: makeRelativeHref(contextPath + "edit/editRequestDispatch.jsp",
"subjectUri", opropStmt.getSubjectURI(),
"predicateUri", opropStmt.getPropertyURI(),
"objectUri", opropStmt.getObjectURI(),
"deleteProhibited", "prohibited");
LinkStruct ls = new LinkStruct();
ls.setHref( url );
ls.setType("edit");
ls.setMouseoverText("change this relationship");
links[index] = ls; index++;
} else {
log.debug("NO permission to UPDATE this object property statement ("+opropStmt.getPropertyURI()+") found in policy");
}
if( contains( allowedAccessTypeArray, EditLinkAccess.DELETE ) ){
log.debug("permission found to DELETE object property statement "+opropStmt.getPropertyURI()+" so icon created");
String url = makeRelativeHref(contextPath + "edit/editRequestDispatch.jsp",
"subjectUri", opropStmt.getSubjectURI(),
"predicateUri", opropStmt.getPropertyURI(),
"objectUri", opropStmt.getObjectURI(),
"cmd", "delete");
LinkStruct ls = new LinkStruct();
ls.setHref( url );
ls.setType("delete");
ls.setMouseoverText("delete this relationship");
links[index] = ls; index++;
} else {
log.debug("NO permission to DELETE this object property statement ("+opropStmt.getPropertyURI()+") found in policy");
}
return links;
}
protected LinkStruct[] doVitroNamespacePropStmt(DataPropertyStatement dpropStmt, Individual subject, String themeDir, EditLinkAccess[] allowedAccessTypeArray, String contextPath) {
if( allowedAccessTypeArray == null || dpropStmt == null || allowedAccessTypeArray.length == 0 ) { if( allowedAccessTypeArray == null || dpropStmt == null || allowedAccessTypeArray.length == 0 ) {
log.debug("Null or empty access type array for vitro namespace property " + dpropStmt.getDatapropURI()); log.debug("Null or empty access type array for vitro namespace property " + dpropStmt.getDatapropURI());
@ -432,6 +411,105 @@ public class PropertyEditLinks extends TagSupport{
return links; return links;
} }
protected LinkStruct[] doObjPropStmt(ObjectPropertyStatement opropStmt, EditLinkAccess[] allowedAccessTypeArray, String contextPath) {
if( allowedAccessTypeArray == null || opropStmt == null || allowedAccessTypeArray.length == 0 ) {
log.info("null or empty access type array in doObjPropStmt for "+opropStmt.getPropertyURI());
return empty_array;
}
LinkStruct[] links = new LinkStruct[2];
int index=0;
if( contains( allowedAccessTypeArray, EditLinkAccess.MODIFY ) ){
log.debug("permission found to UPDATE object property statement "+opropStmt.getPropertyURI()+" so icon created");
String url = ( contains( allowedAccessTypeArray, EditLinkAccess.DELETE ) )
? makeRelativeHref(contextPath + "edit/editRequestDispatch.jsp",
"subjectUri", opropStmt.getSubjectURI(),
"predicateUri", opropStmt.getPropertyURI(),
"objectUri", opropStmt.getObjectURI())
: makeRelativeHref(contextPath + "edit/editRequestDispatch.jsp",
"subjectUri", opropStmt.getSubjectURI(),
"predicateUri", opropStmt.getPropertyURI(),
"objectUri", opropStmt.getObjectURI(),
"deleteProhibited", "prohibited");
LinkStruct ls = new LinkStruct();
ls.setHref( url );
ls.setType("edit");
ls.setMouseoverText("change this relationship");
links[index] = ls; index++;
} else {
log.debug("NO permission to UPDATE this object property statement ("+opropStmt.getPropertyURI()+") found in policy");
}
if( contains( allowedAccessTypeArray, EditLinkAccess.DELETE ) ){
log.debug("permission found to DELETE object property statement "+opropStmt.getPropertyURI()+" so icon created");
String url = makeRelativeHref(contextPath + "edit/editRequestDispatch.jsp",
"subjectUri", opropStmt.getSubjectURI(),
"predicateUri", opropStmt.getPropertyURI(),
"objectUri", opropStmt.getObjectURI(),
"cmd", "delete");
LinkStruct ls = new LinkStruct();
ls.setHref( url );
ls.setType("delete");
ls.setMouseoverText("delete this relationship");
links[index] = ls; index++;
} else {
log.debug("NO permission to DELETE this object property statement ("+opropStmt.getPropertyURI()+") found in policy");
}
return links;
}
// protected LinkStruct[] doObjPropStmt(ObjectPropertyStatement opropStmt, EditLinkAccess[] allowedAccessTypeArray, String contextPath) {
// if( allowedAccessTypeArray == null || opropStmt == null || allowedAccessTypeArray.length == 0 ) {
// log.info("null or empty access type array in doObjPropStmt for "+opropStmt.getPropertyURI());
// return empty_array;
// }
// LinkStruct[] links = new LinkStruct[2];
// int index=0;
//
// if( contains( allowedAccessTypeArray, EditLinkAccess.MODIFY ) ){
// log.debug("permission found to UPDATE object property statement "+opropStmt.getPropertyURI()+" so icon created");
// String url = ( contains( allowedAccessTypeArray, EditLinkAccess.DELETE ) )
// ? makeRelativeHref(contextPath + "edit/editRequestDispatch.jsp",
// "subjectUri", opropStmt.getSubjectURI(),
// "predicateUri", opropStmt.getPropertyURI(),
// "objectUri", opropStmt.getObjectURI())
// : makeRelativeHref(contextPath + "edit/editRequestDispatch.jsp",
// "subjectUri", opropStmt.getSubjectURI(),
// "predicateUri", opropStmt.getPropertyURI(),
// "objectUri", opropStmt.getObjectURI(),
// "deleteProhibited", "prohibited");
//
// LinkStruct ls = new LinkStruct();
// ls.setHref( url );
// ls.setType("edit");
// ls.setMouseoverText("change this relationship");
// links[index] = ls; index++;
//
// } else {
// log.debug("NO permission to UPDATE this object property statement ("+opropStmt.getPropertyURI()+") found in policy");
// }
// if( contains( allowedAccessTypeArray, EditLinkAccess.DELETE ) ){
// log.debug("permission found to DELETE object property statement "+opropStmt.getPropertyURI()+" so icon created");
// String url = makeRelativeHref(contextPath + "edit/editRequestDispatch.jsp",
// "subjectUri", opropStmt.getSubjectURI(),
// "predicateUri", opropStmt.getPropertyURI(),
// "objectUri", opropStmt.getObjectURI(),
// "cmd", "delete");
// LinkStruct ls = new LinkStruct();
// ls.setHref( url );
// ls.setType("delete");
// ls.setMouseoverText("delete this relationship");
// links[index] = ls; index++;
//
// } else {
// log.debug("NO permission to DELETE this object property statement ("+opropStmt.getPropertyURI()+") found in policy");
// }
// return links;
// }
/* ********************* utility methods ********************************* */ /* ********************* utility methods ********************************* */
protected static String makeRelativeHref( String baseUrl, String ... queries ) { protected static String makeRelativeHref( String baseUrl, String ... queries ) {
String href = baseUrl; String href = baseUrl;
@ -599,8 +677,12 @@ public class PropertyEditLinks extends TagSupport{
} }
private boolean isVitroNsProp(String predicateUri) { private boolean isVitroNsDataProp(String predicateUri) {
return FrontEndEditingUtils.VITRO_NS_PROPS_FOR_FRONT_END_EDITING.contains(predicateUri); return FrontEndEditingUtils.VITRO_NS_DATAPROPS.contains(predicateUri);
}
private boolean isVitroNsObjectProp(String predicateUri) {
return FrontEndEditingUtils.VITRO_NS_OBJECT_PROPS.contains(predicateUri);
} }
} }

View file

@ -36,7 +36,7 @@
************************************** */ ************************************** */
final String DEFAULT_DATA_FORM = "defaultDatapropForm.jsp"; final String DEFAULT_DATA_FORM = "defaultDatapropForm.jsp";
final String DEFAULT_VITRO_NS_FORM = "defaultVitroNsPropForm.jsp"; final String DEFAULT_VITRO_NS_FORM = "defaultVitroNsDataPropForm.jsp";
final String DEFAULT_ERROR_FORM = "error.jsp"; final String DEFAULT_ERROR_FORM = "error.jsp";
if (!VitroRequestPrep.isSelfEditing(request) && !LoginFormBean.loggedIn(request, LoginFormBean.NON_EDITOR)) { if (!VitroRequestPrep.isSelfEditing(request) && !LoginFormBean.loggedIn(request, LoginFormBean.NON_EDITOR)) {

View file

@ -236,6 +236,7 @@ public static Log log = LogFactory.getLog("edu.cornell.mannlib.vitro.webapp.jsp.
%> %>
<jsp:forward page="/edit/forms/${form}" /> <jsp:forward page="/edit/forms/${form}" />
<%! <%!
private static synchronized void setEditReferer(String editKey, String refererUrl, HttpSession session) { private static synchronized void setEditReferer(String editKey, String refererUrl, HttpSession session) {

View file

@ -9,14 +9,25 @@
<%@ page import="edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory" %> <%@ 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.beans.DataProperty" %>
<%@ page import="edu.cornell.mannlib.vitro.webapp.dao.DataPropertyDao" %> <%@ page import="edu.cornell.mannlib.vitro.webapp.dao.DataPropertyDao" %>
<%@ page import="edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary"%>
<%@ page import="java.util.List" %> <%@ page import="java.util.List" %>
<%@ page import="org.apache.commons.logging.Log" %> <%@ page import="org.apache.commons.logging.Log" %>
<%@ page import="org.apache.commons.logging.LogFactory" %> <%@ page import="org.apache.commons.logging.LogFactory" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ taglib prefix="v" uri="http://vitro.mannlib.cornell.edu/vitro/tags" %> <%@ 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.defaultLinkForm.jsp"); public static Log log = LogFactory.getLog("edu.cornell.mannlib.vitro.webapp.jsp.edit.forms.defaultLinkForm.jsp");
%> %>
<%
String predicateUri = (String)request.getAttribute("predicateUri");
%>
<c:set var="vitroUri" value="<%= VitroVocabulary.vitroURI %>" />
<c:set var="rdfUri" value="<%= VitroVocabulary.RDF %>" />
<%-- Enter here any class names to be used for constructing INDIVIDUALS_VIA_VCLASS pick lists <%-- 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. 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 NOTE that this class may not exist in the model, in which the only choice of type
@ -28,7 +39,7 @@ public static Log log = LogFactory.getLog("edu.cornell.mannlib.vitro.webapp.jsp.
Each of these must then be referenced in the sparqlForExistingLiterals section of the JSON block below Each of these must then be referenced in the sparqlForExistingLiterals section of the JSON block below
and in the literalsOnForm --%> and in the literalsOnForm --%>
<v:jsonset var="urlExisting" > <v:jsonset var="urlExisting" >
PREFIX vitro: <http://vitro.mannlib.cornell.edu/ns/vitro/0.7#> PREFIX vitro: <${vitroUri}> .
SELECT ?urlExisting SELECT ?urlExisting
WHERE { ?link vitro:linkURL ?urlExisting } WHERE { ?link vitro:linkURL ?urlExisting }
</v:jsonset> </v:jsonset>
@ -36,17 +47,17 @@ public static Log log = LogFactory.getLog("edu.cornell.mannlib.vitro.webapp.jsp.
The actual assertion inserted in the model will be created via string substitution into the ? variables. 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) --%> NOTE the pattern of punctuation (a period after the prefix URI and after the ?field) --%>
<v:jsonset var="urlAssertion" > <v:jsonset var="urlAssertion" >
@prefix vitro: <http://vitro.mannlib.cornell.edu/ns/vitro/0.7#> . @prefix vitro: <${vitroUri}> .
?link vitro:linkURL ?url . ?link vitro:linkURL ?url .
</v:jsonset> </v:jsonset>
<v:jsonset var="anchorExisting" > <v:jsonset var="anchorExisting" >
PREFIX vitro: <http://vitro.mannlib.cornell.edu/ns/vitro/0.7#> PREFIX vitro: <${vitroUri}> .
SELECT ?anchorExisting SELECT ?anchorExisting
WHERE { ?link vitro:linkAnchor ?anchorExisting } WHERE { ?link vitro:linkAnchor ?anchorExisting }
</v:jsonset> </v:jsonset>
<v:jsonset var="anchorAssertion" > <v:jsonset var="anchorAssertion" >
@prefix vitro: <http://vitro.mannlib.cornell.edu/ns/vitro/0.7#> . @prefix vitro: <${vitroUri}> .
?link vitro:linkAnchor ?anchor . ?link vitro:linkAnchor ?anchor .
</v:jsonset> </v:jsonset>
@ -54,11 +65,10 @@ public static Log log = LogFactory.getLog("edu.cornell.mannlib.vitro.webapp.jsp.
the SparqlForExistingUris --%> the SparqlForExistingUris --%>
<v:jsonset var="n3ForEdit"> <v:jsonset var="n3ForEdit">
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdf: <${rdfUri}> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix vitro: <${vitroUri}> .
@prefix vitro: <http://vitro.mannlib.cornell.edu/ns/vitro/0.7#> .
?subject vitro:additionalLink ?link . ?subject <${predicateUri}> ?link .
?link rdf:type vitro:Link . ?link rdf:type vitro:Link .
@ -69,7 +79,7 @@ public static Log log = LogFactory.getLog("edu.cornell.mannlib.vitro.webapp.jsp.
</v:jsonset> </v:jsonset>
<v:jsonset var="n3Optional"> <v:jsonset var="n3Optional">
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdf: <${rdfUri}> .
?link rdf:type ?type . ?link rdf:type ?type .
</v:jsonset> </v:jsonset>
@ -126,6 +136,8 @@ public static Log log = LogFactory.getLog("edu.cornell.mannlib.vitro.webapp.jsp.
} }
</c:set> </c:set>
<% <%
log.debug(request.getAttribute("editjson"));
EditConfiguration editConfig = EditConfiguration.getConfigFromSession(session,request); EditConfiguration editConfig = EditConfiguration.getConfigFromSession(session,request);
if( editConfig == null ){ if( editConfig == null ){
editConfig = new EditConfiguration((String)request.getAttribute("editjson")); editConfig = new EditConfiguration((String)request.getAttribute("editjson"));
@ -143,13 +155,14 @@ public static Log log = LogFactory.getLog("edu.cornell.mannlib.vitro.webapp.jsp.
/* get some data to make the form more useful */ /* get some data to make the form more useful */
Individual subject = (Individual)request.getAttribute("subject"); Individual subject = (Individual)request.getAttribute("subject");
String submitLabel=""; // don't put local variables into the request String submitLabel="";
/* title is used by pre and post form fragments */ String title="";
String linkType = predicateUri.equals(VitroVocabulary.PRIMARY_LINK) ? "primary" : "additional";
if (objectUri != null) { if (objectUri != null) {
request.setAttribute("title", "Edit link for " + subject.getName()); title = "Edit <em>" + linkType + " link</em> for " + subject.getName();
submitLabel = "Save changes"; submitLabel = "Save changes";
} else { } else {
request.setAttribute("title","Create a new link for " + subject.getName()); title = "Create a new <em>" + linkType + " link</em> for " + subject.getName();
submitLabel = "Create new link"; submitLabel = "Create new link";
} }
@ -157,11 +170,11 @@ public static Log log = LogFactory.getLog("edu.cornell.mannlib.vitro.webapp.jsp.
<jsp:include page="${preForm}"/> <jsp:include page="${preForm}"/>
<h2>${title}</h2> <h2><%= title %></h2>
<form action="<c:url value="/edit/processRdfForm2.jsp"/>" > <form action="<c:url value="/edit/processRdfForm2.jsp"/>" >
<v:input type="text" label="URL" id="url" size="70"/> <v:input type="text" label="URL" id="url" size="70"/>
<v:input type="text" label="label" id="anchor" size="60"/> <v:input type="text" label="Link anchor text" id="anchor" size="60"/>
<v:input type="submit" id="submit" value="<%=submitLabel%>" cancel="${param.subjectUri}"/> <p class="submit"><v:input type="submit" id="submit" value="<%=submitLabel%>" cancel="${param.subjectUri}"/></p>
</form> </form>
<jsp:include page="${postForm}"/> <jsp:include page="${postForm}"/>

View file

@ -0,0 +1,176 @@
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
<%@ page import="com.hp.hpl.jena.rdf.model.Literal" %>
<%@ page import="com.hp.hpl.jena.rdf.model.Model" %>
<%@ 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.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="java.util.List" %>
<%@ 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.defaultLinkForm.jsp");
%>
<c:set var="vitroUri" value="<%= VitroVocabulary.vitroURI %>" />
<c:set var="rdfUri" value="<%= VitroVocabulary.RDF %>" />
<c:set var="rdfsUri" value="<%= VitroVocabulary.RDFS %>" />
<%-- 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 --%>
<v:jsonset var="urlExisting" >
SELECT ?urlExisting
WHERE { ?link <${predicateUri}> ?urlExisting }
</v:jsonset>
<%-- 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) --%>
<v:jsonset var="urlAssertion" >
?link <${predicateUri}> ?url .
</v:jsonset>
<v:jsonset var="anchorExisting" >
PREFIX vitro: <${vitroUri}>
SELECT ?anchorExisting
WHERE { ?link vitro:linkAnchor ?anchorExisting }
</v:jsonset>
<v:jsonset var="anchorAssertion" >
@prefix vitro: <${vitroUri}> .
?link vitro:linkAnchor ?anchor .
</v:jsonset>
<%-- When not retrieving a literal via a datatype property, put the SPARQL statement into
the SparqlForExistingUris --%>
<v:jsonset var="n3ForEdit">
@prefix rdf: <${rdfUri}> .
@prefix vitro: <${vitroUri}> .
?subject <${predicateUri}> ?link .
?link rdf:type vitro:Link .
?link
vitro:linkURL ?url ;
vitro:linkAnchor ?anchor .
</v:jsonset>
<v:jsonset var="n3Optional">
@prefix rdf: <${rdfUri}> .
?link rdf:type ?type .
</v:jsonset>
<c:set var="editjson" scope="request">
{
"formUrl" : "${formUrl}",
"editKey" : "${editKey}",
"urlPatternToReturnTo" : "/entity",
"subject" : ["subject", "${subjectUriJson}" ],
"predicate" : ["predicate", "${predicateUriJson}" ],
"object" : ["link", "${objectUriJson}", "URI" ],
"n3required" : [ "${n3ForEdit}" ],
"n3optional" : [ "${n3Optional}" ],
"newResources" : { },
"urisInScope" : { },
"literalsInScope" : { },
"urisOnForm" : [ ],
"literalsOnForm" : [ "url", "anchor" ],
"filesOnForm" : [ ],
"sparqlForLiterals" : { },
"sparqlForUris" : { },
"sparqlForExistingLiterals" : {
"url" : "${urlExisting}",
"anchor" : "${anchorExisting}"
},
"sparqlForExistingUris" : { },
"fields" : {
"url" : {
"newResource" : "false",
"validators" : [ "nonempty" ],
"optionsType" : "UNDEFINED",
"literalOptions" : [ ],
"predicateUri" : "",
"objectClassUri" : "",
"rangeDatatypeUri" : "",
"rangeLang" : "",
"assertions" : [ "${urlAssertion}" ]
},
"anchor" : {
"newResource" : "false",
"validators" : [ "nonempty" ],
"optionsType" : "UNDEFINED",
"literalOptions" : [ ],
"predicateUri" : "",
"objectClassUri" : "",
"rangeDatatypeUri" : "",
"rangeLang" : "",
"assertions" : [ "${anchorAssertion}" ]
}
}
}
</c:set>
<%
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");
String objectUri = (String)request.getAttribute("objectUri");
if( objectUri != null ){
editConfig.prepareForObjPropUpdate(model);
}else{
editConfig.prepareForNonUpdate(model);
}
/* get some data to make the form more useful */
Individual subject = (Individual)request.getAttribute("subject");
String submitLabel="";
String title = "";
if (objectUri != null) {
title = "Edit <em>url</em> for " + subject.getName();
submitLabel = "Save changes";
} else {
title = "Create a new <em>url</em> for " + subject.getName();
submitLabel = "Create new url";
}
%>
<jsp:include page="${preForm}"/>
<h2><%= title %></h2>
<form action="<c:url value="/edit/processRdfForm2.jsp"/>" >
<v:input type="text" label="URL" id="url" size="70"/>
<v:input type="text" label="Anchor text" id="anchor" size="60"/><br />
<v:input type="submit" id="submit" value="<%=submitLabel%>" cancel="${param.subjectUri}"/>
</form>
<jsp:include page="${postForm}"/>

View file

@ -149,11 +149,19 @@ RY Description not working - FIX
</div> <!-- end labelAndMoniker --> </div> <!-- end labelAndMoniker -->
<%-- Links --%> <%-- Links --%>
<c:if test="${ showEdits || !empty entity.anchor || !empty entity.linksList }"> <c:if test="${ showEdits || !empty entity.url || !empty entity.linksList }">
<div id="dprop-vitro-link" class="propsItem ${editingClass}"> <div id="dprop-vitro-urls" class="propsItem ${editingClass}">
<c:if test="${showEdits}"> <c:if test="${showEdits}">
<h3 class="propertyName">links</h3> <h3 class="propertyName">links</h3>
<edLnk:editLinks item="<%= VitroVocabulary.LINK_ANCHOR %>" icons="false" /> <c:choose>
<c:when test="${empty entity.url}">
<c:set var="addUrlPredicate" value="<%= VitroVocabulary.PRIMARY_LINK %>" />
</c:when>
<c:otherwise>
<c:set var="addUrlPredicate" value="<%= VitroVocabulary.ADDITIONAL_LINK %>" />
</c:otherwise>
</c:choose>
<edLnk:editLinks item="${addUrlPredicate}" icons="false" />
</c:if> </c:if>
<div class="datatypeProperties"> <div class="datatypeProperties">
<div class="datatypePropertyValue"> <div class="datatypePropertyValue">