package at.tugraz.examreminder.service;
import android.util.Log;
import at.tugraz.examreminder.ExamReminderApplication;
import at.tugraz.examreminder.core.Course;
import at.tugraz.examreminder.core.Exam;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.io.*;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import java.util.Observable;
import java.util.Observer;
public class CourseListSerializer implements Observer {
private static final String LOGCAT_TAG = "CourseListSerializer";
private static final String FILENAME = "saved_course_container.json";
public void saveCourseListToFile(List<Course> courseList) {
File file = new File(ExamReminderApplication.getAppContext().getExternalFilesDir(null), FILENAME);
String json = courseListToJson(courseList);
FileWriter fileWriter;
try {
fileWriter = new FileWriter(file, false);
fileWriter.write(json);
fileWriter.flush();
fileWriter.close();
Log.i(LOGCAT_TAG, "Finished saving courseContainer");
} catch (IOException e) {
}
}
public static String courseListToJson(List<Course> courseList) {
return new Gson().toJson(courseList);
}
@Override
public void update(Observable observable, Object o) {
SaveCourseContainerTask saveCourseContainerTask = new SaveCourseContainerTask(this);
saveCourseContainerTask.execute();
}
public List<Course> loadCourseListFromFile(InputStream inputStream) {
String json = null;
try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
StringBuffer stringBuffer = new StringBuffer();
String line = bufferedReader.readLine();
while (line != null) {
stringBuffer.append(line);
stringBuffer.append("\n");
line = bufferedReader.readLine();
}
json = stringBuffer.toString();
} catch (Exception e) {
}
if(json == null || json.length() == 0) {
return new ArrayList<Course>();
}
return jsonToCourseList(json);
}
public List<Course> loadCourseListFromFile() {
try {
return loadCourseListFromFile(new FileInputStream(new File(ExamReminderApplication.getAppContext().getExternalFilesDir(null), FILENAME)));
} catch (FileNotFoundException e) {
return new ArrayList<Course>();
}
}
public static List<Course> jsonToCourseList(String json) {
Type collectionType = new TypeToken<ArrayList<Course>>(){}.getType();
List<Course> courseList = new Gson().fromJson(json, collectionType);
for(Course course : courseList) {
for(Exam exam : course.exams) {
exam.course = course;
}
}
return courseList;
}
public static String examToJson(Exam exam) {
return new Gson().toJson(exam);
}
public static Exam jsonToExam(String json) {
return new Gson().fromJson(json, Exam.class);
}
public static String courseToJson(Course course) {
return new Gson().toJson(course);
}
public static Course jsonToCourse(String json) {
return new Gson().fromJson(json, Course.class);
}
}