// Copyright (C) 2003-2009 by Object Mentor, Inc. All rights reserved. // Released under the terms of the CPL Common Public License version 1.0. package fitnesse.responders.run; import java.util.HashMap; import java.util.Map; import fitnesse.wiki.PageCrawler; import fitnesse.wiki.PageData; import fitnesse.wiki.PathParser; import fitnesse.wiki.VirtualEnabledPageCrawler; import fitnesse.wiki.WikiPage; import fitnesse.wiki.WikiPagePath; public class CompositeExecutionLog { private WikiPagePath errorLogPagePath; private PageCrawler crawler; private WikiPage root; public CompositeExecutionLog(WikiPage testPage) { crawler = testPage.getPageCrawler(); root = crawler.getRoot(testPage); crawler.setDeadEndStrategy(new VirtualEnabledPageCrawler()); errorLogPagePath = crawler.getFullPath(testPage).addNameToFront(ExecutionLog.ErrorLogName); } private Map<String, ExecutionLog> logs = new HashMap<String, ExecutionLog>(); public void add(String testSystemName, ExecutionLog executionLog) { logs.put(testSystemName, executionLog); } public void publish() { String content = buildLogContent(); WikiPage errorLogPage = crawler.addPage(root, errorLogPagePath); PageData data = errorLogPage.getData(); data.setContent(content); errorLogPage.commit(data); } private String buildLogContent() { StringBuffer logContent = new StringBuffer(); for (String testSystemName : logs.keySet()) { logContent.append(String.format("!3 !-%s-!\n", testSystemName)); logContent.append(logs.get(testSystemName).buildLogContent()); } return logContent.toString(); } public String getErrorLogPageName() { return PathParser.render(errorLogPagePath); } public int exceptionCount() { int count = 0; for (ExecutionLog log : logs.values()) count += log.exceptionCount(); return count; } public boolean hasCapturedOutput() { for (ExecutionLog log : logs.values()) if (log.hasCapturedOutput()) return true; return false; } }