package de.anycook.db.drafts.mongo.codecs; import de.anycook.drafts.RecipeDraft; import de.anycook.drafts.RecipeDraftWrapper; import org.bson.BsonReader; import org.bson.BsonWriter; import org.bson.codecs.Codec; import org.bson.codecs.DecoderContext; import org.bson.codecs.EncoderContext; import org.bson.codecs.configuration.CodecRegistry; import org.bson.types.ObjectId; public class RecipeDraftWrapperCodec implements Codec<RecipeDraftWrapper> { private final Codec<RecipeDraft> recipeDraftCodec; public RecipeDraftWrapperCodec(final CodecRegistry codecRegistry) { this.recipeDraftCodec = codecRegistry.get(RecipeDraft.class); } @Override public RecipeDraftWrapper decode(BsonReader reader, DecoderContext decoderContext) { final RecipeDraftWrapper recipeDraftWrapper = new RecipeDraftWrapper(); reader.readStartDocument(); recipeDraftWrapper.setId(reader.readObjectId("_id").toHexString()); reader.readName("value"); recipeDraftWrapper.setRecipeDraft(recipeDraftCodec.decode(reader, decoderContext)); reader.readEndDocument(); return recipeDraftWrapper; } @Override public void encode(BsonWriter writer, RecipeDraftWrapper value, EncoderContext encoderContext) { writer.writeStartDocument(); writer.writeObjectId("_id", new ObjectId(value.getId())); writer.writeName("value"); encoderContext.encodeWithChildContext(recipeDraftCodec, writer, value.getRecipeDraft()); writer.writeEndDocument(); } @Override public Class<RecipeDraftWrapper> getEncoderClass() { return RecipeDraftWrapper.class; } }