Package br.gov.serpro.ouvidoria.struts

Source Code of br.gov.serpro.ouvidoria.struts.CustomRequestProcessor

/*
* 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.struts;

import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.RequestProcessor;
import org.quartz.SchedulerException;

import br.gov.serpro.ouvidoria.agendador.OuvidoriaScheduler;
import br.gov.serpro.ouvidoria.bean.LayoutBean;
import br.gov.serpro.ouvidoria.bean.OrgaoDto;
import br.gov.serpro.ouvidoria.controller.ControleAcessoCtrl;
import br.gov.serpro.ouvidoria.controller.gerencial.administracao.FuncionarioCtrl;
import br.gov.serpro.ouvidoria.controller.gerencial.administracao.OrgaoCtrl;
import br.gov.serpro.ouvidoria.dao.DaoException;
import br.gov.serpro.ouvidoria.dao.DaoFactory;
import br.gov.serpro.ouvidoria.dao.hibernate.HibernateDaoFactory;
import br.gov.serpro.ouvidoria.model.ConfiguracoesOrgao;
import br.gov.serpro.ouvidoria.model.Funcionario;
import br.gov.serpro.ouvidoria.model.Orgao;
import br.gov.serpro.ouvidoria.util.Constants;

/**
  *
* @author SERPRO
* @version $Revision: 1.1.2.4 $, $Date: 2011/10/20 15:30:34 $
* @version 0.1, Date: 11/11/2004
*/
public class CustomRequestProcessor extends RequestProcessor {

  protected final DaoFactory daoFactory = new HibernateDaoFactory();
  protected Logger log = null;


  public void process(HttpServletRequest request, HttpServletResponse response)
      throws IOException, ServletException {

    Orgao orgao = null;
    OrgaoCtrl orgaoCtrl = new OrgaoCtrl(daoFactory);

    // Instancia a sessao
    HttpSession session = request.getSession(true);

    boolean flagPesquisa = false;

    // se houverem dados de pesquisa na sessao entao starta o flag
    if (session.getAttribute("possuiPesquisa") != null) {
      if (session.getAttribute("possuiPesquisa").equals("sim")) {
        flagPesquisa = true;
      }
    }

    if (flagPesquisa) {

      int caminho = 0;

      // qq um desses links preservam os dados da sessao
      if ((request.getServletPath()
          .equals("/andamento/ExibeMsgPorRespons.do"))
          || (request.getServletPath()
              .equals("/andamento/ConsultaSolucoes.do"))
          || (request.getServletPath()
              .equals("/andamento/ConsultarBancoScriptsMsg.do"))
          || (request.getServletPath()
              .equals("/andamento/RedirecionarMensagem.do"))
          || (request.getServletPath()
              .equals("/andamento/ReclassificarMensagem.do"))
          || (request.getServletPath()
              .equals("/andamento/ConfirmaResposta.do"))
          || (request.getServletPath()
              .equals("/andamento/RespondeAcionamento.do"))
          || (request.getServletPath()
              .equals("/andamento/ConsultaMsgPorRespons.do"))
          || (request.getServletPath()
              .equals("/andamento/SalvaRascunhoResp.do"))
          || (request.getServletPath()
              .equals("/andamento/ListaMsgPorRespons.do"))
          || (request.getServletPath()
              .equals("/andamento/ConfirmaRedirecionarMensagem.do"))

      ) {
        caminho = 1;
      }

      switch (caminho) {
      case 0:
        // caso saia da tela, então a sessao é limpa
        limpaSessao(request, session);
        break;
      case 1:
        break;
      }
    }

    // obter o ID da sessão
    String orgaoSessionId = request.getParameter(Constants.ID_SESSAO_ORGAO);
    if (orgaoSessionId == null) {

      // verificar se a sessão expirou
      if (request.getSession() == null) {
        doForward(Constants.LOGIN_EXPIRED_ACTION, request, response);
        return;
      }

      // tentar obter o ID do atributo correspondente na sessão
      orgaoSessionId = (String) request.getSession().getAttribute(
          Constants.ID_SESSAO_ORGAO);

      // se não achou o ID no atributo da sessão, procurar pelo cookie
      if (orgaoSessionId == null) {
        Cookie[] cookies = request.getCookies();
        for (int i = 0; (cookies != null && i < cookies.length); i++) {
          Cookie cookie = cookies[i];
          if (cookie.getName().equals(Constants.ID_SESSAO_ORGAO)) {
            orgaoSessionId = cookie.getValue();

          }
        }
      }
    }

    // se não obteve o ID, redirecionar o usuário para página adequada
    if (orgaoSessionId == null) {
      doForward(Constants.NOT_FOUND_PAGE, request, response);
      return;
    }

    // obter o órgão
    orgao = orgaoCtrl.get(orgaoSessionId);
    if (orgao == null) {
      doForward(Constants.NOT_FOUND_PAGE, request, response);
      return;
    }

    /* adiciono o sessionId na sessão */
    HttpSession ses = request.getSession(true);
    ses.setAttribute(Constants.ID_SESSAO_ORGAO, orgaoSessionId);

    ses.setAttribute("_ORGAO_", new OrgaoDto(orgao));

    /* adiciono um cookie com o id do orgão */
    if (orgaoSessionId != null) {
      Cookie cookie = new Cookie(Constants.ID_SESSAO_ORGAO,
          orgaoSessionId);
      cookie.setPath("/");
      response.addCookie(cookie);
    }

    /*
     * adiciono um cookie com um identificador único para verificação do
     * timeout da sessão
     */
    if (request.getSession().getAttribute(Constants.PA_FUNCIONARIO) != null) {
      Cookie cookie = new Cookie(Constants.PA_EXPIRE, String
          .valueOf(System.currentTimeMillis()));
      cookie.setPath("/");
      response.addCookie(cookie);
    }

    /* adiciono o layout à sessão */
    setOrgaoLayout(request, orgao);

    try {

      ConfiguracoesOrgao configuracaoes = orgao.getConfiguracoes();
      request.setAttribute("configuracoes", configuracaoes);

      if (configuracaoes.getNotificacaoEmail() != null
          && configuracaoes.getNotificacaoEmail().equals("S")) {

        if ((OuvidoriaScheduler.sched == null)
            || (OuvidoriaScheduler.sched != null && !OuvidoriaScheduler.sched
                .isStarted())) {

          OuvidoriaScheduler.init(request);

        }
      }

    } catch (SchedulerException se) {

      se.printStackTrace();

    } catch (Exception e) {

      e.printStackTrace();
    }

    super.process(request, response);
  }

  /**
   * @param request
   * @param orgao
   */
  private void setOrgaoLayout(HttpServletRequest request, Orgao orgao) {

    LayoutBean layoutBean = (LayoutBean) request.getSession().getAttribute(
        Constants.SS_LAYOUT);

    if (layoutBean == null) {
      layoutBean = new LayoutBean();
    }

    layoutBean.setDiretorioOrgao(orgao.getConfiguracoes()
        .getNomeDiretorioOrgao());

    layoutBean.setEsquemaCores("estilos/".concat(orgao.getConfiguracoes()
        .getEsquemaCoresLayout()));

    layoutBean.setCorCabecalhoBanner(orgao.getConfiguracoes()
        .getCorCabecalhoBanner());

    layoutBean.setCorCabecalhoLogo(orgao.getConfiguracoes()
        .getCorCabecalhoLogo());

    layoutBean.setImagem3("/"
        + orgao.getConfiguracoes().getNomeDiretorioOrgao() + "/images/"
        + orgao.getConfiguracoes().getImagem3());

    layoutBean.setImagem4("/"
        + orgao.getConfiguracoes().getNomeDiretorioOrgao() + "/images/"
        + orgao.getConfiguracoes().getImagem4());

    layoutBean.setImagem5("/"
        + orgao.getConfiguracoes().getNomeDiretorioOrgao() + "/images/"
        + orgao.getConfiguracoes().getImagem5());

    layoutBean.setImagemBanner("/"
        + orgao.getConfiguracoes().getNomeDiretorioOrgao() + "/images/"
        + orgao.getConfiguracoes().getImagemBanner());

    layoutBean.setImagemLogo("/"
        + orgao.getConfiguracoes().getNomeDiretorioOrgao() + "/images/"
        + orgao.getConfiguracoes().getImagemLogo());

    layoutBean.setDescricaoImagem3(orgao.getConfiguracoes()
        .getDescricaoImagem3());

    layoutBean.setDescricaoImagem4(orgao.getConfiguracoes()
        .getDescricaoImagem4());

    layoutBean.setDescricaoImagem5(orgao.getConfiguracoes()
        .getDescricaoImagem5());

    layoutBean.setDescricaoImagemBanner(orgao.getConfiguracoes()
        .getDescricaoImagemBanner());

    layoutBean.setDescricaoImagemLogo(orgao.getConfiguracoes()
        .getDescricaoImagemLogo());

    layoutBean.setLinkImagem3(orgao.getConfiguracoes().getLinkImagem3());

    layoutBean.setLinkImagem4(orgao.getConfiguracoes().getLinkImagem4());

    layoutBean.setLinkImagem5(orgao.getConfiguracoes().getLinkImagem5());

    layoutBean.setLinkImagemBanner(orgao.getConfiguracoes()
        .getLinkImagemBanner());

    layoutBean.setLinkImagemLogo(orgao.getConfiguracoes()
        .getLinkImagemLogo());

    layoutBean.setNomeExibicaoOrgao(orgao.getConfiguracoes()
        .getNomeExibicaoOrgao());

    request.getSession().setAttribute(Constants.SS_LAYOUT, layoutBean);
  }

  /**
   * @param request
   * @param session
   */

  private void limpaSessao(HttpServletRequest request, HttpSession session) {

    session.removeAttribute("chkpend");
    session.removeAttribute("chkand");
    session.removeAttribute("chkatraso");
    session.removeAttribute("chkcritico");
    session.removeAttribute("txtDatIni");
    session.removeAttribute("txtDatFim");
    session.removeAttribute("txtTipoMsg");
    session.removeAttribute("txtAssunto");
    session.removeAttribute("txtTitulo");
    session.removeAttribute("ordenacao");
    session.removeAttribute("txtProtocolo");
    session.removeAttribute("possuiPesquisa");

  }

  protected boolean processRoles(HttpServletRequest request,
      HttpServletResponse response, ActionMapping mapping)
      throws IOException, ServletException {

    String role = null;

    ArrayList regras = new ArrayList();

    /*
     * Trecho responsável por pegar as regras de acesso definidas no Struts
     * Este tratamento foi feito para permitir/restringir acesso a mais de
     * uma opção por url. No caso Reclassificar Assunto e Mensagem através
     * da url reclassificar
     */
    if (mapping.getRoles() != null) {

      String[] roles = mapping.getRoles().split(",");

      for (int cont = 0; cont < roles.length; cont++) {

        try {

          new Long(roles[cont]);

        } catch (Exception e) {

          e.printStackTrace();
          throw new ServletException(
              "Código de regra de acesso inválido.");
        }

        regras.add(roles[cont]);
        role = (String) regras.get(0);// Pega a primeira regra(role)
      }
    }

    OrgaoCtrl orgaoCtrl = new OrgaoCtrl(daoFactory);

    /* Não existe bloqueio para esta acão */
    if (role == null || role.trim().length() == 0) {
      return true;
    }

    request.setAttribute(Constants.SR_FUNCIONALIDADE, role);

    /*Coloca a funcionalidade na sessão para
     * ser recuperada na tela de ajuda
     */
    request.getSession().setAttribute(Constants.SR_FUNCIONALIDADE, role);

    ControleAcessoCtrl controleAcessoCtrl = new ControleAcessoCtrl(
        daoFactory);

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

    /* verifico a vigência do órgão para acionamento e consulta resposta */
    String redirect = null;

    int vigenciaOrgao = controleAcessoCtrl.verificaVigenciaOrgao(orgao,
        role);

    switch (vigenciaOrgao) {
    case ControleAcessoCtrl.VG_FORA_PERIODO_ACIONAMENTO:
      redirect = Constants.CAD_ACNMNT_FORA_VIGENCIA_PAGE;
      break;
    case ControleAcessoCtrl.VG_FORA_PERIODO_CONSULTA_RESPOSTA:
      redirect = Constants.CON_RESPTA_FORA_VIGENCIA_PAGE;
      break;
    case ControleAcessoCtrl.VG_FORA_PERIODO_OPERACAO:
      redirect = Constants.CAD_OPERACAO_FORA_VIGENCIA_PAGE;
      break;
    default:
      // DO NOTHING
    }

    if (redirect != null) {

      controleAcessoCtrl = null;

      /* retiro o controle do struts */
      doForward(redirect, request, response);
      return false;
    }

    /* verifico o acesso do funcionario ao sistema */
    int possuiAcesso = ControleAcessoCtrl.CA_NECESSARIO_LOGIN;

    try {

      Long funcionarioId = (Long) request.getSession().getAttribute(
          Constants.PA_FUNCIONARIO);

      FuncionarioCtrl funcionarioCtrl = new FuncionarioCtrl(daoFactory);

      Funcionario funcionario = (Funcionario) funcionarioCtrl
          .get(funcionarioId);

      possuiAcesso = controleAcessoCtrl.permiteAcesso(orgao, funcionario,
          regras);

    } catch (DaoException e) {
      System.out.println(e.getMessage());
      e.printStackTrace();

      throw new ServletException(e);
    }

    redirect = Constants.LOGIN_ACTION;

    switch (possuiAcesso) {
    case ControleAcessoCtrl.CA_ACESSO_PERMITIDO:
      request.getSession().setAttribute(Constants.SR_FUNCIONALIDADES,
          regras);
      return true;
    case ControleAcessoCtrl.CA_ACESSO_NEGADO:
      redirect = Constants.DENIED_ACCESS_ACTION;
      break;
    case ControleAcessoCtrl.CA_NECESSARIO_LOGIN:
      redirect = Constants.LOGIN_ACTION;
      break;
    case ControleAcessoCtrl.VG_FORA_PERIODO_OPERACAO:
      redirect = Constants.CAD_OPERACAO_FORA_VIGENCIA_PAGE;
      break;
    default:
      redirect = Constants.LOGIN_ACTION;
    }

    controleAcessoCtrl = null;

    /* retiro o funcionario da sessão */
    request.getSession().removeAttribute(Constants.PA_FUNCIONARIO);

    /* retiro o controle do struts */
    doForward(redirect, request, response);

    return false;
  }

  protected Action processActionCreate(HttpServletRequest request,
      HttpServletResponse response, ActionMapping mapping)
      throws IOException {

    Action instance = super.processActionCreate(request, response, mapping);
    if (instance instanceof Support) {
      ((Support) instance).setDaoFactory(daoFactory);
    }
    return (instance);
  }

  protected Logger getLog() {

    if (this.log == null) {
      this.log = Logger
          .getLogger("<------ Processador de Requisições ------> ");
    }
    return this.log;
  }

}
TOP

Related Classes of br.gov.serpro.ouvidoria.struts.CustomRequestProcessor

TOP
Copyright © 2015 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.