package com.gmail.nossr50.skills.child; import java.util.Collections; import java.util.EnumSet; import java.util.HashMap; import java.util.Set; import com.gmail.nossr50.datatypes.skills.PrimarySkill; public class FamilyTree { private static HashMap> tree = new HashMap>(); public static Set getParents(PrimarySkill childSkill) { enforceChildSkill(childSkill); // We do not check if we have the child skill in question, as not having it would mean we did something wrong, and an NPE is desired. return tree.get(childSkill); } protected static void registerParent(PrimarySkill childSkill, PrimarySkill parentSkill) { enforceChildSkill(childSkill); enforceNotChildSkill(parentSkill); if (!tree.containsKey(childSkill)) { tree.put(childSkill, EnumSet.noneOf(PrimarySkill.class)); } tree.get(childSkill).add(parentSkill); } protected static void closeRegistration() { for (PrimarySkill childSkill : tree.keySet()) { Set immutableSet = Collections.unmodifiableSet(tree.get(childSkill)); tree.put(childSkill, immutableSet); } } protected static void clearRegistrations() { tree.clear(); } protected static void enforceChildSkill(PrimarySkill skill) { if (!skill.isChildSkill()) { throw new IllegalArgumentException(skill.name() + " is not a child skill!"); } } protected static void enforceNotChildSkill(PrimarySkill skill) { if (skill.isChildSkill()) { throw new IllegalArgumentException(skill.name() + " is a child skill!"); } } }