Fixed generalized serializers
This commit is contained in:
parent
d6834c2ae4
commit
4d0ddf591b
5 changed files with 18 additions and 17 deletions
|
@ -40,14 +40,9 @@ public class Main {
|
||||||
if (Modifier.isAbstract(data.getModifiers()))
|
if (Modifier.isAbstract(data.getModifiers()))
|
||||||
continue;
|
continue;
|
||||||
gsonBuilder.registerTypeAdapter(new DataType(LoaderCollection.class, data),
|
gsonBuilder.registerTypeAdapter(new DataType(LoaderCollection.class, data),
|
||||||
new LoaderCollectionSerializer()); // TODO: Test
|
new LoaderCollectionSerializer());
|
||||||
|
gsonBuilder.registerTypeAdapter(new DataType(LoaderRef.class, data), new LoaderRefSerializer());
|
||||||
}
|
}
|
||||||
gsonBuilder.registerTypeAdapter(new TypeToken<LoaderRef<Conversation>>() {
|
|
||||||
}.getType(), new LoaderRefSerializer<Conversation>());
|
|
||||||
gsonBuilder.registerTypeAdapter(new TypeToken<LoaderRef<MessageChunk>>() {
|
|
||||||
}.getType(), new LoaderRefSerializer<MessageChunk>());
|
|
||||||
gsonBuilder.registerTypeAdapter(new TypeToken<LoaderRef<User>>() {
|
|
||||||
}.getType(), new LoaderRefSerializer<User>());
|
|
||||||
gson = gsonBuilder.create();
|
gson = gsonBuilder.create();
|
||||||
/*
|
/*
|
||||||
* User user = new User(); user.setName("asd"); user.setEmail("test@test.com"); User user2 = new User(); user2.setName("Teszt"); user2.setEmail("test2@test.com"); // user =
|
* User user = new User(); user.setName("asd"); user.setEmail("test@test.com"); User user2 = new User(); user2.setName("Teszt"); user2.setEmail("test2@test.com"); // user =
|
||||||
|
|
|
@ -56,6 +56,7 @@ public final class DataManager {
|
||||||
private static Map<File, Object> cache = new HashMap<>();
|
private static Map<File, Object> cache = new HashMap<>();
|
||||||
// TODO: Remove objects from the cache over time
|
// TODO: Remove objects from the cache over time
|
||||||
// TODO: Save the object when it gets removed from cache and when the app stops
|
// TODO: Save the object when it gets removed from cache and when the app stops
|
||||||
|
// TODO: Handle unloading of used objects (prevent detached objects)
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
private static <T extends SavedData> T loadFromFile(File file, Class<T> cl) {
|
private static <T extends SavedData> T loadFromFile(File file, Class<T> cl) {
|
||||||
|
|
|
@ -19,7 +19,7 @@ import io.github.norbipeti.chat.server.db.domain.SavedData;
|
||||||
public class LoaderCollectionSerializer extends TypeAdapter<LoaderCollection<?>> {
|
public class LoaderCollectionSerializer extends TypeAdapter<LoaderCollection<?>> {
|
||||||
// private static final Type returnType = getReturnType();
|
// private static final Type returnType = getReturnType();
|
||||||
|
|
||||||
// TODO: http://stackoverflow.com/a/17300227
|
// http://stackoverflow.com/a/17300227
|
||||||
@Override
|
@Override
|
||||||
public void write(JsonWriter out, LoaderCollection<?> value) throws IOException {
|
public void write(JsonWriter out, LoaderCollection<?> value) throws IOException {
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
package io.github.norbipeti.chat.server.data;
|
package io.github.norbipeti.chat.server.data;
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
|
|
||||||
import io.github.norbipeti.chat.server.db.domain.SavedData;
|
import io.github.norbipeti.chat.server.db.domain.SavedData;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -9,10 +9,10 @@ import com.google.gson.stream.JsonWriter;
|
||||||
import io.github.norbipeti.chat.server.db.domain.SavedData;
|
import io.github.norbipeti.chat.server.db.domain.SavedData;
|
||||||
|
|
||||||
// @SuppressWarnings("rawtypes")
|
// @SuppressWarnings("rawtypes")
|
||||||
public class LoaderRefSerializer<T extends SavedData> extends TypeAdapter<LoaderRef<T>> {
|
public class LoaderRefSerializer extends TypeAdapter<LoaderRef<?>> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void write(JsonWriter out, LoaderRef<T> value) throws IOException {
|
public void write(JsonWriter out, LoaderRef<?> value) throws IOException {
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
out.nullValue();
|
out.nullValue();
|
||||||
return;
|
return;
|
||||||
|
@ -27,7 +27,7 @@ public class LoaderRefSerializer<T extends SavedData> extends TypeAdapter<Loader
|
||||||
// @SuppressWarnings("unchecked")
|
// @SuppressWarnings("unchecked")
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
@Override
|
@Override
|
||||||
public LoaderRef<T> read(JsonReader in) throws IOException {
|
public LoaderRef<?> read(JsonReader in) throws IOException {
|
||||||
if (in.peek().equals(JsonToken.NULL)) {
|
if (in.peek().equals(JsonToken.NULL)) {
|
||||||
in.nextNull();
|
in.nextNull();
|
||||||
return null;
|
return null;
|
||||||
|
@ -39,16 +39,23 @@ public class LoaderRefSerializer<T extends SavedData> extends TypeAdapter<Loader
|
||||||
new Exception("Error: Next isn't \"class\"").printStackTrace(); // TODO: Same as at LoaderCollectionSerializer
|
new Exception("Error: Next isn't \"class\"").printStackTrace(); // TODO: Same as at LoaderCollectionSerializer
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
Class<T> cl;
|
Class<? extends SavedData> cl;
|
||||||
try {
|
try {
|
||||||
cl = (Class<T>) Class.forName(DataManager.getPackageName() + "." + in.nextString());
|
cl = (Class<? extends SavedData>) Class.forName(DataManager.getPackageName() + "." + in.nextString());
|
||||||
} catch (ClassNotFoundException e) {
|
} catch (ClassNotFoundException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
LoaderRef<T> col = new LoaderRef<T>(cl, id);
|
LoaderRef<? extends SavedData> ref;
|
||||||
|
try {
|
||||||
|
ref = LoaderRef.class.getDeclaredConstructor(Class.class).newInstance(cl);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
ref.id = id;
|
||||||
in.endObject();
|
in.endObject();
|
||||||
return col;
|
return ref;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue