blob: 616aa886610f430770f7ef16576bc0537d9d9361 [file] [log] [blame]
/*
* Copyright (c) 2010-2018 BSI Business Systems Integration AG.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* BSI Business Systems Integration AG - initial API and implementation
*/
package org.eclipse.scout.rt.jackson.dataobject;
import org.eclipse.scout.rt.dataobject.DataObjectInventory;
import org.eclipse.scout.rt.dataobject.DoEntity;
import org.eclipse.scout.rt.dataobject.IDoEntity;
import org.eclipse.scout.rt.platform.BEANS;
import org.eclipse.scout.rt.platform.Bean;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.databind.AnnotationIntrospector;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.cfg.MapperConfig;
import com.fasterxml.jackson.databind.introspect.AnnotatedClass;
import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
import com.fasterxml.jackson.databind.jsontype.TypeResolverBuilder;
import com.fasterxml.jackson.databind.jsontype.impl.StdTypeResolverBuilder;
/**
* Jackson {@link AnnotationIntrospector} implementation adding type resolver for all {@link IDoEntity} data object
* instances.
*/
@Bean
public class DataObjectAnnotationIntrospector extends JacksonAnnotationIntrospector {
private static final long serialVersionUID = 1L;
protected ScoutDataObjectModuleContext m_moduleContext;
public DataObjectAnnotationIntrospector withModuleContext(ScoutDataObjectModuleContext moduleContext) {
m_moduleContext = moduleContext;
return this;
}
@Override
public TypeResolverBuilder<?> findTypeResolver(MapperConfig<?> config, AnnotatedClass ac, JavaType baseType) {
if (!(ac.getRawType() == DoEntity.class) && !(ac.getRawType() == IDoEntity.class) && !BEANS.get(DataObjectInventory.class).hasTypeName(ac.getRawType())) {
return StdTypeResolverBuilder.noTypeInfoBuilder();
}
if (IDoEntity.class.isAssignableFrom(ac.getRawType())) {
DataObjectTypeResolverBuilder doTypeResolverBuilder = BEANS.get(DataObjectTypeResolverBuilder.class);
doTypeResolverBuilder.init(JsonTypeInfo.Id.NAME, BEANS.get(DataObjectTypeIdResolver.class));
doTypeResolverBuilder.inclusion(JsonTypeInfo.As.PROPERTY);
doTypeResolverBuilder.typeProperty(m_moduleContext.getTypeAttributeName());
return doTypeResolverBuilder;
}
return super.findTypeResolver(config, ac, baseType);
}
}