From 94b9fa909125f1567b95dea44d264ad3d3f293f1 Mon Sep 17 00:00:00 2001 From: rjy7 Date: Tue, 11 Jan 2011 02:04:17 +0000 Subject: [PATCH] NIHVIVO-1332 Add object property statement edit links --- .../freemarker/IndividualController.java | 12 ++-- .../CollatedObjectPropertyTemplateModel.java | 3 +- .../DataPropertyStatementTemplateModel.java | 10 +-- .../individual/DataPropertyTemplateModel.java | 15 +---- .../individual/EditLinkHelper.java | 21 ++++-- .../ObjectPropertyStatementTemplateModel.java | 65 +++++++++++++++---- .../ObjectPropertyTemplateModel.java | 15 +---- .../individual/PropertyTemplateModel.java | 6 +- ...UncollatedObjectPropertyTemplateModel.java | 3 +- .../freemarker/body/individual/individual.ftl | 2 +- .../partials/individual/lib-properties.ftl | 30 +++++++-- 11 files changed, 113 insertions(+), 69 deletions(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualController.java index 518d22fc4..f534b47fe 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualController.java @@ -153,14 +153,14 @@ public class IndividualController extends FreemarkerHttpServlet { private Map getEditingData(VitroRequest vreq) { - LoginStatusBean loginBean = LoginStatusBean.getBean(vreq); - + LoginStatusBean loginBean = LoginStatusBean.getBean(vreq); Map editingData = new HashMap(); - editingData.put("showEditLinks", VitroRequestPrep.isSelfEditing(vreq) || loginBean.isLoggedInAtLeast(LoginStatusBean.NON_EDITOR)); - - boolean showAdminPanel = loginBean.isLoggedInAtLeast(LoginStatusBean.EDITOR); - editingData.put("showAdminPanel", showAdminPanel); + // RY This will be improved later. What is important is not whether the user is a self-editor, + // but whether he has editing privileges on this profile. + editingData.put("showEditingLinks", VitroRequestPrep.isSelfEditing(vreq) || + loginBean.isLoggedInAtLeast(LoginStatusBean.NON_EDITOR)); + editingData.put("showAdminPanel", loginBean.isLoggedInAtLeast(LoginStatusBean.EDITOR)); return editingData; } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/CollatedObjectPropertyTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/CollatedObjectPropertyTemplateModel.java index 517037c27..9f181ed5b 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/CollatedObjectPropertyTemplateModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/CollatedObjectPropertyTemplateModel.java @@ -102,6 +102,7 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM new HashMap>(); String currentSubclassUri = null; List currentList = null; + String objectKey = getObjectKey(); for (Map map : statementData) { String subclassUri = map.get("subclass"); // Rows with no subclass are put into a subclass map with an empty name. @@ -114,7 +115,7 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM String subclassName = getSubclassName(subclassUri, vreq); subclassMap.put(subclassName, currentList); } - currentList.add(new ObjectPropertyStatementTemplateModel(subjectUri, propertyUri, map)); + currentList.add(new ObjectPropertyStatementTemplateModel(subjectUri, propertyUri, objectKey, map, vreq)); } return subclassMap; } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/DataPropertyStatementTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/DataPropertyStatementTemplateModel.java index d9f4f89cd..65fd0bab0 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/DataPropertyStatementTemplateModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/DataPropertyStatementTemplateModel.java @@ -24,12 +24,14 @@ public class DataPropertyStatementTemplateModel extends BaseTemplateModel { return statement.getData(); } - public String getEditLink() { - return null; + public String getEditUrl() { + String editUrl = ""; + return editUrl; } - public String getDeleteLink() { - return null; + public String getDeleteUrl() { + String deleteUrl = ""; + return deleteUrl; } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/DataPropertyTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/DataPropertyTemplateModel.java index aef1b0c43..90c45d12b 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/DataPropertyTemplateModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/DataPropertyTemplateModel.java @@ -42,23 +42,10 @@ public class DataPropertyTemplateModel extends PropertyTemplateModel { } @Override - public String getAddLink() { + public String getAddUrl() { // TODO Auto-generated method stub return null; } - -// @Override -// public String getEditLink() { -// // TODO Auto-generated method stub -// return null; -// } -// -// -// @Override -// public String getDeleteLink() { -// // TODO Auto-generated method stub -// return null; -// } public List getStatements() { return statements; diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/EditLinkHelper.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/EditLinkHelper.java index ecd86b59d..64d888331 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/EditLinkHelper.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/EditLinkHelper.java @@ -22,31 +22,40 @@ public class EditLinkHelper { private VitroRequest vreq; private ServletContext context; + private PolicyIface policy; + private IdentifierBundle ids; protected EditLinkHelper(VitroRequest vreq) { this.vreq = vreq; this.context = BaseTemplateModel.getServletContext(); + setPolicy(); + setIds(); } - protected PolicyIface getPolicy() { - PolicyIface policy = RequestPolicyList.getPolicies(vreq); + private void setPolicy() { + policy = RequestPolicyList.getPolicies(vreq); if( policy == null || ( policy instanceof PolicyList && ((PolicyList)policy).size() == 0 )){ policy = ServletPolicyList.getPolicies( context ); if( policy == null || ( policy instanceof PolicyList && ((PolicyList)policy).size() == 0 )){ log.error("No policy found in request at " + RequestPolicyList.POLICY_LIST); } } - return policy; } - protected IdentifierBundle getIds() { - IdentifierBundle ids = (IdentifierBundle)ServletIdentifierBundleFactory + private void setIds() { + ids = (IdentifierBundle)ServletIdentifierBundleFactory .getIdBundleForRequest(vreq, vreq.getSession(), context); if (ids == null) { log.error("No IdentifierBundle objects for request"); } - + } + + protected PolicyIface getPolicy() { + return policy; + } + + protected IdentifierBundle getIds() { return ids; } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/ObjectPropertyStatementTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/ObjectPropertyStatementTemplateModel.java index fff74a767..e213401af 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/ObjectPropertyStatementTemplateModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/ObjectPropertyStatementTemplateModel.java @@ -2,34 +2,59 @@ package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual; -import java.util.HashMap; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import edu.cornell.mannlib.vitro.webapp.beans.Individual; +import edu.cornell.mannlib.vitro.webapp.auth.policy.ifaces.Authorization; +import edu.cornell.mannlib.vitro.webapp.auth.policy.ifaces.PolicyDecision; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestedAction; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.propstmt.EditObjPropStmt; +import edu.cornell.mannlib.vitro.webapp.beans.ObjectPropertyStatement; +import edu.cornell.mannlib.vitro.webapp.beans.ObjectPropertyStatementImpl; +import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; -import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.ParamMap; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.BaseTemplateModel; public class ObjectPropertyStatementTemplateModel extends BaseTemplateModel { - private static final Log log = LogFactory.getLog(ObjectPropertyStatementTemplateModel.class); + private static final Log log = LogFactory.getLog(ObjectPropertyStatementTemplateModel.class); - // RY WE may want to instead store the ObjectPropertyStatement; get the object from the data - // the same way we do in BaseObjectPropertyDataPostProcessor.getQueryObjectVariableName, then - // getting the value from the data. + private static final String EDIT_PATH = "edit/editRequestDispatch.jsp"; + + // RY WE may want to instead store the ObjectPropertyStatement private String subjectUri; // we'll use these to make the edit links private String propertyUri; + private String objectUri; private Map data; + private VitroRequest vreq; + private ObjectPropertyStatement objectPropertyStatement; + private EditLinkHelper editLinkHelper; - ObjectPropertyStatementTemplateModel(String subjectUri, String propertyUri, Map data) { + ObjectPropertyStatementTemplateModel(String subjectUri, String propertyUri, + String objectKey, Map data, VitroRequest vreq) { this.subjectUri = subjectUri; this.propertyUri = propertyUri; + this.objectUri = data.get(objectKey); this.data = data; + this.vreq = vreq; + // Don't set these until needed (when edit links are requested) + this.objectPropertyStatement = null; + this.editLinkHelper = null; + } + + private void doEditingLinkPrep() { + // Assign the objectPropertyStatement and editLinkHelper to instance variables, so we don't + // have to do it twice, once for edit link and once for delete link. + if (objectPropertyStatement == null) { + objectPropertyStatement = new ObjectPropertyStatementImpl(subjectUri, propertyUri, objectUri); + } + if (editLinkHelper == null) { + editLinkHelper = new EditLinkHelper(vreq); + } } - /* Access methods for templates */ @@ -37,11 +62,25 @@ public class ObjectPropertyStatementTemplateModel extends BaseTemplateModel { return data.get(key); } - public String getEditLink() { - return null; + public String getEditUrl() { + String editUrl = ""; + doEditingLinkPrep(); + RequestedAction action = new EditObjPropStmt(objectPropertyStatement); + PolicyDecision decision = editLinkHelper.getPolicy().isAuthorized(editLinkHelper.getIds(), action); + if (decision != null && decision.getAuthorized() == Authorization.AUTHORIZED) { + ParamMap params = new ParamMap( + "subjectUri", subjectUri, + "predicateUri", propertyUri, + "objectUri", objectUri); + editUrl = UrlBuilder.getUrl(EDIT_PATH, params); + } + + return editUrl; } - public String getDeleteLink() { - return null; + public String getDeleteUrl() { + String deleteUrl = ""; + doEditingLinkPrep(); + return deleteUrl; } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/ObjectPropertyTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/ObjectPropertyTemplateModel.java index e2796b98c..561f93e73 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/ObjectPropertyTemplateModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/ObjectPropertyTemplateModel.java @@ -328,22 +328,9 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel public abstract boolean isCollatedBySubclass(); @Override - public String getAddLink() { + public String getAddUrl() { // TODO Auto-generated method stub return null; } - -// @Override -// public String getEditLink() { -// // TODO Auto-generated method stub -// return null; -// } -// -// -// @Override -// public String getDeleteLink() { -// // TODO Auto-generated method stub -// return null; -// } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyTemplateModel.java index 68a82f4b0..4394011e8 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyTemplateModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyTemplateModel.java @@ -43,10 +43,6 @@ public abstract class PropertyTemplateModel extends BaseTemplateModel { return uri; } - public abstract String getAddLink(); - -// public abstract String getEditLink(); -// -// public abstract String getDeleteLink(); + public abstract String getAddUrl(); } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/UncollatedObjectPropertyTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/UncollatedObjectPropertyTemplateModel.java index 67ff1f02a..666b2df8c 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/UncollatedObjectPropertyTemplateModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/UncollatedObjectPropertyTemplateModel.java @@ -37,8 +37,9 @@ public class UncollatedObjectPropertyTemplateModel extends ObjectPropertyTemplat /* Put into data structure to send to template */ statements = new ArrayList(statementData.size()); + String objectKey = getObjectKey(); for (Map map : statementData) { - statements.add(new ObjectPropertyStatementTemplateModel(subjectUri, propertyUri, map)); + statements.add(new ObjectPropertyStatementTemplateModel(subjectUri, propertyUri, objectKey, map, vreq)); } postprocessStatementList(statements); diff --git a/webapp/web/templates/freemarker/body/individual/individual.ftl b/webapp/web/templates/freemarker/body/individual/individual.ftl index fa4aacaf7..2bb65067f 100644 --- a/webapp/web/templates/freemarker/body/individual/individual.ftl +++ b/webapp/web/templates/freemarker/body/individual/individual.ftl @@ -7,7 +7,7 @@ <#assign core = "http://vivoweb.org/ontology/core#"> <#assign editingClass> - <#if editStatus.showEditLinks>editing<#else> + <#if editStatus.showEditingLinks>editing<#else> <#if editStatus.showAdminPanel> diff --git a/webapp/web/templates/freemarker/body/partials/individual/lib-properties.ftl b/webapp/web/templates/freemarker/body/partials/individual/lib-properties.ftl index 82d99ce72..fae8a2828 100644 --- a/webapp/web/templates/freemarker/body/partials/individual/lib-properties.ftl +++ b/webapp/web/templates/freemarker/body/partials/individual/lib-properties.ftl @@ -6,7 +6,7 @@ <#macro dataPropertyList statements> <#list statements as statement> - <@propertyListItem>${statement.value} + <@propertyListItem statement>${statement.value} @@ -28,10 +28,32 @@ <#macro objectPropertyList statements template> <#list statements as statement> - <@propertyListItem><#include "${template}"> + <@propertyListItem statement><#include "${template}"> -<#macro propertyListItem> -
  • <#nested>
  • +<#macro propertyListItem statement> +
  • + <@editLink statement /> + <@deleteLink statement /> + <#nested> +
  • + + +<#macro editLink statement> + <#if editStatus.showEditingLinks> + <#local url = statement.editUrl> + <#if url?has_content> + edit + + + + +<#macro deleteLink statement> + <#if editStatus.showEditingLinks> + <#local url = statement.deleteUrl> + <#if url?has_content> + delete + + \ No newline at end of file