Class Aggregate
- java.lang.Object
-
- org.stringtemplate.v4.misc.Aggregate
-
public class Aggregate extends Object
An automatically created aggregate of properties.I often have lists of things that need to be formatted, but the list items are actually pieces of data that are not already in an object. I need ST to do something like:
Ter=3432
Tom=32234
....using template:
$items:{it.name$=$it.type$}$This example will call
getName()on the objects in items attribute, but what if they aren't objects? I have perhaps two parallel arrays instead of a single array of objects containing two fields. One solution is allowMaps to be handled like properties so thatit.namewould failgetName()but then see that it's aMapand doit.get("name")instead.This very clean approach is espoused by some, but the problem is that it's a hole in my separation rules. People can put the logic in the view because you could say: "go get bob's data" in the view:
Bob's Phone:
$db.bob.phone$A view should not be part of the program and hence should never be able to go ask for a specific person's data.
After much thought, I finally decided on a simple solution. I've added setAttribute variants that pass in multiple property values, with the property names specified as part of the name using a special attribute name syntax:
"name.{propName1,propName2,...}". This object is a special kind ofHashMapthat hopefully prevents people from passing a subclass or other variant that they have created as it would be a loophole. Anyway, theAggregateModelAdaptor.getProperty(org.stringtemplate.v4.Interpreter, org.stringtemplate.v4.ST, org.stringtemplate.v4.misc.Aggregate, java.lang.Object, java.lang.String)method looks forAggregateas a special case and does aget(java.lang.String)instead ofgetPropertyName.
-
-
Field Summary
Fields Modifier and Type Field Description HashMap<String,Object>properties
-
Constructor Summary
Constructors Constructor Description Aggregate()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Objectget(String propName)protected voidput(String propName, Object propValue)Allow StringTemplate to add values, but prevent the end user from doing so.StringtoString()
-