12345678910111213141516171819202122232425262728293031323334353637383940 |
- package holeg.serialize;
- import com.google.gson.*;
- import com.google.gson.reflect.TypeToken;
- import holeg.model.*;
- import holeg.ui.model.IdCounter;
- import java.lang.reflect.Type;
- import java.util.HashSet;
- import java.util.function.Function;
- import java.util.logging.Logger;
- import java.util.stream.Collectors;
- public class ModelDeserializer implements JsonDeserializer<Model>{
- private static final Logger log = Logger.getLogger(ModelDeserializer.class.getName());
- private final static Type edgeSetType = TypeToken.getParameterized(HashSet.class, Edge.class).getType();
- private final EdgeDeserializer edgeDeserializer = new EdgeDeserializer();
- private final Gson edgeGson = new GsonBuilder().registerTypeAdapter(Edge.class, edgeDeserializer).create();
- @Override
- public Model deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
- log.info("ModelDeserializer");
- JsonObject jsonObj = json.getAsJsonObject();
- Model model = new Model();
- GroupNode canvas = context.deserialize(jsonObj.getAsJsonObject("canvas"), GroupNode.class);
- model.setCanvas(canvas);
- edgeDeserializer.idMap = canvas.getAllObjectsRecursive()
- .collect(Collectors.toMap(AbstractCanvasObject::getId, Function.identity()));
- model.setEdgesOnCanvas(edgeGson.fromJson(jsonObj.getAsJsonArray("edgesOnCanvas"), edgeSetType));
- updateIdCounter(model.getCanvas());
- return model;
- }
- private void updateIdCounter(GroupNode canvas){
- canvas.getAllObjectsRecursive().mapToInt(AbstractCanvasObject::getId).max()
- .ifPresent(maxId -> IdCounter.set(maxId + 1));
- }
- }
|