public V unmarshall()

in lightning-core/src/main/java/org/apache/directmemory/lightning/internal/marshaller/MapMarshaller.java [149:217]


    public <V> V unmarshall( PropertyDescriptor propertyDescriptor, Source source,
                             SerializationContext serializationContext )
        throws IOException
    {
        if ( isNull( source ) )
        {
            return null;
        }

        int size = source.readInt();
        Map map = new LinkedHashMap( size );
        if ( size > 0 )
        {
            for ( int i = 0; i < size; i++ )
            {
                Object key = null;
                if ( !isNull( source ) )
                {
                    long keyClassId = source.readLong();
                    ClassDefinition keyClassDefinition =
                        serializationContext.getClassDefinitionContainer().getClassDefinitionById( keyClassId );

                    Marshaller keyMarshaller;
                    if ( mapKeyType != null )
                    {
                        ensureMarshallersInitialized( serializationContext );
                        keyMarshaller = mapKeyTypeMarshaller;
                    }
                    else
                    {
                        keyMarshaller = serializationContext.findMarshaller( keyClassDefinition.getType() );
                    }

                    PropertyDescriptor pd =
                        new CheatPropertyDescriptor( propertyDescriptor.getPropertyName() + "Key",
                                                     keyClassDefinition.getType(), keyMarshaller );
                    key = keyMarshaller.unmarshall( pd, source, serializationContext );
                }

                Object value = null;
                if ( !isNull( source ) )
                {
                    long valueClassId = source.readLong();
                    ClassDefinition valueClassDefinition =
                        serializationContext.getClassDefinitionContainer().getClassDefinitionById( valueClassId );

                    Marshaller valueMarshaller;
                    if ( mapKeyType != null )
                    {
                        ensureMarshallersInitialized( serializationContext );
                        valueMarshaller = mapValueTypeMarshaller;
                    }
                    else
                    {
                        valueMarshaller = serializationContext.findMarshaller( valueClassDefinition.getType() );
                    }

                    PropertyDescriptor pd =
                        new CheatPropertyDescriptor( propertyDescriptor.getPropertyName() + "Value",
                                                     valueClassDefinition.getType(), valueMarshaller );
                    value = valueMarshaller.unmarshall( pd, source, serializationContext );
                }

                map.put( key, value );
            }
        }

        return (V) map;
    }