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

de.digitalcollections.iiif.presentation.model.impl.jackson.v2.IiifPresentationApiObjectMapper Maven / Gradle / Ivy

The newest version!
package de.digitalcollections.iiif.presentation.model.impl.jackson.v2;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.module.SimpleModule;
import de.digitalcollections.iiif.presentation.model.api.v2.Annotation;
import de.digitalcollections.iiif.presentation.model.api.v2.AnnotationList;
import de.digitalcollections.iiif.presentation.model.api.v2.AnnotationResource;
import de.digitalcollections.iiif.presentation.model.api.v2.Canvas;
import de.digitalcollections.iiif.presentation.model.api.v2.Collection;
import de.digitalcollections.iiif.presentation.model.api.v2.Content;
import de.digitalcollections.iiif.presentation.model.api.v2.IiifResource;
import de.digitalcollections.iiif.presentation.model.api.v2.Image;
import de.digitalcollections.iiif.presentation.model.api.v2.ImageContent;
import de.digitalcollections.iiif.presentation.model.api.v2.ImageResource;
import de.digitalcollections.iiif.presentation.model.api.v2.ImageService;
import de.digitalcollections.iiif.presentation.model.api.v2.Layer;
import de.digitalcollections.iiif.presentation.model.api.v2.Manifest;
import de.digitalcollections.iiif.presentation.model.api.v2.Metadata;
import de.digitalcollections.iiif.presentation.model.api.v2.OtherContent;
import de.digitalcollections.iiif.presentation.model.api.v2.PhysicalDimensionsService;
import de.digitalcollections.iiif.presentation.model.api.v2.PropertyValue;
import de.digitalcollections.iiif.presentation.model.api.v2.Range;
import de.digitalcollections.iiif.presentation.model.api.v2.Rendering;
import de.digitalcollections.iiif.presentation.model.api.v2.Resource;
import de.digitalcollections.iiif.presentation.model.api.v2.SeeAlso;
import de.digitalcollections.iiif.presentation.model.api.v2.Sequence;
import de.digitalcollections.iiif.presentation.model.api.v2.Service;
import de.digitalcollections.iiif.presentation.model.api.v2.Thumbnail;
import de.digitalcollections.iiif.presentation.model.api.v2.references.CollectionReference;
import de.digitalcollections.iiif.presentation.model.api.v2.references.IiifReference;
import de.digitalcollections.iiif.presentation.model.api.v2.references.ManifestReference;
import de.digitalcollections.iiif.presentation.model.impl.jackson.deserializer.v2.AnnotationResourceDeserializer;
import de.digitalcollections.iiif.presentation.model.impl.jackson.deserializer.v2.IiifReferenceDeserializer;
import de.digitalcollections.iiif.presentation.model.impl.jackson.deserializer.v2.PropertyValueDeserializer;
import de.digitalcollections.iiif.presentation.model.impl.jackson.deserializer.v2.SeeAlsoDeserializer;
import de.digitalcollections.iiif.presentation.model.impl.jackson.deserializer.v2.ServiceDeserializer;
import de.digitalcollections.iiif.presentation.model.impl.jackson.mixin.v2.AbstractIiifResourceMixIn;
import de.digitalcollections.iiif.presentation.model.impl.jackson.mixin.v2.AnnotationListMixIn;
import de.digitalcollections.iiif.presentation.model.impl.jackson.mixin.v2.AnnotationMixIn;
import de.digitalcollections.iiif.presentation.model.impl.jackson.mixin.v2.CanvasMixIn;
import de.digitalcollections.iiif.presentation.model.impl.jackson.mixin.v2.CollectionMixIn;
import de.digitalcollections.iiif.presentation.model.impl.jackson.mixin.v2.ContentMixIn;
import de.digitalcollections.iiif.presentation.model.impl.jackson.mixin.v2.ImageContentMixIn;
import de.digitalcollections.iiif.presentation.model.impl.jackson.mixin.v2.ImageMixIn;
import de.digitalcollections.iiif.presentation.model.impl.jackson.mixin.v2.ImageResourceMixIn;
import de.digitalcollections.iiif.presentation.model.impl.jackson.mixin.v2.ImageServiceMixIn;
import de.digitalcollections.iiif.presentation.model.impl.jackson.mixin.v2.LayerMixIn;
import de.digitalcollections.iiif.presentation.model.impl.jackson.mixin.v2.ManifestMixIn;
import de.digitalcollections.iiif.presentation.model.impl.jackson.mixin.v2.MetadataMixin;
import de.digitalcollections.iiif.presentation.model.impl.jackson.mixin.v2.OtherContentMixIn;
import de.digitalcollections.iiif.presentation.model.impl.jackson.mixin.v2.PhysicalDimensionsMixin;
import de.digitalcollections.iiif.presentation.model.impl.jackson.mixin.v2.PropertyValueLocalizedMixin;
import de.digitalcollections.iiif.presentation.model.impl.jackson.mixin.v2.RangeMixIn;
import de.digitalcollections.iiif.presentation.model.impl.jackson.mixin.v2.RenderingMixIn;
import de.digitalcollections.iiif.presentation.model.impl.jackson.mixin.v2.ResourceMixIn;
import de.digitalcollections.iiif.presentation.model.impl.jackson.mixin.v2.SeeAlsoMixin;
import de.digitalcollections.iiif.presentation.model.impl.jackson.mixin.v2.SequenceMixIn;
import de.digitalcollections.iiif.presentation.model.impl.jackson.mixin.v2.ServiceMixIn;
import de.digitalcollections.iiif.presentation.model.impl.jackson.mixin.v2.ThumbnailMixIn;
import de.digitalcollections.iiif.presentation.model.impl.jackson.mixin.v2.references.CollectionReferenceMixin;
import de.digitalcollections.iiif.presentation.model.impl.jackson.mixin.v2.references.IiifReferenceMixin;
import de.digitalcollections.iiif.presentation.model.impl.jackson.mixin.v2.references.ManifestReferenceMixin;
import de.digitalcollections.iiif.presentation.model.impl.jackson.serializer.v2.PropertyValueSerializer;
import de.digitalcollections.iiif.presentation.model.impl.v2.AbstractIiifResourceImpl;
import de.digitalcollections.iiif.presentation.model.impl.v2.PropertyValueLocalizedImpl;
import de.digitalcollections.iiif.presentation.model.impl.v2.references.IiifReferenceImpl;

/**
 * A Jackson object mapper preconfigured for IIIF Presentation API objects.
 */
public class IiifPresentationApiObjectMapper extends ObjectMapper {

  public IiifPresentationApiObjectMapper() {
    // For correct serialization of Instant types (for navDate)
    this.findAndRegisterModules();
    this.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
    registerMixins();
    registerDeserializers();
    setSerializationInclusion(JsonInclude.Include.NON_NULL);
    enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
    enable(SerializationFeature.INDENT_OUTPUT);
  }

  private void registerMixins() {
    addMixIn(IiifResource.class, AbstractIiifResourceMixIn.class);
    addMixIn(AbstractIiifResourceImpl.class, AbstractIiifResourceMixIn.class);
    addMixIn(IiifReferenceImpl.class, IiifReferenceMixin.class);

    addMixIn(Annotation.class, AnnotationMixIn.class);
    addMixIn(AnnotationList.class, AnnotationListMixIn.class);
    addMixIn(Canvas.class, CanvasMixIn.class);
    addMixIn(Collection.class, CollectionMixIn.class);
    addMixIn(CollectionReference.class, CollectionReferenceMixin.class);
    addMixIn(Content.class, ContentMixIn.class);
    addMixIn(ImageContent.class, ImageContentMixIn.class);
    addMixIn(Image.class, ImageMixIn.class);
    addMixIn(ImageResource.class, ImageResourceMixIn.class);
    addMixIn(ImageService.class, ImageServiceMixIn.class);
    addMixIn(Layer.class, LayerMixIn.class);
    addMixIn(Manifest.class, ManifestMixIn.class);
    addMixIn(ManifestReference.class, ManifestReferenceMixin.class);
    addMixIn(Metadata.class, MetadataMixin.class);
    addMixIn(PropertyValueLocalizedImpl.class, PropertyValueLocalizedMixin.class);
    addMixIn(PhysicalDimensionsService.class, PhysicalDimensionsMixin.class);
    addMixIn(OtherContent.class, OtherContentMixIn.class);
    addMixIn(Range.class, RangeMixIn.class);
    addMixIn(Resource.class, ResourceMixIn.class);
    addMixIn(Sequence.class, SequenceMixIn.class);
    addMixIn(Service.class, ServiceMixIn.class);
    addMixIn(Rendering.class, RenderingMixIn.class);
    addMixIn(Thumbnail.class, ThumbnailMixIn.class);
    addMixIn(SeeAlso.class, SeeAlsoMixin.class);
  }

  private void registerDeserializers() {
    SimpleModule module = new SimpleModule("PolymorphicTypes");
    PropertyValueSerializer propertyValueSerializer = new PropertyValueSerializer();
    PropertyValueDeserializer propertyValueDeserializer = new PropertyValueDeserializer();
    module.addSerializer(PropertyValue.class, propertyValueSerializer);
    module.addDeserializer(PropertyValue.class, propertyValueDeserializer);

    AnnotationResourceDeserializer annotationResourceDeserializer = new AnnotationResourceDeserializer();
    module.addDeserializer(AnnotationResource.class, annotationResourceDeserializer);

    IiifReferenceDeserializer iiifReferenceDeserializer = new IiifReferenceDeserializer();
    module.addDeserializer(IiifReference.class, iiifReferenceDeserializer);

    SeeAlsoDeserializer seeAlsoDeserializer = new SeeAlsoDeserializer();
    module.addDeserializer(SeeAlso.class, seeAlsoDeserializer);

    ServiceDeserializer serviceDeserializer = new ServiceDeserializer();
    module.addDeserializer(Service.class, serviceDeserializer);
    registerModule(module);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy