From b5b44b73c1b68cf92cf30d32a0e6f1040a68c674 Mon Sep 17 00:00:00 2001 From: ryounes Date: Fri, 5 Aug 2011 22:25:44 +0000 Subject: [PATCH] NIHVIVO-2508 Change template properties to methods so not pre-computed. --- .../BaseIndividualTemplateModel.java | 97 ++++++++++++------- .../individual/DataPropertyTemplateModel.java | 49 +++++----- .../ObjectPropertyTemplateModel.java | 46 ++++----- .../individual/PropertyTemplateModel.java | 13 ++- .../individual/individual-adminPanel.ftl | 4 +- .../freemarker/lib/lib-properties.ftl | 2 +- 6 files changed, 114 insertions(+), 97 deletions(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/BaseIndividualTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/BaseIndividualTemplateModel.java index 401d477bd..657820fd7 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/BaseIndividualTemplateModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/BaseIndividualTemplateModel.java @@ -104,10 +104,6 @@ public abstract class BaseIndividualTemplateModel extends BaseTemplateModel { return isUriInDefaultNamespace ? profileUrl + "/" + getLocalName() + ".rdf" : UrlBuilder.addParams(profileUrl, "format", "rdfxml"); } - - public String getEditUrl() { - return UrlBuilder.getUrl(Route.INDIVIDUAL_EDIT, "uri", getUri()); - } public GroupedPropertyList getPropertyList() { if (propertyList == null) { @@ -166,39 +162,62 @@ public abstract class BaseIndividualTemplateModel extends BaseTemplateModel { public String getLocalName() { return individual.getLocalName(); } + +// For testing dump +// // Properties +// public String getANullString() { +// return null; +// } +// public String getAnEmptyString() { +// return ""; +// } +// public String[] getANullArray() { +// return null; +// } +// public String[] getAnEmptyArray() { +// String[] a = {}; +// return a; +// } +// public List getANullList() { +// return null; +// } +// public List getAnEmptyList() { +// return Collections.emptyList(); +// } +// public Map getANullMap() { +// return null; +// } +// public Map getAnEmptyMap() { +// return Collections.emptyMap(); +// } +// +// // Methods +// public String nullString() { +// return null; +// } +// public String emptyString() { +// return ""; +// } +// public String[] nullArray() { +// return null; +// } +// public String[] emptyArray() { +// String[] a = {}; +// return a; +// } +// public List nullList() { +// return null; +// } +// public List emptyList() { +// return Collections.emptyList(); +// } +// public Map nullMap() { +// return null; +// } +// public Map emptyMap() { +// return Collections.emptyMap(); +// } - public String nullString() { - return null; - } - - public String emptyString() { - return ""; - } - - public String[] nullArray() { - return null; - } - - public String[] emptyArray() { - String[] a = {}; - return a; - } - - public List nullList() { - return null; - } - - public List emptyList() { - return Collections.emptyList(); - } - - public Map nullMap() { - return null; - } - - public Map emptyMap() { - return Collections.emptyMap(); - } /* Template methods */ @@ -216,5 +235,9 @@ public abstract class BaseIndividualTemplateModel extends BaseTemplateModel { } return id; } - + + public String controlPanelUrl() { + return UrlBuilder.getUrl(Route.INDIVIDUAL_EDIT, "uri", getUri()); + } + } 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 42689b60a..80fe1bad9 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 @@ -51,15 +51,15 @@ public class DataPropertyTemplateModel extends PropertyTemplateModel { } } else { log.debug("Data property " + getUri() + " is unpopulated."); - } - - setAddAccess(policyHelper, dp); + } + setAddUrl(policyHelper, dp); } // Determine whether a new statement can be added @Override - protected void setAddAccess(EditingPolicyHelper policyHelper, Property property) { + protected void setAddUrl(EditingPolicyHelper policyHelper, Property property) { + this.addUrl = ""; if (policyHelper != null) { DataProperty dp = (DataProperty) property; @@ -68,16 +68,25 @@ public class DataPropertyTemplateModel extends PropertyTemplateModel { if (dp.getURI().equals(VitroVocabulary.MONIKER)) { return; } - // If the display limit has already been reached, we can't add a new statement + // If the display limit has already been reached, we can't add a new statement. + // NB This appears to be a misuse of a value called "display limit". Note that it's + // not used to limit display, either, so should be renamed. int displayLimit = dp.getDisplayLimit(); // Display limit of -1 (default value for new property) means no display limit if ( (displayLimit < 0) || (displayLimit > statements.size()) ) { RequestedAction action = new AddDataPropStmt(subjectUri, propertyUri,RequestActionConstants.SOME_LITERAL, null, null); if (policyHelper.isAuthorizedAction(action)) { - addAccess = true; + + ParamMap params = new ParamMap( + "subjectUri", subjectUri, + "predicateUri", propertyUri); + + params.putAll(UrlBuilder.getModelParams(vreq)); + + addUrl = UrlBuilder.getUrl(EDIT_PATH, params); } } - } + } } @Override @@ -90,37 +99,25 @@ public class DataPropertyTemplateModel extends PropertyTemplateModel { return Route.DATA_PROPERTY_EDIT; } - /* Access methods for templates */ + /* Template properties */ public String getType() { return TYPE; } - @Override - public String getAddUrl() { - String addUrl = ""; - if (addAccess) { - ParamMap params = new ParamMap( - "subjectUri", subjectUri, - "predicateUri", propertyUri); - - params.putAll(UrlBuilder.getModelParams(vreq)); - - addUrl = UrlBuilder.getUrl(EDIT_PATH, params); - } - return addUrl; - } - public List getStatements() { return statements; } - public DataPropertyStatementTemplateModel getFirst() { + + /* Template methods */ + + public DataPropertyStatementTemplateModel first() { return ( (statements == null || statements.isEmpty()) ) ? null : statements.get(0); } - public String getFirstValue() { - DataPropertyStatementTemplateModel first = getFirst(); + public String firstValue() { + DataPropertyStatementTemplateModel first = first(); return first == null ? null : first.getValue(); } 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 658e23f15..8fdc59c7c 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 @@ -111,18 +111,31 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel objectKey = getQueryObjectVariableName(); - setAddAccess(policyHelper, op); + setAddUrl(policyHelper, op); + } // Determine whether a new statement can be added @Override - protected void setAddAccess(EditingPolicyHelper policyHelper, Property property) { + protected void setAddUrl(EditingPolicyHelper policyHelper, Property property) { + addUrl = ""; if (policyHelper != null) { RequestedAction action = new AddObjectPropStmt(subjectUri, propertyUri, RequestActionConstants.SOME_URI); if (policyHelper.isAuthorizedAction(action)) { - addAccess = true; - } - } + + if (propertyUri.equals(VitroVocabulary.IND_MAIN_IMAGE)) { + addUrl = getImageUploadUrl(subjectUri, "add"); + } else { + ParamMap params = new ParamMap( + "subjectUri", subjectUri, + "predicateUri", propertyUri); + + params.putAll(UrlBuilder.getModelParams(vreq)); + + addUrl = UrlBuilder.getUrl(EDIT_PATH, params); + } + } + } } protected List> getStatementData() { @@ -167,7 +180,7 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel return config.isDefaultConfig; } - public static String getImageUploadUrl(String subjectUri, String action) { + protected static String getImageUploadUrl(String subjectUri, String action) { ParamMap params = new ParamMap( "entityUri", subjectUri, "action", action); @@ -560,7 +573,7 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel } } - /* Access methods for templates */ + /* Template properties */ public String getType() { return TYPE; @@ -572,23 +585,4 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel public abstract boolean isCollatedBySubclass(); - @Override - public String getAddUrl() { - String addUrl = ""; - if (addAccess) { - if (propertyUri.equals(VitroVocabulary.IND_MAIN_IMAGE)) { - return getImageUploadUrl(subjectUri, "add"); - } - ParamMap params = new ParamMap( - "subjectUri", subjectUri, - "predicateUri", propertyUri); - - params.putAll(UrlBuilder.getModelParams(vreq)); - - addUrl = UrlBuilder.getUrl(EDIT_PATH, params); - - } - return addUrl; - } - } 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 1ac77ae7c..290609f7e 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 @@ -32,7 +32,8 @@ public abstract class PropertyTemplateModel extends BaseTemplateModel { private final String localName; protected Map verboseDisplay; - protected boolean addAccess; // defaults to false + protected String addUrl; + private String name; PropertyTemplateModel(Property property, Individual subject, EditingPolicyHelper policyHelper, VitroRequest vreq) { @@ -42,6 +43,7 @@ public abstract class PropertyTemplateModel extends BaseTemplateModel { localName = property.getLocalName(); log.debug("Local name for property " + propertyUri + ": " + localName); setVerboseDisplayValues(property); + // Do in subclass constructor. The label has not been set on the property, and the // means of getting the label differs between object and data properties. // this.name = property.getLabel(); @@ -90,11 +92,10 @@ public abstract class PropertyTemplateModel extends BaseTemplateModel { this.name = name; } - // Determine whether a new statement can be added - protected abstract void setAddAccess(EditingPolicyHelper policyHelper, Property property); + protected abstract void setAddUrl(EditingPolicyHelper policyHelper, Property property); - /* Access methods for templates */ + /* Template properties */ public abstract String getType(); @@ -110,7 +111,9 @@ public abstract class PropertyTemplateModel extends BaseTemplateModel { return propertyUri; } - public abstract String getAddUrl(); + public String getAddUrl() { + return addUrl; + } public Map getVerboseDisplay() { return verboseDisplay; diff --git a/webapp/web/templates/freemarker/body/partials/individual/individual-adminPanel.ftl b/webapp/web/templates/freemarker/body/partials/individual/individual-adminPanel.ftl index af65777ad..f68ad9ba6 100644 --- a/webapp/web/templates/freemarker/body/partials/individual/individual-adminPanel.ftl +++ b/webapp/web/templates/freemarker/body/partials/individual/individual-adminPanel.ftl @@ -6,10 +6,10 @@ <#if individual.showAdminPanel>
-

Admin Panel

Edit this individual +

Admin Panel

Edit this individual
- <#if verbosePropertySwitch??> + <#if verbosePropertySwitch?has_content> <#assign anchorId = "verbosePropertySwitch"> <#assign currentValue = verbosePropertySwitch.currentValue?string("on", "off")> <#assign newValue = verbosePropertySwitch.currentValue?string("off", "on")> diff --git a/webapp/web/templates/freemarker/lib/lib-properties.ftl b/webapp/web/templates/freemarker/lib/lib-properties.ftl index 2e045dd2c..08b4d2b4f 100644 --- a/webapp/web/templates/freemarker/lib/lib-properties.ftl +++ b/webapp/web/templates/freemarker/lib/lib-properties.ftl @@ -201,7 +201,7 @@ name will be used as the label. --> If there's a mainImage statement but no thumbnail image, treat it as if there is no image. --> <#if (mainImage.statements)?has_content && thumbUrl?has_content> ${individual.name} - <@editingLinks "${mainImage.localName}" mainImage.first editable extraParams /> + <@editingLinks "${mainImage.localName}" mainImage.first() editable extraParams /> <#else> <#local imageLabel><@addLinkWithLabel mainImage editable "Photo" extraParams /> ${imageLabel}