package net.rubygrapefruit.docs.model.buildable; import net.rubygrapefruit.docs.model.Block; import net.rubygrapefruit.docs.model.BlockContainer; import java.util.ArrayList; import java.util.List; public class BuildableBlockContainer implements BlockContainer { private final List<BuildableBlock> contents = new ArrayList<BuildableBlock>(); public void finish() { for (BuildableBlock block : contents) { block.finish(); } } public List<? extends BuildableBlock> getContents() { return contents; } public <T extends Block> List<T> getContents(Class<T> type) { List<T> matches = new ArrayList<T>(); for (Block content : contents) { if (type.isInstance(content)) { matches.add(type.cast(content)); } } return matches; } protected <T extends BuildableBlock> T add(T block) { contents.add(block); return block; } public BuildableParagraph addParagraph() { return add(new BuildableParagraph()); } public BuildableItemisedList addItemisedList() { return add(new BuildableItemisedList()); } public BuildableOrderedList addOrderedList() { return add(new BuildableOrderedList()); } public BuildableErrorElement addError(String message) { return add(new BuildableErrorElement(message)); } public BuildableProgramListing addProgramListing() { return add(new BuildableProgramListing()); } public BuildableExample addExample() { return add(new BuildableExample()); } }