From 530c7a70f88a997f71658934ddf7c341e4be853f Mon Sep 17 00:00:00 2001 From: ryounes Date: Fri, 22 Apr 2011 16:55:36 +0000 Subject: [PATCH] NIHVIVO-2479 Continue work on dump templates for values of different types --- .../ext/dump/BaseDumpDirective.java | 38 ++++++++++--------- .../freemarker/ext/dump/DumpAllDirective.java | 8 ++-- .../freemarker/ext/dump/DumpDirective.java | 8 ++-- .../freemarker/ext/dump/HelpDirective.java | 10 ++--- .../ext/dump/DumpDirectiveTest.java | 16 ++++---- .../ext/dump/HelpDirectiveTest.java | 22 +++++------ .../freemarker/body/partials/dump/dump1.ftl | 30 ++++++++++++--- 7 files changed, 74 insertions(+), 58 deletions(-) diff --git a/webapp/src/freemarker/ext/dump/BaseDumpDirective.java b/webapp/src/freemarker/ext/dump/BaseDumpDirective.java index 31ad9fc0b..92dc36895 100644 --- a/webapp/src/freemarker/ext/dump/BaseDumpDirective.java +++ b/webapp/src/freemarker/ext/dump/BaseDumpDirective.java @@ -57,6 +57,7 @@ public abstract class BaseDumpDirective implements TemplateDirectiveModel { enum Key { DATE_TYPE("dateType"), + HELP("help"), METHODS("methods"), PROPERTIES("properties"), TYPE("type"), @@ -416,36 +417,39 @@ public abstract class BaseDumpDirective implements TemplateDirectiveModel { private Map getTemplateModelDump(TemplateMethodModel model, String varName) throws TemplateModelException { Map map = new HashMap(); map.put(Key.TYPE.toString(), Type.METHOD); - map.put("help", getHelp(model, varName)); + map.put(Key.HELP.toString(), getHelp(model, varName)); return map; } private Map getTemplateModelDump(TemplateDirectiveModel model, String varName) throws TemplateModelException { Map map = new HashMap(); map.put(Key.TYPE.toString(), Type.DIRECTIVE); - map.put("help", getHelp(model, varName)); + map.put(Key.HELP.toString(), getHelp(model, varName)); return map; } @SuppressWarnings("unchecked") private Map getHelp(TemplateModel model, String varName) { - Map map = null; if ( model instanceof TemplateMethodModel || model instanceof TemplateDirectiveModel ) { + String modelClass = model instanceof TemplateMethodModel ? "TemplateMethodModel" : "TemplateDirectiveModel"; Class cls = model.getClass(); - Method[] methods = cls.getMethods(); - for (Method method : methods) { - if ( method.getName().equals("help") ) { - try { - map = (Map) method.invoke(model, varName); - } catch (Exception e) { - String modelClass = model instanceof TemplateMethodModel ? "TemplateMethodModel" : "TemplateDirectiveModel"; - log.error("Error invoking method help() on " + modelClass + " of class " + cls.getName()); - } - break; - } - } + try { + Method help = cls.getMethod("help", String.class); + try { + return (Map) help.invoke(model, varName); + } catch (Exception e) { + log.error("Error invoking method help() on " + modelClass + " of class " + cls.getName()); + return null; + } + } catch (NoSuchMethodException e) { + log.info("No help() method defined for " + modelClass + " of class " + cls.getName()); + return null; + } catch (Exception e) { + log.error("Error getting method help() for " + modelClass + " " + cls.getName()); + return null; + } } - return map; + return null; } private Map getTemplateModelDump(TemplateModel model) throws TemplateModelException { @@ -483,7 +487,7 @@ public abstract class BaseDumpDirective implements TemplateDirectiveModel { out.write(sw.toString()); } - protected Map help(String name) { + public Map help(String name) { return new HashMap(); } } diff --git a/webapp/src/freemarker/ext/dump/DumpAllDirective.java b/webapp/src/freemarker/ext/dump/DumpAllDirective.java index d16a2f1a7..4a8b52da7 100644 --- a/webapp/src/freemarker/ext/dump/DumpAllDirective.java +++ b/webapp/src/freemarker/ext/dump/DumpAllDirective.java @@ -68,12 +68,10 @@ public class DumpAllDirective extends BaseDumpDirective { } @Override - protected Map help(String name) { + public Map help(String name) { Map map = new HashMap(); - - //map.put("name", name); - - map.put("effect", "Dump the contents of the template data model."); + + map.put("effect", "Dumps the contents of the template data model."); //map.put("comments", ""); diff --git a/webapp/src/freemarker/ext/dump/DumpDirective.java b/webapp/src/freemarker/ext/dump/DumpDirective.java index 820cfa9b7..f966a3040 100644 --- a/webapp/src/freemarker/ext/dump/DumpDirective.java +++ b/webapp/src/freemarker/ext/dump/DumpDirective.java @@ -56,18 +56,16 @@ public class DumpDirective extends BaseDumpDirective { } @Override - protected Map help(String name) { + public Map help(String name) { Map map = new HashMap(); - //map.put("name", name); - - map.put("effect", "Dump the contents of a template variable."); + map.put("effect", "Dumps the contents of a template variable."); //map.put("comments", ""); Map params = new HashMap(); params.put("var", "name of variable to dump"); - map.put("params", params); + map.put("parameters", params); List examples = new ArrayList(); examples.add("<@" + name + " var=\"urls\" />"); diff --git a/webapp/src/freemarker/ext/dump/HelpDirective.java b/webapp/src/freemarker/ext/dump/HelpDirective.java index 6d1e5f262..550a117ef 100644 --- a/webapp/src/freemarker/ext/dump/HelpDirective.java +++ b/webapp/src/freemarker/ext/dump/HelpDirective.java @@ -58,23 +58,21 @@ public class HelpDirective extends BaseDumpDirective { Map map = getTemplateVariableDump(varName, env); String type = templateModel instanceof TemplateMethodModel ? "method" : "directive"; - String title = "Help for " + type; + String title = "Template " + type + " help"; dump(map, env, title); } @Override - protected Map help(String name) { + public Map help(String name) { Map map = new HashMap(); - - //map.put("name", name); - map.put("effect", "Output help for a directive or method."); + map.put("effect", "Outputs help for a directive or method."); //map.put("comments", ""); Map params = new HashMap(); params.put("for", "name of directive or method"); - map.put("params", params); + map.put("parameters", params); List examples = new ArrayList(); examples.add("<@" + name + " for=\"dump\" />"); diff --git a/webapp/test/freemarker/ext/dump/DumpDirectiveTest.java b/webapp/test/freemarker/ext/dump/DumpDirectiveTest.java index f51c043a6..268a78d08 100644 --- a/webapp/test/freemarker/ext/dump/DumpDirectiveTest.java +++ b/webapp/test/freemarker/ext/dump/DumpDirectiveTest.java @@ -255,7 +255,7 @@ public class DumpDirectiveTest { Map expectedDumpValue = new HashMap(); expectedDumpValue.put(Key.TYPE.toString(), Type.METHOD); - expectedDumpValue.put("help", null); + expectedDumpValue.put(Key.HELP.toString(), null); Map expectedDump = new HashMap(); expectedDump.put(varName, expectedDumpValue); @@ -274,7 +274,7 @@ public class DumpDirectiveTest { Map expectedDumpValue = new HashMap(); expectedDumpValue.put(Key.TYPE.toString(), Type.METHOD); - expectedDumpValue.put("help", getMethodHelp(varName)); + expectedDumpValue.put(Key.HELP.toString(), getMethodHelp(varName)); Map expectedDump = new HashMap(); expectedDump.put(varName, expectedDumpValue); @@ -293,7 +293,7 @@ public class DumpDirectiveTest { Map expectedDumpValue = new HashMap(); expectedDumpValue.put(Key.TYPE.toString(), Type.METHOD); - expectedDumpValue.put("help", null); + expectedDumpValue.put(Key.HELP.toString(), null); Map expectedDump = new HashMap(); expectedDump.put(varName, expectedDumpValue); @@ -312,7 +312,7 @@ public class DumpDirectiveTest { Map expectedDumpValue = new HashMap(); expectedDumpValue.put(Key.TYPE.toString(), Type.DIRECTIVE); - expectedDumpValue.put("help", null); + expectedDumpValue.put(Key.HELP.toString(), null); Map expectedDump = new HashMap(); expectedDump.put(varName, expectedDumpValue); @@ -331,7 +331,7 @@ public class DumpDirectiveTest { Map expectedDumpValue = new HashMap(); expectedDumpValue.put(Key.TYPE.toString(), Type.DIRECTIVE); - expectedDumpValue.put("help", getDirectiveHelp(varName)); + expectedDumpValue.put(Key.HELP.toString(), getDirectiveHelp(varName)); Map expectedDump = new HashMap(); expectedDump.put(varName, expectedDumpValue); @@ -350,7 +350,7 @@ public class DumpDirectiveTest { Map expectedDumpValue = new HashMap(); expectedDumpValue.put(Key.TYPE.toString(), Type.DIRECTIVE); - expectedDumpValue.put("help", null); + expectedDumpValue.put(Key.HELP.toString(), null); Map expectedDump = new HashMap(); expectedDump.put(varName, expectedDumpValue); @@ -862,7 +862,7 @@ public class DumpDirectiveTest { Map params = new HashMap(); params.put("var", "name of variable to dump"); - map.put("params", params); + map.put("parameters", params); List examples = new ArrayList(); examples.add("<@" + name + " var=\"urls\" />"); @@ -878,7 +878,7 @@ public class DumpDirectiveTest { Listparams = new ArrayList(); params.add("Integer to square"); - map.put("params", params); + map.put("parameters", params); List examples = new ArrayList(); examples.add(name + "(4)"); diff --git a/webapp/test/freemarker/ext/dump/HelpDirectiveTest.java b/webapp/test/freemarker/ext/dump/HelpDirectiveTest.java index 111d8fab4..78c6bde4e 100644 --- a/webapp/test/freemarker/ext/dump/HelpDirectiveTest.java +++ b/webapp/test/freemarker/ext/dump/HelpDirectiveTest.java @@ -58,7 +58,7 @@ public class HelpDirectiveTest { Map expectedDumpValue = new HashMap(); expectedDumpValue.put(Key.TYPE.toString(), Type.METHOD); - expectedDumpValue.put("help", null); + expectedDumpValue.put(Key.HELP.toString(), null); Map expectedDump = new HashMap(); expectedDump.put(varName, expectedDumpValue); @@ -77,7 +77,7 @@ public class HelpDirectiveTest { Map expectedDumpValue = new HashMap(); expectedDumpValue.put(Key.TYPE.toString(), Type.METHOD); - expectedDumpValue.put("help", getMethodHelp(varName)); + expectedDumpValue.put(Key.HELP.toString(), getMethodHelp(varName)); Map expectedDump = new HashMap(); expectedDump.put(varName, expectedDumpValue); @@ -96,7 +96,7 @@ public class HelpDirectiveTest { Map expectedDumpValue = new HashMap(); expectedDumpValue.put(Key.TYPE.toString(), Type.METHOD); - expectedDumpValue.put("help", null); + expectedDumpValue.put(Key.HELP.toString(), null); Map expectedDump = new HashMap(); expectedDump.put(varName, expectedDumpValue); @@ -115,7 +115,7 @@ public class HelpDirectiveTest { Map expectedDumpValue = new HashMap(); expectedDumpValue.put(Key.TYPE.toString(), Type.DIRECTIVE); - expectedDumpValue.put("help", null); + expectedDumpValue.put(Key.HELP.toString(), null); Map expectedDump = new HashMap(); expectedDump.put(varName, expectedDumpValue); @@ -134,7 +134,7 @@ public class HelpDirectiveTest { Map expectedDumpValue = new HashMap(); expectedDumpValue.put(Key.TYPE.toString(), Type.DIRECTIVE); - expectedDumpValue.put("help", getDirectiveHelp(varName)); + expectedDumpValue.put(Key.HELP.toString(), getDirectiveHelp(varName)); Map expectedDump = new HashMap(); expectedDump.put(varName, expectedDumpValue); @@ -153,7 +153,7 @@ public class HelpDirectiveTest { Map expectedDumpValue = new HashMap(); expectedDumpValue.put(Key.TYPE.toString(), Type.DIRECTIVE); - expectedDumpValue.put("help", null); + expectedDumpValue.put(Key.HELP.toString(), null); Map expectedDump = new HashMap(); expectedDump.put(varName, expectedDumpValue); @@ -237,9 +237,9 @@ public class HelpDirectiveTest { map.put("comments", "Sequences (lists and arrays) are enclosed in square brackets. Hashes are enclosed in curly braces."); - Map params = new HashMap(); - params.put("var", "name of variable to dump"); - map.put("params", params); + Map parameters = new HashMap(); + parameters.put("var", "name of variable to dump"); + map.put("parameters", parameters); List examples = new ArrayList(); examples.add("<@" + name + " var=\"urls\" />"); @@ -253,9 +253,9 @@ public class HelpDirectiveTest { map.put("returns", "The square of the argument"); - Listparams = new ArrayList(); + List params = new ArrayList(); params.add("Integer to square"); - map.put("params", params); + map.put("parameters", params); List examples = new ArrayList(); examples.add(name + "(4)"); diff --git a/webapp/web/templates/freemarker/body/partials/dump/dump1.ftl b/webapp/web/templates/freemarker/body/partials/dump/dump1.ftl index b589397e9..9edf33cd9 100644 --- a/webapp/web/templates/freemarker/body/partials/dump/dump1.ftl +++ b/webapp/web/templates/freemarker/body/partials/dump/dump1.ftl @@ -88,7 +88,7 @@ div.dump {
  • <#if type == "Sequence"> Item ${item_index}: - <@valueDiv item /> + <@valueDiv><@doMap item /> <#else><@doMap item /> @@ -105,7 +105,7 @@ div.dump {
      <#list map?keys as key>
    • - ${key} => <@valueDiv map[key] /> + ${key} => <@valueDiv><@doMap map[key] />
    @@ -125,21 +125,39 @@ div.dump { <#macro doHelp help=""> <#if help?has_content> +

    Help:

      <#list help?keys as key>
    • -

      ${key}

      - <#--<@valueDiv help[key] />--> + <#local value = help[key]> + <@valueDiv> + <#if value?is_string>

      ${key?capitalize}: ${value}

      + <#else> +

      ${key?capitalize}:

      +
        + <#if value?is_sequence> + <#list value as item> +
      • ${item}
      • + + <#elseif value?is_hash_ex> + <#list value?keys as key> +
      • ${key}: ${value[key]}
      • + + +
      + +
    -<#macro valueDiv value> -
    <@doMap value />
    +<#macro valueDiv> +
    <#nested>
    + <#-- This will work after we move stylesheets to Configuration sharedVariables ${stylesheets.add('')} -->