You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.5 KiB
48 lines
1.5 KiB
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<String> getTreeOf(int size) {
|
|
List<String> tree = new LinkedList<>();
|
|
renderTreeSlices(size, tree);
|
|
renderTrunk(size, tree);
|
|
return tree;
|
|
}
|
|
|
|
private void renderTrunk(int size, List<String> 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<String> tree) {
|
|
for (int sliceWidth = 0; sliceWidth < size; sliceWidth++) {
|
|
renderSingleSlice(size, tree, sliceWidth);
|
|
}
|
|
}
|
|
|
|
private void renderSingleSlice(int size, List<String> 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());
|
|
}
|
|
|
|
}
|