package pl.edu.agh.logic; import static com.google.common.collect.Lists.newArrayList; import java.util.List; public abstract class PathSplitter { private PathSplitter parentSplitter; protected abstract List<Path> doSplit(Path path); protected PathSplitter(PathSplitter parent) { this.parentSplitter = parent; } public List<Path> split(Path path) { if (parentSplitter == null) { return doSplit(path); } List<Path> splittedByParent = parentSplitter.doSplit(path); List<Path> result = newArrayList(); for (Path splitted : splittedByParent) { result.addAll(doSplit(splitted)); } return result; } }