Aegis/app/src/main/java/me/impy/aegis/db/Database.java

77 lines
2.1 KiB
Java
Raw Normal View History

package me.impy.aegis.db;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.List;
import java.util.UUID;
import me.impy.aegis.encoding.Base64Exception;
import me.impy.aegis.otp.OtpInfoException;
public class Database {
2017-08-26 21:15:53 +02:00
private static final int VERSION = 1;
2017-12-27 21:01:53 +01:00
private DatabaseEntryList _entries = new DatabaseEntryList();
public JSONObject serialize() {
try {
JSONArray array = new JSONArray();
for (DatabaseEntry e : _entries) {
array.put(e.serialize());
}
JSONObject obj = new JSONObject();
obj.put("version", VERSION);
obj.put("entries", array);
return obj;
} catch (JSONException e) {
throw new RuntimeException(e);
}
}
public void deserialize(JSONObject obj) throws DatabaseException {
2017-08-26 21:15:53 +02:00
// TODO: support different VERSION deserialization providers
try {
int ver = obj.getInt("version");
if (ver != VERSION) {
throw new DatabaseException("Unsupported version");
}
JSONArray array = obj.getJSONArray("entries");
for (int i = 0; i < array.length(); i++) {
DatabaseEntry entry = new DatabaseEntry(null);
entry.deserialize(array.getJSONObject(i));
addEntry(entry);
}
} catch (Base64Exception | OtpInfoException | JSONException e) {
throw new DatabaseException(e);
}
}
public void addEntry(DatabaseEntry entry) {
2017-08-26 21:15:53 +02:00
_entries.add(entry);
}
public void removeEntry(DatabaseEntry entry) {
2017-08-26 21:15:53 +02:00
_entries.remove(entry);
}
public void replaceEntry(DatabaseEntry newEntry) {
_entries.replace(newEntry);
}
public void swapEntries(DatabaseEntry entry1, DatabaseEntry entry2) {
_entries.swap(entry1, entry2);
}
public List<DatabaseEntry> getEntries() {
return _entries.getList();
}
public DatabaseEntry getEntryByUUID(UUID uuid) {
return _entries.getByUUID(uuid);
}
}