package com.larswerkman.boxer.wrappers; import com.larswerkman.boxer.Boxer; import java.lang.reflect.Array; import java.util.HashMap; import java.util.List; /** * Created by lars on 23-04-15. */ public class TestWrapper extends Boxer<HashMap<String, Object>> { private HashMap<String, Object> map; /** * Empty constructor, Can't be a generic type because of ClassNotFoundException * * @param map Serialization object */ public TestWrapper(HashMap<String, Object> map) { super(map); this.map = map; } @Override public void add(String key, Object value) { map.put(key, serialize(new TestWrapper(new HashMap<String, Object>()), value)); } @Override public void addArray(String key, Object[] value) { HashMap<String, Object> boxeables = new HashMap<String, Object>(); boxeables.put("size", value.length); for(int i = 0; i < value.length; i++){ boxeables.put(String.valueOf(i), serialize(new TestWrapper(new HashMap<String, Object>()), value[i])); } map.put(key, boxeables); } @Override public void addList(String key, List<?> value) { addArray(key, value.toArray()); } @Override public void addEnum(String key, Enum value) { map.put(key, value); } @Override public void addEnumArray(String key, Enum[] value) { map.put(key, value); } @Override public void addEnumList(String key, List<? extends Enum> value) { map.put(key, value); } @Override public void addString(String key, String value) { map.put(key, value); } @Override public void addStringArray(String key, String[] value) { map.put(key, value); } @Override public void addStringList(String key, List<String> value) { map.put(key, value); } @Override public void addBoolean(String key, boolean value) { map.put(key, value); } @Override public void addBooleanArray(String key, boolean[] value) { map.put(key, value); } @Override public void addBooleanList(String key, List<Boolean> value) { map.put(key, value); } @Override public void addByte(String key, byte value) { map.put(key, value); } @Override public void addByteArray(String key, byte[] value) { map.put(key, value); } @Override public void addByteList(String key, List<Byte> value) { map.put(key, value); } @Override public void addChar(String key, char value) { map.put(key, value); } @Override public void addCharArray(String key, char[] value) { map.put(key, value); } @Override public void addCharList(String key, List<Character> value) { map.put(key, value); } @Override public void addShort(String key, short value) { map.put(key, value); } @Override public void addShortArray(String key, short[] value) { map.put(key, value); } @Override public void addShortList(String key, List<Short> value) { map.put(key, value); } @Override public void addInt(String key, int value) { map.put(key, value); } @Override public void addIntArray(String key, int[] value) { map.put(key, value); } @Override public void addIntList(String key, List<Integer> value) { map.put(key, value); } @Override public void addLong(String key, long value) { map.put(key, value); } @Override public void addLongArray(String key, long[] value) { map.put(key, value); } @Override public void addLongList(String key, List<Long> value) { map.put(key, value); } @Override public void addDouble(String key, double value) { map.put(key, value); } @Override public void addDoubleArray(String key, double[] value) { map.put(key, value); } @Override public void addDoubleList(String key, List<Double> value) { map.put(key, value); } @Override public void addFloat(String key, float value) { map.put(key, value); } @Override public void addFloatArray(String key, float[] value) { map.put(key, value); } @Override public void addFloatList(String key, List<Float> value) { map.put(key, value); } @Override public <T> T get(String key, Class<T> clazz) { HashMap<String, Object> map = (HashMap<String, Object>) this.map.get(key); if(map == null){ return null; } return deserialize(new TestWrapper(map), clazz); } @Override public <T> T[] getArray(String key, Class<T> clazz) { HashMap<String, Object> values = (HashMap<String, Object>) map.get(key); if(values == null){ return null; } int size = (Integer) values.get("size"); T[] boxables = (T[]) Array.newInstance(clazz, size); for(int i = 0; i < size; i++){ boxables[i] = deserialize(new TestWrapper((HashMap<String, Object>) values.get(String.valueOf(i))), clazz); } return boxables; } @Override public <T, E extends List<T>> E getList(String key, Class<T> clazz, Class<E> listtype) { HashMap<String, Object> values = (HashMap<String, Object>) map.get(key); if(values == null){ return null; } int size = (Integer) values.get("size"); E boxables = null; try { boxables = listtype.newInstance(); for (int i = 0; i < size; i++) { boxables.add(deserialize(new TestWrapper((HashMap<String, Object>) values.get(String.valueOf(i))), clazz)); } } catch (Exception e){/*Do Nothing*/}; return boxables; } @Override public <T extends Enum> T getEnum(String key, Class<T> clazz) { return (T) map.get(key); } @Override public <T extends Enum> T[] getEnumArray(String key, Class<T> clazz) { return (T[]) map.get(key); } @Override public <T extends Enum, E extends List<T>> E getEnumList(String key, Class<T> clazz, Class<E> listtype) { return (E) map.get(key); } @Override public String getString(String key) { return (String) map.get(key); } @Override public String[] getStringArray(String key) { return (String[]) map.get(key); } @Override public <T extends List<String>> T getStringList(String key, Class<T> listtype) { return (T) map.get(key); } @Override public boolean getBoolean(String key) { Object value = map.get(key); if(value == null){ return false; } return (Boolean) value; } @Override public boolean[] getBooleanArray(String key) { return (boolean[]) map.get(key); } @Override public <T extends List<Boolean>> T getBooleanList(String key, Class<T> listtype) { return (T) map.get(key); } @Override public byte getByte(String key) { Object value = map.get(key); if(value == null){ return 0; } return (Byte) value; } @Override public byte[] getByteArray(String key) { return (byte[]) map.get(key); } @Override public <T extends List<Byte>> T getByteList(String key, Class<T> listtype) { return (T) map.get(key); } @Override public char getChar(String key) { Object value = map.get(key); if(value == null){ return 0; } return (Character) value; } @Override public char[] getCharArray(String key) { return (char[]) map.get(key); } @Override public <T extends List<Character>> T getCharList(String key, Class<T> listtype) { return (T) map.get(key); } @Override public short getShort(String key) { Object value = map.get(key); if(value == null){ return 0; } return (Short) value; } @Override public short[] getShortArray(String key) { return (short[]) map.get(key); } @Override public <T extends List<Short>> T getShortList(String key, Class<T> listtype) { return (T) map.get(key); } @Override public int getInt(String key) { Object value = map.get(key); if(value == null){ return 0; } return (Integer) value; } @Override public int[] getIntArray(String key) { return (int[]) map.get(key); } @Override public <T extends List<Integer>> T getIntList(String key, Class<T> listtype) { return (T) map.get(key); } @Override public long getLong(String key) { Object value = map.get(key); if(value == null){ return 0; } return (Long) value; } @Override public long[] getLongArray(String key) { return (long[]) map.get(key); } @Override public <T extends List<Long>> T getLongList(String key, Class<T> listtype) { return (T) map.get(key); } @Override public double getDouble(String key) { Object value = map.get(key); if(value == null){ return 0; } return (Double) value; } @Override public double[] getDoubleArray(String key) { return (double[]) map.get(key); } @Override public <T extends List<Double>> T getDoubleList(String key, Class<T> listtype) { return (T) map.get(key); } @Override public float getFloat(String key) { Object value = map.get(key); if(value == null){ return 0; } return (Float) value; } @Override public float[] getFloatArray(String key) { return (float[]) map.get(key); } @Override public <T extends List<Float>> T getFloatList(String key, Class<T> listtype) { return (T) map.get(key); } }