diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/ObjectPropertyStatementImpl.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/ObjectPropertyStatementImpl.java index 2aa56c5c7..80d8989f9 100755 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/ObjectPropertyStatementImpl.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/ObjectPropertyStatementImpl.java @@ -8,8 +8,6 @@ import java.util.Comparator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import edu.cornell.mannlib.vitro.webapp.controller.EntityController; - /** * a class representing a particular instance of an object property * @@ -38,9 +36,17 @@ propertyId sunrise sunset qualifier - */ + */ + + public ObjectPropertyStatementImpl() { } - /* (non-Javadoc) + public ObjectPropertyStatementImpl(String subjectUri, String propertyUri, String objectUri) { + subjectURI = subjectUri; + propertyURI = propertyUri; + objectURI = objectUri; + } + +/* (non-Javadoc) * @see edu.cornell.mannlib.vitro.webapp.beans.ObjectPropertyStatement#toString() */ public String toString(){ diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/FrontEndEditingUtils.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/FrontEndEditingUtils.java index e81d86382..61258eb1a 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/FrontEndEditingUtils.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/FrontEndEditingUtils.java @@ -12,7 +12,7 @@ import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; public class FrontEndEditingUtils { - public static final List VITRO_NS_DATAPROPS = Arrays.asList(VitroVocabulary.BLURB, + public static final List VITRO_NS_DATA_PROPS = Arrays.asList(VitroVocabulary.BLURB, VitroVocabulary.CITATION, VitroVocabulary.DESCRIPTION, VitroVocabulary.IMAGETHUMB, diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/jsptags/PropertyEditLinks.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/jsptags/PropertyEditLinks.java index 5556c0a5d..8a960b0ff 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/jsptags/PropertyEditLinks.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/jsptags/PropertyEditLinks.java @@ -41,9 +41,11 @@ import edu.cornell.mannlib.vitro.webapp.beans.DataPropertyStatementImpl; import edu.cornell.mannlib.vitro.webapp.beans.Individual; import edu.cornell.mannlib.vitro.webapp.beans.ObjectProperty; import edu.cornell.mannlib.vitro.webapp.beans.ObjectPropertyStatement; +import edu.cornell.mannlib.vitro.webapp.beans.ObjectPropertyStatementImpl; import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.RdfLiteralHash; import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils; +import edu.cornell.mannlib.vitro.webapp.utils.StringUtils; /** * JSP tag to generate the HTML of links for edit, delete or @@ -117,16 +119,20 @@ public class PropertyEditLinks extends TagSupport{ if( item instanceof ObjectPropertyStatement ){ ObjectPropertyStatement prop = (ObjectPropertyStatement)item; - links = doObjPropStmt( prop, policyToAccess(ids, policy, prop), contextPath ); + links = doObjPropStmt( prop, policyToAccess(ids, policy, prop), contextPath ); + } else if( item instanceof DataPropertyStatement ){ DataPropertyStatement prop = (DataPropertyStatement)item; links = doDataPropStmt( prop, policyToAccess(ids, policy, prop), contextPath ); + } else if (entity == null) { log.error("unable to find an Individual in request using var name 'entity'"); - return SKIP_BODY; + return SKIP_BODY; + } else if( item instanceof ObjectProperty ){ ObjectProperty prop = (ObjectProperty)item; - links = doObjProp( prop, entity, policyToAccess(ids, policy, entity.getURI(), prop), contextPath ); + links = doObjProp( prop, entity, policyToAccess(ids, policy, entity.getURI(), prop), contextPath ); + } else if( item instanceof DataProperty ){ DataProperty prop = (DataProperty)item; // a DataProperty populated for this subject individual links = doDataProp( prop, entity, policyToAccess(ids, policy, entity.getURI(), prop),contextPath ); @@ -142,12 +148,15 @@ public class PropertyEditLinks extends TagSupport{ DataPropertyStatement dps = (DataPropertyStatement) new DataPropertyStatementImpl(subjectUri, predicateUri, data); links = doVitroNsDataPropStmt( dps, entity, policyToAccess(ids, policy, dps), contextPath ); } - } else if (isVitroNsObjectProp(predicateUri)) { + } else if (isVitroNsObjProp(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 { // links to edit or delete an existing value + // RY **** May need new policyToAccess which gets the specific obj prop statement using the data as well as subject and predicate + // This is NOT the correct object property statement - we need the link individual uri in data, instead of the link URL + // Then we can combine this with doObjPropStmt + ObjectPropertyStatement prop = new ObjectPropertyStatementImpl(subjectUri, predicateUri, data); + links = doVitroNsObjPropStmt( subjectUri, predicateUri, data, policyToAccess(ids, policy, prop), contextPath ); } } else { @@ -246,7 +255,6 @@ public class PropertyEditLinks extends TagSupport{ return links; } - // Used for ontology object properties protected LinkStruct[] doObjProp(ObjectProperty oprop, Individual entity, EditLinkAccess[] allowedAccessTypeArray, String contextPath) { 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"); @@ -256,7 +264,6 @@ public class PropertyEditLinks extends TagSupport{ 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"); @@ -264,15 +271,14 @@ public class PropertyEditLinks extends TagSupport{ } LinkStruct[] links = new LinkStruct[1]; - if( contains( allowedAccessTypeArray, EditLinkAccess.ADDNEW )){ - + if( contains( allowedAccessTypeArray, EditLinkAccess.ADDNEW )){ String url= makeRelativeHref(contextPath + "edit/editRequestDispatch.jsp", "subjectUri", subjectUri, "predicateUri", predicateUri); LinkStruct ls = new LinkStruct(); ls.setHref( url ); ls.setType("add"); - ls.setMouseoverText("add relationship"); + ls.setMouseoverText("add " + getObjPropMouseoverLabel(predicateUri)); links[0]=ls; } return links; @@ -416,98 +422,72 @@ public class PropertyEditLinks extends TagSupport{ log.info("null or empty access type array in doObjPropStmt for "+opropStmt.getPropertyURI()); return empty_array; } + + String subjectUri = opropStmt.getSubjectURI(); + String predicateUri = opropStmt.getPropertyURI(); + String objectUri = opropStmt.getObjectURI(); + String mouseoverLabel = "relationship"; + + return doObjPropStmt(subjectUri, predicateUri, objectUri, allowedAccessTypeArray, contextPath, mouseoverLabel); + } + + protected LinkStruct[] doVitroNsObjPropStmt(String subjectUri, String predicateUri, String objectUri, EditLinkAccess[] allowedAccessTypeArray, String contextPath) { + if( allowedAccessTypeArray == null || subjectUri == null || allowedAccessTypeArray.length == 0 ) { + log.info("null or empty access type array in doObjPropStmt for " + predicateUri); + return empty_array; + } + + Model model = (Model)pageContext.getServletContext().getAttribute("jenaOntModel"); + + String mouseoverLabel = getObjPropMouseoverLabel(predicateUri); + return doObjPropStmt(subjectUri, predicateUri, objectUri, allowedAccessTypeArray, contextPath, mouseoverLabel); + } + + protected LinkStruct[] doObjPropStmt(String subjectUri, String predicateUri, String objectUri, EditLinkAccess[] allowedAccessTypeArray, String contextPath, String mouseoverLabel) { + 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"); + if( contains( allowedAccessTypeArray, EditLinkAccess.MODIFY ) ){ + log.debug("permission found to UPDATE object property statement "+ predicateUri +" so icon created"); String url = ( contains( allowedAccessTypeArray, EditLinkAccess.DELETE ) ) ? makeRelativeHref(contextPath + "edit/editRequestDispatch.jsp", - "subjectUri", opropStmt.getSubjectURI(), - "predicateUri", opropStmt.getPropertyURI(), - "objectUri", opropStmt.getObjectURI()) + "subjectUri", subjectUri, + "predicateUri", predicateUri, + "objectUri", objectUri) : makeRelativeHref(contextPath + "edit/editRequestDispatch.jsp", - "subjectUri", opropStmt.getSubjectURI(), - "predicateUri", opropStmt.getPropertyURI(), - "objectUri", opropStmt.getObjectURI(), + "subjectUri", subjectUri, + "predicateUri", predicateUri, + "objectUri", objectUri, "deleteProhibited", "prohibited"); LinkStruct ls = new LinkStruct(); ls.setHref( url ); ls.setType("edit"); - ls.setMouseoverText("change this relationship"); + ls.setMouseoverText("change this " + mouseoverLabel); links[index] = ls; index++; } else { - log.debug("NO permission to UPDATE this object property statement ("+opropStmt.getPropertyURI()+") found in policy"); + log.debug("NO permission to UPDATE this object property statement (" + predicateUri + ") found in policy"); } if( contains( allowedAccessTypeArray, EditLinkAccess.DELETE ) ){ - log.debug("permission found to DELETE object property statement "+opropStmt.getPropertyURI()+" so icon created"); + log.debug("permission found to DELETE object property statement "+ predicateUri + " so icon created"); String url = makeRelativeHref(contextPath + "edit/editRequestDispatch.jsp", - "subjectUri", opropStmt.getSubjectURI(), - "predicateUri", opropStmt.getPropertyURI(), - "objectUri", opropStmt.getObjectURI(), + "subjectUri", subjectUri, + "predicateUri", predicateUri, + "objectUri", objectUri, "cmd", "delete"); LinkStruct ls = new LinkStruct(); ls.setHref( url ); ls.setType("delete"); - ls.setMouseoverText("delete this relationship"); + ls.setMouseoverText("delete this " + mouseoverLabel); links[index] = ls; index++; } else { - log.debug("NO permission to DELETE this object property statement ("+opropStmt.getPropertyURI()+") found in policy"); + log.debug("NO permission to DELETE this object property statement (" + predicateUri + ") 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 ********************************* */ @@ -678,11 +658,21 @@ public class PropertyEditLinks extends TagSupport{ private boolean isVitroNsDataProp(String predicateUri) { - return FrontEndEditingUtils.VITRO_NS_DATAPROPS.contains(predicateUri); + return FrontEndEditingUtils.VITRO_NS_DATA_PROPS.contains(predicateUri); } - private boolean isVitroNsObjectProp(String predicateUri) { + private boolean isVitroNsObjProp(String predicateUri) { return FrontEndEditingUtils.VITRO_NS_OBJECT_PROPS.contains(predicateUri); } + + private String getObjPropMouseoverLabel(String propertyUri) { + String mouseoverText = "relationship"; // default + + if (StringUtils.equalsOneOf(propertyUri, VitroVocabulary.ADDITIONAL_LINK, VitroVocabulary.PRIMARY_LINK)) { + mouseoverText = "link"; + } + + return mouseoverText; + } } diff --git a/webapp/web/edit/forms/defaultLinkForm.jsp b/webapp/web/edit/forms/defaultLinkForm.jsp index f66c132d1..7dbea1215 100644 --- a/webapp/web/edit/forms/defaultLinkForm.jsp +++ b/webapp/web/edit/forms/defaultLinkForm.jsp @@ -22,7 +22,13 @@ public static Log log = LogFactory.getLog("edu.cornell.mannlib.vitro.webapp.jsp.edit.forms.defaultLinkForm.jsp"); %> <% - String predicateUri = (String)request.getAttribute("predicateUri"); + 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"); + %> @@ -39,16 +45,14 @@ Each of these must then be referenced in the sparqlForExistingLiterals section of the JSON block below and in the literalsOnForm --%> - PREFIX vitro: <${vitroUri}> . SELECT ?urlExisting - WHERE { ?link vitro:linkURL ?urlExisting } + WHERE { ?subject ?predicate ?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) --%> - @prefix vitro: <${vitroUri}> . - ?link vitro:linkURL ?url . + ?subject ?predicate ?url . @@ -68,7 +72,7 @@ @prefix rdf: <${rdfUri}> . @prefix vitro: <${vitroUri}> . - ?subject <${predicateUri}> ?link . + ?subject ?predicate ?link . ?link rdf:type vitro:Link . @@ -96,7 +100,7 @@ "n3required" : [ "${n3ForEdit}" ], "n3optional" : [ "${n3Optional}" ], - "newResources" : { "link" : "http://vivo.library.cornell.edu/ns/0.1#individual" }, + "newResources" : { "link" : "${defaultNamespace}" }, "urisInScope" : { }, "literalsInScope" : { }, "urisOnForm" : [ ], @@ -144,8 +148,7 @@ EditConfiguration.putConfigInSession(editConfig, session); } - Model model = (Model)application.getAttribute("jenaOntModel"); - String objectUri = (String)request.getAttribute("objectUri"); + Model model = (Model)application.getAttribute("jenaOntModel"); if( objectUri != null ){ editConfig.prepareForObjPropUpdate(model); }else{ @@ -157,7 +160,7 @@ String submitLabel=""; String title=""; - String linkType = predicateUri.equals(VitroVocabulary.PRIMARY_LINK) ? "primary" : "additional"; + String linkType = propertyUri.equals(VitroVocabulary.PRIMARY_LINK) ? "primary" : "additional"; if (objectUri != null) { title = "Edit " + linkType + " link for " + subject.getName(); submitLabel = "Save changes"; @@ -173,7 +176,7 @@

<%= title %>

" > - +

diff --git a/webapp/web/templates/entity/entityBasic.jsp b/webapp/web/templates/entity/entityBasic.jsp index a6d9db8e7..0eff3c00c 100644 --- a/webapp/web/templates/entity/entityBasic.jsp +++ b/webapp/web/templates/entity/entityBasic.jsp @@ -23,8 +23,8 @@ public static Log log = LogFactory.getLog("edu.cornell.mannlib.vitro.webapp.jsp.templates.entity.entityBasic.jsp"); %> <% -log.debug("Starting entityBasic.jsp"); -Individual entity = (Individual)request.getAttribute("entity"); + log.debug("Starting entityBasic.jsp"); + Individual entity = (Individual)request.getAttribute("entity"); %> @@ -86,13 +86,6 @@ if (VitroRequestPrep.isSelfEditing(request) || LoginFormBean.loggedIn(request, L -<%-- Using VitroVocabulary constants instead. -RY Description not working - FIX - - - ---%> -
@@ -150,7 +143,7 @@ RY Description not working - FIX <%-- Links --%> -
+ + +
<%-- Thumbnail (with citation) --%>