Package data.media

Source Code of data.media.ImageDeserializer

package data.media;

import java.lang.reflect.Type;

import com.alibaba.fastjson.parser.DefaultJSONParser;
import com.alibaba.fastjson.parser.JSONScanner;
import com.alibaba.fastjson.parser.JSONToken;
import com.alibaba.fastjson.parser.ParserConfig;
import com.alibaba.fastjson.parser.deserializer.ASMJavaBeanDeserializer;
import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer;

import data.media.Image.Size;

public class ImageDeserializer extends ASMJavaBeanDeserializer implements ObjectDeserializer {

    public ImageDeserializer(ParserConfig mapping, Class<?> clazz){
        super(mapping, clazz);
    }

    public ImageDeserializer(){
        super(ParserConfig.getGlobalInstance(), Image.class);
    }

    // "size":"LARGE","uri":"http://javaone.com/keynote_large.jpg","title":"Javaone Keynote","width":1024,"height":768
    private char[] size_   = "\"size\":".toCharArray();
    private char[] uri_    = "\"uri\":".toCharArray();
    private char[] titile_ = "\"title\":".toCharArray();
    private char[] width_  = "\"width\":".toCharArray();
    private char[] height_ = "\"height\":".toCharArray();

    @SuppressWarnings("unchecked")
    public <T> T deserialze(DefaultJSONParser parser, Type clazz, Object fieldName) {
        final JSONScanner lexer = (JSONScanner) parser.getLexer();

        int height;
        Size size;
        String title;
        String uri;
        int width;
       

        int mark = lexer.getBufferPosition();
        char mark_ch = lexer.getCurrent();
        int mark_token = lexer.token();

        {
            height = lexer.scanFieldInt(height_);
            if (lexer.matchStat == JSONScanner.NOT_MATCH) {
                // 退出快速模式, 进入常规模式
                lexer.reset(mark, mark_ch, mark_token);
                return (T) super.deserialze(parser, clazz, fieldName);
            }
        }
        {
            String value = lexer.scanFieldString(size_);
            if (lexer.matchStat == JSONScanner.NOT_MATCH) {
                // 退出快速模式, 进入常规模式
                lexer.reset(mark, mark_ch, mark_token);
                return (T) super.deserialze(parser, clazz, fieldName);
            }
            size = Size.valueOf(value);
        }
        {
            title = lexer.scanFieldString(titile_);
            if (lexer.matchStat == JSONScanner.NOT_MATCH) {
                // 退出快速模式, 进入常规模式
                lexer.reset(mark, mark_ch, mark_token);
                return (T) super.deserialze(parser, clazz, fieldName);
            }
        }
        {
            uri = lexer.scanFieldString(uri_);
            if (lexer.matchStat == JSONScanner.NOT_MATCH) {
                // 退出快速模式, 进入常规模式
                lexer.reset(mark, mark_ch, mark_token);
                return (T) super.deserialze(parser, clazz, fieldName);
            }
        }
        {
            width = lexer.scanFieldInt(width_);
            if (lexer.matchStat == JSONScanner.NOT_MATCH) {
                // 退出快速模式, 进入常规模式
                lexer.reset(mark, mark_ch, mark_token);
                return (T) super.deserialze(parser, clazz, fieldName);
            }
        }


        if (lexer.matchStat != JSONScanner.END) {
            // 退出快速模式, 进入常规模式
            lexer.reset(mark, mark_ch, mark_token);
            return (T) super.deserialze(parser, clazz, fieldName);
        }

        Image image = new Image();
        image.setSize(size);
        image.setUri(uri);
        image.setTitle(title);
        image.setWidth(width);
        image.setHeight(height);

        return (T) image;
    }

    public int getFastMatchToken() {
        return JSONToken.LBRACE;
    }

    @Override
    public Object createInstance(DefaultJSONParser parser, Type type) {
        return new Image();
    }

}
TOP

Related Classes of data.media.ImageDeserializer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.