@Override
  public void run() {
    try {
      Template template = cfg.getTemplate("/reports/templates/classloader.ftl");

      ApplicationContext appCtx = new ApplicationContext(namingUtility.getApplicationName());

      ClassloaderReport report =
          new ClassloaderReport("Class Not Found", "Class Not Found", "Referenced By");

      // for each class leveraging a blacklist...
      for (JavaClass clz : javaClassDao.getAllClassNotFound()) {
        Name name =
            namingUtility.getReportJavaResource(runDirectory, reportReference.getParentFile(), clz);

        // get reference...
        ClassLoaderReportRow row = new ClassLoaderReportRow(name);
        addAll(row.getReferences(), clz.providesForJavaClass());

        report.getClasses().add(row);
      }

      Map<String, Object> objects = new HashMap<String, Object>();
      objects.put("application", appCtx);
      objects.put("classloader", report);

      template.process(objects, new FileWriter(reportReference));
    } catch (Exception e) {
      throw new RuntimeException("Exception processing report.", e);
    }
  }
 public void addAll(Collection<ClassReference> references, Iterable<JavaClass> clzs) {
   for (JavaClass clz : clzs) {
     Name name =
         namingUtility.getReportJavaResource(runDirectory, reportReference.getParentFile(), clz);
     ClassReference clzRef = new ClassReference("", name);
     references.add(clzRef);
   }
 }