package ilarkesto.velocity; import ilarkesto.base.Str; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.velocity.VelocityContext; public class ContextBuilder { private Map<String, Object> map = new HashMap<String, Object>(); public <T> T put(String name, T value) { map.put(name, value); return value; } public <T> T add(String listName, T value) { List list = (List) map.get(listName); if (list == null) { list = new ArrayList(); map.put(listName, list); } list.add(value); return value; } public ContextBuilder putSubContext(String name) { ContextBuilder sub = new ContextBuilder(); put(name, sub.getMap()); return sub; } public ContextBuilder addSubContext(String listName) { ContextBuilder sub = new ContextBuilder(); add(listName, sub.getMap()); return sub; } public VelocityContext toVelocityContext() { return Velocity.createContext(map); } public Map<String, Object> getMap() { return map; } @Override public String toString() { return "ContextBuilder(" + Str.format(map) + ")"; } }