DataObjectJsonImpl.java
package eu.javaexperience.datareprez.jsonImpl;
import org.json.JSONObject;
import eu.javaexperience.datareprez.DataCommon;
import eu.javaexperience.datareprez.abstractImpl.DataObjectAbstractImpl;
import eu.javaexperience.datareprez.abstractImpl.DataProtocol;
import eu.javaexperience.reflect.Mirror;
import eu.javaexperience.text.Format;
public class DataObjectJsonImpl extends DataObjectAbstractImpl
{
public static DataCommon PROTOTYPE = new DataObjectJsonImpl();
final JSONObject obj;
public DataObjectJsonImpl()
{
obj = new JSONObject();
}
public DataObjectJsonImpl(JSONObject obj)
{
this.obj = obj;
}
@Override
public byte[] toBlob()
{
return obj.toString().getBytes();
}
@Override
public String toString()
{
return "DataObjectJsonImpl: "+obj;
}
@Override
public Object getImpl()
{
return obj;
}
@Override
public Class getCommonsClass()
{
return JSONObject.class;
}
@Override
public boolean has(String key)
{
return obj.has(key);
}
@Override
public String[] keys()
{
return obj.keySet().toArray(Mirror.emptyStringArray);
}
@Override
protected void setSubjectValue(String key, Class<?> valueType, Object val)
{
if(null == val && valueType != void.class)
{
obj.remove(key);
}
else
{
Object in = DataCommonJsonImpl.wrapObjectToStore(val, valueType);
if(null != in && byte[].class == valueType)
{
in = Format.base64Encode((byte[]) in);
}
obj.put(key, null == in?JSONObject.NULL:in);
}
}
@Override
protected <T> T getValueAs(String key, Class<T> cls)
{
Object o = null;
if(obj.has(key))
{
o = obj.get(key);
}
if(JSONObject.NULL == o)
{
return null;
}
if(null != o)
{
return DataCommonJsonImpl.castToType(o, cls);
}
return null;
}
@Override
protected DataProtocol getProtocolHandler()
{
return DataCommonJsonImpl.PROTOCOL;
}
}