package org.devefx.validator.http.reader.json;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import javax.servlet.http.HttpServletRequest;

import org.devefx.validator.http.MediaType;
import org.devefx.validator.http.reader.AbstractHttpMessageReader;
import org.devefx.validator.http.reader.HttpMessageNotReadableException;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class GsonHttpMessageReader extends AbstractHttpMessageReader<Object> {

    protected Gson gson;
    
    public GsonHttpMessageReader() {
        this(new GsonBuilder());
    }
    
    public GsonHttpMessageReader(GsonBuilder builder) {
        super(MediaType.ALL);
        this.gson = builder.create();
    }
    
    @Override
    protected boolean supports(Class<?> clazz) {
        return true;
    }

    @Override
    protected Object readInternal(Class<? extends Object> clazz, HttpServletRequest request)
            throws IOException, HttpMessageNotReadableException {
        
        InputStream in = request.getInputStream();
        return gson.fromJson(new InputStreamReader(in), clazz);
    }
}