import java.util.*;

public class ClassDictionary {
    private static Hashtable managers;

	 static {
		 LeafClassManager lcm = new LeafClassManager();
		 managers = new Hashtable();
		 try {
		 	managers.put(Class.forName("java.lang.String"), lcm);
		 	managers.put(Class.forName("java.lang.Boolean"), lcm);
		 	managers.put(Class.forName("java.lang.Byte"), lcm);
		 	managers.put(Class.forName("java.lang.Short"), lcm);
       	    managers.put(Class.forName("java.lang.Character"), lcm);
		 	managers.put(Class.forName("java.lang.Integer"), lcm);
		 	managers.put(Class.forName("java.lang.Long"), lcm);
		 	managers.put(Class.forName("java.lang.Float"), lcm);
		 	managers.put(Class.forName("java.lang.Double"), lcm);
		    managers.put(Boolean.TYPE, lcm);
			managers.put(Byte.TYPE, lcm);
			managers.put(Short.TYPE, lcm);
			managers.put(Character.TYPE, lcm);
			managers.put(Integer.TYPE, lcm);
			managers.put(Long.TYPE, lcm);
			managers.put(Float.TYPE, lcm);
			managers.put(Double.TYPE, lcm);
		 } catch (Exception e) {
			 System.out.println(e);
		 }
	 }

    public static ClassManager getClassManager(Class c) {
        ClassManager cm = (ClassManager)managers.get(c);
        if (cm == null) {
            if (ContainerClassManager.containerClass.isAssignableFrom(c)) managers.put(c, cm = new ContainerClassManager(c));
            else managers.put(c, cm = new GenericClassManager(c));
        }
        return cm;
    }
}