package de.mxcit.reportal;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.GZIPOutputStream;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import org.stringtree.json.JSONValidatingWriter;
import org.stringtree.json.JSONWriter;

import de.bundeswehr.dobis.firmen.FirmaService;
import de.bundeswehr.dobis.main.GsdService;

public class Controller extends AbstractController {

	...

	protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws IOException {
		int limit = Integer.parseInt(request.getParameter("limit"));
		int start = Integer.parseInt(request.getParameter("start"));
		String column = request.getParameter("sort");
		String dir = request.getParameter("dir");
		String result = list(firmaService.getAll(start, limit, column, dir), firmaService.getTotal());
		if(request.getHeader("Accept-Encoding").matches(".*gzip.*")) {
			response.setHeader("Content-Encoding", "gzip");
			response.getOutputStream().write(gzip(result));
		} else {
			response.getWriter().write(result);
		}
		return null;
	}
	
	private String list(List value, int total) {
		Map map = new HashMap();
		map.put("totalProperty", new Integer(total));
		map.put("root", value.toArray());
		return new JSONWriter().write(map);
	}

	private byte[] gzip(String value) {
		try {
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			OutputStream zos = new GZIPOutputStream(baos);
			OutputStreamWriter writer = new OutputStreamWriter(zos);
			writer.write(value);
			writer.close();
			zos.close();
			baos.close();
			return baos.toByteArray();
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

}

