DataObjectJavaImpl.java

package eu.javaexperience.datareprez.javaImpl;

import java.io.Serializable;
import java.util.Map;

import eu.javaexperience.collection.map.MapTools;
import eu.javaexperience.collection.map.SmallMap;
import eu.javaexperience.datareprez.DataCommon;
import eu.javaexperience.datareprez.abstractImpl.DataObjectAbstractImpl;
import eu.javaexperience.datareprez.abstractImpl.DataProtocol;
import eu.javaexperience.io.SerializationTools;
import eu.javaexperience.reflect.Mirror;

public class DataObjectJavaImpl extends DataObjectAbstractImpl
{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public static DataCommon PROTOTYPE = new DataObjectJavaImpl();
	
	Map<String,Object> obj = new SmallMap<>();
	
	public DataObjectJavaImpl(Map<String,Object> obj,MapProvider subImp)
	{
		this.obj = obj;
	}
	
	public DataObjectJavaImpl(Map<String, Object> data)
	{
		this.obj = data;
	}
	
	public DataObjectJavaImpl(){}

	@Override
	public String toString()
	{
		return "DataObjectJavaImpl: "+MapTools.toStringMultiline(obj);
	}

	@Override
	public Object getImpl()
	{
		return obj;
	}

	@Override
	public Class getCommonsClass()
	{
		return DataCommonJavaImpl.PROTOCOL.getCommonsClass();
	}

	@Override
	public byte[] toBlob()
	{
		return SerializationTools.serializeIntoBlob((Serializable) obj);
	}

	@Override
	public String[] keys()
	{
		return obj.keySet().toArray(Mirror.emptyStringArray);
	}
	
	@Override
	public boolean has(String key)
	{
		return obj.containsKey(key);
	}

	@Override
	protected void setSubjectValue(String key, Class<?> valueType, Object val)
	{
		if(null == val && valueType != void.class)
		{
			obj.remove(key);
		}
		else
		{
			obj.put(key, DataCommonJavaImpl.wrapObjectToStore(val, valueType));
		}
	}

	@Override
	protected <T> T getValueAs(String key, Class<T> cls)
	{
		Object o = obj.get(key);
		if(null != o)
		{
			return DataCommonJavaImpl.castToType(o, cls);
		}
		return null;
	}

	@Override
	protected DataProtocol getProtocolHandler()
	{
		return DataCommonJavaImpl.PROTOCOL;
	}
}