Java tutorial
/* * Copyright (c) 2015 Guillaume Hillairet. * 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: * Guillaume Hillairet - initial API and implementation * */ package org.emfjson.jackson.databind.deser; import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.deser.Deserializers; import com.fasterxml.jackson.databind.jsontype.TypeDeserializer; import com.fasterxml.jackson.databind.type.CollectionType; import com.fasterxml.jackson.databind.type.MapLikeType; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.EMap; import org.eclipse.emf.common.util.Enumerator; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.emfjson.jackson.databind.property.EObjectPropertyMap; import org.emfjson.jackson.databind.type.EcoreType; import org.emfjson.jackson.module.EMFModule; import java.util.Map; public class EMFDeserializers extends Deserializers.Base { private final EObjectPropertyMap.Builder builder; private final ResourceDeserializer _resourceDeserializer; private final JsonDeserializer<EList<Map.Entry<?, ?>>> _mapDeserializer; private final JsonDeserializer<Object> _dataTypeDeserializer; private final JsonDeserializer<ReferenceEntry> _referenceDeserializer; public EMFDeserializers(EMFModule module) { this.builder = new EObjectPropertyMap.Builder(module.getIdentityInfo(), module.getTypeInfo(), module.getReferenceInfo(), module.getFeatures()); this._resourceDeserializer = new ResourceDeserializer(module.getUriHandler()); this._referenceDeserializer = module.getReferenceInfo().getDeserializer(); this._mapDeserializer = new EMapDeserializer(); this._dataTypeDeserializer = new EDataTypeDeserializer(); } @Override public JsonDeserializer<?> findMapLikeDeserializer(MapLikeType type, DeserializationConfig config, BeanDescription beanDesc, KeyDeserializer keyDeserializer, TypeDeserializer elementTypeDeserializer, JsonDeserializer<?> elementDeserializer) throws JsonMappingException { if (type.isTypeOrSubTypeOf(EMap.class)) { return _mapDeserializer; } return super.findMapLikeDeserializer(type, config, beanDesc, keyDeserializer, elementTypeDeserializer, elementDeserializer); } @Override public JsonDeserializer<?> findEnumDeserializer(Class<?> type, DeserializationConfig config, BeanDescription beanDesc) throws JsonMappingException { if (Enumerator.class.isAssignableFrom(type)) { return _dataTypeDeserializer; } return super.findEnumDeserializer(type, config, beanDesc); } @Override public JsonDeserializer<?> findCollectionDeserializer(CollectionType type, DeserializationConfig config, BeanDescription beanDesc, TypeDeserializer elementTypeDeserializer, JsonDeserializer<?> elementDeserializer) throws JsonMappingException { return super.findCollectionDeserializer(type, config, beanDesc, elementTypeDeserializer, elementDeserializer); } @Override public JsonDeserializer<?> findBeanDeserializer(JavaType type, DeserializationConfig config, BeanDescription beanDesc) throws JsonMappingException { if (type.isTypeOrSubTypeOf(Resource.class)) { return _resourceDeserializer; } if (type.isReferenceType()) { return _referenceDeserializer; } if (type.isTypeOrSubTypeOf(EcoreType.DataType.class)) { return _dataTypeDeserializer; } if (type.isTypeOrSubTypeOf(EObject.class)) { return new EObjectDeserializer(builder); } return super.findBeanDeserializer(type, config, beanDesc); } }