package org.activityinfo.geoadmin.model; import java.util.List; import java.util.Map; import com.google.common.collect.Maps; public class AdminLevelTree { private AdminLevelNode root; private Map<Integer, AdminLevelNode> nodes; public AdminLevelTree(List<AdminLevel> levels) { root = new AdminLevelNode(); nodes = Maps.newHashMap(); for(AdminLevel level : levels) { AdminLevelNode node = new AdminLevelNode(); node.id = level.getId(); node.name = level.getName(); nodes.put(level.getId(), node); if(level.isRoot()) { root.childLevels.add(node); } } for(AdminLevel level : levels) { if(!level.isRoot()) { AdminLevelNode parentNode = nodes.get(level.getParentId()); AdminLevelNode childNode = nodes.get(level.getId()); childNode.parent = parentNode; parentNode.childLevels.add(childNode); } } } public AdminLevelNode getRootNode() { return root; } public AdminLevelNode getLevelById(int id) { return nodes.get(id); } }