package de.edu.hsfulda.ciip.tdd; import java.util.LinkedList; import java.util.List; public class TannenbaumRenderer { private static final int BOTH_DIRECTIONS = 2; private static final int OFFSET = 1; private static final int MIDDLE_BRANCH = 1; private static final String SYMBOL_TRUNK = "I"; private static final String SYMBOL_BRANCH = "X"; private static final String SYMBOL_INDENT = " "; private final StringRepeater symbolRepeater; public TannenbaumRenderer(StringRepeater symbolRepeater) { this.symbolRepeater = symbolRepeater; } public List getTreeOf(int size) { List tree = new LinkedList<>(); renderTreeSlices(size, tree); renderTrunk(size, tree); return tree; } private void renderTrunk(int size, List tree) { StringBuilder slice = new StringBuilder(); symbolRepeater.repeatSymbol(slice, size - MIDDLE_BRANCH, SYMBOL_INDENT); symbolRepeater.repeatSymbol(slice, MIDDLE_BRANCH, SYMBOL_TRUNK); tree.add(slice.toString()); } private void renderTreeSlices(int size, List tree) { for (int sliceWidth = 0; sliceWidth < size; sliceWidth++) { renderSingleSlice(size, tree, sliceWidth); } } private void renderSingleSlice(int size, List tree, int sliceWidth) { StringBuilder slice = new StringBuilder(); symbolRepeater.repeatSymbol(slice, size - (sliceWidth + OFFSET), SYMBOL_INDENT); symbolRepeater.repeatSymbol(slice, sliceWidth * BOTH_DIRECTIONS + MIDDLE_BRANCH, SYMBOL_BRANCH); tree.add(slice.toString()); } }