From 97ecd6100f9f263567ba0a7fe075eabf8d6a6a37 Mon Sep 17 00:00:00 2001 From: rjy7 Date: Mon, 3 Jan 2011 20:20:44 +0000 Subject: [PATCH] NIHVIVO-1491 Methods to get a single property, with or without removing from the list --- .../individual/GroupedPropertyList.java | 58 +++++++++++++++---- .../PropertyGroupTemplateModel.java | 4 ++ .../individual/individual-properties.ftl | 2 +- .../individual-propertyGroupMenu.ftl | 2 +- 4 files changed, 52 insertions(+), 14 deletions(-) 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 be9dda50b..178f1ac33 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 @@ -25,13 +25,9 @@ import edu.cornell.mannlib.vitro.webapp.dao.PropertyGroupDao; import edu.cornell.mannlib.vitro.webapp.dao.PropertyInstanceDao; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; import edu.cornell.mannlib.vitro.webapp.filters.VitroRequestPrep; +import edu.cornell.mannlib.vitro.webapp.web.templatemodels.BaseTemplateModel; -/* This class extends ArrayList rather than BaseTemplateModel so the template can simply - * call individual.propertyList. Otherwise, the class must declare a member list object - * and the template must call individual.propertyList.groups, which is semantically awkward. - * But if we need the methods in BaseTemplateModel we'll have to do that. - */ -public class GroupedPropertyList extends ArrayList { +public class GroupedPropertyList extends BaseTemplateModel { private static final long serialVersionUID = 1L; private static final Log log = LogFactory.getLog(GroupedPropertyList.class); @@ -40,6 +36,7 @@ public class GroupedPropertyList extends ArrayList { private Individual subject; private VitroRequest vreq; private WebappDaoFactory wdf; + private List groups; GroupedPropertyList(Individual subject, VitroRequest vreq) { this.subject = subject; @@ -93,9 +90,9 @@ public class GroupedPropertyList extends ArrayList { List propertyGroupList = addPropertiesToGroups(propertyList); // Build the template data model from the groupList - //groups = new ArrayList(propertyGroupList.size()); + groups = new ArrayList(propertyGroupList.size()); for (PropertyGroup pg : propertyGroupList) { - add(new PropertyGroupTemplateModel(vreq, pg, subject)); + groups.add(new PropertyGroupTemplateModel(vreq, pg, subject)); } } @@ -375,14 +372,51 @@ public class GroupedPropertyList extends ArrayList { } } + /* Access methods for templates */ - public PropertyTemplateModel get(String propertyUri) { - return null; + public List getAll() { + return groups; } - public PropertyTemplateModel getAndRemoveFromList(String propertyUri) { - return null; + public PropertyTemplateModel getProperty(String propertyUri) { + + PropertyTemplateModel propertyTemplateModel = null; + + groupLoop: for (PropertyGroupTemplateModel pgtm : groups) { + List properties = pgtm.getProperties(); + for (PropertyTemplateModel ptm : properties) { + if (propertyUri.equals(ptm.getUri())) { + propertyTemplateModel = ptm; + break groupLoop; + } + } + } + + return propertyTemplateModel; + } + + public PropertyTemplateModel getPropertyAndRemoveFromList(String propertyUri) { + + PropertyTemplateModel propertyTemplateModel = null; + + groupLoop: for (PropertyGroupTemplateModel pgtm : groups) { + List properties = pgtm.getProperties(); + for (PropertyTemplateModel ptm : properties) { + if (propertyUri.equals(ptm.getUri())) { + propertyTemplateModel = ptm; + // Remove the property from the group + properties.remove(ptm); + // If this is the only property in the group, remove the group as well + if (properties.size() == 0) { + groups.remove(pgtm); + } + break groupLoop; + } + } + } + + return propertyTemplateModel; } } 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 c0d9e181b..c184bc16b 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 @@ -39,6 +39,10 @@ public class PropertyGroupTemplateModel extends BaseTemplateModel { } } + protected void remove(PropertyTemplateModel ptm) { + properties.remove(ptm); + } + /* 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." */ diff --git a/webapp/web/templates/freemarker/body/partials/individual/individual-properties.ftl b/webapp/web/templates/freemarker/body/partials/individual/individual-properties.ftl index da8e4a96b..23dff1ec7 100644 --- a/webapp/web/templates/freemarker/body/partials/individual/individual-properties.ftl +++ b/webapp/web/templates/freemarker/body/partials/individual/individual-properties.ftl @@ -2,7 +2,7 @@ <#-- Template for property listing on individual profile page --> -<#list propertyGroups as group> +<#list propertyGroups.all as group> <#assign groupname = group.name(nameForOtherGroup)> diff --git a/webapp/web/templates/freemarker/body/partials/individual/individual-propertyGroupMenu.ftl b/webapp/web/templates/freemarker/body/partials/individual/individual-propertyGroupMenu.ftl index 9c2db300f..055405e49 100644 --- a/webapp/web/templates/freemarker/body/partials/individual/individual-propertyGroupMenu.ftl +++ b/webapp/web/templates/freemarker/body/partials/individual/individual-propertyGroupMenu.ftl @@ -8,7 +8,7 @@
    - <#list propertyGroups as group> + <#list propertyGroups.all as group> <#assign groupname = group.name(nameForOtherGroup)> <#if groupname?has_content> <#-- capitalize will capitalize each word in the name; cap_first only the first. We may need a custom