Exemplo n.º 1
0
  @SuppressWarnings("deprecation")
  public String render(String templatePath, Map<String, Object> templateArgs) // ,
        // boolean
        // usePublicFields)
      {
    logger.debug("trying to render " + templatePath);
    try {
      // keep configuration in session so we can reuse it
      if (conf == null) {
        logger.debug("create freemarker config");
        // create configuration
        conf = new freemarker.template.Configuration();
        conf.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);

        List<TemplateLoader> loaders = new ArrayList<TemplateLoader>();

        // create template loader
        // load templates from MOLGENIS
        loaders.add(new ClassTemplateLoader(MolgenisOriginalStyle.class, ""));
        // load templates from plugins, can be anywere
        // (nb this method is deprecated but I can't see why)
        loaders.add(new ClassTemplateLoader());

        for (Entry<String, Object> entry : templateArgs.entrySet()) {
          Object value = entry.getValue();
          if (entry.getKey() != null && entry.getKey().equals("model") && value != null) {
            loaders.add(new ClassTemplateLoader(value.getClass()));

            // also add superclass because of generated code
            loaders.add(new ClassTemplateLoader(value.getClass().getSuperclass()));
          }
        }
        loaders.add(new FileTemplateLoader());
        loaders.add(new FileTemplateLoader(new File("/")));

        // ClassTemplateLoader loader1 = new ClassTemplateLoader(
        // Object.class, "");
        // ClassTemplateLoader loader2 = new ClassTemplateLoader(
        // getClass().getSuperclass(), "");
        MultiTemplateLoader mLoader =
            new MultiTemplateLoader(loaders.toArray(new TemplateLoader[loaders.size()]));
        conf.setTemplateLoader(mLoader);
        logger.debug("created freemarker config");
      }

      // merge template
      conf.addAutoInclude("ScreenViewHelper.ftl");

      WidgetFactory.configure(conf);

      Template template = conf.getTemplate(templatePath);
      StringWriter writer = new StringWriter();

      template.process(templateArgs, writer);
      writer.close();

      return writer.toString();

    } catch (TemplateException e) {
      logger.error("rendering of template " + templatePath + " failed:");
      e.printStackTrace();

      StringWriter sw = new StringWriter();
      PrintWriter pw = new PrintWriter(sw, true);
      e.printStackTrace(pw);
      pw.flush();
      sw.flush();

      return sw.toString().replace("\n", "<br/>");

    } catch (IOException e) {
      logger.error("rendering of template " + templatePath + " failed:");
      e.printStackTrace();

      StringWriter sw = new StringWriter();
      PrintWriter pw = new PrintWriter(sw, true);
      e.printStackTrace(pw);
      pw.flush();
      sw.flush();

      return sw.toString().replace("\n", "<br/>");
    }
  }