Created
March 29, 2015 16:51
-
-
Save JaiHirsch/08397223c2a0de64dfc8 to your computer and use it in GitHub Desktop.
MongoDB 3.0 java driver Codec example - Codec class for the mapping the Grades bean
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package org.scratch; | |
import org.bson.BsonReader; | |
import org.bson.BsonString; | |
import org.bson.BsonValue; | |
import org.bson.BsonWriter; | |
import org.bson.Document; | |
import org.bson.codecs.Codec; | |
import org.bson.codecs.CollectibleCodec; | |
import org.bson.codecs.DecoderContext; | |
import org.bson.codecs.DocumentCodec; | |
import org.bson.codecs.EncoderContext; | |
import org.bson.types.ObjectId; | |
public class GradesCodec implements CollectibleCodec<Grades> { | |
private Codec<Document> documentCodec; | |
public GradesCodec() { | |
this.documentCodec = new DocumentCodec(); | |
} | |
public GradesCodec(Codec<Document> codec) { | |
this.documentCodec = codec; | |
} | |
@Override | |
public void encode(BsonWriter writer, Grades value, | |
EncoderContext encoderContext) { | |
Document document = new Document(); | |
ObjectId id = value.getId(); | |
Double score = value.getScore(); | |
Integer studentId = value.getStudentId(); | |
String type = value.getType(); | |
if (null != id) { | |
document.put("_id", id); | |
} | |
if (null != score) { | |
document.put("score", score); | |
} | |
if (null != studentId) { | |
document.put("student_id", studentId); | |
} | |
if (null != type) { | |
document.put("type", type); | |
} | |
documentCodec.encode(writer, document, encoderContext); | |
} | |
@Override | |
public Class<Grades> getEncoderClass() { | |
return Grades.class; | |
} | |
@Override | |
public Grades decode(BsonReader reader, DecoderContext decoderContext) { | |
Document document = documentCodec.decode(reader, decoderContext); | |
System.out.println("document "+document); | |
Grades grade = new Grades(); | |
grade.setId(document.getObjectId("_id")); | |
grade.setStudentId(document.getInteger("student_id")); | |
grade.setType(document.getString("type")); | |
grade.setScore(document.getDouble("score")); | |
return grade; | |
} | |
@Override | |
public Grades generateIdIfAbsentFromDocument(Grades document) { | |
return documentHasId(document) ? document.withNewObjectId() : document; | |
} | |
@Override | |
public boolean documentHasId(Grades document) { | |
return null == document.getId(); | |
} | |
@Override | |
public BsonValue getDocumentId(Grades document) { | |
if (!documentHasId(document)) | |
{ | |
throw new IllegalStateException("The document does not contain an _id"); | |
} | |
return new BsonString(document.getId().toHexString()); | |
} | |
} |
Thanks! Your example code helped me migrate my Codec from streaming based to document based.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks man!