package com.frozendevs.periodictable.content;
import android.content.Context;
import com.frozendevs.periodictable.R;
import com.google.gson.Gson;
import com.google.gson.stream.JsonReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class Database {
private static InputStreamReader getInputStreamReader(Context context) {
return new InputStreamReader(context.getResources().openRawResource(R.raw.database));
}
public static <T> List<T> getAllElements(Context context, Class<T> classOfT) {
final List<T> elements = new ArrayList<>();
final JsonReader reader = new JsonReader(getInputStreamReader(context));
try {
reader.beginArray();
final Gson gson = new Gson();
while (reader.hasNext()) {
elements.add(classOfT.cast(gson.fromJson(reader, classOfT)));
}
reader.endArray();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return elements;
}
public static <T> T getElement(Context context, Class<T> classOfT, int number) {
T element = null;
final JsonReader reader = new JsonReader(getInputStreamReader(context));
try {
reader.beginArray();
final Gson gson = new Gson();
for (int i = 1; reader.hasNext(); i++) {
if (i == number) {
element = classOfT.cast(gson.fromJson(reader, classOfT));
break;
} else {
reader.skipValue();
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return element;
}
}