View Javadoc

1   /*
2    * Criado em 28/10/2004
3    */
4   package ecar.dao;
5   
6   import java.util.ArrayList;
7   import java.util.Iterator;
8   import java.util.List;
9   
10  import javax.servlet.http.HttpServletRequest;
11  
12  import org.apache.log4j.Logger;
13  
14  import comum.database.Dao;
15  
16  import ecar.exception.ECARException;
17  import ecar.pojo.AcompRealFisicoArf;
18  import ecar.pojo.AcompRelatorioArel;
19  import ecar.pojo.EstruturaEtt;
20  import ecar.pojo.ItemEstruturaIett;
21  import ecar.pojo.SituacaoSit;
22  import ecar.pojo.TipoFuncAcompTpfa;
23  
24  /**
25   * @author felipev
26   */
27  public class SituacaoDao extends Dao {
28  
29    /**
30     * Construtor. Chama o Session factory do Hibernate
31     */
32    public SituacaoDao(HttpServletRequest request) {
33      super();
34      this.request = request;
35    }
36  
37    /**
38     * Utiliza o método excluir da classe Dao realizando antes validações de
39     * relacionamento da situação com registros em outras tabelas.
40     * @param situacao
41     * @throws ECARException
42     */
43    public void excluir(SituacaoSit situacao) throws ECARException {
44      try {
45        boolean excluir = true;
46        if (contar(situacao.getAcompRealFisicoArfs()) > 0) {
47          excluir = false;
48          AcompRealFisicoArf arf = (AcompRealFisicoArf) new ArrayList(situacao.getAcompRealFisicoArfs()).get(0);
49          throw new ECARException("situacao.exclusao.erro.acompRealFisicoArfs", null, new String[] { arf.getItemEstruturaIett().getNomeIett() });
50        }
51        if (contar(situacao.getAcompRelatorioArels()) > 0) {
52          excluir = false;
53          AcompRelatorioArel arel = (AcompRelatorioArel) new ArrayList(situacao.getAcompRelatorioArels()).get(0);
54          throw new ECARException("situacao.exclusao.erro.acompRelatorioArels", null, new String[] { arel.getDescricaoArel() });
55        }
56        // if(contar(situacao.getEstruturaSituacaoEtts()) > 0){
57        // excluir = false;
58        // EstruturaEtt ett = (EstruturaEtt) new
59        // ArrayList(situacao.getEstruturaSituacaoEtts()).get(0);
60        // throw new ECARException("situacao.exclusao.erro.estruturaSituacaoEtts",
61        // null, new String[] {ett.getNomeEtt()});
62        // }
63        if (contar(situacao.getItemEstruturaIetts()) > 0) {
64          excluir = false;
65          ItemEstruturaIett iett = (ItemEstruturaIett) new ArrayList(situacao.getItemEstruturaIetts()).get(0);
66          throw new ECARException("situacao.exclusao.erro.itemEstruturaIetts", null, new String[] { iett.getNomeIett() });
67        }
68        // if(contar(situacao.getSituacaoTpFuncAcmpSitfas()) > 0){
69        // excluir = false;
70        // TipoFuncAcompTpfa tpfa = (TipoFuncAcompTpfa) new
71        // ArrayList(situacao.getSituacaoTpFuncAcmpSitfas()).get(0);
72        // throw new
73        // ECARException("situacao.exclusao.erro.situacaoTpFuncAcmpSitfas", null,
74        // new String [] {tpfa.getDescricaoTpfa()});
75        // }
76        if (excluir)
77          super.excluir(situacao);
78      } catch (ECARException e) {
79        this.logger.error(e);
80        throw e;
81      }
82    }
83  
84    /**
85     * Invoca o método pesquisar da classe Dao e filtra o resultado obtido para
86     * retornar somente os registros que tenham as estruturas e funções de
87     * acompanhamento informadas na pesquisa
88     * @param situacao
89     * @param ordem
90     * @return
91     * @throws ECARException
92     */
93    public List pesquisar(SituacaoSit situacao, String[] ordem) throws ECARException {
94  
95      List results = super.pesquisar(situacao, ordem);
96      if (situacao.getEstruturaSituacaoEtts() != null && situacao.getEstruturaSituacaoEtts().size() > 0) {
97        Iterator it = results.iterator();
98        while (it.hasNext()) {
99          SituacaoSit situacaoBanco = (SituacaoSit) it.next();
100         if (!situacaoBanco.getEstruturaSituacaoEtts().containsAll(situacao.getEstruturaSituacaoEtts())) {
101           it.remove();
102         }
103       }
104     }
105     if (situacao.getSituacaoTpFuncAcmpSitfas() != null && situacao.getSituacaoTpFuncAcmpSitfas().size() > 0) {
106       Iterator it = results.iterator();
107       while (it.hasNext()) {
108         SituacaoSit situacaoBanco = (SituacaoSit) it.next();
109         if (!situacaoBanco.getSituacaoTpFuncAcmpSitfas().containsAll(situacao.getSituacaoTpFuncAcmpSitfas())) {
110           it.remove();
111         }
112       }
113     }
114 
115     if (results.size() > 0) {
116       Iterator it = results.iterator();
117       SituacaoSit sit;
118       while (it.hasNext()) {
119         sit = (SituacaoSit) it.next();
120 
121         if (sit.getEstruturaSituacaoEtts() != null)
122           sit.getEstruturaSituacaoEtts().size();
123         if (sit.getSituacaoTpFuncAcmpSitfas() != null)
124           sit.getSituacaoTpFuncAcmpSitfas().size();
125       }
126     }
127     return results;
128 
129   }
130 
131   /**
132    * Retorna um list com identificações de todas as Funções de Acompanhamento de
133    * uma situação
134    * @param situacao
135    * @return List de Long
136    */
137   public List getFuncoesAcompanhamentoById(SituacaoSit situacao) {
138     List lFuncoes = new ArrayList();
139     if (situacao.getSituacaoTpFuncAcmpSitfas() != null) {
140       situacao.getSituacaoTpFuncAcmpSitfas().size(); // Faz isso para
141                                                      // inicializar a collection
142                                                      // fazendo o select do
143                                                      // banco
144       Iterator it = situacao.getSituacaoTpFuncAcmpSitfas().iterator();
145       while (it.hasNext()) {
146         TipoFuncAcompTpfa funcao = (TipoFuncAcompTpfa) it.next();
147         lFuncoes.add(funcao.getCodTpfa());
148       }
149     }
150     return lFuncoes;
151   }
152 
153   /**
154    * Retorna um list com identificações de todas as Estruturas de uma situação
155    * @param situacao
156    * @return List de Long
157    */
158   public List getEstruturasById(SituacaoSit situacao) {
159     List lEstrutura = new ArrayList();
160     if (situacao.getEstruturaSituacaoEtts() != null) {
161       Iterator it = situacao.getEstruturaSituacaoEtts().iterator();
162       while (it.hasNext()) {
163         EstruturaEtt estrutura = (EstruturaEtt) it.next();
164         lEstrutura.add(estrutura.getCodEtt());
165       }
166     }
167     return lEstrutura;
168   }
169 
170   /**
171    * Imprimi o script de validacao de acordo com as Situações que exigem
172    * comentario, quando indComentario = 'S'.
173    * @param lista - List, lista de situacaoSit
174    * @param campo - String, campo que será obrigatório de acordo com a Situação;
175    * @param cont - String, para ser utilizada com função eval() do JavaScript,
176    *          concatenando com o nome do campo, permitindo utilizad em vários
177    *          campos. (ver em
178    *          \regAcompanhamento\elabAcompanhamento\realizadoFisico.jsp) Para
179    *          ser utilizada como vazia, passar o valor "\"\"", que devolve duas
180    *          aspas ("") para ser utilizada no javascript;
181    * @param msg - String, mensagem a ser exibida;
182    * @return
183    * @throws ECARException
184    */
185   public String getScriptValidacao(List lista, String campo, String cont, String msg) throws ECARException {
186     Iterator itSit = lista.iterator();
187     StringBuilder strIf = new StringBuilder("");
188     boolean sitIndComentario = false;
189 
190     if (itSit.hasNext()) {
191       while (itSit.hasNext()) {
192         SituacaoSit situacao = (SituacaoSit) itSit.next();
193         if ("S".equalsIgnoreCase(situacao.getIndComentarioSit())) {
194           sitIndComentario = true;
195           if ("".equals(strIf))
196             strIf = new StringBuilder("\t\tif(Trim(eval(\"form.").append(campo).append("\" + ").append(cont).append(" + \".value\")) == \"\" && (");
197           else
198             strIf.append(" || ");
199           strIf.append("eval(\"form.situacaoSit\" + ").append(cont).append(" + \".value\") == ").append(situacao.getCodSit());
200         }
201       }
202     }
203 
204     if (sitIndComentario) {
205       strIf.append(")){\n");
206       strIf.append("\t\t\talert(\"").append(msg).append("\");\n");
207       strIf.append("\t\t\teval(\"form.").append(campo).append("\" + ").append(cont).append(" + \".focus()\");\n");
208       strIf.append("\t\t\treturn(false);\n");
209       strIf.append("\t\t}\n");
210     }
211 
212     return strIf.toString();
213   }
214 
215   /**
216    * Retorna lista de funções que sejam vinculadas a uma função de
217    * acompanhamento e a uma estrutura
218    * @param funcao
219    * @param estrutura
220    * @return
221    */
222   public List getSituacaoByTipoFuncaoAcompanhamentoEstrutura(TipoFuncAcompTpfa funcao, EstruturaEtt estrutura) {
223     List retorno = new ArrayList();
224 
225     Iterator it = funcao.getSituacaoTpFuncAcmpSitfas().iterator();
226 
227     while (it.hasNext()) {
228       SituacaoSit situacao = (SituacaoSit) it.next();
229       if (estrutura.getEstruturaSituacaoEtts() != null && estrutura.getEstruturaSituacaoEtts().contains(situacao)) {
230         retorno.add(situacao);
231       }
232     }
233 
234     return retorno;
235   }
236 
237   /**
238    * Retorna lista de situacoes que sejam vinculadas a uma estrutura
239    * @param estrutura
240    * @param ordem
241    * @return List
242    */
243   public List getSituacaoByEstrutura(EstruturaEtt estrutura, String[] ordem) {
244     List retorno = new ArrayList();
245     try {
246       List situacoes = this.listar(SituacaoSit.class, ordem);
247       Iterator it = situacoes.iterator();
248       while (it.hasNext()) {
249         SituacaoSit situacao = (SituacaoSit) it.next();
250         if (estrutura.getEstruturaSituacaoEtts() != null && estrutura.getEstruturaSituacaoEtts().contains(situacao)) {
251           retorno.add(situacao);
252         }
253       }
254     } catch (Exception e) {
255       Logger logger = Logger.getLogger(this.getClass());
256       logger.error(e);
257     }
258     return retorno;
259   }
260 
261   /**
262    * Retorna lista de situações que estão vinculadas qualquer estrutura.<br>
263    * @param ordem
264    * @return List
265    */
266   public List getSituacaoEmUsoPorEstrutura(String[] ordem) {
267     List retorno = new ArrayList();
268     try {
269       List situacoes = this.listar(SituacaoSit.class, ordem);
270       Iterator it = situacoes.iterator();
271 
272       while (it.hasNext()) {
273         SituacaoSit situacao = (SituacaoSit) it.next();
274 
275         if (situacao.getEstruturaSituacaoEtts() != null && situacao.getEstruturaSituacaoEtts().size() > 0) {
276           retorno.add(situacao);
277         }
278       }
279     } catch (Exception e) {
280       Logger logger = Logger.getLogger(this.getClass());
281       logger.error(e);
282     }
283     return retorno;
284   }
285 
286   /**
287    * verifica duplicação de registro depois salva
288    * @param situacao
289    * @throws ECARException
290    */
291   public void salvar(SituacaoSit situacao) throws ECARException {
292     if (pesquisarDuplos(situacao, new String[] { "descricaoSit" }, "codSit").size() > 0)
293       throw new ECARException("situacao.validacao.registroDuplicado");
294     super.salvar(situacao);
295   }
296 
297   /**
298    * verifica duplicação de registro depois Altera
299    * @param situacao
300    * @throws ECARException
301    */
302   public void alterar(SituacaoSit situacao) throws ECARException {
303     if (pesquisarDuplos(situacao, new String[] { "descricaoSit" }, "codSit").size() > 0)
304       throw new ECARException("situacao.validacao.registroDuplicado");
305     super.alterar(situacao);
306   }
307 }