Package ecar.dao

Source Code of ecar.dao.PontoCriticoDao

/*
* Criado em 18/01/2005
*/

package ecar.dao;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Timestamp;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;

import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Transaction;

import comum.database.Dao;
import comum.util.ConstantesECAR;
import comum.util.Data;
import comum.util.FileUpload;
import comum.util.Pagina;
import comum.util.Util;

import ecar.exception.ECARException;
import ecar.historico.Historico;
import ecar.historico.HistoricoPtc;
import ecar.login.SegurancaECAR;
import ecar.pojo.AtributosAtb;
import ecar.pojo.Cor;
import ecar.pojo.EstruturaAtributoEttat;
import ecar.pojo.EstruturaEtt;
import ecar.pojo.FuncaoFun;
import ecar.pojo.HistoricoPtcH;
import ecar.pojo.ItemEstruturaIett;
import ecar.pojo.ObjetoEstrutura;
import ecar.pojo.PaiFilho;
import ecar.pojo.PontoCriticoPtc;
import ecar.pojo.PontoCriticoSisAtributoPtcSatb;
import ecar.pojo.PontocriticoCorPtccor;
import ecar.pojo.SisAtributoSatb;
import ecar.pojo.SisGrupoAtributoSga;
import ecar.pojo.TipoFuncAcompTpfa;
import ecar.pojo.TipoValor;
import ecar.pojo.TipoValorEnum;
import ecar.pojo.UsuarioUsu;
import ecar.pojo.historico.HistoricoPontoCriticoPtc;
import ecar.pojo.historico.HistoricoXml;
import ecar.taglib.util.Input;
import ecar.util.Dominios;

/**
* @author felipev
*/
public class PontoCriticoDao extends Dao {
 
  private Historico<HistoricoPontoCriticoPtc, PontoCriticoPtc> historico = null;
 
 
        /**
         *
         * @param request
         */
        public PontoCriticoDao(HttpServletRequest request) {
    super();
    this.request = request;
    historico = new Historico<HistoricoPontoCriticoPtc, PontoCriticoPtc>() {};
  }
 
  /**
   * Retorna os Pontos Cr�ticos ativos de um Item
   *
   * @param itemEstrutura
   * @return Collection de Objetos PontoCriticoPtc
   * @throws ECARException
   */
  public Collection getAtivos(ItemEstruturaIett itemEstrutura) throws ECARException {
    try {
      Query query = this.getSession().createQuery(
              "select ptc from PontoCriticoPtc ptc" + " where ptc.itemEstruturaIett.codIett = :codIett"
                      + " and (ptc.indExcluidoPtc <> 'S' or  ptc.indExcluidoPtc is null) " + " and ptc.indAtivoPtc = 'S'");
      query.setLong("codIett", itemEstrutura.getCodIett().longValue());
      return query.list();
    }
    catch (HibernateException e) {
      this.logger.error(e);
      throw new ECARException(e);
    }
  }
 
  /**
   * Retorna os Pontos Cr�ticos ativos de um Item, ordenados de forma decrescente pela data limite
   * e filtrados pelo tipo caso informado.
   *
   * @param itemEstrutura
   * @param codSgaPontoCritico
   * @return Collection de Objetos PontoCriticoPtc
   * @throws ECARException
   */
  public Collection getPontosCriticosAtivosOrdenadosDataLimite(ItemEstruturaIett itemEstrutura, String codSgaPontoCritico) throws ECARException {
    try {
      Query query = null;
     
      Collection pontosCriticos;
     
      //Pesquisa primeiro apenas pontos cr�ticos com data limite
      if (codSgaPontoCritico == null || "".equals(codSgaPontoCritico)) {
        query = this.getSession().createQuery(
                "select ptc from PontoCriticoPtc ptc" + " where ptc.itemEstruturaIett.codIett = :codIett"
                        + " and (ptc.indExcluidoPtc <> 'S' or  ptc.indExcluidoPtc is null) " + " and ptc.indAtivoPtc = 'S'"
                        + " and dataLimitePtc <> null order by dataLimitePtc desc ");
        query.setLong("codIett", itemEstrutura.getCodIett().longValue());
      }
      else {
        query = this.getSession().createQuery(
                "select ptc from PontoCriticoPtc ptc" + " where ptc.itemEstruturaIett.codIett = :codIett"
                        + " and (ptc.indExcluidoPtc <> 'S' or  ptc.indExcluidoPtc is null) "
                        + " and ptc.indAtivoPtc = 'S' and ptc.sisAtributoTipo.codSatb = :codSatb"
                        + " and dataLimitePtc <> null order by dataLimitePtc desc ");
        query.setLong("codIett", itemEstrutura.getCodIett().longValue());
        query.setLong("codSatb", Long.valueOf(codSgaPontoCritico));
      }
     
      pontosCriticos = query.list();
     
      //Pesquisa pontos cr�ticos sem data limite para que estes fiquem no fim da lista ordenada
      if (codSgaPontoCritico == null || "".equals(codSgaPontoCritico)) {
        query = this.getSession().createQuery(
                "select ptc from PontoCriticoPtc ptc" + " where ptc.itemEstruturaIett.codIett = :codIett"
                        + " and (ptc.indExcluidoPtc <> 'S' or  ptc.indExcluidoPtc is null) " + " and ptc.indAtivoPtc = 'S'"
                        + " and dataLimitePtc = null ");
        query.setLong("codIett", itemEstrutura.getCodIett().longValue());
      }
      else {
        query = this.getSession().createQuery(
                "select ptc from PontoCriticoPtc ptc" + " where ptc.itemEstruturaIett.codIett = :codIett"
                        + " and (ptc.indExcluidoPtc <> 'S' or  ptc.indExcluidoPtc is null) "
                        + " and ptc.indAtivoPtc = 'S' and ptc.sisAtributoTipo.codSatb = :codSatb"
                        + " and dataLimitePtc = null ");
       
        query.setLong("codIett", itemEstrutura.getCodIett().longValue());
        query.setLong("codSatb", Long.valueOf(codSgaPontoCritico));
      }
     
      pontosCriticos.addAll(query.list());
     
      return pontosCriticos;
    }
    catch (HibernateException e) {
      this.logger.error(e);
      throw new ECARException(e);
    }
  }
  /**
   * Retorna os Pontos Cr�ticos ativos de um Item, ordenados de forma decrescente pela data limite.
   *
   * @param itemEstrutura
   * @return Collection de Objetos PontoCriticoPtc
   * @throws ECARException
   */
  public Collection getPontosCriticosAtivosOrdenadosDataLimite(ItemEstruturaIett itemEstrutura, boolean recuperarPontosCriticosSemDataLimiteInformada) throws ECARException {
    try {
      Query query = null;     
      Collection pontosCriticos;
 
      //Pesquisa primeiro apenas pontos cr�ticos com data limite
      query = this.getSession().createQuery(
              "select ptc from PontoCriticoPtc ptc" + " where ptc.itemEstruturaIett.codIett = :codIett"
                      + " and (ptc.indExcluidoPtc <> 'S' or  ptc.indExcluidoPtc is null) " + " and ptc.indAtivoPtc = 'S'"
                      + " and dataLimitePtc <> null order by dataLimitePtc desc");
      query.setLong("codIett", itemEstrutura.getCodIett().longValue());
     
      pontosCriticos = query.list();
     
      if (recuperarPontosCriticosSemDataLimiteInformada) {
        //Pesquisa pontos cr�ticos sem data limite para que estes fiquem no fim da lista ordenada
        query = this.getSession().createQuery(
                "select ptc from PontoCriticoPtc ptc" + " where ptc.itemEstruturaIett.codIett = :codIett"
                        + " and (ptc.indExcluidoPtc <> 'S' or  ptc.indExcluidoPtc is null) " + " and ptc.indAtivoPtc = 'S'"
                        + " and dataLimitePtc = null");
        query.setLong("codIett", itemEstrutura.getCodIett().longValue());
       
        pontosCriticos.addAll(query.list());
      }
      return pontosCriticos;
    }
    catch (HibernateException e) {
      this.logger.error(e);
      throw new ECARException(e);
    }
  }
 
  /**
   * Retorna os Pontos Cr�ticos ativos de um Item
   *
   * @param itemEstrutura
   * @return Collection de Objetos PontoCriticoPtc
   * @throws ECARException
   */
  public Collection getPontosCriticosOrdenadoDataLimite(ItemEstruturaIett itemEstrutura, String ordem) throws ECARException {
    try {
     
      String ordenacao;
     
      if(ordem != null && ordem.equals("pontoCriticoCorPtccores")){
        //se o atributo escolhido com primeiro na lista s�o as cores
        //ordena pela descri��o evitando um erro de consulta no hibernate
        //que faz que com o ecar seja derrubado.
        ordenacao = " order by ptc.descricaoPtc asc, ptc.indAtivoPtc desc, dataLimitePtc desc";
      }else if (ordem != null){
        ordenacao = " order by ptc."+ordem+" asc, ptc.indAtivoPtc desc, dataLimitePtc desc";
      }else {
        ordenacao = " order by ptc.indAtivoPtc desc, dataLimitePtc desc";
      }
     
      Query query = this.getSession().createQuery(
              "select ptc from PontoCriticoPtc ptc" + " where ptc.itemEstruturaIett.codIett = :codIett"
                      + " and (ptc.indExcluidoPtc <> 'S' or  ptc.indExcluidoPtc is null) "
                      + ordenacao);
      query.setLong("codIett", itemEstrutura.getCodIett().longValue());
      return query.list();
    }
    catch (HibernateException e) {
      this.logger.error(e);
      throw new ECARException(e);
    }
  }

  public Collection getPontosCriticosOrdenadoDataLimite(ItemEstruturaIett itemEstrutura) throws ECARException {
      return getPontosCriticosOrdenadoDataLimite(itemEstrutura, null);
  }
 
  /**
   * Retorna os Pontos Cr�ticos ativos de um Item
   *
   * @param itemEstrutura
   * @return Collection de Objetos PontoCriticoPtc
   * @throws ECARException
   */
  public Collection getPontosCriticosComExcluidosOrdenadoDataLimite(ItemEstruturaIett itemEstrutura) throws ECARException {
    try {
      Query query = this.getSession().createQuery(
              "select ptc from PontoCriticoPtc ptc" + " where ptc.itemEstruturaIett.codIett = :codIett"                     
                      + " order by ptc.indAtivoPtc desc, dataLimitePtc desc ");
      query.setLong("codIett", itemEstrutura.getCodIett().longValue());
      return query.list();
    }
    catch (HibernateException e) {
      this.logger.error(e);
      throw new ECARException(e);
    }
  }
 
  /**
   * Retorna os Pontos Cr�ticos ativos de um Item
   *
   * @param itemEstrutura
         * @param codSgaPontoCritico
         * @return Collection de Objetos PontoCriticoPtc
   * @throws ECARException
   */
  public Collection getAtivos(ItemEstruturaIett itemEstrutura, String codSgaPontoCritico) throws ECARException {
    try {
      Query query = null;
      if (codSgaPontoCritico == null || "".equals(codSgaPontoCritico)) {
        query = this.getSession().createQuery(
                "select ptc from PontoCriticoPtc ptc" + " where ptc.itemEstruturaIett.codIett = :codIett"
                        + " and (ptc.indExcluidoPtc <> 'S' or  ptc.indExcluidoPtc is null) " + " and ptc.indAtivoPtc = 'S'");
        query.setLong("codIett", itemEstrutura.getCodIett().longValue());
      }
      else {
        query = this.getSession().createQuery(
                "select ptc from PontoCriticoPtc ptc" + " where ptc.itemEstruturaIett.codIett = :codIett"
                        + " and (ptc.indExcluidoPtc <> 'S' or  ptc.indExcluidoPtc is null) "
                        + " and ptc.indAtivoPtc = 'S' and ptc.sisAtributoTipo.codSatb = :codSatb");
        query.setLong("codIett", itemEstrutura.getCodIett().longValue());
        query.setLong("codSatb", Long.valueOf(codSgaPontoCritico));
      }
      return query.list();
    }
    catch (HibernateException e) {
      this.logger.error(e);
      throw new ECARException(e);
    }
  }
 
  /**
   * Retorna os Pontos Cr�ticos inativos de um Item
   *
   * @param itemEstrutura
   * @return Collection de Objetos PontoCriticoPtc
   * @throws ECARException
   */
  public Collection getInativos(ItemEstruturaIett itemEstrutura) throws ECARException {
    try {
      Query query = this.getSession().createQuery(
              "select ptc from PontoCriticoPtc ptc" + " where ptc.itemEstruturaIett.codIett = :codIett"
                      + " and (ptc.indExcluidoPtc <> 'S' or  ptc.indExcluidoPtc is null) " + " and ptc.indAtivoPtc != 'S'");
      query.setLong("codIett", itemEstrutura.getCodIett().longValue());
      return query.list();
    }
    catch (HibernateException e) {
      this.logger.error(e);
      throw new ECARException(e);
    }
  }
 
  /**
   * Constr�i um objeto PontoCritico a partir de atributos passados no request
   *
   * @param request
   * @param pontoCritico
   * @throws ECARException
   */
  public void setPontoCritico(HttpServletRequest request, PontoCriticoPtc pontoCritico) throws ECARException {
    ItemEstruturaIett itemEstrutura = null;
    /*
     * Por padr�o o ponto cr�tico � n�o exclu�do. Se n�o colocar assim salva
     * como nulo
     */
    pontoCritico.setIndExcluidoPtc(Pagina.NAO);
    if (!Pagina.getParamStr(request, "codIett").trim().equals("")) {
      itemEstrutura = (ItemEstruturaIett) this.buscar(ItemEstruturaIett.class, Long.valueOf(Pagina.getParamStr(request, "codIett")));
      pontoCritico.setItemEstruturaIett(itemEstrutura);
    }
//    if (!"".equals(Pagina.getParamStr(request, "codArel"))) {
//      AcompRelatorioArel acompRelatorioArel = (AcompRelatorioArel) this.buscar(AcompRelatorioArel.class, Long.valueOf(Pagina.getParamStr(request,
//              "codArel")));
//      pontoCritico.setAcompRelatorioArel(acompRelatorioArel);
//      if (itemEstrutura == null) {
//        itemEstrutura = acompRelatorioArel.getAcompReferenciaItemAri().getItemEstruturaIett();
//      }
//    }

      //30/01/2010 - areal setado sempre nulo para n�o ocorrer erro na gera��o de per�odos. Esta liga��o n�o deveria existir
      pontoCritico.setAcompRelatorioArel(null);

    if (!"".equals(Pagina.getParamStr(request, "dataIdentificacaoPtc")))
      pontoCritico.setDataIdentificacaoPtc(Pagina.getParamDataBanco(request, "dataIdentificacaoPtc"));
    // if(!"".equals(Pagina.getParamStr(request, "cod")))
    // pontoCritico.setCodPtc(Long.valueOf(Pagina.getParamStr(request,
    // "cod")));
    pontoCritico.setDescricaoPtc(Pagina.getParamStr(request, "descricaoPtc"));
//    if (!"".equals(Pagina.getParamStr(request, "dataLimitePtc")))
      pontoCritico.setDataLimitePtc(Pagina.getParamDataBanco(request, "dataLimitePtc"));
    pontoCritico.setDataSolucaoPtc(Pagina.getParamDataBanco(request, "dataSolucaoPtc"));
    pontoCritico.setDescricaoSolucaoPtc(Pagina.getParamStr(request, "descricaoSolucaoPtc"));
    pontoCritico.setIndAmbitoInternoGovPtc(Pagina.getParamStr(request, "indAmbitoInternoGovPtc"));

    //Colocar o valor da request para indAtivoPtc caso o atributo esteja configurado na estrutura
    //caso constr�rio, colocar o valor default "S" para que o usu�rio n�o inclua pontos cr�ticos j�
    //n�o ativos e estes n�o serem visualizados no gr�fico de gantt
    String indAtivoPtc = Pagina.getParamStr(request, "indAtivoPtc");
       
    AtributosAtb atributo = new AtributosAtb();
    atributo.setNomeAtb("indAtivoPtc");   
    atributo = (AtributosAtb) new AtributoDao(request).pesquisar(atributo, new String[]{"codAtb", "Asc"}).get(0);   
   
    EstruturaAtributoEttat estruturaAtributo = new EstruturaAtributoEttat();
    estruturaAtributo.setAtributosAtb(atributo);   
    estruturaAtributo.setEstruturaEtt(pontoCritico.getItemEstruturaIett().getEstruturaEtt());   
    List estruturaAtributos = new EstruturaAtributoDao(request).pesquisar(estruturaAtributo, new String[]{"", ""});
   
    if (estruturaAtributos != null && estruturaAtributos.size() > 0){
      pontoCritico.setIndAtivoPtc(indAtivoPtc);
    }   
    else{
      pontoCritico.setIndAtivoPtc("S");
    }
   
    if (!"".equals(Pagina.getParamStr(request, "codSgaPontoCritico"))){
      pontoCritico.setSisAtributoTipo((SisAtributoSatb) this.buscar(SisAtributoSatb.class, Long.valueOf(Pagina.getParam(request, "codSgaPontoCritico"))));
    } else {
      pontoCritico.setSisAtributoTipo(null);
    }
    if ((!"".equals(Pagina.getParamStr(request, "usuarioUsu")))) {
      UsuarioUsu usuario = (UsuarioUsu) this.buscar(UsuarioUsu.class, Long.valueOf(Pagina.getParamStr(request, "usuarioUsu")));
      pontoCritico.setUsuarioUsu(usuario);
    }
    else {
      pontoCritico.setUsuarioUsu(null);
    }
    this.setPontoCriticoCor(request, pontoCritico);
    // chama o m�todo para setar os atributos livres do ponto cr�tico
    this.setAtributosLivresPontoCritico(request, pontoCritico);
  }
 
  /**
   * Constr�i um objeto PontoCritico a partir de atributos passados na lista
   *
   * @param request
   * @param pontoCritico
   * @throws ECARException
   */
  // public void setPontoCritico(HttpServletRequest request, List campos,
  // PontoCriticoPtc pontoCritico) throws ECARException{
  // try {
  // ItemEstruturaIett itemEstrutura = null;
  //         
  // itemEstrutura = (ItemEstruturaIett) this.buscar(
  // ItemEstruturaIett.class,
  // Long.valueOf(FileUpload.verificaValorCampo(campos,"codIett")));
  //        
  // pontoCritico.setItemEstruturaIett(itemEstrutura);
  //         
  // if (!"".equals(FileUpload.verificaValorCampo(campos, "codArel"))) {
  // AcompRelatorioArel acompRelatorioArel = (AcompRelatorioArel) this.buscar(
  // AcompRelatorioArel.class,
  // Long.valueOf(FileUpload.verificaValorCampo(campos,"codArel")));
  // pontoCritico.setAcompRelatorioArel(acompRelatorioArel);
  // }
  //         
  // if(!"".equals(FileUpload.verificaValorCampo(campos, "cod")))
  // pontoCritico.setCodPtc(Long.valueOf(FileUpload.verificaValorCampo(campos,
  // "cod")));
  //         
  // if(!"".equals(FileUpload.verificaValorCampo(campos,
  // "dataIdentificacaoPtc")))
  // pontoCritico.setDataIdentificacaoPtc(FileUpload.verificaValorCampoDataBanco(campos,
  // "dataIdentificacaoPtc"));
  //       
  // pontoCritico.setDescricaoPtc(FileUpload.verificaValorCampo(campos,
  // "descricaoPtc"));
  //         
  // if(!"".equals(FileUpload.verificaValorCampo(campos, "dataLimitePtc")))
  // pontoCritico.setDataLimitePtc(FileUpload.verificaValorCampoDataBanco(campos,
  // "dataLimitePtc"));
  //         
  // pontoCritico.setDataSolucaoPtc(FileUpload.verificaValorCampoDataBanco(campos,
  // "dataSolucaoPtc"));
  //         
  // pontoCritico.setDescricaoSolucaoPtc(FileUpload.verificaValorCampo(campos,
  // "descricaoSolucaoPtc"));
  //         
  // pontoCritico.setIndAmbitoInternoGovPtc(FileUpload.verificaValorCampo(campos,
  // "indAmbitoInternoGovPtc"));
  //         
  // pontoCritico.setIndAtivoPtc(FileUpload.verificaValorCampo(campos,
  // "indAtivoPtc"));
  //         
  // if (!"".equals(FileUpload.verificaValorCampo(campos,
  // "codSgaPontoCritico")))
  // pontoCritico
  // .setSisAtributoTipo((SisAtributoSatb) this
  // .buscar(SisAtributoSatb.class, Long
  // .valueOf(FileUpload.verificaValorCampo(campos,
  // "codSgaPontoCritico"))));
  // 
  //         
  // if((!"".equals(FileUpload.verificaValorCampo(campos, "codUsu"))) &&
  // (!"".equals(FileUpload.verificaValorCampo(campos, "dataSolucaoPtc")))){
  // UsuarioUsu usuario = (UsuarioUsu) this.buscar(UsuarioUsu.class,
  // Long.valueOf(FileUpload.verificaValorCampo(campos, "codUsu")));
  // pontoCritico.setUsuarioUsu(usuario);
  // } else {
  // pontoCritico.setUsuarioUsu(null);
  // }
  //         
  // this.setPontoCriticoCor(request, campos, pontoCritico);
  //         
  // } catch (Exception e) {
  // // TODO: handle exception
  // }
  // }
  /**
   * Altera um objeto pontoCritico e salva os registros filhos passados na
   * List
   *
         * @param pontoCritico
         * @param usuario
         * @param request
         * @param historico
   * @throws Exception
   */
  public void alterar(PontoCriticoPtc pontoCritico, HttpServletRequest request, UsuarioUsu usuario, HistoricoPtc historico) throws Exception {
    Transaction tx = null;
    HistoricoPontoCriticoPtc pojoHistorico = new HistoricoPontoCriticoPtc();
    PontoCriticoPtc ptcNegocio = (PontoCriticoPtc) buscar(PontoCriticoPtc.class, pontoCritico.getCodPtc());
    try {
      tx = session.beginTransaction();
      ArrayList objetos = new ArrayList();
      super.inicializarLogBean();
      PontoCriticoPtc pontoCriticoOld = (PontoCriticoPtc) buscar(PontoCriticoPtc.class, Long.valueOf(pontoCritico.getCodPtc()));
      /*** Historico ***/
      historico.gerarHistorico(pontoCriticoOld);
      /*** Historico ***/
      /* apaga os filhos para serem gravados novamente */
      if (pontoCritico.getPontoCriticoCorPtccores() != null) {
        Iterator itAtb = pontoCritico.getPontoCriticoCorPtccores().iterator();
        while (itAtb.hasNext()) {
          PontocriticoCorPtccor ptcCor = (PontocriticoCorPtccor) itAtb.next();
          session.delete(ptcCor);
          objetos.add(ptcCor);
        }
      }
      else
        pontoCritico.setPontoCriticoCorPtccores(new HashSet<PontocriticoCorPtccor>());
      pontoCritico.setPontoCriticoCorPtccores(null);
      /* apaga os filhos para serem gravados novamente */
      if (pontoCritico.getPontoCriticoSisAtributoPtcSatbs() != null && !pontoCritico.getPontoCriticoSisAtributoPtcSatbs().isEmpty()) {
        Iterator itAtb = pontoCritico.getPontoCriticoSisAtributoPtcSatbs().iterator();
        while (itAtb.hasNext()) {
          PontoCriticoSisAtributoPtcSatb pontoCriticoSisAtributoPtcSatb = (PontoCriticoSisAtributoPtcSatb) itAtb.next();
         
                    if(pontoCriticoSisAtributoPtcSatb.getSisAtributoSatb().getSisGrupoAtributoSga().getSisTipoExibicGrupoSteg().getCodSteg() == Input.IMAGEM){
                     
                      String nomeCampo = request.getParameter("a" + pontoCriticoSisAtributoPtcSatb.getSisAtributoSatb().getSisGrupoAtributoSga().getCodSga().toString());
                     
                      if (nomeCampo != null && nomeCampo.equals("")){
                       
                  String fullFile = pontoCriticoSisAtributoPtcSatb.getInformacao();
                 
                  if (fullFile.lastIndexOf("=") != -1)    
                    fullFile = fullFile.substring(fullFile.lastIndexOf("=") + 1);
               
                  File f = new File(fullFile);
                  if( f.exists() )
                    FileUpload.apagarArquivo(fullFile);
                      }
                    }
         
          session.delete(pontoCriticoSisAtributoPtcSatb);
          objetos.add(pontoCriticoSisAtributoPtcSatb);
        }
      }
      else
        pontoCritico.setPontoCriticoSisAtributoPtcSatbs(new HashSet<PontoCriticoSisAtributoPtcSatb>());
      pontoCritico.setPontoCriticoSisAtributoPtcSatbs(null);
      this.setPontoCritico(request, pontoCritico);
      pontoCritico.setUsuarioUsuByCodUsuUltManutPtc(usuario);
      pontoCritico.setDataUltManutencaoPtc(Data.getDataAtual());
      List filhos = new ArrayList();
      if (pontoCritico.getPontoCriticoCorPtccores() != null) {
        filhos.addAll(pontoCritico.getPontoCriticoCorPtccores());
      }
      if (pontoCritico.getPontoCriticoSisAtributoPtcSatbs() != null) {
        for (Object object : pontoCritico.getPontoCriticoSisAtributoPtcSatbs()) {
          PontoCriticoSisAtributoPtcSatb ptcSatb = (PontoCriticoSisAtributoPtcSatb) object;
          ptcSatb.gerarTiposValores();
        }
        filhos.addAll(pontoCritico.getPontoCriticoSisAtributoPtcSatbs());
      }
      session.update(pontoCritico);
      objetos.add(pontoCritico);
      Iterator it = filhos.iterator();
      while (it.hasNext()) {
        PaiFilho object = (PaiFilho) it.next();
        object.atribuirPKPai();
        // salva os filhos
        session.save(object);
        objetos.add(object);
      }
      tx.commit();
      session.merge(pontoCritico);
      pojoHistorico.carregar(pontoCritico);
      tx = session.beginTransaction();
      gerarHistorico(pojoHistorico, Historico.ALTERAR, ((ecar.login.SegurancaECAR) request.getSession().getAttribute("seguranca")).getUsuario());
      tx.commit();
      if (super.logBean != null) {
        super.logBean.setCodigoTransacao(Data.getHoraAtual(false));
        super.logBean.setOperacao("INC_ALT_EXC");
        Iterator itObj = objetos.iterator();
        while (itObj.hasNext()) {
          super.logBean.setObj(itObj.next());
          super.loggerAuditoria.info(logBean.toString());
        }
      }
    }
    catch (HibernateException e) {
      if (tx != null)
        try {
          tx.rollback();
        }
        catch (HibernateException r) {
          this.logger.error(r);
          throw new ECARException("erro.hibernateException");
        }
      this.logger.error(e);
      throw new ECARException("erro.hibernateException");
    }
    catch (ECARException e) {
      this.logger.error(e);
      if (tx != null)
        try {
          tx.rollback();
        }
        catch (HibernateException r) {
          this.logger.error(r);
          throw new ECARException("erro.hibernateException");
        }
      throw e;
    }
  }
 
        /**
         *
         * @param atbLivre
         * @param tiposValores
         * @param funcao
         */
        public void copiarTipoValorSemID(PontoCriticoSisAtributoPtcSatb atbLivre, Set<TipoValor> tiposValores, FuncaoFun funcao) {
    Set listaTiposValores = new HashSet();
    for (TipoValor tipoValor : tiposValores) {
      TipoValor tipoValorInner = new TipoValor();
      tipoValorInner.setConteudo(tipoValor.getConteudo());
      tipoValorInner.setPontoCriticoSisAtributo(atbLivre);
      tipoValorInner.setTipo(tipoValor.getTipo());
      tipoValorInner.setFuncao(funcao);
      listaTiposValores.add(tipoValorInner);
    }
    atbLivre.setTiposValores(listaTiposValores);
  }
 
  /**
   * Altera um objeto estrutura e salva os registros filhos passados na List
   *
   * @param usuario
   * @throws ECARException
   */
  // public void alterar(PontoCriticoPtc pontoCritico, HttpServletRequest
  // request, List campos, UsuarioUsu usuario, HistoricoPtc historico)
  // throws ECARException {
  // Transaction tx = null;
  //
  // try {
  // ArrayList objetos = new ArrayList();
  // super.inicializarLogBean();
  //
  // tx = session.beginTransaction();
  //
  // PontoCriticoPtc pontoCriticoOld = (PontoCriticoPtc) buscar(
  // PontoCriticoPtc.class, Long.valueOf(pontoCritico.getCodPtc()));
  //           
  // /***Historico***/
  // historico.gerarHistorico(pontoCriticoOld);
  // /***Historico***/
  //     
  // /* apaga os filhos para serem gravados novamente */
  // if (pontoCritico.getPontoCriticoCorPtccores() != null) {
  // Iterator itAtb = pontoCritico.getPontoCriticoCorPtccores().iterator();
  // while (itAtb.hasNext()) {
  // PontocriticoCorPtccor ptcCor = (PontocriticoCorPtccor) itAtb
  // .next();
  // session.delete(ptcCor);
  // objetos.add(ptcCor);
  // }
  // }
  // pontoCritico.setPontoCriticoCorPtccores(null);
  //     
  // /* apaga os filhos para serem gravados novamente */
  // if (pontoCritico.getPontoCriticoSisAtributoPtcSatbs() != null) {
  // Iterator itAtb =
  // pontoCritico.getPontoCriticoSisAtributoPtcSatbs().iterator();
  // while (itAtb.hasNext()) {
  // PontoCriticoSisAtributoPtcSatb pontoCriticoSisAtributoPtcSatb =
  // (PontoCriticoSisAtributoPtcSatb) itAtb
  // .next();
  // session.delete(pontoCriticoSisAtributoPtcSatb);
  // objetos.add(pontoCriticoSisAtributoPtcSatb);
  // }
  // }
  // pontoCritico.setPontoCriticoSisAtributoPtcSatbs(null);
  //     
  // this.setPontoCritico(request, campos, pontoCritico);
  //
  // pontoCritico.setUsuarioUsuByCodUsuUltManutPtc(usuario);
  // pontoCritico.setDataUltManutencaoPtc(Data.getDataAtual());
  //     
  // List filhos = new ArrayList();
  // if (pontoCritico.getPontoCriticoCorPtccores() != null)
  // filhos.addAll(pontoCritico.getPontoCriticoCorPtccores());
  //     
  // session.update(pontoCritico);
  // objetos.add(pontoCritico);
  //
  // Iterator it = filhos.iterator();
  //
  // while (it.hasNext()) {
  // PaiFilho object = (PaiFilho) it.next();
  // object.atribuirPKPai();
  // // salva os filhos
  // session.save(object);
  // objetos.add(object);
  // }
  //
  // tx.commit();
  //
  // if (super.logBean != null) {
  // super.logBean.setCodigoTransacao(Data.getHoraAtual(false));
  // super.logBean.setOperacao("INC_ALT_EXC");
  // Iterator itObj = objetos.iterator();
  //
  // while (itObj.hasNext()) {
  // super.logBean.setObj(itObj.next());
  // super.loggerAuditoria.info(logBean.toString());
  // }
  // }
  //
  // } catch (HibernateException e) {
  // if (tx != null)
  // try {
  // tx.rollback();
  // } catch (HibernateException r) {
  // this.logger.error(r);
  // throw new ECARException("erro.hibernateException");
  // }
  // this.logger.error(e);
  // throw new ECARException("erro.hibernateException");
  // } catch (ECARException e) {
  // this.logger.error(e);
  // if (tx != null)
  // try {
  // tx.rollback();
  // } catch (HibernateException r) {
  // this.logger.error(r);
  // throw new ECARException("erro.hibernateException");
  // }
  // throw e;
  // }
  // }
  /**
   * M�todo para criar a cole��o de PtcCor a partir de par�metros passados por
   * request
   *
   * @param request
   * @param pontoCritico
   * @throws ECARException
   */
  public void setPontoCriticoCor(HttpServletRequest request, PontoCriticoPtc pontoCritico) throws ECARException {
    PontocriticoCorPtccor ptcCor = null;
    List setCores = new CorDao(request).listar(Cor.class, new String[] { "ordemCor", "asc" });
    Cor cor = null;
    Iterator itCores = null;
    if (setCores != null)
      itCores = setCores.iterator();
    while (itCores.hasNext()) {
      cor = (Cor) itCores.next();
      ptcCor = new PontocriticoCorPtccor();
      ptcCor.setCor(cor);
      ptcCor.setPontoCriticoPtc(pontoCritico);
      if(request.getParameter("ant_" + cor.getCodCor() )!=null && !"".equals(request.getParameter("ant_" + cor.getCodCor() ))){
        ptcCor.setAntecedenciaPrimEmailPtccor(Integer.valueOf(Pagina.getParamInt(request, "ant_" + cor.getCodCor())));
      }
      if(request.getParameter("freq_" + cor.getCodCor())!=null && !"".equals(request.getParameter("freq_" + cor.getCodCor()))){
        ptcCor.setFrequenciaEnvioEmailPtccor(Integer.valueOf(Pagina.getParamInt(request, "freq_" + cor.getCodCor())));
      }
     
      ptcCor.setIndAtivoEnvioEmailPtccor("S".equals(Pagina.getParamStr(request, "ativo_" + cor.getCodCor()).trim()) ? "S" : "N");
      if (pontoCritico.getPontoCriticoCorPtccores() == null)
        pontoCritico.setPontoCriticoCorPtccores(new HashSet());
      pontoCritico.getPontoCriticoCorPtccores().add(ptcCor);
    }
  }
 
  /**
   * M�todo para criar a cole��o de PtcCor a partir de par�metros passados por
   * request
   *
   * @param request
   * @param pontoCritico
   * @throws ECARException
   */
  // public void setPontoCriticoCor(HttpServletRequest request, List campos,
  // PontoCriticoPtc pontoCritico) throws ECARException {
  // try {
  //     
  //   
  // PontocriticoCorPtccor ptcCor = null;
  // List setCores = new CorDao(request).listar(Cor.class, new
  // String[]{"ordemCor","asc"});
  // Cor cor = null;
  // Iterator itCores = null;
  // 
  // if (setCores != null)
  // itCores = setCores.iterator();
  //     
  // while (itCores.hasNext())
  // {
  // cor = (Cor) itCores.next();
  //       
  // ptcCor = new PontocriticoCorPtccor();
  // ptcCor.setCor(cor);
  // ptcCor.setPontoCriticoPtc(pontoCritico);
  // ptcCor.setAntecedenciaPrimEmailPtccor(Integer.valueOf(FileUpload.verificaValorCampo(campos,
  // "ant_"+ cor.getCodCor())));
  // ptcCor.setFrequenciaEnvioEmailPtccor(Integer.valueOf(FileUpload.verificaValorCampo(campos,
  // "freq_"+ cor.getCodCor())));
  // ptcCor.setIndAtivoEnvioEmailPtccor("S".equals(FileUpload.verificaValorCampo(campos,
  // "ativo["+ cor.getCodCor() +"]").trim())?"S":"N");
  //       
  // if (pontoCritico.getPontoCriticoCorPtccores() == null)
  // pontoCritico.setPontoCriticoCorPtccores(new HashSet());
  // pontoCritico.getPontoCriticoCorPtccores().add(ptcCor);
  // }
  // } catch (Exception e) {
  // // TODO: handle exception
  // }
  // }
  /**
   * Recebe um Array com C�digos de Pontos Criticos. Para cada um dos Pontos
   * Criticos verifica a exist�ncia de apontamentos. Se n�o existirem exclui o
   * Ponto Cr�tico. Se existirem, dispara escobrir quem ser�o os vil�es do
   * pr�ximo longa. Em entrevista � MTV, Michael Caine, o mordomo Alfred, bota
   * lenha na fogueira.uma Exception
   *
   * @param codigosParaExcluir
         * @param usuario
         * @throws ECARException
   */
  public void excluir(String[] codigosParaExcluir, UsuarioUsu usuario) throws ECARException {
    Transaction tx = null;
    HistoricoPontoCriticoPtc pojoHistorico = new HistoricoPontoCriticoPtc();
    try {
      super.inicializarLogBean();
      tx = session.beginTransaction();
      List<PontoCriticoPtc> listaPontoCriticoPtc = new ArrayList<PontoCriticoPtc>();
      for (int i = 0; i < codigosParaExcluir.length; i++) {
        /*if(codigosParaExcluir[i].indexOf(",") != -1){
          throw new ECARException("itemEstrutura.pontoCritico.exclusao.jaExcluidos");
        }*/       
        PontoCriticoPtc pontoCritico = (PontoCriticoPtc) this.buscar(PontoCriticoPtc.class, Long.valueOf(codigosParaExcluir[i]));
        if (pontoCritico.getIndExcluidoPtc() != null && "S".equals(pontoCritico.getIndExcluidoPtc())) {
          throw new ECARException("itemEstrutura.pontoCritico.exclusao.jaExcluidos");
        }
        listaPontoCriticoPtc.add(pontoCritico);
      }
     
      for (PontoCriticoPtc pontoCritico : listaPontoCriticoPtc) {     
      //for (int i = 0; i < codigosParaExcluir.length; i++) {
        //PontoCriticoPtc pontoCritico = (PontoCriticoPtc) this.buscar(PontoCriticoPtc.class, Long.valueOf(codigosParaExcluir[i]));
        if (pontoCritico.getApontamentoApts() != null && pontoCritico.getApontamentoApts().size() > 0) {
          throw new ECARException("itemEstrutura.pontoCritico.exclusao.possuiApontamentos");
        }
        else {
          // PontoCriticoPtc old = (PontoCriticoPtc)
          // pontoCritico.clone();
          PontoCriticoPtc old = (PontoCriticoPtc) buscar(PontoCriticoPtc.class, Long.valueOf(pontoCritico.getCodPtc()));
          pontoCritico.setDataUltManutencaoPtc(Data.getDataAtual());
          pontoCritico.setUsuarioUsuByCodUsuUltManutPtc(usuario);
          pontoCritico.setIndExcluidoPtc(Dominios.SIM);
          /******** Historico *********/
          HistoricoPtc historico = new HistoricoPtc(pontoCritico, HistoricoPtc.exclusao, session, new ConfiguracaoDao(request), request);
          historico.gerarHistorico(old);
          /******** Historico *********/
          pojoHistorico.carregar(pontoCritico);
          if (pontoCritico.getPontoCriticoCorPtccores() == null)
            pojoHistorico.setPontoCriticoCorPtccores(new HashSet<PontocriticoCorPtccor>());
          if (pontoCritico.getPontoCriticoSisAtributoPtcSatbs() == null)
            pojoHistorico.setPontoCriticoSisAtributoPtcSatbs(new HashSet<PontoCriticoSisAtributoPtcSatb>());
          gerarHistorico(pojoHistorico, Historico.EXCLUIR, ((ecar.login.SegurancaECAR) request.getSession().getAttribute("seguranca")).getUsuario());//pojoHistorico.getUsuarioUsu());//((ecar.login.SegurancaECAR) request.getSession().getAttribute("seguranca")).getUsuario());
          session.update(pontoCritico);
        }
      }
      tx.commit();
      if (super.logBean != null) {
        super.logBean.setCodigoTransacao(Data.getHoraAtual(false));
        super.logBean.setOperacao("EXC");
      }
    }
    catch (HibernateException e) {
      if (tx != null)
        try {
          tx.rollback();
        }
        catch (HibernateException r) {
          this.logger.error(r);
          throw new ECARException("erro.hibernateException");
        }
      this.logger.error(e);
      throw new ECARException("erro.hibernateException");
    }
  }
 
  /**
   * Salva um registro de POnto Cr�tico
   *
   * @param pontoCritico
         * @param usuarioUsu
         * @throws ECARException
   */
  public void salvar(PontoCriticoPtc pontoCritico, UsuarioUsu usuarioUsu) throws ECARException {
    super.inicializarLogBean();
    HistoricoPontoCriticoPtc pojoHistorico = new HistoricoPontoCriticoPtc();
    Transaction tx = null;
    try {
      tx = session.beginTransaction();
      pontoCritico.setDataInclusaoPtc(Data.getDataAtual());
      pontoCritico.setUsuarioUsuInclusao(usuarioUsu);
      pontoCritico.setIndExcluidoPtc("N");
      session.save(pontoCritico);
      pojoHistorico.carregar(pontoCritico);
      List filhos = new ArrayList();
      if (pontoCritico.getPontoCriticoCorPtccores() != null) {
        filhos.addAll(pontoCritico.getPontoCriticoCorPtccores());
      }
      if (pontoCritico.getPontoCriticoSisAtributoPtcSatbs() != null) {
        filhos.addAll(pontoCritico.getPontoCriticoSisAtributoPtcSatbs());
      }
      if (pontoCritico.getPontoCriticoSisAtributoPtcSatbs() != null) {
        Set listaPtcSisAtributo = pontoCritico.getPontoCriticoSisAtributoPtcSatbs();
        // C�digo antigo
        // filhos.addAll(pontoCritico.getPontoCriticoSisAtributoPtcSatbs());
        filhos.addAll(listaPtcSisAtributo);
        FuncaoDao funcaoDao = new FuncaoDao(request);
        FuncaoFun funcao = funcaoDao.getFuncaoPontosCriticos();
        for (Iterator it = listaPtcSisAtributo.iterator(); it.hasNext();) {
          PontoCriticoSisAtributoPtcSatb ptcSisAtributo = (PontoCriticoSisAtributoPtcSatb) it.next();
          SisAtributoSatb sisAtributo = ptcSisAtributo.getSisAtributoSatb();
          // Caso o tipo de valida��o seja uma das tr�s abaixo, ser�
          // gerado um c�digo incremental.
          if (sisAtributo != null && (sisAtributo.isAtributoAutoIcremental() || sisAtributo.isAtributoContemMascara())) {
            ItemEstruturaDao itemEstruturaDao = new ItemEstruturaDao(request, session);
            itemEstruturaDao.geraValorIncremental(ptcSisAtributo, sisAtributo, funcao, ptcSisAtributo.getPontoCriticoPtc().getItemEstruturaIett()
                    .getEstruturaEtt(), null);
          }
        }
      }
      Iterator it = filhos.iterator();
      while (it.hasNext()) {
        PaiFilho object = (PaiFilho) it.next();
        object.atribuirPKPai();
        // salva os filhos
        session.save(object);
        // objetosInseridos.add(object);
      }
      gerarHistorico(pojoHistorico, Historico.INCLUIR, ((ecar.login.SegurancaECAR) request.getSession().getAttribute("seguranca")).getUsuario());
      if (logBean != null) {
        logBean.setCodigoTransacao(Data.getHoraAtual(false));
        logBean.setOperacao("INC");
        Iterator it2 = filhos.iterator();
        while (it2.hasNext()) {
          logBean.setObj(it2.next());
          loggerAuditoria.info(logBean.toString());
        }
      }
      tx.commit();
    }
    catch (ECARException e){
      if (tx != null)
        try {
          tx.rollback();
        }
        catch (HibernateException r) {
          this.logger.error(r);
          throw new ECARException("erro.hibernateException");
        }
      throw e;
    }
    catch (HibernateException e) {
      if (tx != null)
        try {
          tx.rollback();
        }
        catch (HibernateException r) {
          this.logger.error(r);
          throw new ECARException("erro.hibernateException");
        }
      this.logger.error(e);
      throw new ECARException("erro.hibernateException");
    }
    catch (Exception e) {
      if (tx != null)
        tx.rollback();
      e.printStackTrace();
      this.logger.error(e);
      throw new ECARException("erro.hibernateException");
    }
  }
 
  /**
   * @param item
   * @return Collection
   * @throws ECARException
   */
  public Collection getPontosCriticosSolucionadosOrdenadoDataLimite(ItemEstruturaIett item, String ordem) throws ECARException {
    try {
     
      String ordenacao;
     
      if (ordem != null){
       
        ordenacao = " order by ptc."+ordem+" asc, ptc.indAtivoPtc desc, dataLimitePtc desc";
      }
      else
      {
        ordenacao = " order by ptc.indAtivoPtc desc, dataLimitePtc desc ";
      }

     
      Query query = this.getSession().createQuery(
              "select ptc from PontoCriticoPtc ptc" + " where ptc.itemEstruturaIett.codIett = :codIett" + " and ptc.itemEstruturaIett.indAtivoIett = 'S'"
                      + " and (ptc.indExcluidoPtc <> 'S' or  ptc.indExcluidoPtc is null) "
                      + " and ptc.dataSolucaoPtc is not null " + ordenacao);
      query.setLong("codIett", item.getCodIett().longValue());
      return query.list();
    }
    catch (HibernateException e) {
      this.logger.error(e);
      throw new ECARException(e);
    }
  }
 
  public Collection getPontosCriticosSolucionadosOrdenadoDataLimite(ItemEstruturaIett item) throws ECARException {
    return getPontosCriticosSolucionadosOrdenadoDataLimite(item, null);
  }
 
  /**
   * @param item
   * @return Collection
   * @throws ECARException
   */
  public Collection getPontosCriticosSolucionados(ItemEstruturaIett item) throws ECARException {
    try {
      Query query = this.getSession().createQuery(
              "select ptc from PontoCriticoPtc ptc" + " where ptc.itemEstruturaIett.codIett = :codIett" + " and ptc.itemEstruturaIett.indAtivoIett = 'S'"
                      + " and (ptc.indExcluidoPtc <> 'S' or  ptc.indExcluidoPtc is null) " + " and ptc.indAtivoPtc = 'S'"
                      + " and ptc.dataSolucaoPtc is not null");
      query.setLong("codIett", item.getCodIett().longValue());
      return query.list();
    }
    catch (HibernateException e) {
      this.logger.error(e);
      throw new ECARException(e);
    }
  }
 
  /**
   * @param item
   * @return Collection
   * @throws ECARException
   */
  public Collection getPontosCriticosNaoSolucionadosOrdenadoDataLimite(ItemEstruturaIett item, String ordem) throws ECARException {
    try {
     
      String ordenacao;
     
      if (ordem != null){
       
        ordenacao = " order by ptc."+ordem+" asc, ptc.indAtivoPtc desc, dataLimitePtc desc";
      }
      else
      {
        ordenacao = " order by ptc.indAtivoPtc desc, dataLimitePtc desc ";
      }
     
     
      Query query = this.getSession().createQuery(
              "select ptc from PontoCriticoPtc ptc" + " where ptc.itemEstruturaIett.codIett = :codIett" + " and ptc.itemEstruturaIett.indAtivoIett = 'S'"
                      + " and (ptc.indExcluidoPtc <> 'S' or  ptc.indExcluidoPtc is null) "
                      + " and ptc.dataSolucaoPtc is null " + ordenacao);
      query.setLong("codIett", item.getCodIett().longValue());
      return query.list();
    }
    catch (HibernateException e) {
      this.logger.error(e);
      throw new ECARException(e);
    }
  }
 
  public Collection getPontosCriticosNaoSolucionadosOrdenadoDataLimite(ItemEstruturaIett item) throws ECARException {
    return   getPontosCriticosNaoSolucionadosOrdenadoDataLimite(item, null);
  }
 
  /**
   * @param item
   * @return Collection
   * @throws ECARException
   */
  public Collection getPontosCriticosNaoSolucionados(ItemEstruturaIett item) throws ECARException {
    try {
      Query query = this.getSession().createQuery(
              "select ptc from PontoCriticoPtc ptc" + " where ptc.itemEstruturaIett.codIett = :codIett" + " and ptc.itemEstruturaIett.indAtivoIett = 'S'"
                      + " and (ptc.indExcluidoPtc <> 'S' or  ptc.indExcluidoPtc is null) " + " and ptc.indAtivoPtc = 'S'"
                      + " and ptc.dataSolucaoPtc is null");
      query.setLong("codIett", item.getCodIett().longValue());
      return query.list();
    }
    catch (HibernateException e) {
      this.logger.error(e);
      throw new ECARException(e);
    }
  }
 
  /**
   * Verifica datas ultrapassadas
   *
   * @param lista
   * @return boolean
   */
  public boolean verificaDatasUltrapassadas(Collection lista) {
    // verificar os pontos cr�ticos
    if (lista != null && lista.size() > 0) {
      Iterator it = lista.iterator();
      while (it.hasNext()) {
        PontoCriticoPtc pontoCritico = (PontoCriticoPtc) it.next();
        Calendar dataAtual = Calendar.getInstance();
        dataAtual.clear(Calendar.HOUR);
        dataAtual.clear(Calendar.HOUR_OF_DAY);
        dataAtual.clear(Calendar.MINUTE);
        dataAtual.clear(Calendar.SECOND);
        dataAtual.clear(Calendar.MILLISECOND);
        dataAtual.clear(Calendar.AM_PM);
        if (pontoCritico.getDataLimitePtc()!=null) {
          Calendar dataLimite = Calendar.getInstance();
          dataLimite.setTime(pontoCritico.getDataLimitePtc());
          dataLimite.clear(Calendar.HOUR);
          dataLimite.clear(Calendar.HOUR_OF_DAY);
          dataLimite.clear(Calendar.MINUTE);
          dataLimite.clear(Calendar.SECOND);
          dataLimite.clear(Calendar.MILLISECOND);
          dataLimite.clear(Calendar.AM_PM);
          if (dataAtual.after(dataLimite) && pontoCritico.getDataSolucaoPtc() == null) {
            return true;
          }
        }
      }
    }
    return false;
  }
 
  /**
   * @param pontoCritico
   * @param data
   * @return String[]
   * @throws ECARException
   */
  public String[] getRelogioNaData(PontoCriticoPtc pontoCritico, Date data) throws ECARException {
    String corRelogio = "Branco";
    String descRelogio = "Data registrada (Nenhuma a��o requerida)";
    int diasAntecedencia;
    Date dataCorrente = data;
    String dataCorrStr = Data.parseDate(dataCorrente);
    Date dataLimitePtc = pontoCritico.getDataLimitePtc();
    String dataLimiteStr = Data.parseDate(dataLimitePtc);
    if ("S".equals(pontoCritico.getIndAtivoPtc())) {
      if (pontoCritico.getDataSolucaoPtc() != null) {
        corRelogio = "Checked";
        descRelogio = "Solucionado";
      }
      else
        if (dataLimitePtc != null) {
          if ((dataLimitePtc.before(dataCorrente)) || (dataLimiteStr.equals(dataCorrStr))) {
            corRelogio = "PretoFixo";
            descRelogio = "Data Limite Ultrapassada";
          }
          // Caso contr�rio, itera-se buscando qual o per�odo de envio
          // visando descobrir qual o per�odo mais 'grave' que se
          // encaixa
          // nos dias de anteced�ncia que restam
          else {
            List listPtcCor = this.ordenaSet(pontoCritico.getPontoCriticoCorPtccores(), "this.antecedenciaPrimEmailPtccor", "asc");
            Iterator itPtcCor = listPtcCor.iterator();
            boolean encontrouLimite = false;
            while ((itPtcCor.hasNext()) && (!encontrouLimite)) {
              PontocriticoCorPtccor ptcCor = (PontocriticoCorPtccor) itPtcCor.next();
              if (ptcCor.getAntecedenciaPrimEmailPtccor() == null)
                diasAntecedencia = 0;
              else
                diasAntecedencia = ptcCor.getAntecedenciaPrimEmailPtccor().intValue();
              Date dataComparacao = Data.addDias(diasAntecedencia, dataCorrente);
              String dataCompStr = Data.parseDate(dataComparacao);
              // Ap�s definir qual � a data que ser� comparada,
              // verifica-se
              // se esta se enquadra no PtcCor atual.O loop while
              // � interrompido quando isto � feito.
              if ((dataComparacao.after(dataLimitePtc)) || (dataCompStr.equals(dataLimiteStr))) {
                if (diasAntecedencia > 0) {
                  corRelogio = ptcCor.getCor().getNomeCor();
                  descRelogio = ptcCor.getCor().getSignificadoCor();
                  encontrouLimite = true;
                }
              }
            }// fim do while
          } // fim do if - else Preto
        }
    }
    else if ("N".equals(pontoCritico.getIndAtivoPtc())){
      corRelogio = "Proibido";
      descRelogio = "Cancelado";
    }
    String[] retorno = { corRelogio, descRelogio };
    return (retorno);
  }
 
        /**
         *
         * @param pontoCritico
         * @param data
         * @return
         * @throws ECARException
         */
        public String[] getRelogioNaData(HistoricoPontoCriticoPtc pontoCritico, Date data) throws ECARException {
    String corRelogio = "Branco";
    String descRelogio = "Data registrada (Nenhuma a��o requerida)";
    int diasAntecedencia;
    Date dataCorrente = data;
    String dataCorrStr = Data.parseDate(dataCorrente);
    Date dataLimitePtc = pontoCritico.getDataLimitePtc();
    String dataLimiteStr = Data.parseDate(dataLimitePtc);
    if ("S".equals(pontoCritico.getIndAtivoPtc())) {
      if (pontoCritico.getDataSolucaoPtc() != null) {
        corRelogio = "Checked";
        descRelogio = "Solucionado";
      }
      else
        if (dataLimitePtc != null) {
          if ((dataLimitePtc.before(dataCorrente)) || (dataLimiteStr.equals(dataCorrStr))) {
            corRelogio = "PretoFixo";
            descRelogio = "Data Limite Ultrapassada";
          }
          // Caso contr�rio, itera-se buscando qual o per�odo de envio
          // visando descobrir qual o per�odo mais 'grave' que se
          // encaixa
          // nos dias de anteced�ncia que restam
          else {
           
//            List listPtcCor = this.ordenaList(Util.converteParaList(pontoCritico.getPontoCriticoCorPtccores()), "this.antecedenciaPrimEmailPtccor");
            List listPtcCor = this.ordenaList(Util.converteParaList(pontoCritico.getPontoCriticoCorPtccores()), "antecedenciaPrimEmailPtccor");           
            Iterator itPtcCor = listPtcCor.iterator();
            boolean encontrouLimite = false;
            while ((itPtcCor.hasNext()) && (!encontrouLimite)) {
              PontocriticoCorPtccor ptcCor = (PontocriticoCorPtccor) itPtcCor.next();
              if (ptcCor.getAntecedenciaPrimEmailPtccor() == null)
                diasAntecedencia = 0;
              else
                diasAntecedencia = ptcCor.getAntecedenciaPrimEmailPtccor().intValue();
              Date dataComparacao = Data.addDias(diasAntecedencia, dataCorrente);
              String dataCompStr = Data.parseDate(dataComparacao);
              // Ap�s definir qual � a data que ser� comparada,
              // verifica-se
              // se esta se enquadra no PtcCor atual.O loop while
              // � interrompido quando isto � feito.
              if ((dataComparacao.after(dataLimitePtc)) || (dataCompStr.equals(dataLimiteStr))) {
                if (diasAntecedencia > 0) {
                  corRelogio = ptcCor.getCor().getNomeCor();
                  descRelogio = ptcCor.getCor().getSignificadoCor();
                  encontrouLimite = true;
                }
              }
            }// fim do while
          } // fim do if - else Preto
        }
    }
    else if ("N".equals(pontoCritico.getIndAtivoPtc())){
      corRelogio = "Proibido";
      descRelogio = "Cancelado";
    }
    String[] retorno = { corRelogio, descRelogio };
    return (retorno);
  }
 
  /**
   * Retorna a lista de Pontos Cr�ticos Ativos de acordo com a data limite
   * informada. <br>
   *
         * @param situacao
         * @param excluido
         * @author rogerio
   * @since 0.1, 26/02/2007
   * @version 0.1, 26/02/2007
   * @return List
   * @throws ECARException
   */
  public List listarPontoCriticoAtivoNExcluidoNSolucionado(String situacao, String excluido) throws ECARException {
    List list = null;
    try {
      Query query = session.createQuery("from PontoCriticoPtc " +
          "where indAtivoPtc = :situacao and ind_excluido_ptc <> :excluido and data_solucao_ptc is null "
          + "order by codPtc asc ");
      query.setString("situacao", situacao);
      query.setString("excluido", excluido);
      list = query.list();
    }
    catch (HibernateException e) {
      this.logger.error(e);
      throw new ECARException("erro.hibernateException");
    }
    return list;
  } // fim listarPontoCritico
 
  /**
   * Verifica se o pontoCritico possui apontamentos
   *
   * @param pontoCritico
   * @return
   * @author 05110500460
   */
  public boolean contemListaApontamentos(PontoCriticoPtc pontoCritico) {
    Set<Object> apontamentos = null;
    if (pontoCritico != null) {
      apontamentos = pontoCritico.getApontamentoApts();
    }
    if (apontamentos != null && apontamentos.size() > 0) {
      return true;
    }
    return false;
  }
 
  /**
   * Lista os pontos cr�ticos pertencentes ao itemEstrutura que <b> n�o </b>
   * foram exclu�dos
   *
         * @param itemEstrutura
         * @return
   * @throws ECARException
   * @author 05110500460
   */
  public List listar(ItemEstruturaIett itemEstrutura) throws ECARException {
    List list = null;
    try {
      Query query = session.createQuery("select ptc from PontoCriticoPtc ptc" + " where "
              + " (ptc.indExcluidoPtc <> 'S' or  ptc.indExcluidoPtc is null) " + " and ptc.itemEstruturaIett.codIett = :codIett");
      query.setLong("codIett", itemEstrutura.getCodIett());
      list = query.list();
    }
    catch (HibernateException e) {
      this.logger.error(e);
      throw new ECARException("erro.hibernateException");
    }
    return list;
  }
 
  /**
   * Lista os pontos cr�ticos pertencentes ao itemEstrutura que <b> n�o </b>
   * foram exclu�dos
   *
         * @param itemEstrutura
         * @param dataBase
         * @return
   * @throws ECARException
   * @author 05110500460
   */
  public List listarItensIncluidosAntesDaDataBase(ItemEstruturaIett itemEstrutura, Date dataBase) throws ECARException {
    List list = null;
    try {
      Query query = session.createQuery("select ptc from PontoCriticoPtc ptc" + " where " +
      // " (ptc.indExcluidoPtc <> 'S' or  ptc.indExcluidoPtc is null) and "
              // + // N�o pega os itens excluidos por causa do calcula da
              // situa��o
              // do item no dia da dataBase
              " ptc.itemEstruturaIett.codIett = :codIett " + " and ptc.dataInclusaoPtc < :dataBase " + " order by ptc.codPtc");
      query.setLong("codIett", itemEstrutura.getCodIett());
      query.setDate("dataBase", dataBase);
      list = query.list();
    }
    catch (HibernateException e) {
      this.logger.error(e);
      throw new ECARException("erro.hibernateException");
    }
    return list;
  }
 
  /**
   * Lista os pontos criticos pertencentes ao itemEstrutura que foram
   * exclu�dos
   *
   * @param codIett
   * @return
   * @throws ECARException
   * @author 05110500460
   */
  public List listarExcluidos(long codIett) throws ECARException {
    List list = null;
    try {
      Query query = this.getSession().createQuery(
              "select ptc from PontoCriticoPtc ptc" + " join ptc.itemEstruturaIett itemEstrutura "
                      + " where  ptc.indExcluidoPtc = 'S' and itemEstrutura.codIett = :codIett");
      query.setLong("codIett", codIett);
      list = query.list();
    }
    catch (HibernateException e) {
      this.logger.error(e);
      throw new ECARException("erro.hibernateException");
    }
    return list;
  }
 
  /**
   * Lista as modifica��es anteriores a dataBase do hist�rico do Ponto Cr�tico
   *
         * @param pontoCritico
         * @param dataBase
   * @return Lista com o hist�rico ordenado pela data de �ltima modifica��o
   * @throws ECARException
   * @author 05110500460rpar�metro
   */
  public List<HistoricoPtcH> listarHistorico(PontoCriticoPtc pontoCritico, Date dataBase) throws ECARException {
    List list = null;
    try {
      Query query = session.createQuery("select ptcH from HistoricoPtcH ptcH " + " where " + " ptcH.pontoCriticoPtc.codPtc = :codPtc "
              + " and (ptcH.dataUltManutencaoPtc is null or ptcH.dataUltManutencaoPtc < :dataBase)" + " order by  ptcH.codPtcH asc ");
      query.setLong("codPtc", pontoCritico.getCodPtc());
      query.setDate("dataBase", dataBase);
      list = query.list();
    }
    catch (HibernateException e) {
      this.logger.error(e);
      throw new ECARException("erro.hibernateException");
    }
    return list;
  }
 
  /**
   * Retorna lista de itens que tenham um Acompanhamento
   * (AcompReferenciaItemAri) em algum dos Per�odos de Refer�ncia
   * (AcompReferenciaAref) passados como par�metro
   *
   * @param periodosConsiderados
   *            Collection de AcompReferenciaAref
   * @param niveisPlanejamento
   *            Collection
   * @param orgaoResponsavel
   *            OrgaoOrg
   * @param usuarioUsu
   *            UsuarioUsu
   * @param gruposUsuario
   *            Set
   * @param codTipoAcompanhamento
   *            Long (se for nulo ignora o tipo de acompanhamento)
   * @param codIettPai
   *            Long (se for diferente de nulo, obt�m os filhos desse item)
   * @return List de AcompReferenciaItemAri. lista vazia se n�o foi informado
   *         nenhum periodo
   * @throws ECARException
   */
  /*
   * public Object[] getItensPontoCritico(UsuarioUsu usuarioUsu, Set
   * gruposUsuario, Long codIettPai, Long codCor) throws ECARException { try{
   * ItemEstruturaDao itemDao = new ItemEstruturaDao(null); StringBuilder
   * query = new
   * StringBuilder("select ptc.ItemEstruturaIett from PontoCriticoPtc ptc");
   * //StringBuilder where = newStringBuilder(
   * " where arel.acompReferenciaItemAri.acompReferenciaAref.codAref in (:listaAcompanhamentos)"
   * ); StringBuilder where = new
   * StringBuilder(" where ptc.indAtivoPtc = 'S'"); int retornarAteNivel = -1;
   * List iettFilhos = new ArrayList(); if(codIettPai != null){
   * ItemEstruturaIett iettPai = (ItemEstruturaIett)
   * itemDao.buscar(ItemEstruturaIett.class, codIettPai); if(iettPai != null){
   * retornarAteNivel = iettPai.getNivelIett().intValue() + 1;
   * iettFilhos.addAll(itemDao.getDescendentes(iettPai, false)); } } Query
   * queryItens = this.getSession().createQuery(query.toString() +
   * where.toString()); List listaCodigosAref = new ArrayList(); Iterator it =
   * periodosConsiderados.iterator(); while(it.hasNext()){ AcompReferenciaAref
   * aReferencia = (AcompReferenciaAref)it.next();
   * listaCodigosAref.add(aReferencia.getCodAref()); }
   * queryItens.setParameterList("listaAcompanhamentos", listaCodigosAref);
   * if(orgaoResponsavel != null && orgaoResponsavel.getCodOrg() != null){
   * queryItens.setLong("orgaoResp",
   * orgaoResponsavel.getCodOrg().longValue()); } if(niveisPlanejamento !=
   * null && niveisPlanejamento.size() > 0) { List listaCodigosNiveis = new
   * ArrayList(); Iterator itNiveis = niveisPlanejamento.iterator();
   * while(itNiveis.hasNext()){ SisAtributoSatb nivel = (SisAtributoSatb)
   * itNiveis.next(); listaCodigosNiveis.add(nivel.getCodSatb()); }
   * queryItens.setParameterList("listaNiveis", listaCodigosNiveis); }
   * if(codTipoAcompanhamento != null) { // listar ARIs conforme o tipo de
   * acompanhamento passado como par�metro queryItens.setLong("codTa",
   * codTipoAcompanhamento.longValue()); } if(codCor != null){
   * queryItens.setLong("codCor", codCor.longValue()); } List listaItens = new
   * ArrayList(); List listaAris = queryItens.list(); Iterator itListaAris =
   * listaAris.iterator(); if(usuarioUsu == null) { //utilizado para o
   * grafico.jsp - teste de performance while(itListaAris.hasNext()) {
   * AcompReferenciaItemAri ari = (AcompReferenciaItemAri)itListaAris.next();
   * listaItens.add(ari.getItemEstruturaIett()); } } else {
   * while(itListaAris.hasNext()) { AcompReferenciaItemAri ari =
   * (AcompReferenciaItemAri)itListaAris.next();
   * if(validaPermissao.permissaoLeituraAcompanhamento(ari, usuarioUsu,
   * gruposUsuario)) { listaItens.add(ari.getItemEstruturaIett()); } } } List
   * itensGeralComArvore = itemDao.getArvoreItens(listaItens, null); List
   * arvoreItens = new ArrayList(itensGeralComArvore); if(retornarAteNivel !=
   * -1){ Iterator itArvore = arvoreItens.iterator();
   * while(itArvore.hasNext()){ ItemEstruturaIett iett = (ItemEstruturaIett)
   * itArvore.next(); if(iett.getNivelIett().intValue() > retornarAteNivel){
   * itArvore.remove(); } else if(!iettFilhos.contains(iett)){
   * itArvore.remove(); } } } TipoAcompanhamentoTa tipoAcomp = null;
   * if(codTipoAcompanhamento != null) { tipoAcomp = (TipoAcompanhamentoTa)
   * tipoAcompanhamentoDao.buscar(TipoAcompanhamentoTa.class,
   * codTipoAcompanhamento); } return new
   * Object[]{itemDao.getItensOrdenados(arvoreItens, tipoAcomp),
   * itensGeralComArvore}; } else { // Se n�o foi informado nenhum periodo,
   * retorna uma lista vazia return new Object[]{new ArrayList(), new
   * ArrayList()}; } } catch(HibernateException e){ this.logger.error(e);
   * throw new ECARException(e); } }
   */
  /**
   * Retorna o valor de um atributo em um itemEstrutura
   *
         * @param pontoCritico
   * @param nomeAtributo
   * @param fkAtributo
   * @return
   * @throws ECARException
   */
  public String getValorAtributoPontoCritico(PontoCriticoPtc pontoCritico, String nomeAtributo, String fkAtributo) throws ECARException {
    try {
      Object retorno = Util.invocaGet(pontoCritico, nomeAtributo);
      if (retorno != null) {
        if (fkAtributo != null && !"".equals(fkAtributo)) {
          retorno = Util.invocaGet(retorno, fkAtributo);
          if (retorno != null)
            return retorno.toString();
          else
            return "";
        }
        else {
          if (retorno.getClass().equals(Timestamp.class) || retorno.getClass().equals(Date.class))
            retorno = Data.parseDate((Date) retorno);
          return retorno.toString();
        }
      }
    }
    catch (Exception e) {}
    return "";
  }
 
  /**
   * Retorna o valor de um atributo em um itemEstrutura
   *
         * @param pontoCritico
   * @param nomeAtributo
   * @param fkAtributo
   * @return
   * @throws ECARException
   */
  public String getValorAtributoPontoCritico(HistoricoPontoCriticoPtc pontoCritico, String nomeAtributo, String fkAtributo) throws ECARException {
    try {
      Object retorno = Util.invocaGet(pontoCritico, nomeAtributo);
      if (retorno != null) {
        if (fkAtributo != null && !"".equals(fkAtributo)) {
          retorno = Util.invocaGet(retorno, fkAtributo);
          if (retorno != null)
            return retorno.toString();
          else
            return "";
        }
        else {
          if (retorno.getClass().equals(Timestamp.class) || retorno.getClass().equals(Date.class))
            retorno = Data.parseDate((Date) retorno);
          return retorno.toString();
        }
      }
    }
    catch (Exception e) {}
    return "";
  }
 
  /**
   * @param request
   * @param pontoCritico
   * @throws ECARException
   */
  private void setAtributosLivresPontoCritico(HttpServletRequest request, PontoCriticoPtc pontoCriticoPtc) throws ECARException {
    Boolean planejamentoBloqueado = false;
    ItemEstruturaIett itemEstruturaIett = pontoCriticoPtc.getItemEstruturaIett();
    EstruturaEtt estruturaEtt = null;
    if (itemEstruturaIett != null) {
      if (itemEstruturaIett.getEstruturaEtt() != null) {
        estruturaEtt = itemEstruturaIett.getEstruturaEtt();
      }
      if (itemEstruturaIett.getIndBloqPlanejamentoIett() != null && itemEstruturaIett.getIndBloqPlanejamentoIett().equals("S")) {
        planejamentoBloqueado = true;
      }
    }
    SegurancaECAR seg = (SegurancaECAR) request.getSession().getAttribute("seguranca");
    List funcoesDoUsuario = (new TipoFuncAcompDao(request)).getFuncoesAcompNaEstruturaDoUsuario(itemEstruturaIett, seg.getUsuario(), seg.getGruposAcesso());
    /*
     * Obter o c�digo do grupo do atributo livre para pegar pelo campo "a" +
     * codSga;
     */
    FuncaoDao funcaoDao = new FuncaoDao(request);
    FuncaoFun funcao = funcaoDao.getFuncaoPontosCriticos();
    List sgas = new ArrayList();
    if (estruturaEtt != null && estruturaEtt.getEstruturaAtributoEttats() != null && !estruturaEtt.getEstruturaAtributoEttats().isEmpty()) {
      for (Iterator it = estruturaEtt.getEstruturaAtributoEttats().iterator(); it.hasNext();) {
        EstruturaAtributoEttat ettat = (EstruturaAtributoEttat) it.next();
        if (ettat.getAtributosAtb() != null && ettat.getAtributosAtb().getSisGrupoAtributoSga() != null) {
          if ((ettat.getAtributosAtb().getFuncaoFun().equals(funcao))
                  && (!planejamentoBloqueado || (planejamentoBloqueado && !ettat.iGetBloqueado()) || podeEditarAtributoBloqueadoNaEstrutura(ettat,
                          funcoesDoUsuario))) {
            sgas.add(ettat.getAtributosAtb().getSisGrupoAtributoSga());
          }
        }
      }
    }
    // Percorrer grupo de atributos para selecionar os atributos livres...
    for (Iterator it = sgas.iterator(); it.hasNext();) {
      SisGrupoAtributoSga grupoAtributo = (SisGrupoAtributoSga) it.next();
      String nomeCampo = "a" + grupoAtributo.getCodSga().toString();
      String tipoCampo = grupoAtributo.getSisTipoExibicGrupoSteg().getCodSteg().toString();
      // Se for CheckBox ou RadioButton ou ListBox, n�o gravar
      // InformacaoIettSatb
      if (tipoCampo.equals(SisTipoExibicGrupoDao.CHECKBOX) || tipoCampo.equals(SisTipoExibicGrupoDao.LISTBOX)
              || tipoCampo.equals(SisTipoExibicGrupoDao.RADIO_BUTTON) || tipoCampo.equals(SisTipoExibicGrupoDao.COMBOBOX)) {
        String[] atributos = request.getParameterValues(nomeCampo);
        int numAtributos = 0;
        if (atributos != null) {
          int contador=0;
          for (int i = 0; i < atributos.length; i++) {
            if (!atributos[i].equals(Dominios.STRING_VAZIA)) {
              contador++;
            }
          }
          numAtributos = contador;
        }
        for (int i = 0; i < numAtributos; i++) {
          // N�o seto todos os outros campos, pois eles ser�o setados
          // depois de gravar o item.
          PontoCriticoSisAtributoPtcSatb atributoLivre = new PontoCriticoSisAtributoPtcSatb();
          atributoLivre.setDataUltManutencao(Data.getDataAtual());
          atributoLivre.setUsuarioUsu(((ecar.login.SegurancaECAR) request.getSession().getAttribute("seguranca")).getUsuario());
          atributoLivre.setPontoCriticoPtc(pontoCriticoPtc);
          atributoLivre.setSisAtributoSatb((SisAtributoSatb) this.buscar(SisAtributoSatb.class, Long.valueOf(atributos[i])));
          atributoLivre.atribuirPKPai();
          if (pontoCriticoPtc.getPontoCriticoSisAtributoPtcSatbs() == null) {
            pontoCriticoPtc.setPontoCriticoSisAtributoPtcSatbs(new HashSet());
          }
          pontoCriticoPtc.getPontoCriticoSisAtributoPtcSatbs().add(atributoLivre);
        }
      }
      // Se for TEXT Field
      else
        if (tipoCampo.equals(SisTipoExibicGrupoDao.TEXT) || tipoCampo.equals(SisTipoExibicGrupoDao.TEXTAREA)
                || tipoCampo.equals(SisTipoExibicGrupoDao.IMAGEM) || tipoCampo.equals(SisTipoExibicGrupoDao.VALIDACAO)) {
          if (grupoAtributo.getSisAtributoSatbs() != null && !grupoAtributo.getSisAtributoSatbs().isEmpty()) {
            SisAtributoSatb sisAtributoSatb = (SisAtributoSatb) grupoAtributo.getSisAtributoSatbs().iterator().next();
            if (!(Pagina.getParamStr(request, nomeCampo).equals(Dominios.STRING_VAZIA)) || (sisAtributoSatb.isAtributoAutoIcremental())
                    || (sisAtributoSatb.isAtributoContemMascara())) {
              // N�o seto todos os outros campos, pois eles ser�o
              // setados depois de gravar o item.
              PontoCriticoSisAtributoPtcSatb atributoLivre = new PontoCriticoSisAtributoPtcSatb();
              atributoLivre.setDataUltManutencao(Data.getDataAtual());
              atributoLivre.setUsuarioUsu(((ecar.login.SegurancaECAR) request.getSession().getAttribute("seguranca")).getUsuario());
              atributoLivre.setPontoCriticoPtc(pontoCriticoPtc);
              atributoLivre.setSisAtributoSatb((SisAtributoSatb) grupoAtributo.getSisAtributoSatbs().iterator().next());
              atributoLivre.setInformacao(Pagina.getParamStr(request, nomeCampo));
              atributoLivre.setFuncao(funcao);
              atributoLivre.atribuirPKPai();
              if (pontoCriticoPtc.getPontoCriticoSisAtributoPtcSatbs() == null) {
                pontoCriticoPtc.setPontoCriticoSisAtributoPtcSatbs(new HashSet());
              }
             
              String pathRaiz = request.getContextPath();
             
              // tratamento imagem
              String caminhoAuxiliarImagem = Pagina.getParamStr(request, "hidImagem" + "a"
                  + grupoAtributo.getCodSga().toString());
              if (caminhoAuxiliarImagem!=null && caminhoAuxiliarImagem.length()>0) {
               
                  String chave = atributoLivre.getInformacao();
                  chave = chave.substring(chave.indexOf("RemoteFile=")+ "RemoteFile=".length());
                  UsuarioUsu usuario = ((ecar.login.SegurancaECAR)request.getSession().getAttribute("seguranca")).getUsuario();
                              if(usuario.getMapArquivosAtuaisUsuarios() != null && usuario.getMapArquivosAtuaisUsuarios().containsKey(chave)){
//                                atributoLivre.setInformacao(usuario.getMapArquivosAtuaisUsuarios().get(chave));
                               
                                caminhoAuxiliarImagem = usuario.getMapArquivosAtuaisUsuarios().get(chave);
                                caminhoAuxiliarImagem = pathRaiz +"/DownloadFile?RemoteFile=" + caminhoAuxiliarImagem;
                              }
//                              else{
               
                  // salvar a imagem fisicamente que tem o caminho real em "a" + codigo de grupo
                  try {                 
                    String nomeArquivoNovo = FileUpload.salvarArquivoSessaoFisicamente(request, "a" + grupoAtributo.getCodSga().toString(), caminhoAuxiliarImagem);
                    if(nomeArquivoNovo != null && !nomeArquivoNovo.equals(""))
                      atributoLivre.setInformacao(nomeArquivoNovo);
                  } catch (FileNotFoundException e) {
                    throw new ECARException("erro.arquivoUrl",e, new String[]{caminhoAuxiliarImagem});
                  } catch (Exception e) {
                    throw new ECARException("erro.upload",e, new String[]{caminhoAuxiliarImagem});
                  }
//                              }
              }
             
              pontoCriticoPtc.getPontoCriticoSisAtributoPtcSatbs().add(atributoLivre);
            }
          }
        }
        else
          if (tipoCampo.equals(SisTipoExibicGrupoDao.MULTITEXTO)) {
            Enumeration lAtrib = request.getParameterNames();
            while (lAtrib.hasMoreElements()) {
              String atrib = (String) lAtrib.nextElement();
              if (atrib.lastIndexOf('_') > 0) {
                // System.out.println("nomeatributo" + atrib);
                String nomeAtrib = atrib.substring(0, atrib.lastIndexOf('_'));
                String codSisAtrib = atrib.substring(atrib.lastIndexOf('_') + 1);
                nomeCampo = "a" + grupoAtributo.getCodSga().toString() + "_" + codSisAtrib;
                if (nomeAtrib.equals("a" + grupoAtributo.getCodSga().toString()) && !"".equals(Pagina.getParamStr(request, atrib))) {
                  PontoCriticoSisAtributoPtcSatb atributoLivre = new PontoCriticoSisAtributoPtcSatb();
                  atributoLivre.setDataUltManutencao(Data.getDataAtual());
                  atributoLivre.setUsuarioUsu(((ecar.login.SegurancaECAR) request.getSession().getAttribute("seguranca")).getUsuario());
                  atributoLivre.setPontoCriticoPtc(pontoCriticoPtc);
                  atributoLivre.setSisAtributoSatb((SisAtributoSatb) this.buscar(SisAtributoSatb.class, Long.valueOf(codSisAtrib)));
                  atributoLivre.setInformacao(Pagina.getParamStr(request, nomeCampo));
                  atributoLivre.atribuirPKPai();
                  if (pontoCriticoPtc.getPontoCriticoSisAtributoPtcSatbs() == null) {
                    pontoCriticoPtc.setPontoCriticoSisAtributoPtcSatbs(new HashSet());
                  }
                  pontoCriticoPtc.getPontoCriticoSisAtributoPtcSatbs().add(atributoLivre);
                }
              }
            }
          }
    }
  }
 
  /**
   * @param atributo
   * @param funcoesAcompanhamenoDoUsuario
   * @return
   */
  private boolean podeEditarAtributoBloqueadoNaEstrutura(ObjetoEstrutura atributo, List funcoesAcompanhamenoDoUsuario) {
    Set liberadoParaFuncoesAcompanhamento = atributo.iGetLibTipoFuncAcompTpfas();
    for (Iterator<TipoFuncAcompTpfa> itFuncaosAcompDoUsuario = funcoesAcompanhamenoDoUsuario.iterator(); itFuncaosAcompDoUsuario.hasNext();) {
      TipoFuncAcompTpfa funcaoAcompDoUsuario = (TipoFuncAcompTpfa) itFuncaosAcompDoUsuario.next();
      if (liberadoParaFuncoesAcompanhamento != null && liberadoParaFuncoesAcompanhamento.contains(funcaoAcompDoUsuario)) {
        return true; // pode editar o campo
      }
    }
    return false;
  }
 
  /*
   * Hist�rico
   */
        /**
         *
         * @param pojoHistorico
         * @param tipoHistorico
         * @param usuario
         * @throws ECARException
         */
        public void gerarHistorico(HistoricoPontoCriticoPtc pojoHistorico, Long tipoHistorico, UsuarioUsu usuario) throws ECARException {
    if (pojoHistorico != null) {
      List<EstruturaAtributoEttat> lista = null;
      if (pojoHistorico.getItemEstruturaIett() != null){
        EstruturaEtt ett = pojoHistorico.getItemEstruturaIett().getEstruturaEtt();
        FuncaoFun func = new FuncaoDao(null).getFuncaoPontosCriticos();
        lista = (new EstruturaDao(null)).getAtributosEstrutura(ett, func);
       
        for (EstruturaAtributoEttat etta : lista) {
          Hibernate.initialize(etta.getAtributosAtb());
          if (etta.getAtributosAtb().getSisGrupoAtributoSga() != null) {
            Hibernate.initialize(etta.getAtributosAtb().getSisGrupoAtributoSga());
            if (etta.getAtributosAtb().getSisGrupoAtributoSga().getSisAtributoSatbs() != null)
              Hibernate.initialize(etta.getAtributosAtb().getSisGrupoAtributoSga().getSisAtributoSatbs());
          }
        }
       
      }
      pojoHistorico.setSisGrupoAtributoSga(new ConfiguracaoDao(null).getConfiguracao().getSisGrupoAtributoSgaTipoPontoCritico());
      Hibernate.initialize(pojoHistorico.getSisGrupoAtributoSga().getSisAtributoSatbs());
      Hibernate.initialize(pojoHistorico.getSisGrupoAtributoSga().getGrupoAtributosLivresSgas());
      Hibernate.initialize(pojoHistorico.getPontoCriticoSisAtributoPtcSatbs());
     
      pojoHistorico.setAtributoEstrutura(lista);
     
      this.historico.setHistorico(pojoHistorico, tipoHistorico, usuario,
              session);
    }
  }
 
        /**
         *
         * @param inicio
         * @param fim
         * @param tipoHistorico
         * @param codigos
         * @return
         */
    @SuppressWarnings("empty-statement")
        public List<HistoricoPontoCriticoPtc> listaObjetoHistorico(Date inicio, Date fim, String[] tipoHistorico, String[] codigos) {
    try {
      return historico.listaObjetoHistorico(null, inicio, fim, tipoHistorico, codigos);
    }
    catch (Exception e) {
      e.printStackTrace();
    };
    return null;
  }
 
    /**
     *
     * @param inicio
     * @param fim
     * @param tipoHistorico
     * @param codigos
     * @return
     */
    @SuppressWarnings("empty-statement")
  public List<HistoricoXml> listaHistorico(Date inicio, Date fim, String[] tipoHistorico, String[] codigos) {
    try {
      return historico.listaHistorico(null, inicio, fim, tipoHistorico, codigos);
    }
    catch (Exception e) {
      e.printStackTrace();
    };
    return null;
  }
 
    /**
     *
     * @param chaveHistorico
     * @return
     */
    @SuppressWarnings("empty-statement")
  public HistoricoPontoCriticoPtc getHistorico(Long chaveHistorico) {
    try {
      return historico.getObjetoSerializado(chaveHistorico);
    }
    catch (Exception e) {
      e.printStackTrace();
    };
    return null;
  }
 
    /**
     *
     * @param chaveObjetoSerializado
     * @return
     */
    @SuppressWarnings("empty-statement")
    public List<HistoricoPontoCriticoPtc> getListaHistorico(String[] chaveObjetoSerializado) {
    try {
      return historico.listaObjetoHistorico(null, null, null, null, chaveObjetoSerializado);
    }
    catch (Exception e) {
      e.printStackTrace();
    };
    return null;
  }
 
  /**
   * efetua a carga inicial do hist�rico de pontos cr�ticos
   * Devido ao problema de java heap space e ao problema de n�o termos tempo
   * devido a entrega da vers�o, esse m�todo s� da a carga de 100 registros
   * de item a cada vez que � chamado
         * @throws ECARException
   */

  public void cargaInicialHistorico() throws ECARException{
    HistoricoPontoCriticoPtc pojoHistorico = new HistoricoPontoCriticoPtc();
    HistoricoDao historicoDao = new HistoricoDao(request);
    Transaction tx=null;
    try {
      String[] ordem = new String[] {"codPtc", "asc"};
      List<Long> listaIdObjetoSerializado = historicoDao.listaIdObjetoSerializado(HistoricoPontoCriticoPtc.class);
      List<PontoCriticoPtc> lista = getPontoCriticoPtcSemHistorico(listaIdObjetoSerializado);
      Iterator itLista = lista.iterator();
      int count = 1;
      PontoCriticoPtc ptc = null;
      while (itLista.hasNext() && count <= 100){
        ptc = (PontoCriticoPtc) itLista.next();
        System.out.println("Codigo PTC: " + ptc.getCodPtc());
        System.out.println("Contador PTC: " + count);
        tx = session.beginTransaction();
        pojoHistorico.carregar(ptc);
        if (("N").equals(ptc.getIndExcluidoPtc()))
          gerarHistorico(pojoHistorico, Historico.INCLUIR, ((ecar.login.SegurancaECAR) request.getSession().getAttribute("seguranca")).getUsuario());
        else
          gerarHistorico(pojoHistorico, Historico.EXCLUIR, ((ecar.login.SegurancaECAR) request.getSession().getAttribute("seguranca")).getUsuario());
       
        tx.commit();
        count++;
       
        ptc = null;
        if (count%100 == 0){
          System.gc();
        }
      }
     
      pojoHistorico = null;
      ordem = null;
      lista = null;
      listaIdObjetoSerializado = null;

    }
    catch (ECARException e) {
      if (tx != null)
        tx.rollback();
      this.logger.error(e);
      throw new ECARException(e)
    }
  }
 
  /**
   * Retorna uma lista de pontos cr�ticos que ainda n�o tem hist�rico gerado.
   * @param codigos
   * @return
   */
  public List getPontoCriticoPtcSemHistorico(List<Long> codigos){
    StringBuffer query = new StringBuffer();
    query.append("select ptc from PontoCriticoPtc ptc ");
    if (codigos != null && codigos.size() > 0){
      query.append("where ptc.codPtc not in (:codigos)");
    }
    Query q = this.session.createQuery(query.toString());
    if (codigos != null && codigos.size() > 0){
      q.setParameterList("codigos", codigos);
    }
   
    return q.list();
  }
 
  /**
   * Retorna a quantidade de registros da tabela de pontos cr�ticos
   * @return
   */
  public Integer getQuantidadeLinhasPtc(){
    Query q = this.session.createQuery("select count(ptc) from PontoCriticoPtc ptc ");
    return (Integer) q.uniqueResult();
  }

 
  /*
   * Fim dos M�todos para hist�rico
   */
  /**
   * Consulta a lista de PontosCriticos ativos que utilizam o atributo Livre
   * utilizado como par�metro.
   *
   * @param sisAtributo
   * @return
   * @throws ECARException
   */
  public List<PontoCriticoSisAtributoPtcSatb> consultarPontosCriticosSisAtributoAtivos(SisAtributoSatb sisAtributo) throws ECARException {
   
   

    List<PontoCriticoSisAtributoPtcSatb> listaPtcGeral = consultarPontosCriticosSisAtributo(sisAtributo);
   
    List<PontoCriticoSisAtributoPtcSatb> listaPtcAtivos = new ArrayList<PontoCriticoSisAtributoPtcSatb>();
   
   
    for (PontoCriticoSisAtributoPtcSatb ptcSisAtributo : listaPtcGeral) {
     
      //O ponto critico e o item ao qual o ptc pertence devem estar ativos
      if (ptcSisAtributo.getPontoCriticoPtc().getIndAtivoPtc().equals("S") && (ptcSisAtributo.getPontoCriticoPtc().getItemEstruturaIett().getIndAtivoIett().equals("S"))){
        listaPtcAtivos.add(ptcSisAtributo);
      }
     
    }
     
    return listaPtcAtivos;
  }
 
  /**
   * Consulta a lista de PontosCriticos ativos que utilizam o atributo Livre
   * utilizado como par�metro.
   *
   * @param sisAtributo
   * @return
   * @throws ECARException
   */
  public List<PontoCriticoSisAtributoPtcSatb> consultarPontosCriticosSisAtributo(SisAtributoSatb sisAtributo) throws ECARException {
    try {
      String hql = MessageFormat.format(Util.getHql(ConstantesECAR.PESQUISA_PONTOCRITICO_ATRIBUTOLIVRE, request.getSession().getServletContext()),
              sisAtributo.getCodSatb());
      Query query = this.session.createQuery(hql);
      return query.list();
    }
    catch (IOException ioex) {
      this.logger.error(ioex);
      throw new ECARException(ioex);
    }
    catch (HibernateException e) {
      this.logger.error(e);
      throw new ECARException(e);
    }
  }

 
  /**
   * Retorna o Objeto do tipo Sequencial contido na lista.
         * @param ptcSisAtributo
         * @return
         * @throws ECARException
   */
  public TipoValor obterTipoSequencial(PontoCriticoSisAtributoPtcSatb ptcSisAtributo) throws ECARException {
   
    TipoValor tipoSeq = null;
    Iterator<TipoValor> it = null;
   
    try {
      if (getSession().contains(ptcSisAtributo)) {
        it = ptcSisAtributo.getTiposValores().iterator();
      } else {
        throw new ECARException(new Throwable("Sess�o encerrada."));
      }
    } catch (ECARException ecarex){
      this.logger.error(ecarex.getCausaRaiz()+" Recupera��o realizada com sucesso.");
      ptcSisAtributo = this.carregarObjetoPtcCriticoSisAtributo(ptcSisAtributo);
     
      it = ptcSisAtributo.getTiposValores().iterator();
    }
   
    while (it.hasNext()) {
      tipoSeq = (TipoValor)it.next();
     
      if (tipoSeq.getTipo().compareTo(TipoValorEnum.SEQUENCIAL) == 0){
        break;
      }
    }
   
    return tipoSeq;
  }

  /**
   * Utilizado para carregar o objeto PontoCriticoSisAtributoPtcSatb caso ele n�o esteja na sess�o do hibernate.
   * TODO Novos atributos lazy poder�o ser adicionados ao Hibernate.initialize de acordo com a necessidade
   * @param ptcSisAtributo
   * @return
   */
  private PontoCriticoSisAtributoPtcSatb carregarObjetoPtcCriticoSisAtributo(PontoCriticoSisAtributoPtcSatb ptcSisAtributo) {
   
       if (!getSession().contains(ptcSisAtributo)) {
       
         ptcSisAtributo = (PontoCriticoSisAtributoPtcSatb) getSession().load(PontoCriticoSisAtributoPtcSatb.class,ptcSisAtributo.getComp_id());
      }
      
      Hibernate.initialize(ptcSisAtributo.getTiposValores());
     
     
      return ptcSisAtributo;
  }
 
}
TOP

Related Classes of ecar.dao.PontoCriticoDao

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.