Class IdStrategy

  • Direct Known Subclasses:
    DefaultIdStrategy, NumericIdStrategy

    public abstract class IdStrategy
    extends java.lang.Object
    This base class handles all the IO for reading and writing polymorphic fields. When a field's type is polymorphic/dynamic (e.g interface/abstract/object), the type (id) needs to be written (ahead) before its value/content to be able to deserialize it correctly.

    The underlying impl will determine how the type (id) should be written.

    An IdStrategy is standalone if the primaryGroup is not set.

    • Constructor Detail

      • IdStrategy

        protected IdStrategy​(int flags,
                             IdStrategy primaryGroup,
                             int groupId)
    • Method Detail

      • newSchema

        protected <T> Schema<T> newSchema​(java.lang.Class<T> typeClass)
        Generates a schema from the given class. If this strategy is part of a group, the existing fields of that group's schema will be re-used.
      • isDelegateRegistered

        public abstract boolean isDelegateRegistered​(java.lang.Class<?> typeClass)
        Returns true if there is a Delegate explicitly registered for the typeClass.
      • getDelegateWrapper

        public abstract <T> HasDelegate<T> getDelegateWrapper​(java.lang.Class<? super T> typeClass)
        Returns the delegate.
      • getDelegate

        public abstract <T> Delegate<T> getDelegate​(java.lang.Class<? super T> typeClass)
        Returns the delegate.
      • isRegistered

        public abstract boolean isRegistered​(java.lang.Class<?> typeClass)
        Returns true if the typeClass is explicitly registered.
      • getSchemaWrapper

        public abstract <T> HasSchema<T> getSchemaWrapper​(java.lang.Class<T> typeClass,
                                                          boolean create)
        Returns the schema wrapper. The caller is responsible that the typeClass is a pojo (e.g not an enum/array/etc).
      • getEnumIO

        protected abstract EnumIO<? extends java.lang.Enum<?>> getEnumIO​(java.lang.Class<?> enumClass)
        Returns the EnumIO. The callers (internal field factories) are responsible that the class provided is an enum class.
      • writeCollectionIdTo

        protected abstract void writeCollectionIdTo​(Output output,
                                                    int fieldNumber,
                                                    java.lang.Class<?> clazz)
                                             throws java.io.IOException
        Throws:
        java.io.IOException
      • transferCollectionId

        protected abstract void transferCollectionId​(Input input,
                                                     Output output,
                                                     int fieldNumber)
                                              throws java.io.IOException
        Throws:
        java.io.IOException
      • writeMapIdTo

        protected abstract void writeMapIdTo​(Output output,
                                             int fieldNumber,
                                             java.lang.Class<?> clazz)
                                      throws java.io.IOException
        Throws:
        java.io.IOException
      • transferMapId

        protected abstract void transferMapId​(Input input,
                                              Output output,
                                              int fieldNumber)
                                       throws java.io.IOException
        Throws:
        java.io.IOException
      • resolveMapFrom

        protected abstract MapSchema.MessageFactory resolveMapFrom​(Input input)
                                                            throws java.io.IOException
        Throws:
        java.io.IOException
      • writeEnumIdTo

        protected abstract void writeEnumIdTo​(Output output,
                                              int fieldNumber,
                                              java.lang.Class<?> clazz)
                                       throws java.io.IOException
        Throws:
        java.io.IOException
      • transferEnumId

        protected abstract void transferEnumId​(Input input,
                                               Output output,
                                               int fieldNumber)
                                        throws java.io.IOException
        Throws:
        java.io.IOException
      • resolveEnumFrom

        protected abstract EnumIO<?> resolveEnumFrom​(Input input)
                                              throws java.io.IOException
        Throws:
        java.io.IOException
      • tryWritePojoIdTo

        protected abstract <T> HasSchema<T> tryWritePojoIdTo​(Output output,
                                                             int fieldNumber,
                                                             java.lang.Class<T> clazz,
                                                             boolean registered)
                                                      throws java.io.IOException
        Throws:
        java.io.IOException
      • writePojoIdTo

        protected abstract <T> HasSchema<T> writePojoIdTo​(Output output,
                                                          int fieldNumber,
                                                          java.lang.Class<T> clazz)
                                                   throws java.io.IOException
        Throws:
        java.io.IOException
      • transferPojoId

        protected abstract <T> HasSchema<T> transferPojoId​(Input input,
                                                           Output output,
                                                           int fieldNumber)
                                                    throws java.io.IOException
        Throws:
        java.io.IOException
      • resolvePojoFrom

        protected abstract <T> HasSchema<T> resolvePojoFrom​(Input input,
                                                            int fieldNumber)
                                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • writeMessageIdTo

        protected abstract <T> Schema<T> writeMessageIdTo​(Output output,
                                                          int fieldNumber,
                                                          Message<T> message)
                                                   throws java.io.IOException
        Throws:
        java.io.IOException
      • tryWriteDelegateIdTo

        protected abstract <T> HasDelegate<T> tryWriteDelegateIdTo​(Output output,
                                                                   int fieldNumber,
                                                                   java.lang.Class<T> clazz)
                                                            throws java.io.IOException
        If this method returns null, the clazz was not registered as a delegate.
        Throws:
        java.io.IOException
      • transferDelegateId

        protected abstract <T> HasDelegate<T> transferDelegateId​(Input input,
                                                                 Output output,
                                                                 int fieldNumber)
                                                          throws java.io.IOException
        Throws:
        java.io.IOException
      • resolveDelegateFrom

        protected abstract <T> HasDelegate<T> resolveDelegateFrom​(Input input)
                                                           throws java.io.IOException
        Throws:
        java.io.IOException
      • writeArrayIdTo

        protected abstract void writeArrayIdTo​(Output output,
                                               java.lang.Class<?> componentType)
                                        throws java.io.IOException
        Throws:
        java.io.IOException
      • transferArrayId

        protected abstract void transferArrayId​(Input input,
                                                Output output,
                                                int fieldNumber,
                                                boolean mapped)
                                         throws java.io.IOException
        Throws:
        java.io.IOException
      • resolveArrayComponentTypeFrom

        protected abstract java.lang.Class<?> resolveArrayComponentTypeFrom​(Input input,
                                                                            boolean mapped)
                                                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • writeClassIdTo

        protected abstract void writeClassIdTo​(Output output,
                                               java.lang.Class<?> componentType,
                                               boolean array)
                                        throws java.io.IOException
        Throws:
        java.io.IOException
      • transferClassId

        protected abstract void transferClassId​(Input input,
                                                Output output,
                                                int fieldNumber,
                                                boolean mapped,
                                                boolean array)
                                         throws java.io.IOException
        Throws:
        java.io.IOException
      • resolveClassFrom

        protected abstract java.lang.Class<?> resolveClassFrom​(Input input,
                                                               boolean mapped,
                                                               boolean array)
                                                        throws java.io.IOException
        Throws:
        java.io.IOException
      • createMessageInstance

        protected static <T> T createMessageInstance​(java.lang.Class<T> clazz)