Package de.bild.codec

Class PolymorphicReflectionCodec<T>

java.lang.Object
de.bild.codec.PolymorphicReflectionCodec<T>
All Implemented Interfaces:
TypeCodec<T>, org.bson.codecs.Codec<T>, org.bson.codecs.Decoder<T>, org.bson.codecs.Encoder<T>

public class PolymorphicReflectionCodec<T> extends Object implements TypeCodec<T>
  • Constructor Details

  • Method Details

    • decode

      public T decode(org.bson.BsonReader reader, org.bson.codecs.DecoderContext decoderContext)
      Specified by:
      decode in interface org.bson.codecs.Decoder<T>
    • decodeWithType

      protected T decodeWithType(org.bson.BsonReader reader, org.bson.codecs.DecoderContext decoderContext, PolymorphicCodec<T> polymorphicCodec)
    • encode

      public void encode(org.bson.BsonWriter writer, T value, org.bson.codecs.EncoderContext encoderContext)
      Specified by:
      encode in interface org.bson.codecs.Encoder<T>
    • getCodecForClass

      public PolymorphicCodec<T> getCodecForClass(Class<?> clazz)
      Walks up class hierarchy until a registered codec (in the context of registered model classes) is found
      Returns:
      a codec responsible for a valid class within the class hierarchy
    • getEncoderClass

      public Class<T> getEncoderClass()
      Specified by:
      getEncoderClass in interface org.bson.codecs.Encoder<T>
    • isCollectible

      public boolean isCollectible()
      Specified by:
      isCollectible in interface TypeCodec<T>
    • generateIdIfAbsentFromDocument

      public T generateIdIfAbsentFromDocument(T document)
      Specified by:
      generateIdIfAbsentFromDocument in interface TypeCodec<T>
    • documentHasId

      public boolean documentHasId(T document)
      Specified by:
      documentHasId in interface TypeCodec<T>
    • getDocumentId

      public org.bson.BsonValue getDocumentId(T document)
      Specified by:
      getDocumentId in interface TypeCodec<T>
    • getTypeFilter

      public org.bson.conversions.Bson getTypeFilter()
      Example: Or Filter{ filters=[ Filter{fieldName='_t', value=Square}, Filter{fieldName='_discriminatorKey', value=Circle} ] }
      Specified by:
      getTypeFilter in interface TypeCodec<T>
      Returns:
      the filter needed to find all types this codec is responsible for