Class StringTemplate.Aggregate

  • Enclosing class:
    StringTemplate

    public static final class StringTemplate.Aggregate
    extends java.lang.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 allow Maps 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 ASTExpr.getObjectProperty() method looks for Aggregate as a special case and does a get() instead of getPropertyName.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected java.util.HashMap properties  
    • Constructor Summary

      Constructors 
      Constructor Description
      Aggregate()  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      java.lang.Object get​(java.lang.String propName)  
      protected void put​(java.lang.String propName, java.lang.Object propValue)
      Allow StringTemplate to add values, but prevent the end user from doing so.
      java.lang.String toString()  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • properties

        protected java.util.HashMap properties
    • Constructor Detail

      • Aggregate

        public Aggregate()
    • Method Detail

      • put

        protected void put​(java.lang.String propName,
                           java.lang.Object propValue)
        Allow StringTemplate to add values, but prevent the end user from doing so.
      • get

        public java.lang.Object get​(java.lang.String propName)
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object