package com.amadornes.framez.modifier; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import com.amadornes.framez.api.modifier.IMotorModifier; import com.amadornes.framez.api.modifier.IMotorModifierRegistry; import com.amadornes.framez.util.SorterModifierType; public class MotorModifierRegistry implements IMotorModifierRegistry { private static final MotorModifierRegistry instance = new MotorModifierRegistry(); public static MotorModifierRegistry instance() { return instance; } private List<IMotorModifier> registered = new ArrayList<IMotorModifier>(); private List<List<IMotorModifier>> combinations = new ArrayList<List<IMotorModifier>>(); @Override public void registerModifier(IMotorModifier modifier) { if (modifier == null) throw new RuntimeException("Attempted to register a null motor modifier"); if (modifier.getType() == null) throw new RuntimeException("Attempted to register a motor modifier with a null identifier"); if (findModifier(modifier.getType()) != null) throw new RuntimeException("Attempted to register a motor modifier that has already been registered"); registered.add(modifier); } @Override public Collection<IMotorModifier> getRegisteredModifiers() { return registered; } @Override public IMotorModifier findModifier(String type) { for (IMotorModifier m : registered) if (m.getType().equals(type)) return m; return null; } public void registerCombination(String... modifiers) { List<IMotorModifier> l = new ArrayList<IMotorModifier>(); for (String s : modifiers) { IMotorModifier m = findModifier(s); if (m != null && !l.contains(m)) l.add(m); } if (l.size() == 0) return; Collections.sort(l, new SorterModifierType()); if (!combinations.contains(l)) combinations.add(l); } public List<List<IMotorModifier>> getAllCombinations() { return combinations; } }