package se.unlogic.standardutils.populators;

import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;


public class BeanStringPopulatorRegistery {

   private final static HashMap<Class<?>, BeanStringPopulator<?>> TYPE_POPULATORS = new HashMap<Class<?>, BeanStringPopulator<?>>();

   static{
      addTypePopulator(new UUIDPopulator());
      addTypePopulator(new BooleanPopulator());
      addTypePopulator(new DoublePopulator());
      addTypePopulator(new FloatPopulator());
      addTypePopulator(new IntegerPopulator());
      addTypePopulator(new LongPopulator());
      addTypePopulator(new PrimitiveBooleanPopulator());
      addTypePopulator(new PrimitiveIntegerPopulator());
      addTypePopulator(new PrimitiveLongPopulator());
      addTypePopulator(new StringPopulator());
   }

   private static void addTypePopulator(BeanStringPopulator<?> typePopulator){

      TYPE_POPULATORS.put(typePopulator.getType(), typePopulator);
   }

   @SuppressWarnings("unchecked")
   public static <T> BeanStringPopulator<T> getBeanStringPopulator(Class<T> clazz){

      return (BeanStringPopulator<T>) TYPE_POPULATORS.get(clazz);
   }

   public static Collection<BeanStringPopulator<?>> getBeanStringPopulators(){

      return Collections.unmodifiableCollection(TYPE_POPULATORS.values());
   }
}
