package br.com.caelum.calopsita.model; import java.util.ArrayList; import java.util.List; import br.com.caelum.calopsita.plugins.planning.PlanningCard; import br.com.caelum.calopsita.plugins.prioritization.PrioritizableCard; import br.com.caelum.calopsita.plugins.roi.ValuableCard; public enum Gadgets { PRIORITIZATION { @Override public PrioritizableCard createGadgetFor(Card card) { return PrioritizableCard.of(card); } @Override public Class<? extends Gadget> gadgetClass() { return PrioritizableCard.class; } }, PLANNING { @Override public PlanningCard createGadgetFor(Card card) { return PlanningCard.of(card); } @Override public Class<? extends Gadget> gadgetClass() { return PlanningCard.class; } }, VALUABLE { @Override public Gadget createGadgetFor(Card card) { return ValuableCard.of(card); } @Override public Class<? extends Gadget> gadgetClass() { return ValuableCard.class; } }; public abstract Gadget createGadgetFor(Card card); public abstract Class<? extends Gadget> gadgetClass(); public static List<Gadgets> valueOf(List<? extends Gadget> gadgets) { List<Gadgets> result = new ArrayList<Gadgets>(); for (Gadget gadget : gadgets) { for (Gadgets g : values()) { if (g.gadgetClass().isInstance(gadget)) { result.add(g); } } } return result; } }