package org.eclipselab.emf.ecore.protobuf.tests.library.util;
import com.google.protobuf.*;
import com.google.protobuf.Descriptors.*;
import org.eclipse.emf.ecore.*;
import org.eclipselab.emf.ecore.protobuf.conversion.*;
import org.eclipselab.emf.ecore.protobuf.tests.library.*;
public class BookFromProtobufConverter extends FromProtoBufMessageConverter<LibraryProtos.Book, Book> implements Converter.WithRegistry
{
@Override
@SuppressWarnings("unchecked")
public void setRegistry(ConverterRegistry registry)
{
}
@Override
public void setObjectPool(EObjectPool pool)
{
super.setObjectPool(pool);
}
@Override
public boolean supports(Descriptor sourceType, EClass targetType)
{
return LibraryProtos.Book.getDescriptor() == sourceType && LibraryPackage.Literals.BOOK == targetType;
}
@Override
public Book convert(final Descriptor sourceType, final LibraryProtos.Book source, final EClass targetType)
{
final Book result = (Book) pool.getObject(LibraryPackage.Literals.BOOK, source.getId());
if(source.hasName())
{
result.setName((java.lang.String) source.getName());
}
if(source.hasAuthor())
{
final LibraryProtos.Author.Ref curAuthorRef = source.getAuthor();
if(curAuthorRef.hasExtension(LibraryProtos.Author.authorAuthor))
{
final LibraryProtos.Author curAuthor = curAuthorRef.getExtension(LibraryProtos.Author.authorAuthor);
result.setAuthor(
(Author) pool.getObject(LibraryPackage.Literals.AUTHOR, curAuthor.getId())
);
}
else
{
// TODO: lookup in converter registry...
throw new UnsupportedOperationException();
}
}
if(source.hasRating())
{
switch(source.getRating())
{
case NO_RATING:
result.setRating(Rating.NO_RATING);
break;
case GOOD:
result.setRating(Rating.GOOD);
break;
case MEDIUM:
result.setRating(Rating.MEDIUM);
break;
case BAD:
result.setRating(Rating.BAD);
break;
};
}
return result;
}
@Override
protected EClass getTargetType(Descriptor sourceType)
{
return LibraryPackage.Literals.BOOK;
}
@Override
public LibraryProtos.Book doLoad(Descriptor sourceType, ExtensionRegistry extensions, ByteString data) throws InvalidProtocolBufferException
{
return LibraryProtos.Book.parseFrom(data, extensions);
}
}