package com.brightgenerous.json.delegate;
import java.io.IOException;
import java.io.Reader;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import net.arnx.jsonic.JSON;
import net.arnx.jsonic.JSONException;
import com.brightgenerous.json.JsonException;
class JsonDelegaterJsonic implements JsonDelegater {
{
check();
}
private static void check() {
try {
Class.forName(JSON.class.getName());
Class.forName(JSONException.class.getName());
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
@Override
public Type getType(Object obj) {
Type type = obj.getClass().getGenericSuperclass();
if (type instanceof ParameterizedType) {
Type[] args = ((ParameterizedType) type).getActualTypeArguments();
if ((args != null) && (args.length == 1)) {
return args[0];
}
}
throw new IllegalStateException("Reference must be specified actual type.");
}
@Override
public <T> T parseJson(String json, Class<T> clazz, boolean serializeNulls)
throws JsonException {
return parseJson(json, clazz, null, serializeNulls);
}
@Override
public <T> T parseJson(String json, Class<T> clazz, String dateFormat, boolean serializeNulls)
throws JsonException {
try {
return create(dateFormat, serializeNulls).parse(json, clazz);
} catch (JSONException e) {
throw new JsonException(e);
}
}
@Override
public <T> T parseJson(String json, Type type, boolean serializeNulls) throws JsonException {
return parseJson(json, type, null, serializeNulls);
}
@Override
public <T> T parseJson(String json, Type type, String dateFormat, boolean serializeNulls)
throws JsonException {
try {
return create(dateFormat, serializeNulls).parse(json, type);
} catch (JSONException e) {
throw new JsonException(e);
}
}
@Override
public <T> T parseJson(Reader json, Class<T> clazz, boolean serializeNulls)
throws JsonException {
return parseJson(json, clazz, null, serializeNulls);
}
@Override
public <T> T parseJson(Reader json, Class<T> clazz, String dateFormat, boolean serializeNulls)
throws JsonException {
try {
return create(dateFormat, serializeNulls).parse(json, clazz);
} catch (JSONException | IOException e) {
throw new JsonException(e);
}
}
@Override
public <T> T parseJson(Reader json, Type type, boolean serializeNulls) throws JsonException {
return parseJson(json, type, null, serializeNulls);
}
@Override
public <T> T parseJson(Reader json, Type type, String dateFormat, boolean serializeNulls)
throws JsonException {
try {
return create(dateFormat, serializeNulls).parse(json, type);
} catch (JSONException | IOException e) {
throw new JsonException(e);
}
}
@Override
public String formatJson(Object obj, boolean serializeNulls) {
return formatJson(obj, (String) null, serializeNulls);
}
@Override
public String formatJson(Object obj, String dateFormat, boolean serializeNulls) {
return create(dateFormat, serializeNulls).format(obj);
}
@Override
public String formatJson(Object obj, Type type, boolean serializeNulls) {
return formatJson(obj, type, null, serializeNulls);
}
@Override
public String formatJson(Object obj, Type type, String dateFormat, boolean serializeNulls) {
return create(dateFormat, serializeNulls).format(obj);
}
protected JSON create(String dateFormat, boolean serializeNulls) {
JSON ret = new JSON();
if (dateFormat != null) {
ret.setDateFormat(dateFormat);
}
ret.setSuppressNull(!serializeNulls);
return ret;
}
}