x-control-panel/database/src/main/java/ru/kirillius/XCP/Persistence/EntityReferenceDeserializer...

39 lines
1.3 KiB
Java

package ru.kirillius.XCP.Persistence;
import tools.jackson.core.JacksonException;
import tools.jackson.core.JsonParser;
import tools.jackson.databind.DeserializationContext;
import tools.jackson.databind.deser.std.StdDeserializer;
import java.util.UUID;
public class EntityReferenceDeserializer extends StdDeserializer<EntityReference> {
private final RepositoryServiceImpl repositoryService;
public EntityReferenceDeserializer(RepositoryServiceImpl repositoryService) {
super(EntityReference.class);
this.repositoryService = repositoryService;
}
@Override
public EntityReference deserialize(JsonParser p, DeserializationContext ctxt) throws JacksonException {
var node = ctxt.readTree(p);
var type = node.get("type").asString();
var id = node.get("id").asLong();
var uuid = node.get("uuid").asString();
try {
@SuppressWarnings("unchecked")
var repository = repositoryService.getRepositoryForEntity((Class<? extends PersistenceEntity>) Class.forName(type));
if (uuid != null) {
return new EntityReference(repository.get(UUID.fromString(uuid)));
}
return new EntityReference(repository.get(id));
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
}