Package ecar.dao

Source Code of ecar.dao.LocalItemDao

/*
* Created on 05/10/2004
*
* Classe para controlar os itens de locais
*
* Itens de locais sao instancias de um determinado grupo de local
* Por exemplo, para o grupo de local Estado, temos os itens Parana, Sao Paulo
* Para o grupo Municipio, temos Curitiba, Sao Jose dos Pinhais, etc
*
* Um grupo est� associado a varios locais
* Um local pertence a um grupo
* A hierarquia de locais depende da hierarquia de grupos. ent�o uma vez montada
* hierarquia de locais n�o podemos mais alterar a hierarquia de grupos, por razoes
* de integridade historica
*
* Seja a tabela de hierarquia de grupos (de locais)
* GRUPO ->  GRUPO_PAI
* ------------------
* M    E
* M    R
* E    R
* R    P
*
* Seja a tabela de locais (itens ou instancias de um grupo)
* LOCAL    ->   GRUPO
* ----------------------
* RS, SC, PR    E
* CTBA, FOZ    M
* SUL, NORTE    R
* BRASIL, CHILE  P
*
*
* Dado um local, quem s�o seus locais associados na hierarquia de locais?
* Ex. Local: PR
*
* Locais Associados:
*
* grupo <- local.getGrupo()     //  grupo <- E  (PR.getGrupo())
*
* listaFilhosGrupo <- grupo.getFilhos() // listafilhosGrupo <- {M} (E.getFilhos())
*
* para cada filho na listaFilhosGrupo
*     listaLocaisAssociados <- listaLocaisAssociados U filho.getItemLocais()   
*    
* Entao a lista de itens de local associada ser�:
* {CTBA, FOZ}
*
*
*/
package ecar.dao;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;

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

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

import ecar.exception.ECARException;
import ecar.pojo.LocAtributoLoca;
import ecar.pojo.LocalGrupoLgp;
import ecar.pojo.LocalItemLit;
import ecar.pojo.PaiFilho;
import ecar.pojo.SisAtributoSatb;
import ecar.pojo.SisGrupoAtributoSga;
import ecar.pojo.UsuarioUsu;
import ecar.taglib.util.Input;

/**
* @author evandro
*
*/
public class LocalItemDao extends Dao{
 
  /**
   * Construtor. Chama o Session factory do Hibernate
         *
         * @param request
         */
  public LocalItemDao(HttpServletRequest request) {
    super();
    this.request = request;
  }
 
  /**
   * Construtor. Chama o Session factory do Hibernate
   */
  public LocalItemDao() {
    super();
  }
 
  /**
   * Retorna um list com identifica��es de todos os locais filhos de um local
   * @param localItem
   * @return List de Long
   */
  public List getFilhosById(LocalItemLit localItem){
      List filhos = new ArrayList();
      if(localItem.getLocalItemHierarquiaLithsByCodLitPai() != null){
        Iterator it = localItem.getLocalItemHierarquiaLithsByCodLitPai().iterator();
        while(it.hasNext()){
            LocalItemLit localItemFilho = (LocalItemLit) it.next();
            filhos.add(localItemFilho.getCodLit());
        }       
      }
      return filhos;
  }
 
  /**
   * Retorna os locais acima do local passado como par�metro (pais, av�s, etc)
   * @param localItem
   * @return Set Cole��o de Locais
   */
  public List getAscendentes(LocalItemLit localItem){
      List grupos = new ArrayList();
      if(localItem.getLocalItemHierarquiaLithsByCodLit() != null){
          // Cole��o dos Pais
          Iterator it = localItem.getLocalItemHierarquiaLithsByCodLit().iterator();
          while(it.hasNext()){
              LocalItemLit localItemLit = (LocalItemLit) it.next();
              if(!grupos.contains(localItemLit)){
                  grupos.add(localItemLit);
                  grupos.addAll(getAscendentes(localItemLit));
              }   
          }
      }
      return grupos;
  }
 
  /**
   * verifica depois exclui
   * @param localItem
   * @throws ECARException
   */
  public void excluir(LocalItemLit localItem) throws ECARException {     
     try{
           boolean excluir = true;
        if(contar(localItem.getLocalItemHierarquiaLithsByCodLit()) > 0){
            excluir = false;
          throw new ECARException("localItem.exclusao.erro.localItemHierarquiaLithsByCodLit");
        }
        if(contar(localItem.getLocalItemHierarquiaLithsByCodLitPai()) > 0){
            excluir = false;
          throw new ECARException("localItem.exclusao.erro.localItemHierarquiaLithsByCodLitPai");
        }
        if(contar(localItem.getItemEstrutLocalIettls()) > 0){
            excluir = false;
          throw new ECARException("localItem.exclusao.erro.itemEstrutLocalIettls");
        }
       
        if (excluir) {
          List objs = new ArrayList();               
                if (localItem.getLocAtributoLocas() != null) {
                    Iterator itAtb = localItem.getLocAtributoLocas().iterator();
                    while (itAtb.hasNext()) {
                      LocAtributoLoca localAtrib = (LocAtributoLoca) itAtb.next();
                        objs.add(localAtrib);
                    }
                }
                localItem.setLocAtributoLocas(null);
                objs.add(localItem);                  
                super.excluir(objs);
        }
     }catch(ECARException e){
       this.logger.error(e);
         throw e;
     }   
  }
 

  /**
   * Recebe um localItemPai e retorna a lista de todos os localItem que podem ser seus filhos, respeitando hierarquia
   * j� estabelecida
   * @param localItemPai
         * @return
         * @throws ECARException
   */
  public List getLocalItemByLocalItem(LocalItemLit localItemPai) throws ECARException{
    List listaFilhos = new ArrayList();


    try{
        /* objetos que ser�o usados dentro do loop */
      Collection itens;
      LocalGrupoLgp localGrupoFilho;
       
      /* descobre o grupo do item */
      LocalGrupoLgp localGrupoPai = localItemPai.getLocalGrupoLgp();
     
      /* descobre os filhos do grupo (ex, municipio � filho de estado) */
      //Collection filhos = this.getSession().filter(localGrupoPai.getLocalGrupoHierarquiaLgphsByCodLgpPai(), "order by this.codLgp");
      Collection filhos = this.getDescendentes(localGrupoPai);
     
      // Comentado por Cristiano - Mantis 10417
      //filhos.add(localGrupoPai);
     
      String where = "where indAtivoLit='S' ";
     
      if(!"".equals(localItemPai.getIdentificacaoLit().trim())) {
        where += "and upper(identificacaoLit) like '%" + localItemPai.getIdentificacaoLit().trim().toUpperCase() + "%' ";
      }
     
      if(!"".equals(localItemPai.getCodIbgeLit().trim())) {
        where += "and upper(codIbgeLit) = '" + localItemPai.getCodIbgeLit().trim().toUpperCase() + "' ";
      }
     
      if(!"".equals(localItemPai.getCodPlanejamentoLit().trim())) {
        where += "and upper(codPlanejamentoLit) = '" + localItemPai.getCodPlanejamentoLit().trim().toUpperCase() + "' ";
      }
     
      Iterator it = filhos.iterator();

      /* obter os locais do grupo */
      while (it.hasNext()){
        localGrupoFilho = (LocalGrupoLgp) it.next();
       
          Query query = this.getSession().createQuery(
              "from LocalItemLit " + where + " and localGrupoLgp.codLgp = :codLgp");
          query.setLong("codLgp", localGrupoFilho.getCodLgp().longValue());

          itens = query.list();
       
        if(itens != null) {
          Iterator itAux = itens.iterator();

          while (itAux.hasNext()){
            LocalItemLit localItemLit = (LocalItemLit) itAux.next();
           
            if(!listaFilhos.contains(localItemLit)) {
              listaFilhos.add(localItemLit);
            }
          }
        }
      }

      Collections.sort(listaFilhos,
              new Comparator() {
              public int compare(Object o1, Object o2) {                                  
                LocalItemLit l1 = (LocalItemLit) o1;
                LocalItemLit l2 = (LocalItemLit) o2;
               
                String ord1 = l1.getLocalGrupoLgp().getCodLgp().toString() + l1.getIdentificacaoLit();
                String ord2 = l2.getLocalGrupoLgp().getCodLgp().toString() + l2.getIdentificacaoLit();

                return ord1.compareToIgnoreCase(ord2)
          }
           }
      );
         
       
    } catch (HibernateException e){
      this.logger.error(e);
        throw new ECARException(e);
    }
   
   
    return listaFilhos;
     
  }
   
    /**
     * Retorna uma lista com a lista completa de filhos de um LocalGrupoLgp
     *
     * @param localGrupoLgp
     * @return List de LocalGrupoLgp
     * @throws ECARException
     */  
    public List getDescendentes(LocalGrupoLgp localGrupoLgp) throws ECARException {
        List retorno = new ArrayList();
        if (localGrupoLgp.getLocalGrupoHierarquiaLgphsByCodLgpPai() != null) {
           
            Iterator it = localGrupoLgp.getLocalGrupoHierarquiaLgphsByCodLgpPai().iterator();
            while (it.hasNext()) {
              LocalGrupoLgp localGrupoLgpFilho = (LocalGrupoLgp) it.next();
               
                if (!retorno.contains(localGrupoLgpFilho))
                    retorno.add(localGrupoLgpFilho);
                retorno.addAll(this.getDescendentes(localGrupoLgpFilho));
            }
        }
        return retorno;
    }
   
  /**
   * verifica duplica��o depois salva
   * @param local
   * @throws ECARException
   */
  public void salvar(LocalItemLit local) throws ECARException {
    if (pesquisarDuplos(local, new String[] {"identificacaoLit"}, "codLit").size() > 0)
        throw new ECARException("localItem.validacao.registroDuplicado");
   
    List filhos = new ArrayList();
    if (local.getLocAtributoLocas() != null)
      filhos.addAll(local.getLocAtributoLocas());
   
        super.salvar(local, filhos);
  }
 

  /**
   *
         * @param pLocal
         * @return List
         * @throws ECARException
   */
  public ArrayList<LocalItemLit> pesquisarPorCodIBGE(LocalItemLit pLocal) throws ECARException {         
    Query query = this.getSession().
      createQuery("select i from LocalItemLit i where i.codIbgeLit = '" + pLocal.getCodIbgeLit() + "'");
    return (ArrayList)query.list();
  }
 
  /**
         * @param mapLocais
         * @throws ECARException
   */
  public void salvar(Map<Long, List<LocalItemLit>> mapLocais) throws ECARException {
    inicializarLogBean();
    Long chave = null;
    Transaction tx = null;
    try {
      LocalItemLit local = null;
      LocalItemLit localTemp = null;
      LocalItemLit localPai = null;
     
        Set<Long> chaves = mapLocais.keySet();
      Iterator<Long> chavesIt = chaves.iterator();
      List<LocalItemLit> locais = new ArrayList<LocalItemLit>();
      List<LocalItemLit> locaisTemp = new ArrayList<LocalItemLit>();
      Iterator<LocalItemLit> locaisIt = null;
           
      List<LocalItemLit> pais = new ArrayList<LocalItemLit>();
     
      tx = session.beginTransaction();

      while(chavesIt.hasNext()) {
        // Pega os locais por UF
        chave = chavesIt.next();

        // Salva local pai
        localPai = new LocalItemLit();
        localPai.setCodIbgeLit(chave.toString());
        pais = pesquisarPorCodIBGE(localPai);
               
        if(pais != null && !pais.isEmpty()) {
          localPai = pais.get(0);
          // Pega locais filhos
          locais = mapLocais.get(chave);
         
          locaisIt = locais.iterator();
          while(locaisIt.hasNext()) {
            local = locaisIt.next();
            locaisTemp = pesquisarPorCodIBGE(local);
           
            if(locaisTemp != null && !locaisTemp.isEmpty()) {
                       
              if(locaisTemp.size() > 1) {
                int indice = locaisTemp.size();
                for(int i = 0; i < indice; i++) {
                  localTemp = locaisTemp.get(i);
                  if(!(localTemp.getIdentificacaoLit()).equalsIgnoreCase(local.getIdentificacaoLit())) {
                    localTemp = null;
                  } else {
                    //System.out.println("---------"+localTemp.getCodLit()+"------------> " + localTemp.getIdentificacaoLit());
                    break;
                  }
                }               
              } else {
                localTemp = locaisTemp.get(0);
              }
             
              this.setAtributos(request, localTemp);
              //System.out.println("-------------1------> "+ localTemp.getCodLit());
             
              // Salva local e hierarquia local
              if(localTemp.getLocalItemHierarquiaLithsByCodLit() != null) {
                if(!localTemp.getLocalItemHierarquiaLithsByCodLit().contains(localPai))
                  localTemp.getLocalItemHierarquiaLithsByCodLit().add(localPai);
              } else {
                localTemp.setLocalItemHierarquiaLithsByCodLit(new HashSet());
                localTemp.getLocalItemHierarquiaLithsByCodLit().add(localPai);
              }
              session.update(localTemp);
            } else {
              this.setAtributos(request, local);
             
              // Salva local
              session.saveOrUpdate(local);
              //System.out.println("---------------2----> "+ local.getCodLit());
             
              // Salva hierarquia local
              if(local.getLocalItemHierarquiaLithsByCodLit() != null) {
                local.getLocalItemHierarquiaLithsByCodLit().add(localPai);
              } else {
                local.setLocalItemHierarquiaLithsByCodLit(new HashSet());
                local.getLocalItemHierarquiaLithsByCodLit().add(localPai);
              }
              session.saveOrUpdate(local);
            }
          }
        } else {
          // Pega locais filhos
          locais = mapLocais.get(chave);
         
          locaisIt = locais.iterator();
          while(locaisIt.hasNext()) {
            local = locaisIt.next();
            locaisTemp = pesquisarPorCodIBGE(local);
           
            if(locaisTemp != null && !locaisTemp.isEmpty()) {
                       
              if(locaisTemp.size() > 1) {
                int indice = locaisTemp.size();
                for(int i = 0; i < indice; i++) {
                  localTemp = locaisTemp.get(i);
                  if(!(localTemp.getIdentificacaoLit()).equalsIgnoreCase(local.getIdentificacaoLit())) {
                    localTemp = null;
                  } else {
                    break;
                  }
                }               
              } else {
                localTemp = locaisTemp.get(0);
              }
             
              this.setAtributos(request, localTemp);
              // Salva local
              session.update(localTemp);
            } else {
              this.setAtributos(request, local);
             
              // Salva local
              session.saveOrUpdate(local);
            }
          }
        }
      }
     
      tx.commit();
     
      if(logBean != null) {
        logBean.setCodigoTransacao(Data.getHoraAtual(false));
        logBean.setOperacao("INC");
      }

    } 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");
    }
  }
 
        /**
         *
         * @param local
         * @param request
         * @throws Exception
         */
        public void alterar(LocalItemLit local, HttpServletRequest request)
        throws Exception {
    if (pesquisarDuplos(local, new String[] {"identificacaoLit"}, "codLit").size() > 0)
        throw new ECARException("localItem.validacao.registroDuplicado");
   
    Transaction tx = null;
   
    try {
      List objetos = new ArrayList();
      super.inicializarLogBean();
      tx = session.beginTransaction();
     
      if (local.getLocAtributoLocas() != null) {
        Iterator itAtt = local.getLocAtributoLocas().iterator();
        while (itAtt.hasNext()) {
          LocAtributoLoca localAtributo = (LocAtributoLoca) itAtt.next();
         
                    if(localAtributo.getSisAtributoSatb().getSisGrupoAtributoSga().getSisTipoExibicGrupoSteg().getCodSteg() == Input.IMAGEM){
                     
                      String nomeCampo = request.getParameter("a" + localAtributo.getSisAtributoSatb().getSisGrupoAtributoSga().getCodSga().toString());
                     
                      if (nomeCampo != null && nomeCampo.equals("")){
                       
                  String fullFile = localAtributo.getInformacao();
                 
                  if (fullFile.lastIndexOf("=") != -1)    
                    fullFile = fullFile.substring(fullFile.lastIndexOf("=") + 1);
               
                File f = new File(fullFile);
                if( f.exists() )
                  FileUpload.apagarArquivo(fullFile);
                      }
                    }
         
          session.delete(localAtributo);
          objetos.add(localAtributo);
        }
      }
      local.setLocAtributoLocas(null);
     
      this.setAtributos(request, local);
     
      List filhos = new ArrayList();
      if (local.getLocAtributoLocas() != null) {
        filhos.addAll(local.getLocAtributoLocas());
      }
     
      session.update(local);
      objetos.add(local);
     
      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;
    }
  }
 
  /**
   * Recebe um LocalGrupoLgp e retorna a lista de todos os localItem que s�o
   *     do grupo.
         * @param localGrupo
   * @return List
         * @throws ECARException
         * @throws HibernateException
   */
  public List getLocalItemPorLocalGrupo(LocalGrupoLgp localGrupo)
        throws ECARException, HibernateException{
      Query query = this.getSession().createQuery(
          "select lit from LocalItemLit lit" +
          " where lit.localGrupoLgp.codLgp = :codLgp" +
          " and lit.indAtivoLit = 'S'" +
          " order by lit.identificacaoLit");
      query.setLong("codLgp", localGrupo.getCodLgp().longValue());
   
    return query.list();
  }

 
        /**
         *
         * @param localGrupo
         * @return
         * @throws ECARException
         * @throws HibernateException
         */
  public List getLocalItemPorLocalGrupo(Long localGrupo)throws ECARException, HibernateException{

    LocalGrupoLgp grupo = new LocalGrupoLgp();
    grupo.setCodLgp(localGrupo);
    return getLocalItemPorLocalGrupo( grupo );
  }
 
  /**
   * Devolve uma lista de LocalItemLit ativos que s�o pais do local passado como
   * par�metro
   * @param localItem
   * @return List
   */
  public List getLocaisPais(LocalItemLit localItem) {
    List locaisPais = new ArrayList();
   
    if(localItem.getLocalItemHierarquiaLithsByCodLit() != null){
      locaisPais.addAll(localItem.getLocalItemHierarquiaLithsByCodLit());
    }
   
    return locaisPais;
  }
 
  /**
   * Devolve uma lista de LocalItemLit ativos que s�o filhos do local passado como
   * par�metro
   * @param localItem
   * @return List
   */
  public List getLocaisFilhos(LocalItemLit localItem) {
    List locaisFilhos = new ArrayList();
   
    if(localItem.getLocalItemHierarquiaLithsByCodLitPai() != null){
      locaisFilhos.addAll(localItem.getLocalItemHierarquiaLithsByCodLitPai());
    }
   
    return locaisFilhos;
  }
 
        /**
         *
         * @param localItem
         * @return
         * @throws ECARException
         */
        public List getLocaisFilhos(Long localItem) throws ECARException{
    LocalItemLit item = (LocalItemLit)this.buscar(LocalItemLit.class, localItem);   
    return getLocaisFilhos(item);
  }
 
  /**
   *
   * @param local
   * @param grupoAtributo
   * @return List atributos
   */
  public List getAtributosLocalByGrupo(LocalItemLit local, SisGrupoAtributoSga grupoAtributo) {
    List retorno = new ArrayList();
   
    Set result = local.getLocAtributoLocas();
        if (result != null) {
            if (result.size() > 0) {
                Iterator it = result.iterator();
                while (it.hasNext()) {
                  LocAtributoLoca localAtributo = (LocAtributoLoca) it.next();
                  if (localAtributo.getSisAtributoSatb().getSisGrupoAtributoSga().equals(grupoAtributo))
                    retorno.add(localAtributo);
                }
            }
        }
   
    return retorno;
  }
 
  /**
   * Obt�m os atributos din�micos da p�gina e os transforma para uma lista de
   * LocAtributoLoca utilizado para salvar e alterar LocalItemLit.
   * @param request
         * @param localItem
         * @throws ECARException
   */
  public void setAtributos(HttpServletRequest request,
            LocalItemLit localItem) throws ECARException {
    localItem.setLocAtributoLocas(null);
    List lAtributos;
    lAtributos =  new SisGrupoAtributoDao(request).getGruposAtributosCadastro("L");
        Iterator it = lAtributos.iterator();
        while (it.hasNext()) {
            SisGrupoAtributoSga grupoAtributo = (SisGrupoAtributoSga) it.next();          
            if (!"".equals(Pagina.getParamStr(request, "a" + grupoAtributo.getCodSga().toString()))) {
                LocAtributoLoca localAtributo = new LocAtributoLoca();
                localAtributo.setLocalItemLit(localItem);
                /*
                 * Caso o tipo de campo seja texto considera-se que o Grupo de
                 * Atributos possuir� apenas 1 atributo que o representa.
                 */
                if (SisTipoExibicGrupoDao.TEXT.equals(grupoAtributo.getSisTipoExibicGrupoSteg().getCodSteg().toString())
                     || SisTipoExibicGrupoDao.VALIDACAO.equals(grupoAtributo.getSisTipoExibicGrupoSteg().getCodSteg().toString())
                     || SisTipoExibicGrupoDao.TEXTAREA.equals(grupoAtributo.getSisTipoExibicGrupoSteg().getCodSteg().toString())
                  || SisTipoExibicGrupoDao.IMAGEM.equals(grupoAtributo.getSisTipoExibicGrupoSteg().getCodSteg().toString())) {
                    if (grupoAtributo.getSisAtributoSatbs() != null && grupoAtributo.getSisAtributoSatbs().size() > 0) {
                        localAtributo.setInformacao(Pagina.getParamStr(request,"a" + grupoAtributo.getCodSga().toString()));
                        localAtributo.setSisAtributoSatb((SisAtributoSatb) grupoAtributo.getSisAtributoSatbs().iterator().next());
                        localAtributo.setDataInclusao(Data.getDataAtual());
                        if (localItem.getLocAtributoLocas() == null)
                            localItem.setLocAtributoLocas(new HashSet());
                        localItem.getLocAtributoLocas().add(localAtributo);
                       
                        String pathRaiz = request.getContextPath();
                       
                        // tratamento imagem
              String caminhoAuxiliarImagem = Pagina.getParamStr(request, "hidImagem" + "a"
                  + grupoAtributo.getCodSga().toString());
              if (caminhoAuxiliarImagem!=null && caminhoAuxiliarImagem.length()>0) {
               
                String chave = localAtributo.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)){
//                              localAtributo.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 no campo "a" + codigo de grupo de atributo
                  try {                 
                    String nomeArquivoNovo = FileUpload.salvarArquivoSessaoFisicamente(request, "a" + grupoAtributo.getCodSga().toString(), caminhoAuxiliarImagem);
                    if(nomeArquivoNovo != null && !nomeArquivoNovo.equals(""))
                      localAtributo.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});
                  }
//                            }
              }
                    }
                } else {

                    String[] atributos = request.getParameterValues("a"
                            + grupoAtributo.getCodSga().toString());
                    for (int i = 0; i < atributos.length; i++) {
                        /*
                         * Tenho que criar novamente o usu�rio atributo sen�o
                         * ele n�o � adicionado no set no final deste la�o
                         */
                        localAtributo = new LocAtributoLoca();
                        localAtributo.setLocalItemLit(localItem);
                        localAtributo.setSisAtributoSatb((SisAtributoSatb) super.buscar(SisAtributoSatb.class, Long.valueOf(atributos[i])));
                        localAtributo.setDataInclusao(Data.getDataAtual());
                        if (localItem.getLocAtributoLocas() == null)
                            localItem.setLocAtributoLocas(new HashSet());
                        localItem.getLocAtributoLocas().add(localAtributo);
                    }
                }
            }
            /* Foi necess�rio alterar o nome dos campos dos elementos multitexto, adicionando "-codSatb"
             * Assim, ficamos com o nome do campo no seguinte padr�o: "a + codSteg + - + codSatb" (ex.: a12-38)
             * Isto foi feito visto a diferen�a existente entre um grupo com suporte a 1 campo texto
             * e este, que suporta v�rios campos texto.
             */
            else{
                if (SisTipoExibicGrupoDao.MULTITEXTO.equals(grupoAtributo.getSisTipoExibicGrupoSteg().getCodSteg().toString()))
                {
                  Enumeration lAtrib = request.getParameterNames();
                  while(lAtrib.hasMoreElements())
                  {
                    String atrib = (String)lAtrib.nextElement();
                    if (atrib.lastIndexOf('-') > 0)
                    {
                      String nomeAtrib = atrib.substring(0,atrib.lastIndexOf('-'));
                      String nomeCampo = atrib.substring(atrib.lastIndexOf('-')+1);
                      if (nomeAtrib.equals("a"+grupoAtributo.getCodSga().toString())
                             && !"".equals(Pagina.getParamStr(request, atrib)))
                      {
                                LocAtributoLoca localAtributo = new LocAtributoLoca();
                                localAtributo.setLocalItemLit(localItem);
                                localAtributo.setInformacao(Pagina.getParamStr(request, atrib));
                                localAtributo.setSisAtributoSatb((SisAtributoSatb) super.buscar(SisAtributoSatb.class, Long.valueOf(nomeCampo)));
                                localAtributo.setDataInclusao(Data.getDataAtual());
                                if (localItem.getLocAtributoLocas() == null)
                                    localItem.setLocAtributoLocas(new HashSet());
                                localItem.getLocAtributoLocas().add(localAtributo);
                      }
                    }
                  }
                }           
            }
        }
    }
 
  /**
   *
   * @param local
   * @return List
   * @throws ECARException
   */
  public List pesquisar(LocalItemLit local) throws ECARException{         
      // classes marcadas na tela como filtro
      List listFiltro = new ArrayList();
      if(local.getLocAtributoLocas() != null && local.getLocAtributoLocas().size() > 0) {
        Iterator itAtr = local.getLocAtributoLocas().iterator();
        LocAtributoLoca localAtributo;
        while(itAtr.hasNext()) {
          localAtributo = (LocAtributoLoca) itAtr.next();
          listFiltro.add(localAtributo);
        }
      }

       List pesquisa = super.pesquisar(local, new String[] {"identificacaoLit","asc"});
      
       Iterator it = pesquisa.iterator();
       while (it.hasNext()) {
         LocalItemLit localAux = (LocalItemLit) it.next();

         //verifica��es se foi marcado classes de acesso como filtro da pesquisa
          boolean ignorar = false;
          List listVerificacoes = new ArrayList();
        
          if (listFiltro.size() > 0) {
           if (localAux.getLocAtributoLocas() != null && localAux.getLocAtributoLocas().size() > 0) {
            
             Iterator itAtr = localAux.getLocAtributoLocas().iterator();
             LocAtributoLoca locAtrAux;
             while (itAtr.hasNext()) {
               locAtrAux = (LocAtributoLoca) itAtr.next();
               listVerificacoes.add(locAtrAux);
             }
            
                Iterator itClassesTela = listFiltro.iterator();
                   List listIgnorar = new ArrayList();
                   String ignorarItem = "";
                   LocAtributoLoca locaisTela;
                  
                   while (itClassesTela.hasNext()) {
                     locaisTela = (LocAtributoLoca) itClassesTela.next();
                  Iterator itVerificacoes = listVerificacoes.iterator();               
                  ignorarItem = "SIM";
                  LocAtributoLoca atributos;
                  while (itVerificacoes.hasNext()) {
                    atributos = (LocAtributoLoca) itVerificacoes.next();
                    SisGrupoAtributoSga tipo = (SisGrupoAtributoSga) locaisTela.getSisAtributoSatb().getSisGrupoAtributoSga();
                    if (SisTipoExibicGrupoDao.TEXT.equals(tipo.getSisTipoExibicGrupoSteg().getCodSteg().toString())) {
                      if (atributos.getInformacao() != null && atributos.getInformacao().length() > 0) {
                        if (atributos.getInformacao().indexOf(atributos.getInformacao()) > -1) {
                          ignorarItem = "NAO";
                          break;
                        }
                      }
                    }
                    else {
                      if (atributos.getSisAtributoSatb().getCodSatb().longValue() == locaisTela.getSisAtributoSatb().getCodSatb().longValue()) {
                        ignorarItem = "NAO";
                        break;
                      }
                    }
                  }
                 
                  listIgnorar.add(ignorarItem);
                   }
               
                   if (listIgnorar.contains("SIM")) {
                     ignorar = true;
                   } else {
                     ignorar = false;
                   }
              } else {
                ignorar = true;
              }
         } if (ignorar) {
             it.remove();
            }
       }
      
       return pesquisa;
    }
 
  /**
   *
   * @param codLocais
   * @return List
   * @throws Exception
   */
  public List pesquisarCodLocais(String codLocais) throws Exception {         
    Query query = this.getSession().createQuery("select i from LocalItemLit i where i.codLit IN (" + codLocais + ")");
    return query.list();
  }
}
TOP

Related Classes of ecar.dao.LocalItemDao

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.