// Path: src/main/java/com/lsoftware/playdoh/util/Primitives.java
// public enum Primitives {
// 
//     BYTE    ("byte", Byte.class, "[B"),
//     SHORT   ("short", Short.class, "[S"),
//     INT     ("int", Integer.class, "[I"),
//     LONG    ("long", Long.class, "[J"),
//     FLOAT   ("float", Float.class, "[F"),
//     DOUBLE  ("double", Double.class, "D"),
//     BOOLEAN ("boolean", Boolean.class, "[Z"),
//     CHAR    ("char", Character.class, "[C");
// 
//     private final String label;
// 
//     private final Class wrapperType;
// 
//     private final String primitiveArrayName;
// 
//     Primitives(String label, Class wrapperType, String primitiveArrayName) {
//         this.label = label;
//         this.wrapperType = wrapperType;
//         this.primitiveArrayName = primitiveArrayName;
//     }
// 
//     private String getLabel() {
//         return this.label;
//     }
// 
//     public static Class getWrapper(Class type) {
//         if(isPrimitive(type)) {
//             return Primitives.findByLabel(type.getSimpleName()).wrapperType;
//         } else if(isPrimitiveArray(type)) {
//             return Primitives.findByLabel(ClassUtils.getClassNameFromArray(type))
//                     .wrapperType;
//         } else {
//             throw new IllegalArgumentException("Not a primitive type: " + type.getSimpleName());
//         }
//     }
// 
//     public static boolean isPrimitive(Class type) {
//         return isPrimitive(type.getSimpleName());
//     }
// 
//     private static boolean isPrimitive(String typeName) {
//         for (Primitives primitives : Primitives.values()) {
//             if(typeName.equals(primitives.getLabel())) {
//                 return true;
//             }
//         }
// 
//         return false;
//     }
// 
//     public static boolean isPrimitiveArray(Class type) {
//         return isPrimitive(type.getSimpleName().substring(0, type.getSimpleName().length() - 2));
//     }
// 
//     private static Primitives findByLabel(String label) {
//         for (Primitives primitive : Primitives.values()) {
//             if(primitive.getLabel().equals(label)) {
//                 return primitive;
//             }
//         }
// 
//         throw new IllegalArgumentException("Not a primitive label: " + label);
//     }
// 
// }


import com.lsoftware.playdoh.util.Primitives;
import java.util.HashMap;
import java.util.Map;
package com.lsoftware.playdoh.generator;



public class ValueGeneratorFactoryImpl implements ValueGeneratorFactory {

    private final Map<Class, TypeValueGenerator> generators = new HashMap<Class, TypeValueGenerator>(){{
        put(    Byte.class,         new ByteGenerator());
        put(    Short.class,        new ShortGenerator());
        put(    Integer.class,      new IntegerGenerator());
        put(    Long.class,         new LongGenerator());
        put(    Float.class,        new FloatGenerator());
        put(    Double.class,       new DoubleGenerator());
        put(    Boolean.class,      new BooleanGenerator());
        put(    Character.class,    new CharacterGenerator());
        put(    String.class,       new StringGenerator());
    }};

    public TypeValueGenerator getFromType(Class type) {
// Path: src/main/java/com/lsoftware/playdoh/util/Primitives.java
// public enum Primitives {
// 
//     BYTE    ("byte", Byte.class, "[B"),
//     SHORT   ("short", Short.class, "[S"),
//     INT     ("int", Integer.class, "[I"),
//     LONG    ("long", Long.class, "[J"),
//     FLOAT   ("float", Float.class, "[F"),
//     DOUBLE  ("double", Double.class, "D"),
//     BOOLEAN ("boolean", Boolean.class, "[Z"),
//     CHAR    ("char", Character.class, "[C");
// 
//     private final String label;
// 
//     private final Class wrapperType;
// 
//     private final String primitiveArrayName;
// 
//     Primitives(String label, Class wrapperType, String primitiveArrayName) {
//         this.label = label;
//         this.wrapperType = wrapperType;
//         this.primitiveArrayName = primitiveArrayName;
//     }
// 
//     private String getLabel() {
//         return this.label;
//     }
// 
//     public static Class getWrapper(Class type) {
//         if(isPrimitive(type)) {
//             return Primitives.findByLabel(type.getSimpleName()).wrapperType;
//         } else if(isPrimitiveArray(type)) {
//             return Primitives.findByLabel(ClassUtils.getClassNameFromArray(type))
//                     .wrapperType;
//         } else {
//             throw new IllegalArgumentException("Not a primitive type: " + type.getSimpleName());
//         }
//     }
// 
//     public static boolean isPrimitive(Class type) {
//         return isPrimitive(type.getSimpleName());
//     }
// 
//     private static boolean isPrimitive(String typeName) {
//         for (Primitives primitives : Primitives.values()) {
//             if(typeName.equals(primitives.getLabel())) {
//                 return true;
//             }
//         }
// 
//         return false;
//     }
// 
//     public static boolean isPrimitiveArray(Class type) {
//         return isPrimitive(type.getSimpleName().substring(0, type.getSimpleName().length() - 2));
//     }
// 
//     private static Primitives findByLabel(String label) {
//         for (Primitives primitive : Primitives.values()) {
//             if(primitive.getLabel().equals(label)) {
//                 return primitive;
//             }
//         }
// 
//         throw new IllegalArgumentException("Not a primitive label: " + label);
//     }
// 
// }


// Path: src/main/java/com/lsoftware/playdoh/generator/ValueGeneratorFactoryImpl.java
import com.lsoftware.playdoh.util.Primitives;
import java.util.HashMap;
import java.util.Map;

package com.lsoftware.playdoh.generator;



public class ValueGeneratorFactoryImpl implements ValueGeneratorFactory {

    private final Map<Class, TypeValueGenerator> generators = new HashMap<Class, TypeValueGenerator>(){{
        put(    Byte.class,         new ByteGenerator());
        put(    Short.class,        new ShortGenerator());
        put(    Integer.class,      new IntegerGenerator());
        put(    Long.class,         new LongGenerator());
        put(    Float.class,        new FloatGenerator());
        put(    Double.class,       new DoubleGenerator());
        put(    Boolean.class,      new BooleanGenerator());
        put(    Character.class,    new CharacterGenerator());
        put(    String.class,       new StringGenerator());
    }};

    public TypeValueGenerator getFromType(Class type) {
        if(Primitives.isPrimitive(type) || Primitives.isPrimitiveArray(type)) {