From 796f6e09657b1dece0aaf87d4cd594356373cf07 Mon Sep 17 00:00:00 2001 From: rjy7 Date: Fri, 17 Dec 2010 17:20:48 +0000 Subject: [PATCH] Moved method for property group display name out of ftl and into the template model class --- .../freemarker/IndividualController.java | 10 +++++----- ...d.java => IndividualProfileUrlMethod.java} | 2 +- .../BaseObjectPropertyDataPreprocessor.java | 18 ++++-------------- ...DefaultObjectPropertyDataPreprocessor.java | 9 +++++++-- .../ObjectPropertyTemplateModel.java | 8 -------- .../PropertyGroupTemplateModel.java | 13 +++++++++++-- .../freemarker/body/individual/individual.ftl | 19 +++---------------- .../individual/individual-properties.ftl | 2 +- 8 files changed, 32 insertions(+), 49 deletions(-) rename webapp/src/edu/cornell/mannlib/vitro/webapp/web/functions/{IndividualUrlMethod.java => IndividualProfileUrlMethod.java} (93%) 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 b800b71ef..699a91b65 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 @@ -56,9 +56,10 @@ import edu.cornell.mannlib.vitro.webapp.search.beans.VitroQueryWrapper; import edu.cornell.mannlib.vitro.webapp.utils.NamespaceMapper; import edu.cornell.mannlib.vitro.webapp.utils.NamespaceMapperFactory; import edu.cornell.mannlib.vitro.webapp.web.ContentType; -import edu.cornell.mannlib.vitro.webapp.web.functions.IndividualUrlMethod; +import edu.cornell.mannlib.vitro.webapp.web.functions.IndividualProfileUrlMethod; import edu.cornell.mannlib.vitro.webapp.web.jsptags.StringProcessorTag; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual.IndividualTemplateModel; +import freemarker.ext.beans.BeansWrapper; /** * Handles requests for entity information. @@ -123,12 +124,11 @@ public class IndividualController extends FreemarkerHttpServlet { /* We need to expose non-getters in displaying the individual's property list, * since it requires calls to methods with parameters. * This is still safe, because we are only putting BaseTemplateModel objects - * into the data model. No real data can be modified. - * RY Not sure this will be needed; postpone. + * into the data model: no real data can be modified. */ - body.put("individual", ind); //getNonDefaultBeansWrapper(BeansWrapper.EXPOSE_SAFE).wrap(ind)); + body.put("individual", getNonDefaultBeansWrapper(BeansWrapper.EXPOSE_SAFE).wrap(ind)); - body.put("url", new IndividualUrlMethod()); + body.put("url", new IndividualProfileUrlMethod()); String template = getIndividualTemplate(individual); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/functions/IndividualUrlMethod.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/functions/IndividualProfileUrlMethod.java similarity index 93% rename from webapp/src/edu/cornell/mannlib/vitro/webapp/web/functions/IndividualUrlMethod.java rename to webapp/src/edu/cornell/mannlib/vitro/webapp/web/functions/IndividualProfileUrlMethod.java index 4a477d8f4..d60827fc0 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/functions/IndividualUrlMethod.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/functions/IndividualProfileUrlMethod.java @@ -12,7 +12,7 @@ import freemarker.core.Environment; import freemarker.template.TemplateMethodModel; import freemarker.template.TemplateModelException; -public class IndividualUrlMethod implements TemplateMethodModel { +public class IndividualProfileUrlMethod implements TemplateMethodModel { @Override public String exec(List args) throws TemplateModelException { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/BaseObjectPropertyDataPreprocessor.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/BaseObjectPropertyDataPreprocessor.java index 93c93dab5..a2b1133dd 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/BaseObjectPropertyDataPreprocessor.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/BaseObjectPropertyDataPreprocessor.java @@ -24,31 +24,21 @@ public class BaseObjectPropertyDataPreprocessor implements public void process(List> data) { for (Map map : data) { applyStandardPreprocessing(map); - applySpecificPreprocessing(map); + applyPropertySpecificPreprocessing(map); } } /* Standard preprocessing that applies to all views. */ protected void applyStandardPreprocessing(Map map) { - addLinkForTarget(map); + /* none identified yet */ } - protected void applySpecificPreprocessing(Map map) { + protected void applyPropertySpecificPreprocessing(Map map) { /* Base class method is empty because this method is defined * to apply subclass preprocessing. */ } - - private void addLinkForTarget(Map map) { - String linkTarget = objectPropertyTemplateModel.getLinkTarget(); - String targetUri = map.get(linkTarget); - if (targetUri != null) { - String targetUrl = getLink(targetUri); - map.put(linkTarget + "Url", targetUrl); - } - } - - + /* Preprocessor helper methods callable from any preprocessor */ protected String getLink(String uri) { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/DefaultObjectPropertyDataPreprocessor.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/DefaultObjectPropertyDataPreprocessor.java index be4ccc7d1..1b5db160f 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/DefaultObjectPropertyDataPreprocessor.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/DefaultObjectPropertyDataPreprocessor.java @@ -15,7 +15,7 @@ public class DefaultObjectPropertyDataPreprocessor extends @Override /* Apply preprocessing specific to this preprocessor */ - protected void applySpecificPreprocessing(Map map) { + protected void applyPropertySpecificPreprocessing(Map map) { addName(map); addMoniker(map); } @@ -26,7 +26,12 @@ public class DefaultObjectPropertyDataPreprocessor extends map.put("name", getName(map.get("object"))); } } - + /* This is a temporary measure to handle the fact that the current Individual.getMoniker() + * method returns the individual's VClass if moniker is null. We want to replicate that + * behavior here, but in future the moniker property (along with other Vitro namespace + * properties) will be removed. In addition, this type of logic (display x if it exists, otherwise y) + * will be moved into the display modules (Editing and Display Configuration Improvements). + */ private void addMoniker(Map map) { String moniker = map.get("moniker"); if (moniker == null) { 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 e79558751..26c038054 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 @@ -54,11 +54,6 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel return config.collationTarget; } - protected String getLinkTarget() { - return config.linkTarget; - } - - protected static ObjectPropertyTemplateModel getObjectPropertyTemplateModel(ObjectProperty op, Individual subject, WebappDaoFactory wdf) { if (op.getCollateBySubclass()) { try { @@ -96,13 +91,11 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel private static final String NODE_NAME_QUERY = "query"; private static final String NODE_NAME_TEMPLATE = "template"; private static final String NODE_NAME_COLLATION_TARGET = "collation-target"; - private static final String NODE_NAME_LINK_TARGET = "link-target"; private static final String NODE_NAME_PREPROCESSOR = "preprocessor"; private String queryString; private String templateName; private String collationTarget; - private String linkTarget; // we could easily make this a list if we ever want multiple links private String preprocessor; PropertyListConfig(ObjectProperty op, WebappDaoFactory wdf) throws Exception { @@ -133,7 +126,6 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel templateName = getConfigValue(doc, NODE_NAME_TEMPLATE); // Optional values collationTarget = getConfigValue(doc, NODE_NAME_COLLATION_TARGET); - linkTarget = getConfigValue(doc, NODE_NAME_LINK_TARGET); // if this is null, no link will be generated preprocessor = getConfigValue(doc, NODE_NAME_PREPROCESSOR); } catch (Exception e) { log.error("Error processing config file " + configFilePath + " for object property " + op.getURI(), e); 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 15eab3462..425128a36 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 @@ -38,8 +38,17 @@ public class PropertyGroupTemplateModel extends BaseTemplateModel { } } - public String getName() { - return name; + /* Freemarker doesn't consider this a getter, because it takes a parameter, so to call it as group.name + * in the templates the method name must be simply "name" and not "getName." + */ + public String name(String otherGroupName) { + String displayName = name; + if (displayName == null) { + displayName = ""; + } else if (displayName.isEmpty()) { + displayName = otherGroupName; + } + return displayName; } public List getProperties() { diff --git a/webapp/web/templates/freemarker/body/individual/individual.ftl b/webapp/web/templates/freemarker/body/individual/individual.ftl index b58279656..bf9d2b05a 100644 --- a/webapp/web/templates/freemarker/body/individual/individual.ftl +++ b/webapp/web/templates/freemarker/body/individual/individual.ftl @@ -114,10 +114,11 @@ +<#assign nameForOtherGroup = "other">