All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.arangodb.serde.jackson.internal.ArangoSerdeAnnotationIntrospector Maven / Gradle / Ivy

package com.arangodb.serde.jackson.internal;

import com.arangodb.serde.jackson.*;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.PropertyName;
import com.fasterxml.jackson.databind.introspect.Annotated;
import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;

import java.lang.annotation.Annotation;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

class ArangoSerdeAnnotationIntrospector extends JacksonAnnotationIntrospector {
    private static final JsonInclude JSON_INCLUDE_NON_NULL = JsonIncludeNonNull.class.getAnnotation(JsonInclude.class);
    private static final Map, String> MAPPINGS;
    private static final Class[] ANNOTATIONS;

    static {
        MAPPINGS = new HashMap<>();
        MAPPINGS.put(Id.class, "_id");
        MAPPINGS.put(Key.class, "_key");
        MAPPINGS.put(Rev.class, "_rev");
        MAPPINGS.put(From.class, "_from");
        MAPPINGS.put(To.class, "_to");
        ANNOTATIONS = MAPPINGS.keySet().toArray(new Class[0]);
    }

    @JsonInclude(JsonInclude.Include.NON_NULL)
    private static class JsonIncludeNonNull {
    }

    @Override
    public PropertyName findNameForSerialization(Annotated a) {
        return Optional.ofNullable(findMapping(a)).orElseGet(() -> super.findNameForSerialization(a));
    }

    @Override
    public PropertyName findNameForDeserialization(Annotated a) {
        return Optional.ofNullable(findMapping(a)).orElseGet(() -> super.findNameForDeserialization(a));
    }

    private PropertyName findMapping(Annotated a) {
        for (Map.Entry, String> e : MAPPINGS.entrySet()) {
            if (_hasAnnotation(a, e.getKey())) {
                return PropertyName.construct(e.getValue());
            }
        }
        return null;
    }

    @Override
    public JsonInclude.Value findPropertyInclusion(Annotated a) {
        if (_hasOneOf(a, ANNOTATIONS)) {
            return new JsonInclude.Value(JSON_INCLUDE_NON_NULL);
        } else {
            return super.findPropertyInclusion(a);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy