package nl.elastique.poetry.json;
import android.content.ContentValues;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.Date;
public class JsonUtils
{
public static Object getValue(JSONObject jsonObject, String jsonKey, Class<?> type) throws JSONException
{
if (!jsonObject.has(jsonKey))
{
return null;
}
if (Integer.class.isAssignableFrom(type) || int.class.isAssignableFrom(type))
{
return jsonObject.getInt(jsonKey);
}
else if (Long.class.isAssignableFrom(type) || long.class.isAssignableFrom(type))
{
return jsonObject.getLong(jsonKey);
}
else if (Boolean.class.isAssignableFrom(type) || boolean.class.isAssignableFrom(type))
{
return jsonObject.getBoolean(jsonKey);
}
else if (String.class.isAssignableFrom(type))
{
return jsonObject.getString(jsonKey);
}
else if (Double.class.isAssignableFrom(type) || double.class.isAssignableFrom(type))
{
return jsonObject.getDouble(jsonKey);
}
else if (Float.class.isAssignableFrom(type) || float.class.isAssignableFrom(type))
{
return ((Double)jsonObject.getDouble(jsonKey)).floatValue();
}
else
{
throw new RuntimeException("unsupported type: " + type.getName() + " (only Integer, Long, Boolean, String, Double and Float are supported)");
}
}
public static boolean copyContentValue(JSONObject jsonObject, String jsonKey, ContentValues values, String key) throws JSONException
{
if (!jsonObject.has(jsonKey))
{
return false;
}
Object value = jsonObject.get(jsonKey);
return copyValue(value, key, values);
}
public static boolean copyValue(Object value, String key, ContentValues values)
{
Class<?> value_class = value.getClass();
if (Integer.class == value_class || int.class == value_class)
{
values.put(key, (Integer)value);
}
else if (Long.class == value_class || long.class == value_class)
{
values.put(key, (Long)value);
}
else if (Short.class == value_class || short.class == value_class)
{
values.put(key, (Short)value);
}
else if (Byte.class == value_class || byte.class == value_class)
{
values.put(key, (Byte)value);
}
else if (Boolean.class == value_class || boolean.class == value_class)
{
values.put(key, (Boolean)value);
}
else if (Float.class == value_class || float.class == value_class)
{
values.put(key, (Float)value);
}
else if (Double.class == value_class || double.class == value_class)
{
values.put(key, (Double)value);
}
else if (CharSequence.class.isAssignableFrom(value_class) || Date.class.isAssignableFrom(value_class))
{
values.put(key, value.toString());
}
else
{
return false;
}
return true;
}
}