2021-04-23 12:15:36 +02:00
|
|
|
|
|
|
|
package eu.dnetlib.dhp.schema.action;
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
|
|
|
import com.fasterxml.jackson.core.JsonParser;
|
|
|
|
import com.fasterxml.jackson.databind.DeserializationContext;
|
|
|
|
import com.fasterxml.jackson.databind.JsonDeserializer;
|
|
|
|
import com.fasterxml.jackson.databind.JsonNode;
|
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
|
|
|
|
|
import eu.dnetlib.dhp.schema.oaf.Oaf;
|
|
|
|
|
2021-08-10 09:36:37 +02:00
|
|
|
public class AtomicActionDeserializer<T extends Oaf> extends JsonDeserializer<AtomicAction<T>> {
|
2021-04-23 12:15:36 +02:00
|
|
|
|
|
|
|
@Override
|
2021-08-10 09:36:37 +02:00
|
|
|
@SuppressWarnings("unchecked")
|
|
|
|
public AtomicAction<T> deserialize(JsonParser jp, DeserializationContext ctxt)
|
2021-04-23 12:15:36 +02:00
|
|
|
throws IOException {
|
|
|
|
JsonNode node = jp.getCodec().readTree(jp);
|
|
|
|
String classTag = node.get("clazz").asText();
|
|
|
|
JsonNode payload = node.get("payload");
|
|
|
|
ObjectMapper mapper = new ObjectMapper();
|
|
|
|
|
|
|
|
try {
|
2021-08-10 09:36:37 +02:00
|
|
|
final Class<T> clazz = (Class<T>) Class.forName(classTag);
|
|
|
|
final T oaf = mapper.readValue(payload.toString(), clazz);
|
|
|
|
return new AtomicAction(clazz, oaf);
|
2021-04-23 12:15:36 +02:00
|
|
|
} catch (ClassNotFoundException e) {
|
|
|
|
throw new IOException(e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|