All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.sf.aguacate.http.impl.HttpBodyBuilerImpl Maven / Gradle / Ivy

package net.sf.aguacate.http.impl;

import java.io.IOException;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import net.sf.aguacate.document.DocumentBuilder;
import net.sf.aguacate.document.json.JsonDocumentBuilder;
import net.sf.aguacate.http.HttpBodyBuiler;
import net.sf.aguacate.model.FieldType;
import net.sf.aguacate.util.formatter.OutputFormater;
import net.sf.aguacate.util.json.JsonCodec;

public class HttpBodyBuilerImpl implements HttpBodyBuiler {

	private final DocumentBuilder builder;

	public HttpBodyBuilerImpl(JsonCodec codec) {
		this.builder = new JsonDocumentBuilder(codec);
	}

	@Override
	public void build(HttpServletResponse response, Object object) throws IOException {
		response.setContentType(builder.getMimeType());
		response.setCharacterEncoding(StandardCharsets.UTF_8.name());
		PrintWriter writer = response.getWriter();
		try {
			builder.build(writer, object);
		} finally {
			writer.close();
		}
	}

	@Override
	public void build(HttpServletResponse response, Object object, OutputFormater formater,
			Map outputFields) throws IOException {
		response.setContentType(builder.getMimeType());
		response.setCharacterEncoding(StandardCharsets.UTF_8.name());
		PrintWriter writer = response.getWriter();
		try {
			Class klass = object.getClass();
			if (Map.class.isAssignableFrom(klass)) {
				Map temp = new HashMap<>();
				@SuppressWarnings("unchecked")
				Map map = (Map) object;
				process(formater, outputFields, map, temp);
				builder.build(writer, map);
			} else {
				if (List.class.isAssignableFrom(klass)) {
					List> data = new ArrayList<>();
					@SuppressWarnings("unchecked")
					List> list = (List>) object;
					for (Map current : list) {
						Map temp = new HashMap<>();
						process(formater, outputFields, current, temp);
						data.add(temp);
					}
					builder.build(writer, data);
				} else {
					throw new IllegalStateException(klass.getName());
				}
			}
		} finally {
			writer.close();
		}
	}

	void process(OutputFormater formater, Map outputFields, Map source,
			Map target) {
		for (Map.Entry entry : outputFields.entrySet()) {
			String outputField = entry.getKey();
			Object value = source.get(outputField);
			if (value != null) {
				target.put(outputField, formater.toString(entry.getValue(), value));
			}
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy