public class Aggregate extends Object
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 allow Map
s to be handled like properties so that it.name
would fail getName()
but then see that it's a Map
and do
it.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 of HashMap
that hopefully prevents people
from passing a subclass or other variant that they have created as
it would be a loophole. Anyway, the AggregateModelAdaptor.getProperty(org.stringtemplate.v4.Interpreter, org.stringtemplate.v4.ST, java.lang.Object, java.lang.Object, java.lang.String)
method looks for Aggregate
as a special case and does a get(java.lang.String)
instead
of getPropertyName
.
Modifier and Type | Field and Description |
---|---|
HashMap<String,Object> |
properties |
Constructor and Description |
---|
Aggregate() |
Modifier and Type | Method and Description |
---|---|
Object |
get(String propName) |
protected void |
put(String propName,
Object propValue)
Allow StringTemplate to add values, but prevent the end
user from doing so.
|
String |
toString() |
Copyright © 2024. All rights reserved.