001 package jp.osdl.jbento2.report;
002
003 import java.io.BufferedWriter;
004 import java.io.File;
005 import java.io.FileFilter;
006 import java.io.FileWriter;
007 import java.util.ArrayList;
008 import java.util.Collections;
009 import java.util.Comparator;
010 import java.util.HashMap;
011 import java.util.List;
012 import java.util.Map;
013
014 import org.apache.commons.io.IOUtils;
015 import org.apache.velocity.Template;
016 import org.apache.velocity.VelocityContext;
017 import org.apache.velocity.app.Velocity;
018
019 public class SummaryBuilder extends AbstractReportBuilder {
020
021 public SummaryBuilder(File dataDir, File destDir, File destRootDir) {
022 super(dataDir, destDir, destRootDir);
023 }
024
025 public void execute() throws Exception {
026 buildSummary();
027 }
028
029 private void buildSummary() throws Exception {
030 Template template = Velocity
031 .getTemplate("jp/osdl/jbento2/report/result.vm");
032
033 VelocityContext context = new VelocityContext();
034 context.put("title", "JBento Summary Report");
035 context.put("relativeRoot", getRelativeRoot());
036 context.put("relativePath", getRelativePath());
037
038 File[] detailDirs = getDataDir().listFiles(new FileFilter() {
039 public boolean accept(File f) {
040 return FileMatcher.isAnalyzeDir(f);
041 }
042 });
043
044 List detailList = new ArrayList();
045 for (int i = 0; i < detailDirs.length; i++) {
046 Map item = new HashMap();
047 item.put("name", detailDirs[i].getName());
048 item.put("path", detailDirs[i].getName());
049 detailList.add(item);
050 }
051
052 Collections.sort(detailList, new Comparator() {
053 public int compare(Object arg0, Object arg1) {
054 return FileMatcher.compareAnalyzeDir((String) ((Map) arg0)
055 .get("name"), (String) ((Map) arg1).get("name"));
056 }
057 });
058 context.put("details", detailList);
059
060 BufferedWriter writer = null;
061 try {
062 writer = new BufferedWriter(new FileWriter(new File(getDestDir(),
063 "result.html")));
064 template.merge(context, writer);
065 writer.flush();
066 } finally {
067 IOUtils.closeQuietly(writer);
068 }
069 }
070 }