package com.prupe.mcpatcher;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
public class JsonUtils {
public static Gson newGson() {
GsonBuilder builder = new GsonBuilder();
builder.setPrettyPrinting();
return builder.create();
}
public static <T extends Object> T parseJson(File path, Class<T> cl) {
if (path != null && path.isFile() && path.length() > 0L) {
FileInputStream input = null;
Object var4;
try {
input = new FileInputStream(path);
Object e = parseJson((InputStream)input, cl);
// ToDo: return e; [incompatible types]
return null;
} catch (Throwable var8) {
var8.printStackTrace();
var4 = null;
} finally {
MCPatcherUtils.close((Closeable)input);
}
//ToDo:
return null; //var4
} else {
return null;
}
}
public static <T extends Object> T parseJson(InputStream input, Class<T> cl) {
if (input == null) {
return null;
} else {
try {
InputStreamReader e = new InputStreamReader(input);
return newGson().fromJson(e, cl);
} catch (Throwable var3) {
var3.printStackTrace();
return null;
}
}
}
public static JsonObject parseJson(File path) {
FileReader input = null;
JsonObject var3;
try {
input = new FileReader(path);
JsonParser e = new JsonParser();
var3 = e.parse(input).getAsJsonObject();
return var3;
} catch (Throwable var7) {
var7.printStackTrace();
var3 = null;
} finally {
MCPatcherUtils.close((Closeable)input);
}
return var3;
}
public static boolean writeJson(JsonElement json, File path) {
PrintWriter output = null;
boolean var4;
try {
output = new PrintWriter(path);
Gson e = newGson();
e.toJson(json, output);
output.println();
var4 = true;
return var4;
} catch (Throwable var8) {
var8.printStackTrace();
MCPatcherUtils.close((Closeable)output);
path.delete();
var4 = false;
} finally {
MCPatcherUtils.close((Closeable)output);
}
return var4;
}
public static boolean writeJson(Object object, File path) {
PrintWriter output = null;
boolean var4;
try {
output = new PrintWriter(path);
Gson e = newGson();
e.toJson(object, object.getClass(), output);
output.println();
var4 = true;
return var4;
} catch (Throwable var8) {
var8.printStackTrace();
MCPatcherUtils.close((Closeable)output);
path.delete();
var4 = false;
} finally {
MCPatcherUtils.close((Closeable)output);
}
return var4;
}
public static <T extends JsonElement> T cloneJson(T json) {
//return (new JsonParser()).parse(json.toString());
return null;
}
public static <T extends Object> T cloneJson(T json, Class<T> jsonClass) {
Gson gson = newGson();
return gson.fromJson(gson.toJson(json, jsonClass), jsonClass);
}
}