package gcom.relatorio.cliente; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import com.google.gson.Gson; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.WebResource; public class ReportUtil { private static int HEADER = 1; private static int GROUP = 2; private static int TOTALIZER = 3; public List<ReportField> headerFieldsFromClass(Class t) { return fieldsFromClass(t, HEADER); } public List<ReportField> groupFieldsFromClass(Class t) { return fieldsFromClass(t, GROUP); } public List<ReportField> totalizerFieldsFromClass(Class t) { return fieldsFromClass(t, TOTALIZER); } public List<ReportField> fieldsFromClass(Class t, int fieldType) { Field[] campos = t.getDeclaredFields(); List<ReportField> fields = new ArrayList<ReportField>(); for (Field field : campos) { if (field.isAnnotationPresent(ReportElementType.class)) { ReportElementType campo = field.getAnnotation(ReportElementType.class); if (fieldType == HEADER && campo.header()) { fields.add(new ReportField(field.getName(), campo.description(), campo.align(), campo.type())); } else if (fieldType == GROUP && campo.group()) { fields.add(new ReportField(field.getName(), campo.description())); } else if (fieldType == TOTALIZER && campo.totalizer()) { fields.add(new ReportField(field.getName())); } } } return fields; } public void invokeReport(ReportDTO report, String url) throws IOException, Exception { Gson gson = new Gson(); String json = gson.toJson(report); Client client = Client.create(); WebResource webResource = client.resource(url); ClientResponse response = webResource.type("application/json").post(ClientResponse.class, json); InputStream input = response.getEntityInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(input)); StringBuilder builder = new StringBuilder(); String linha = null; while ((linha = reader.readLine()) != null) { builder.append(linha); } if (builder.length() == 0 || response.getStatus() != 200) { throw new Exception("Erro ao acessar servico"); } ReportJsonReturn jsonRetorno = gson.fromJson(builder.toString(), ReportJsonReturn.class); if (jsonRetorno.temErro()) { throw new Exception("Erro no retorno: " + jsonRetorno.getErro()); } } }