Serialization working, Auto-save and load

This commit is contained in:
Caesar2011
2018-07-05 00:20:37 +02:00
parent 1d1b1e7db9
commit 6cdb61e2bb
10 changed files with 85 additions and 82 deletions

View File

@@ -1,9 +1,11 @@
package de.sebse.fuplanner.services.KVV; package de.sebse.fuplanner.services.KVV;
import android.arch.core.util.Function;
import android.content.Context; import android.content.Context;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.util.Pair; import android.util.Pair;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
@@ -66,14 +68,7 @@ public class KVV {
} }
public void getModuleDetails(Modules.Module module, final NetworkCallback<Pair<Modules.Module, Boolean>> callback, final NetworkErrorCallback error, boolean forceRefresh) { public void getModuleDetails(Modules.Module module, final NetworkCallback<Pair<Modules.Module, Boolean>> callback, final NetworkErrorCallback error, boolean forceRefresh) {
this.getLastToken(token -> { getModulePart(modules -> modules.getModuleDetails(module, saveOnCallback(modules, callback), error, forceRefresh));
KVVModuleList modules = (KVVModuleList) addons.get("modules");
if (modules == null) {
modules = new KVVModuleList(KVV.this.context, token);
addons.put("modules", modules);
}
modules.getModuleDetails(module, callback, error, forceRefresh);
});
} }
public void getModuleAnnouncements(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error) { public void getModuleAnnouncements(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error) {
@@ -81,14 +76,7 @@ public class KVV {
} }
public void getModuleAnnouncements(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error, boolean forceRefresh) { public void getModuleAnnouncements(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error, boolean forceRefresh) {
this.getLastToken(token -> { getModulePart(modules -> modules.getAnnouncements(module, saveOnCallback(modules, callback), error, forceRefresh));
KVVModuleList modules = (KVVModuleList) addons.get("modules");
if (modules == null) {
modules = new KVVModuleList(KVV.this.context, token);
addons.put("modules", modules);
}
modules.getAnnouncements(module, callback, error, forceRefresh);
});
} }
public void getModuleAssignments(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error) { public void getModuleAssignments(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error) {
@@ -96,14 +84,7 @@ public class KVV {
} }
public void getModuleAssignments(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error, boolean forceRefresh) { public void getModuleAssignments(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error, boolean forceRefresh) {
this.getLastToken(token -> { getModulePart(modules -> modules.getAssignments(module, saveOnCallback(modules, callback), error, forceRefresh));
KVVModuleList modules = (KVVModuleList) addons.get("modules");
if (modules == null) {
modules = new KVVModuleList(KVV.this.context, token);
addons.put("modules", modules);
}
modules.getAssignments(module, callback, error, forceRefresh);
});
} }
public void getModuleEvents(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error) { public void getModuleEvents(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error) {
@@ -111,14 +92,7 @@ public class KVV {
} }
public void getModuleEvents(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error, boolean forceRefresh) { public void getModuleEvents(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error, boolean forceRefresh) {
this.getLastToken(token -> { getModulePart(modules -> modules.getEvents(module, saveOnCallback(modules, callback), error, forceRefresh));
KVVModuleList modules = (KVVModuleList) addons.get("modules");
if (modules == null) {
modules = new KVVModuleList(KVV.this.context, token);
addons.put("modules", modules);
}
modules.getEvents(module, callback, error, forceRefresh);
});
} }
public void getModuleGradebook(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error) { public void getModuleGradebook(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error) {
@@ -126,16 +100,38 @@ public class KVV {
} }
public void getModuleGradebook(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error, boolean forceRefresh) { public void getModuleGradebook(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error, boolean forceRefresh) {
getModulePart(modules -> modules.getGradebook(module, saveOnCallback(modules, callback), error, forceRefresh));
}
private void getModulePart(ModListFunction func) {
this.getLastToken(token -> { this.getLastToken(token -> {
KVVModuleList modules = (KVVModuleList) addons.get("modules"); KVVModuleList modules = (KVVModuleList) addons.get("modules");
if (modules == null) { if (modules == null) {
modules = new KVVModuleList(KVV.this.context, token); modules = new KVVModuleList(KVV.this.context, token);
addons.put("modules", modules); addons.put("modules", modules);
} }
modules.getGradebook(module, callback, error, forceRefresh); func.apply(modules);
}); });
} }
private<T> NetworkCallback<T> saveOnCallback(KVVModuleList modules, NetworkCallback<T> callback){
return (success -> {
try {
modules.saveModules(this.context);
} catch (IOException e) {
e.printStackTrace();
}
callback.onResponse(success);
});
}
@FunctionalInterface
interface ModListFunction {
void apply(KVVModuleList mod);
}
private void getLastToken(LastTokenCallback lastTokenCallback) { private void getLastToken(LastTokenCallback lastTokenCallback) {
if (this.isUpdating) { if (this.isUpdating) {
this.updatingList.add(lastTokenCallback); this.updatingList.add(lastTokenCallback);

View File

@@ -38,7 +38,6 @@ import de.sebse.fuplanner.tools.network.NetworkErrorCallback;
public class KVVModuleList extends HTTPService { public class KVVModuleList extends HTTPService {
private final LoginToken token; private final LoginToken token;
private Modules moduleList; private Modules moduleList;
//private AsyncQueue<NetworkCallback<String>, NetworkErrorCallback> queueUpgradeModule = new AsyncQueue<>();
private AsyncQueue queueModuleDetails = new AsyncQueue(); private AsyncQueue queueModuleDetails = new AsyncQueue();
KVVModuleList(Context context, LoginToken token) { KVVModuleList(Context context, LoginToken token) {

View File

@@ -1,6 +1,8 @@
package de.sebse.fuplanner.services.KVV.types; package de.sebse.fuplanner.services.KVV.types;
public class Announcement { import java.io.Serializable;
public class Announcement implements Serializable {
private final String id; private final String id;
private final String title; private final String title;
private final String body; private final String body;

View File

@@ -1,10 +1,11 @@
package de.sebse.fuplanner.services.KVV.types; package de.sebse.fuplanner.services.KVV.types;
import java.io.Serializable;
import java.lang.reflect.Array; import java.lang.reflect.Array;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
public class Assignment { public class Assignment implements Serializable {
private final String id; private final String id;
private final String title; private final String title;
private final long dueTime; private final long dueTime;

View File

@@ -1,8 +1,9 @@
package de.sebse.fuplanner.services.KVV.types; package de.sebse.fuplanner.services.KVV.types;
import java.io.Serializable;
import java.util.Date; import java.util.Date;
public class Event { public class Event implements Serializable {
private final String id; private final String id;
private final String type; private final String type;
private final String title; private final String title;

View File

@@ -1,6 +1,8 @@
package de.sebse.fuplanner.services.KVV.types; package de.sebse.fuplanner.services.KVV.types;
public class Gradebook { import java.io.Serializable;
public class Gradebook implements Serializable {
private final String itemName; private final String itemName;
private final String grade; private final String grade;
private final double maxPoints; private final double maxPoints;

View File

@@ -1,9 +1,10 @@
package de.sebse.fuplanner.services.KVV.types; package de.sebse.fuplanner.services.KVV.types;
import java.io.Serializable;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
public class Lecturer { public class Lecturer implements Serializable {
private final String firstname; private final String firstname;
private final String surname; private final String surname;
private final String mail; private final String mail;

View File

@@ -1,5 +1,6 @@
package de.sebse.fuplanner.services.KVV.types; package de.sebse.fuplanner.services.KVV.types;
import java.io.Serializable;
import java.util.HashMap; import java.util.HashMap;
/** /**

View File

@@ -18,58 +18,21 @@ import java.util.Iterator;
import de.sebse.fuplanner.tools.Compare; import de.sebse.fuplanner.tools.Compare;
import de.sebse.fuplanner.tools.EventList; import de.sebse.fuplanner.tools.EventList;
import de.sebse.fuplanner.tools.Regex; import de.sebse.fuplanner.tools.Regex;
import de.sebse.fuplanner.tools.SortedModuleList;
import de.sebse.fuplanner.tools.logging.Logger; import de.sebse.fuplanner.tools.logging.Logger;
/** /**
* Created by sebastian on 29.10.17. * Created by sebastian on 29.10.17.
*/ */
public class Modules /*extends EventEmitter<Triplet<Integer, Modules.UpgradeModule, ArrayList<String>>>*/ implements Iterable<Modules.Module>, Serializable { public class Modules implements Iterable<Modules.Module>, Serializable {
private final SortedList<Module> list; private final SortedModuleList list;
private String latestSemester = null; private String latestSemester = null;
private Logger log = new Logger(this); private transient Logger log = new Logger(this);
private static final String FILE_NAME = "ModuleListSaving"; private static final String FILE_NAME = "ModuleListSaving";
public Modules() { public Modules() {
this.list = new SortedList<>(Module.class, new SortedList.Callback<Module>() { this.list = new SortedModuleList();
@Override
public int compare(Module o1, Module o2) {
int semester = o1.semester.compareTo(o2.semester);
if (semester != 0)
return semester;
return o1.title.compareToIgnoreCase(o2.title);
}
@Override
public void onChanged(int position, int count) {
}
@Override
public boolean areContentsTheSame(Module oldItem, Module newItem) {
return compare(oldItem, newItem) == 0;
}
@Override
public boolean areItemsTheSame(Module item1, Module item2) {
return item1.ID.equals(item2.ID);
}
@Override
public void onInserted(int position, int count) {
}
@Override
public void onRemoved(int position, int count) {
}
@Override
public void onMoved(int fromPosition, int toPosition) {
}
});
} }
public Module addModule(String semester, HashSet<String> lvNumber, String title, HashSet<Lecturer> lecturer, String type, String description, String ID) { public Module addModule(String semester, HashSet<String> lvNumber, String title, HashSet<Lecturer> lecturer, String type, String description, String ID) {
@@ -213,7 +176,7 @@ public class Modules /*extends EventEmitter<Triplet<Integer, Modules.UpgradeModu
context.deleteFile(FILE_NAME); context.deleteFile(FILE_NAME);
} }
public class Module { public class Module implements Serializable {
public final String semester; public final String semester;
public final HashSet<String> lvNumber; public final HashSet<String> lvNumber;
public final String title; public final String title;

View File

@@ -0,0 +1,37 @@
package de.sebse.fuplanner.tools;
import java.io.Serializable;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import de.sebse.fuplanner.services.KVV.types.Modules;
public class SortedModuleList extends AbstractList<Modules.Module> implements Serializable {
private ArrayList<Modules.Module> internalList = new ArrayList<Modules.Module>();
// Note that add(E e) in AbstractList is calling this one
@Override
public void add(int position, Modules.Module e) {
internalList.add(e);
Collections.sort(internalList, (o1, o2) -> {
int semester = o1.semester.compareTo(o2.semester);
if (semester != 0)
return semester;
return o1.title.compareToIgnoreCase(o2.title);
});
}
@Override
public Modules.Module get(int i) {
return internalList.get(i);
}
@Override
public int size() {
return internalList.size();
}
}