package org.javers.core.json.typeadapter.commit;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonSerializationContext;
import org.javers.core.commit.CommitId;
import org.javers.core.commit.CommitMetadata;
import org.javers.core.json.JsonTypeAdapterTemplate;
import java.time.LocalDateTime;
import java.util.Map;
class CommitMetadataTypeAdapter extends JsonTypeAdapterTemplate<CommitMetadata> {
static final String AUTHOR = "author";
static final String PROPERTIES = "properties";
static final String COMMIT_DATE = "commitDate";
static final String COMMIT_ID = "id";
@Override
public Class getValueType() {
return CommitMetadata.class;
}
@Override
public CommitMetadata fromJson(JsonElement json, JsonDeserializationContext context) {
JsonObject jsonObject = (JsonObject) json;
String author = jsonObject.get(AUTHOR).getAsString();
Map<String, String> properties = CommitPropertiesConverter.fromJson(jsonObject.get(PROPERTIES));
LocalDateTime commitDate = context.deserialize(jsonObject.get(COMMIT_DATE), LocalDateTime.class);
CommitId id = context.deserialize(jsonObject.get(COMMIT_ID), CommitId.class);
return new CommitMetadata(author, properties, commitDate, id);
}
@Override
public JsonElement toJson(CommitMetadata commitMetadata, JsonSerializationContext context) {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty(AUTHOR, commitMetadata.getAuthor());
jsonObject.add(PROPERTIES, CommitPropertiesConverter.toJson(commitMetadata.getProperties()));
jsonObject.add(COMMIT_DATE, context.serialize(commitMetadata.getCommitDate(), LocalDateTime.class));
jsonObject.add(COMMIT_ID, context.serialize(commitMetadata.getId()));
return jsonObject;
}
}