public Node node(String path, Integer changesetNumber, String changesetIdentifier) { Map<String, String> rawContent = contentCache.readFor(changesetNumber); if (!path.equals("") && rawContent.containsKey(path)) { return new FileNode(this, path, changesetNumber, changesetIdentifier, rawContent.get(path)); } else { DirNode dirNode = new DirNode(this, path, changesetNumber, changesetIdentifier, rawContent.get(path) + "/"); dirNode.setChildren(childNodesFor(dirNode, rawContent)); return dirNode; } }