package hudson.plugins.emma; import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.StaplerResponse; import java.io.IOException; import java.util.Map; import java.util.TreeMap; /** * Reports that have children. * * @author Kohsuke Kawaguchi */ public abstract class AggregatedReport< PARENT extends AggregatedReport<?,PARENT,?>, SELF extends AggregatedReport<PARENT,SELF,CHILD>, CHILD extends AbstractReport<SELF,CHILD>> extends AbstractReport<PARENT,SELF> { private final Map<String, CHILD> children = new TreeMap<String, CHILD>(); public void add(CHILD child) { children.put(child.getName(),child); this.hasClassCoverage(); } public Map<String,CHILD> getChildren() { return children; } protected void setParent(PARENT p) { super.setParent(p); for (CHILD c : children.values()) c.setParent((SELF)this); } public CHILD getDynamic(String token, StaplerRequest req, StaplerResponse rsp ) throws IOException { return getChildren().get(token); } @Override public void setFailed() { super.setFailed(); if (getParent() != null) getParent().setFailed(); } public boolean hasChildren() { return getChildren().size() > 0; } public boolean hasChildrenLineCoverage() { for (CHILD child : getChildren().values()){ if (child.hasLineCoverage()) { return true; } } return false; } public boolean hasChildrenClassCoverage() { for (CHILD child : getChildren().values()){ if (child.hasClassCoverage()) { return true; } } return false; } }