com.basistech.rosette.dm.jackson.AnnotatedDataModelModule Maven / Gradle / Ivy
/*
* Copyright 2014 Basis Technology Corp.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.basistech.rosette.dm.jackson;
import com.basistech.rosette.dm.AnnotatedText;
import com.basistech.rosette.dm.ArabicMorphoAnalysis;
import com.basistech.rosette.dm.Attribute;
import com.basistech.rosette.dm.BaseAttribute;
import com.basistech.rosette.dm.BaseNounPhrase;
import com.basistech.rosette.dm.CategorizerResult;
import com.basistech.rosette.dm.Dependency;
import com.basistech.rosette.dm.EmbeddingCollection;
import com.basistech.rosette.dm.Embeddings;
import com.basistech.rosette.dm.Entity;
import com.basistech.rosette.dm.Extent;
import com.basistech.rosette.dm.HanMorphoAnalysis;
import com.basistech.rosette.dm.Keyphrase;
import com.basistech.rosette.dm.KoreanMorphoAnalysis;
import com.basistech.rosette.dm.LanguageDetection;
import com.basistech.rosette.dm.ListAttribute;
import com.basistech.rosette.dm.Mention;
import com.basistech.rosette.dm.MorphoAnalysis;
import com.basistech.rosette.dm.Name;
import com.basistech.rosette.dm.RawData;
import com.basistech.rosette.dm.RelationshipComponent;
import com.basistech.rosette.dm.RelationshipMention;
import com.basistech.rosette.dm.ScriptRegion;
import com.basistech.rosette.dm.Sentence;
import com.basistech.rosette.dm.Token;
import com.basistech.rosette.dm.Concept;
import com.basistech.rosette.dm.TranslatedData;
import com.basistech.rosette.dm.TranslatedTokens;
import com.basistech.util.jackson.EnumModule;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleSerializers;
/**
* Jackson module to configure Json serialization and deserialization for the
* annotated data model.
*/
public class AnnotatedDataModelModule extends EnumModule {
public AnnotatedDataModelModule() {
super();
}
@SuppressWarnings("deprecation")
public void setupModule(SetupContext context) {
super.setupModule(context); // pick up any enum support.
context.setMixInAnnotations(AnnotatedText.class, AnnotatedTextMixin.class);
context.setMixInAnnotations(ArabicMorphoAnalysis.class, ArabicMorphoAnalysisMixin.class);
context.setMixInAnnotations(Attribute.class, AttributeMixin.class);
context.setMixInAnnotations(BaseAttribute.class, BaseAttributeMixin.class);
context.setMixInAnnotations(BaseNounPhrase.class, BaseNounPhraseMixin.class);
context.setMixInAnnotations(CategorizerResult.class, CategorizerResultMixin.class);
context.setMixInAnnotations(Entity.class, EntityMixin.class);
context.setMixInAnnotations(com.basistech.rosette.dm.EntityMention.class, EntityMentionMixin.class);
context.setMixInAnnotations(RelationshipComponent.class, RelationshipComponentMixin.class);
context.setMixInAnnotations(RelationshipMention.class, RelationshipMentionMixin.class);
context.setMixInAnnotations(Extent.class, ExtentMixin.class);
context.setMixInAnnotations(HanMorphoAnalysis.class, HanMorphoAnalysisMixin.class);
context.setMixInAnnotations(KoreanMorphoAnalysis.class, KoreanMorphoAnalysisMixin.class);
context.setMixInAnnotations(LanguageDetection.class, LanguageDetectionMixin.class);
context.setMixInAnnotations(LanguageDetection.DetectionResult.class, LanguageDetectionMixin.DetectionResultMixin.class);
context.setMixInAnnotations(ListAttribute.class, ListAttributeMixin.class);
context.setMixInAnnotations(Mention.class, MentionMixin.class);
context.setMixInAnnotations(MorphoAnalysis.class, MorphoAnalysisMixin.class);
context.setMixInAnnotations(Name.class, NameMixin.class);
context.setMixInAnnotations(RawData.class, RawDataMixin.class);
context.setMixInAnnotations(com.basistech.rosette.dm.ResolvedEntity.class, ResolvedEntityMixin.class);
context.setMixInAnnotations(Sentence.class, SentenceMixin.class);
context.setMixInAnnotations(ScriptRegion.class, ScriptRegionMixin.class);
context.setMixInAnnotations(Token.class, TokenMixin.class);
context.setMixInAnnotations(TranslatedData.class, TranslatedDataMixin.class);
context.setMixInAnnotations(TranslatedTokens.class, TranslatedTokensMixin.class);
context.setMixInAnnotations(Dependency.class, DependencyMixin.class);
context.setMixInAnnotations(EmbeddingCollection.class, EmbeddingCollectionMixin.class);
context.setMixInAnnotations(Embeddings.class, EmbeddingsMixin.class);
context.setMixInAnnotations(Concept.class, ConceptMixin.class);
context.setMixInAnnotations(Keyphrase.class, KeyphraseMixin.class);
// type-serializers
SimpleSerializers serializers = new SimpleSerializers();
// All doubles are serialized by DoubleSerializer
serializers.addSerializer(new DoubleSerializer());
context.addSerializers(serializers);
}
/**
* Register the Annotated Data Model Jackson module on an {@link ObjectMapper}.
* @param mapper the mapper.
* @return the same mapper, for convenience.
*/
public static ObjectMapper setupObjectMapper(ObjectMapper mapper) {
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
final AnnotatedDataModelModule module = new AnnotatedDataModelModule();
module.addSerializer(Double.class, new DoubleSerializer());
mapper.registerModule(module);
return mapper;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy