From d96f24ba1bc99aca2b6626b505b55a46117defc5 Mon Sep 17 00:00:00 2001 From: rjy7 Date: Tue, 11 Jan 2011 15:26:43 +0000 Subject: [PATCH] NIHVIVO-1332 Refactoring to move creation of an EditingHelper object to GroupedPropertyList, so it only has to be created once per page rather than once per property or link. --- .../CollatedObjectPropertyTemplateModel.java | 16 +++++---- .../DataPropertyStatementTemplateModel.java | 4 ++- .../individual/DataPropertyTemplateModel.java | 9 +++-- ...EditLinkHelper.java => EditingHelper.java} | 15 ++++---- .../individual/GroupedPropertyList.java | 7 +++- .../ObjectPropertyStatementTemplateModel.java | 36 +++++++------------ .../ObjectPropertyTemplateModel.java | 16 +++++---- .../PropertyGroupTemplateModel.java | 6 ++-- .../individual/PropertyTemplateModel.java | 4 ++- ...UncollatedObjectPropertyTemplateModel.java | 10 +++--- .../freemarker/body/individualList.ftl | 1 + 11 files changed, 66 insertions(+), 58 deletions(-) rename webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/{EditLinkHelper.java => EditingHelper.java} (79%) 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 9f181ed5b..25d36cb46 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 @@ -37,10 +37,11 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM private SortedMap> subclasses; - CollatedObjectPropertyTemplateModel(ObjectProperty op, Individual subject, VitroRequest vreq) + CollatedObjectPropertyTemplateModel(ObjectProperty op, Individual subject, + VitroRequest vreq, EditingHelper editLinkHelper) throws InvalidConfigurationException { - super(op, subject, vreq); + super(op, subject, vreq, editLinkHelper); String invalidConfigMessage = checkConfiguration(); if ( ! invalidConfigMessage.isEmpty() ) { @@ -56,12 +57,12 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM List> statementData = opDao.getObjectPropertyStatementsForIndividualByProperty(subjectUri, propertyUri, getQueryString()); - /* Apply postprocessing */ + /* Apply post-processing */ postprocess(statementData, wdf); /* Collate the data */ Map> unsortedSubclasses = - collate(subjectUri, propertyUri, statementData, vreq); + collate(subjectUri, propertyUri, statementData, vreq, editLinkHelper); /* Sort by subclass name */ Comparator comparer = new Comparator() { @@ -95,8 +96,8 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM return ""; } - private Map> collate(String subjectUri, - String propertyUri, List> statementData, VitroRequest vreq) { + private Map> collate(String subjectUri, String propertyUri, + List> statementData, VitroRequest vreq, EditingHelper editLinkHelper) { Map> subclassMap = new HashMap>(); @@ -115,7 +116,8 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM String subclassName = getSubclassName(subclassUri, vreq); subclassMap.put(subclassName, currentList); } - currentList.add(new ObjectPropertyStatementTemplateModel(subjectUri, propertyUri, objectKey, map, vreq)); + currentList.add(new ObjectPropertyStatementTemplateModel(subjectUri, + propertyUri, objectKey, map, editLinkHelper)); } 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 65fd0bab0..72656ee5e 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 @@ -13,9 +13,11 @@ public class DataPropertyStatementTemplateModel extends BaseTemplateModel { private static final Log log = LogFactory.getLog(DataPropertyStatementTemplateModel.class); private DataPropertyStatement statement; + private EditingHelper editLinkHelper; - DataPropertyStatementTemplateModel(DataPropertyStatement statement) { + DataPropertyStatementTemplateModel(DataPropertyStatement statement, EditingHelper editLinkHelper) { this.statement = statement; + this.editLinkHelper = editLinkHelper; } /* Access methods for templates */ 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 90c45d12b..54d2a4640 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 @@ -20,10 +20,13 @@ public class DataPropertyTemplateModel extends PropertyTemplateModel { private static final Log log = LogFactory.getLog(DataPropertyTemplateModel.class); private static final String TYPE = "data"; + private List statements; + private EditingHelper editLinkHelper; + + DataPropertyTemplateModel(DataProperty dp, Individual subject, VitroRequest vreq, EditingHelper editLinkHelper) { + super(dp, editLinkHelper); - DataPropertyTemplateModel(DataProperty dp, Individual subject, VitroRequest vreq) { - super(dp); setName(dp.getPublicName()); // Get the data property statements via a sparql query @@ -31,7 +34,7 @@ public class DataPropertyTemplateModel extends PropertyTemplateModel { List dpStatements = dpDao.getDataPropertyStatementsForIndividualByProperty(subject, dp); statements = new ArrayList(dpStatements.size()); for (DataPropertyStatement dps : dpStatements) { - statements.add(new DataPropertyStatementTemplateModel(dps)); + statements.add(new DataPropertyStatementTemplateModel(dps, editLinkHelper)); } } 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/EditingHelper.java similarity index 79% rename from webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/EditLinkHelper.java rename to webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/EditingHelper.java index 64d888331..5a4215984 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/EditingHelper.java @@ -14,20 +14,19 @@ import edu.cornell.mannlib.vitro.webapp.auth.policy.RequestPolicyList; import edu.cornell.mannlib.vitro.webapp.auth.policy.ServletPolicyList; import edu.cornell.mannlib.vitro.webapp.auth.policy.ifaces.PolicyIface; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; -import edu.cornell.mannlib.vitro.webapp.web.templatemodels.BaseTemplateModel; -public class EditLinkHelper { +public class EditingHelper { - private static final Log log = LogFactory.getLog(EditLinkHelper.class); + private static final Log log = LogFactory.getLog(EditingHelper.class); private VitroRequest vreq; - private ServletContext context; + private ServletContext servletContext; private PolicyIface policy; private IdentifierBundle ids; - protected EditLinkHelper(VitroRequest vreq) { + protected EditingHelper(VitroRequest vreq, ServletContext servletContext) { this.vreq = vreq; - this.context = BaseTemplateModel.getServletContext(); + this.servletContext = servletContext; setPolicy(); setIds(); } @@ -35,7 +34,7 @@ public class EditLinkHelper { private void setPolicy() { policy = RequestPolicyList.getPolicies(vreq); if( policy == null || ( policy instanceof PolicyList && ((PolicyList)policy).size() == 0 )){ - policy = ServletPolicyList.getPolicies( context ); + policy = ServletPolicyList.getPolicies( servletContext ); if( policy == null || ( policy instanceof PolicyList && ((PolicyList)policy).size() == 0 )){ log.error("No policy found in request at " + RequestPolicyList.POLICY_LIST); } @@ -44,7 +43,7 @@ public class EditLinkHelper { private void setIds() { ids = (IdentifierBundle)ServletIdentifierBundleFactory - .getIdBundleForRequest(vreq, vreq.getSession(), context); + .getIdBundleForRequest(vreq, vreq.getSession(), servletContext); if (ids == null) { log.error("No IdentifierBundle objects for request"); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/GroupedPropertyList.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/GroupedPropertyList.java index 4c96cc9f5..903210ee6 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/GroupedPropertyList.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/GroupedPropertyList.java @@ -54,6 +54,11 @@ public class GroupedPropertyList extends BaseTemplateModel { // Determine whether we're editing or not. boolean userCanEditThisProfile = getEditingStatus(); + + EditingHelper editLinkHelper = null; + if (userCanEditThisProfile) { + editLinkHelper = new EditingHelper(vreq, getServletContext()); + } // Create the property list for the subject. The properties will be put into groups later. List propertyList = new ArrayList(); @@ -101,7 +106,7 @@ public class GroupedPropertyList extends BaseTemplateModel { // Build the template data model from the groupList groups = new ArrayList(propertyGroupList.size()); for (PropertyGroup pg : propertyGroupList) { - groups.add(new PropertyGroupTemplateModel(vreq, pg, subject)); + groups.add(new PropertyGroupTemplateModel(vreq, pg, subject, editLinkHelper)); } } 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 e213401af..4bd376ad6 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 @@ -13,7 +13,6 @@ import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestedAct 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.controller.freemarker.UrlBuilder.ParamMap; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.BaseTemplateModel; @@ -24,37 +23,30 @@ public class ObjectPropertyStatementTemplateModel extends BaseTemplateModel { 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; + + private EditingHelper editLinkHelper; + private String objectUri = null; + private ObjectPropertyStatement objectPropertyStatement = null; + ObjectPropertyStatementTemplateModel(String subjectUri, String propertyUri, - String objectKey, Map data, VitroRequest vreq) { + String objectKey, Map data, EditingHelper editLinkHelper) { 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) { + this.editLinkHelper = editLinkHelper; + + // If the editLinkHelper is non-null, we are in edit mode, so create the necessary objects. + if (this.editLinkHelper != null) { + objectUri = data.get(objectKey); objectPropertyStatement = new ObjectPropertyStatementImpl(subjectUri, propertyUri, objectUri); } - if (editLinkHelper == null) { - editLinkHelper = new EditLinkHelper(vreq); - } + } + /* Access methods for templates */ @@ -64,7 +56,6 @@ public class ObjectPropertyStatementTemplateModel extends BaseTemplateModel { 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) { @@ -80,7 +71,6 @@ public class ObjectPropertyStatementTemplateModel extends BaseTemplateModel { 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 561f93e73..5039174ce 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 @@ -48,7 +48,8 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel * ORDER BY ?subclass ?dateTimeEnd * ORDER BY DESC(?subclass) DESC(?dateTimeEnd) */ - Pattern.compile("ORDER\\s+BY\\s+((DESC\\()?\\?subclass\\)?\\s+)?DESC\\s*\\(\\s*\\?" + END_DATE_TIME_VARIABLE + "\\)", Pattern.CASE_INSENSITIVE); + Pattern.compile("ORDER\\s+BY\\s+((DESC\\()?\\?subclass\\)?\\s+)?DESC\\s*\\(\\s*\\?" + + END_DATE_TIME_VARIABLE + "\\)", Pattern.CASE_INSENSITIVE); private static String KEY_SUBJECT = "subject"; private static final String KEY_PROPERTY = "property"; @@ -60,8 +61,8 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel private PropertyListConfig config; private String objectKey; - ObjectPropertyTemplateModel(ObjectProperty op, Individual subject, VitroRequest vreq) { - super(op); + ObjectPropertyTemplateModel(ObjectProperty op, Individual subject, VitroRequest vreq, EditingHelper editLinkHelper) { + super(op, editLinkHelper); setName(op.getDomainPublic()); // Get the config for this object property @@ -105,16 +106,17 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel return object; } - protected static ObjectPropertyTemplateModel getObjectPropertyTemplateModel(ObjectProperty op, Individual subject, VitroRequest vreq) { + protected static ObjectPropertyTemplateModel getObjectPropertyTemplateModel(ObjectProperty op, + Individual subject, VitroRequest vreq, EditingHelper editLinkHelper) { if (op.getCollateBySubclass()) { try { - return new CollatedObjectPropertyTemplateModel(op, subject, vreq); + return new CollatedObjectPropertyTemplateModel(op, subject, vreq, editLinkHelper); } catch (InvalidConfigurationException e) { log.error(e); - return new UncollatedObjectPropertyTemplateModel(op, subject, vreq); + return new UncollatedObjectPropertyTemplateModel(op, subject, vreq, editLinkHelper); } } else { - return new UncollatedObjectPropertyTemplateModel(op, subject, vreq); + return new UncollatedObjectPropertyTemplateModel(op, subject, vreq, editLinkHelper); } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyGroupTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyGroupTemplateModel.java index c184bc16b..e15ea8fe2 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyGroupTemplateModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyGroupTemplateModel.java @@ -24,7 +24,7 @@ public class PropertyGroupTemplateModel extends BaseTemplateModel { private String name; private List properties; - PropertyGroupTemplateModel(VitroRequest vreq, PropertyGroup group, Individual subject) { + PropertyGroupTemplateModel(VitroRequest vreq, PropertyGroup group, Individual subject, EditingHelper editLinkHelper) { this.name = group.getName(); List propertyList = group.getPropertyList(); @@ -32,9 +32,9 @@ public class PropertyGroupTemplateModel extends BaseTemplateModel { for (Property p : propertyList) { if (p instanceof ObjectProperty) { ObjectProperty op = (ObjectProperty)p; - properties.add(ObjectPropertyTemplateModel.getObjectPropertyTemplateModel(op, subject, vreq)); + properties.add(ObjectPropertyTemplateModel.getObjectPropertyTemplateModel(op, subject, vreq, editLinkHelper)); } else { - properties.add(new DataPropertyTemplateModel((DataProperty)p, subject, vreq)); + properties.add(new DataPropertyTemplateModel((DataProperty)p, subject, vreq, editLinkHelper)); } } } 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 4394011e8..70266a746 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 @@ -18,13 +18,15 @@ public abstract class PropertyTemplateModel extends BaseTemplateModel { private String name; private String uri; protected Property property; // needed to get the edit links + protected EditingHelper editLinkHelper; - PropertyTemplateModel(Property property) { + PropertyTemplateModel(Property property, EditingHelper editLinkHelper) { // Do in subclass constructor. The label has not been set on the property, and getting the // label differs between object and data properties. // this.name = property.getLabel(); this.uri = property.getURI(); this.property = property; + this.editLinkHelper = editLinkHelper; } protected void setName(String name) { 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 666b2df8c..8ee26fbb5 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 @@ -22,15 +22,16 @@ public class UncollatedObjectPropertyTemplateModel extends ObjectPropertyTemplat private List statements; - UncollatedObjectPropertyTemplateModel(ObjectProperty op, Individual subject, VitroRequest vreq) { - super(op, subject, vreq); + UncollatedObjectPropertyTemplateModel(ObjectProperty op, Individual subject, VitroRequest vreq, EditingHelper editLinkHelper) { + super(op, subject, vreq, editLinkHelper); /* Get the data */ WebappDaoFactory wdf = vreq.getWebappDaoFactory(); ObjectPropertyStatementDao opDao = wdf.getObjectPropertyStatementDao(); String subjectUri = subject.getURI(); String propertyUri = op.getURI(); - List> statementData = opDao.getObjectPropertyStatementsForIndividualByProperty(subjectUri, propertyUri, getQueryString()); + List> statementData = + opDao.getObjectPropertyStatementsForIndividualByProperty(subjectUri, propertyUri, getQueryString()); /* Apply postprocessing */ postprocess(statementData, wdf); @@ -39,7 +40,8 @@ public class UncollatedObjectPropertyTemplateModel extends ObjectPropertyTemplat statements = new ArrayList(statementData.size()); String objectKey = getObjectKey(); for (Map map : statementData) { - statements.add(new ObjectPropertyStatementTemplateModel(subjectUri, propertyUri, objectKey, map, vreq)); + statements.add(new ObjectPropertyStatementTemplateModel(subjectUri, + propertyUri, objectKey, map, editLinkHelper)); } postprocessStatementList(statements); diff --git a/webapp/web/templates/freemarker/body/individualList.ftl b/webapp/web/templates/freemarker/body/individualList.ftl index 7d38b5e9d..5e9d7339f 100644 --- a/webapp/web/templates/freemarker/body/individualList.ftl +++ b/webapp/web/templates/freemarker/body/individualList.ftl @@ -21,6 +21,7 @@
    <#list pages as page> <#if page.selected>
  • ${page.text}
  • + <#-- RY Ideally the urls would be generated by the controller; see search-pagedResults.ftl --> <#else>
  • ${page.text}