2019-09-20 15:42:13 -04:00
|
|
|
package com.chameleonvision.vision.camera;
|
|
|
|
|
|
|
|
|
|
import com.chameleonvision.vision.Pipeline;
|
|
|
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
2019-10-25 15:02:17 +03:00
|
|
|
import com.fasterxml.jackson.databind.JavaType;
|
2019-09-20 15:42:13 -04:00
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
|
|
import com.fasterxml.jackson.databind.type.MapType;
|
2019-10-25 15:02:17 +03:00
|
|
|
import com.fasterxml.jackson.databind.type.ArrayType;
|
2019-09-20 15:42:13 -04:00
|
|
|
import com.fasterxml.jackson.databind.type.TypeFactory;
|
|
|
|
|
import com.google.gson.*;
|
|
|
|
|
|
|
|
|
|
import java.lang.reflect.Type;
|
2019-10-25 15:02:17 +03:00
|
|
|
import java.util.ArrayList;
|
2019-09-20 15:42:13 -04:00
|
|
|
import java.util.HashMap;
|
2019-10-25 15:02:17 +03:00
|
|
|
import java.util.List;
|
2019-09-20 15:42:13 -04:00
|
|
|
|
|
|
|
|
public class CameraDeserializer implements JsonDeserializer<Camera> {
|
|
|
|
|
@Override
|
|
|
|
|
public Camera deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext context) throws JsonParseException {
|
|
|
|
|
var jsonObj = jsonElement.getAsJsonObject();
|
2019-10-16 14:13:12 +03:00
|
|
|
var camFOV = jsonObj.get("FOV").getAsDouble();
|
2019-09-20 15:42:13 -04:00
|
|
|
var camName = jsonObj.get("name").getAsString();
|
2019-10-24 15:20:15 -04:00
|
|
|
var camNickname = jsonObj.get("nickname").getAsString();
|
2019-09-22 13:35:19 -04:00
|
|
|
var videoModeIndex = jsonObj.get("resolution").getAsInt();
|
2019-10-16 14:13:12 +03:00
|
|
|
var divisor = StreamDivisor.values()[jsonObj.get("streamDivisor").getAsInt()];
|
2019-09-22 13:35:19 -04:00
|
|
|
|
2019-09-20 15:42:13 -04:00
|
|
|
var pipelines = jsonObj.get("pipelines");
|
2019-10-25 15:02:17 +03:00
|
|
|
List<Pipeline> actualPipelines = new ArrayList<>();
|
2019-09-20 15:42:13 -04:00
|
|
|
ObjectMapper mapper = new ObjectMapper();
|
|
|
|
|
TypeFactory typeFactory = mapper.getTypeFactory();
|
2019-10-25 15:02:17 +03:00
|
|
|
JavaType arrayType = typeFactory.constructCollectionType(List.class, Pipeline.class);
|
2019-09-20 15:42:13 -04:00
|
|
|
try {
|
2019-10-25 15:02:17 +03:00
|
|
|
actualPipelines = mapper.readValue(pipelines.toString(), arrayType);
|
2019-09-20 15:42:13 -04:00
|
|
|
} catch (JsonProcessingException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-24 15:20:15 -04:00
|
|
|
var newCamera = actualPipelines != null ? new Camera(camName, camFOV, actualPipelines, videoModeIndex, divisor) : new Camera(camName, camFOV, videoModeIndex, divisor);
|
|
|
|
|
newCamera.setNickname(camNickname != null ? camNickname : "");
|
|
|
|
|
return newCamera;
|
2019-09-20 15:42:13 -04:00
|
|
|
}
|
|
|
|
|
}
|