/**
* <copyright>
*
* Copyright (c) 2011 Christian Kerl
* 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:
* Christian Kerl - Initial API and implementation
*
* </copyright>
*/
package org.eclipselab.emf.ecore.protobuf.conversion;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import com.google.protobuf.Descriptors;
import com.google.protobuf.Message;
/**
* A ToProtoBufMessageConverter converts from an Ecore {@link EObject} to
* a ProtoBuf {@link Message}.
*
* @author Christian Kerl
*/
public abstract class ToProtoBufMessageConverter<SourceType extends EObject, TargetType extends Message>
implements
Converter.WithMappingContext<SourceType, EClass, TargetType, Descriptors.Descriptor>
{
private Converter.MappingContext<EClass, Descriptors.Descriptor> mappingContext;
protected EObjectPool pool;
@Override
public void setMappingContext(Converter.MappingContext<EClass, Descriptors.Descriptor> context)
{
mappingContext = context;
}
@Override
public Converter.MappingContext<EClass, Descriptors.Descriptor> getMappingContext()
{
return mappingContext;
}
public void setObjectPool(EObjectPool pool)
{
this.pool = pool;
}
public boolean supports(EClass sourceType)
{
return supports(sourceType, getTargetType(sourceType));
}
protected abstract Descriptors.Descriptor getTargetType(EClass sourceType);
public final TargetType convert(SourceType source)
{
return convert(source, getMappingContext().lookup(source.eClass()));
}
public final TargetType convert(SourceType source, Descriptors.Descriptor targetType)
{
return convert(source.eClass(), source, targetType);
}
}