Package br.gov.serpro.ouvidoria.util

Source Code of br.gov.serpro.ouvidoria.util.ReportHelperInt

/*
* Sistema de Ouvidoria: um canal através do qual os usuários
* podem encaminhar suas reclamações, elogios e sugestões.
*
* Copyright (C) 2011 SERPRO
*
* Este programa é software livre; você pode redistribuí-lo e/ou
* modificá-lo sob os termos da Licença Pública Geral GNU, conforme
* publicada pela Free Software Foundation; tanto a versão 2 da
* Licença como (a seu critério) qualquer versão mais nova.
*
* Este programa é distribuído na expectativa de ser útil, mas SEM
* QUALQUER GARANTIA; sem mesmo a garantia implícita de
* COMERCIALIZAÇÃO ou de ADEQUAÇÃO A QUALQUER PROPÓSITO EM
* PARTICULAR. Consulte a Licença Pública Geral GNU para obter mais
* detalhes.
*
* Você deve ter recebido uma cópia da Licença Pública Geral GNU,
* sob o título "LICENCA.txt", junto com esse programa. Se não,
* acesse o Portal do Software Público Brasileiro no endereço
* http://www.softwarepublico.gov.br/ ou escreva para a Fundação do
* Software Livre (FSF) Inc., 51 Franklin St, Fifth Floor, Boston,
* MA 02111-1301, USA.
*
* Contatos através do seguinte endereço internet:
* http://www.serpro.gov.br/sistemaouvidoria/
*/
package br.gov.serpro.ouvidoria.util;

import java.sql.SQLException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.oro.text.perl.Perl5Util;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;

import br.gov.serpro.ouvidoria.controller.gerencial.administracao.OrgaoCtrl;
import br.gov.serpro.ouvidoria.dao.DaoFactory;
import br.gov.serpro.ouvidoria.dao.hibernate.HibernateDaoFactory;
import br.gov.serpro.ouvidoria.model.Orgao;
import br.gov.serpro.ouvidoria.util.collection.ArrayKit;
import br.gov.serpro.ouvidoria.util.freechart.data.DBUtilsKit;
import br.gov.serpro.ouvidoria.util.freechart.data.StringKit;

/**
*
* @author SERPRO
* @version $Revision: 1.1.2.5 $, $Date: 2011/10/21 18:53:46 $
* @version 0.1, Date: 2005/01/28
*/
public class ReportHelperInt {

  public final static class ReportDynaActionForm extends DynaActionForm {

    private static final long serialVersionUID = 1L;

    public void reset(ActionMapping mapping, HttpServletRequest request) {
      this.set("sel_itens_tabela", new String[0]);
    }
  }

  public static String[] getTableList() {
    String[] result = ReportKit.getConfig().getStringArray(
        ReportKit.TABLE_LIST);
    return result;
  }

  public static List getComboList(HttpServletRequest request)
      throws SQLException {

    final DaoFactory daoFactory = new HibernateDaoFactory();

    String sIndex = request.getParameter(ReportKit.SEL_TABELA);
    if (sIndex == null || sIndex.length() == 0) {
      sIndex = "-1";
    }

    OrgaoCtrl orgaoCtrl = new OrgaoCtrl(daoFactory);

    return getComboList(sIndex, (Orgao) orgaoCtrl.get((String) request
        .getSession().getAttribute(Constants.ID_SESSAO_ORGAO)));
  }

  public static String getComboListsAsArray(HttpServletRequest request)
      throws SQLException {

    // obter o órgão atual
    final DaoFactory daoFactory = new HibernateDaoFactory();
    OrgaoCtrl orgaoCtrl = new OrgaoCtrl(daoFactory);
    String idSessaoOrgao = (String) request.getSession().getAttribute(
        Constants.ID_SESSAO_ORGAO);
    Orgao orgao = (Orgao) orgaoCtrl.get(idSessaoOrgao);

    return getComboListsAsArray(orgao);
  }

  public static String getComboListsAsArray(Orgao orgao) throws SQLException {
    StringBuffer sb = new StringBuffer(15 * 1024);

    for (int i = 0; i < 12; i++) {
      ReportKit.toJSArray(_getComboList(String.valueOf(i), orgao)
          .iterator(), sb);
      sb.append(",\n");
    }
    sb.setLength(sb.length() - 2);

    return sb.toString();
  }

  public static List getComboList(String index, Orgao orgao)
      throws SQLException {
    return _getComboList(index, orgao);
  }

  private static List _getComboList(String index, Orgao orgao)
      throws SQLException {
    String query = ReportKit.getConfig().getString(
        ReportKit.II_COMBO_QUERY + index);
    if (isCodInstitTable(index)) {
      query = MessageFormat.format(query, new Object[] { orgao.getId() });
    }

    return DBUtilsKit.selectAsListMap(query);
  }

  public static boolean isCodInstitTable(String index) {
    final String[] II_COD_INSTIT_TABLE_ARRAY = ReportKit.getConfig()
        .getStringArray(ReportKit.II_COD_INSTIT_TABLES);
    return ArrayKit.searchEqual(II_COD_INSTIT_TABLE_ARRAY, index) >= 0;
  }

  public static List getRecordList(HttpServletRequest request)
      throws SQLException {
    String query = getQuery(request);
    List result = DBUtilsKit.selectAsListMap(query);
    result.add(new Double(100f / ReportKit.getCountFromList(result)));
    return result;

  }

  public static Object getDataSet(String index, String chart_type,
      boolean detailed, boolean table_on_x_axis,
      Object[] ii_itens_tabela, String[] sel_itens_tabela,
      String h_locais, Orgao orgao, String txt_periodo_i,
      String txt_periodo_f) throws SQLException {

    String query = getQuery(index, chart_type, detailed, table_on_x_axis,
        ii_itens_tabela, sel_itens_tabela, h_locais, orgao,
        txt_periodo_i, txt_periodo_f);

    Object result = ReportKit.getDataSet(chart_type,
        !(detailed && table_on_x_axis), query, true);
    return result;

  }

  public static String getQuery(HttpServletRequest request) {

    boolean table_on_x_axis = false;
    final DaoFactory daoFactory = new HibernateDaoFactory();

    if ("0".equalsIgnoreCase(request.getParameter("r_base_x")))
      table_on_x_axis = true;

    boolean detail = false;
    if ("d".equalsIgnoreCase(request.getParameter("r_modo_exibicao")))
      detail = true;

    OrgaoCtrl orgaoCtrl = new OrgaoCtrl(daoFactory);

    Orgao orgao = (Orgao) orgaoCtrl.get((String) request.getSession()
        .getAttribute(Constants.ID_SESSAO_ORGAO));

    return getQuery(request.getParameter("sel_tabela"),
        request.getParameter("sel_tipo_grafico"), detail,
        table_on_x_axis,
        new ArrayList((List) request.getAttribute("ii_itens_tabela"))
            .toArray(),
        request.getParameterValues("sel_itens_tabela"),
        request.getParameter("h_locais"), orgao,
        request.getParameter("txt_periodo_i"),
        request.getParameter("txt_periodo_f"));

  }

  private final static Perl5Util p5Util = new Perl5Util();

  public static String getNoOutrosQuery(HttpServletRequest request) {

    boolean table_on_x_axis = false;
    final DaoFactory daoFactory = new HibernateDaoFactory();

    if ("0".equalsIgnoreCase(request.getParameter("r_base_x")))
      table_on_x_axis = true;

    boolean detail = false;
    if ("d".equalsIgnoreCase(request.getParameter("r_modo_exibicao")))
      detail = true;

    String index = request.getParameter("sel_tabela");

    OrgaoCtrl orgaoCtrl = new OrgaoCtrl(daoFactory);

    Orgao orgao = (Orgao) orgaoCtrl.get((String) request.getSession()
        .getAttribute(Constants.ID_SESSAO_ORGAO));

    Object[] ii_itens_tabela = new ArrayList(
        (List) request.getAttribute("ii_itens_tabela")).toArray();
    String[] sel_itens_tabela = request
        .getParameterValues("sel_itens_tabela");

    String noOutros = getClauseForNoOutros(index, ii_itens_tabela,
        sel_itens_tabela);

    if (noOutros == null)
      return null;

    String query = getQuery(index,
        request.getParameter("sel_tipo_grafico"), detail,
        table_on_x_axis, ii_itens_tabela, sel_itens_tabela,
        request.getParameter("h_locais"), orgao,
        request.getParameter("txt_periodo_i"),
        request.getParameter("txt_periodo_f"));

    query = p5Util
        .substitute("s/(GROUP\\sBY)/" + noOutros + " $1/i", query);

    return query;

  }

  public static String getQuery(String index, String chart_type,
      boolean detailed, boolean table_on_x_axis,
      Object[] ii_itens_tabela, String[] sel_itens_tabela,
      String h_locais, Orgao orgao, String txt_periodo_i,
      String txt_periodo_f) {

    final boolean isPie = chart_type.indexOf("pie") >= 0;

    final boolean processFirstFields = !(isPie && !table_on_x_axis);

    String baseQuery = ReportKit.getConfig().getString("ii.base.sql");

    String dateCrit = ReportKit.getDateCrit(txt_periodo_i, txt_periodo_f);
    String locCrit = ReportKit.getLocationCrit(h_locais);
    String query = "";
    String queryUnion = "";
    String script = "Outros";

    String firstFieldsKey = !detailed ? "ii.firstFields.cons."
        + (table_on_x_axis ? "table" : "loc") : "ii.firstFields.detail";

    String firstFields = ReportKit.getConfig().getString(firstFieldsKey);
    if (processFirstFields) {
      firstFields = MessageFormat.format(
          firstFields,
          new Object[] {
              ReportKit.getConfig().getString(
                  "ii.case_field.cons." + index),
              getCaseForTableItems(ii_itens_tabela,
                  sel_itens_tabela) });
    }

    String fromTable = ReportKit.getConfig().getString(
        ReportKit.II_FROM_TABLES + index);

    String whereTable = ReportKit.getConfig().getString(
        ReportKit.II_WHERE_TABLES + index);
    if (isCodInstitTable(index)) {
      whereTable = MessageFormat.format(whereTable,
          new Object[] { orgao.getId() });
    }

    String groupByKey = !detailed ? "ii.groupBy.cons."
        + (table_on_x_axis ? "table" : "loc") : "ii.groupBy.detail";

    String groupBy = ReportKit.getConfig().getString(groupByKey);

    query = MessageFormat.format(
        baseQuery,
        new Object[] {
            firstFields,
            fromTable,
            whereTable,
            dateCrit,
            locCrit
                + (table_on_x_axis ? ""
                    : getWhereForTableItems(index,
                        sel_itens_tabela)), groupBy });

    // UNION para totalizar acionamentos realizados por SCRIPTS
    if (index.equals("10")) {

      baseQuery = ReportKit.getConfig().getString("ii.base.sql.union");
      query = MessageFormat.format(
          baseQuery,
          new Object[] {
              firstFields,
              fromTable,
              whereTable,
              dateCrit,
              locCrit
                  + (table_on_x_axis ? ""
                      : getWhereForTableItems(index,
                          sel_itens_tabela)) });

      for (int i = 0; i < sel_itens_tabela.length; i++) {
        if (sel_itens_tabela[i].equals("")) {
          script = "Scripts";
          break;
        }
      }

      queryUnion = " SELECT '" + script
          + "' as ID, count(distinct atend.cod_atend) as COUNT "
          + " FROM atendimento atend "
          + "    , funcionariolocalocorrencia funloc " + " WHERE "
          + ReportKit.getDateCritUnion(txt_periodo_i, txt_periodo_f)
          + " AND funloc.cod_func = atend.cod_func "
          + " AND funloc.cod_local_ocorr IN (" + h_locais + ")"
          + " GROUP BY ID";

      query = " SELECT a.ID, SUM(a.COUNT) as COUNT FROM (" + query
          + " UNION " + queryUnion
          + ") AS a GROUP BY a.ID ORDER BY ID";
    }

    return query;
  }

  private static String getCaseForTableItems(Object[] ii_itens_tabela,
      String[] sel_itens_tabela) {

    if (sel_itens_tabela == null || sel_itens_tabela.length < 1)
      return "";

    StringBuffer sb = new StringBuffer(1024);

    for (int i = 0; i < ii_itens_tabela.length; i++) {
      Map el = (Map) ii_itens_tabela[i];
      Object elID = el.get("id");
      if (ArrayKit.searchEqual(sel_itens_tabela, elID.toString()) < 0)
        continue;

      sb.append(" WHEN ");
      if (elID instanceof String)
        sb.append("'");
      sb.append(elID);
      if (elID instanceof String)
        sb.append("'");
      sb.append(" THEN '").append(el.get("descricao")).append("'");

    }
    return sb.toString();
  }

  private static String getClauseForNoOutros(String index,
      Object[] ii_itens_tabela, String[] sel_itens_tabela) {

    if (sel_itens_tabela == null || sel_itens_tabela.length < 1)
      return "";

    StringBuffer sb = new StringBuffer(1024);
    sb.append(" AND "
        + ReportKit.getConfig()
            .getString("ii.case_field.cons." + index) + " in (");
    int itemCount = 0;

    for (int i = 0; i < ii_itens_tabela.length; i++) {
      Object elID = ((Map) ii_itens_tabela[i]).get("id");
      if (ArrayKit.searchEqual(sel_itens_tabela, elID.toString()) < 0)
        continue;

      if (elID instanceof String)
        sb.append("'");
      sb.append(elID);
      if (elID instanceof String)
        sb.append("',");
      else
        sb.append(",");

      itemCount++;
    }

    sb.setLength(sb.length() - 1);
    sb.append(")");

    return itemCount == 0 ? null : sb.toString();
  }

  private static String getWhereForTableItems(String index,
      String[] sel_itens_tabela) {
    if (sel_itens_tabela == null || sel_itens_tabela.length < 1)
      return "";
    String sep = "1".equals(index) ? "'" : "";

    boolean hasNull = false;

    String item;
    List list = new ArrayList(sel_itens_tabela.length);

    for (int i = 0; i < sel_itens_tabela.length; i++) {
      item = sel_itens_tabela[i];
      if (item == null || item.length() < 1) {
        hasNull = true;
        continue;
      }
      list.add(item);
    }

    final String fieldName = ReportKit.getConfig().getString(
        "ii.case_field.cons." + index);

    String result = fieldName + " IN ("
        + StringKit.join(list.toArray(), sep, sep, ",") + ")";
    if (hasNull) {
      result = "(" + result + " OR " + fieldName + " IS NULL)";
    }

    return " AND " + result;

  }

}
TOP

Related Classes of br.gov.serpro.ouvidoria.util.ReportHelperInt

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.