View Javadoc

1   /*
2    * Criado em 19/01/2005
3    */
4   package ecar.dao;
5   
6   import java.io.File;
7   import java.util.Collection;
8   import java.util.HashSet;
9   import java.util.Iterator;
10  import java.util.List;
11  
12  import javax.servlet.http.HttpServletRequest;
13  
14  import org.apache.commons.fileupload.FileItem;
15  import org.hibernate.HibernateException;
16  import org.hibernate.Query;
17  
18  import comum.database.Dao;
19  import comum.util.Data;
20  import comum.util.FileUpload;
21  
22  import ecar.exception.ECARException;
23  import ecar.pojo.AcompReferenciaItemAri;
24  import ecar.pojo.ItemEstrUplCategIettuc;
25  import ecar.pojo.ItemEstrutUploadIettup;
26  import ecar.pojo.ItemEstruturaIett;
27  import ecar.pojo.UploadTipoCategoriaUtc;
28  import ecar.pojo.UsuarioUsu;
29  import ecar.util.Dominios;
30  
31  /**
32   * @author felipev
33   */
34  public class ItemEstruturaUploadCategoriaDao extends Dao {
35  
36    public ItemEstruturaUploadCategoriaDao(HttpServletRequest request) {
37      super();
38      this.request = request;
39  
40    }
41  
42    /**
43     * Retorna as Categorias de Anexo ativas de um Item
44     * @param itemEstrutura
45     * @return Collection de Objetos ItemEstrUplCategIettuc
46     * @throws ECARException
47     */
48    public Collection getAtivos(ItemEstruturaIett itemEstrutura) throws ECARException {
49      try {
50        Query query = this.getSession().createQuery("select iettuc from ItemEstrUplCategIettuc iettuc" + " where iettuc.itemEstruturaIett.codIett = :codIett" + " and iettuc.itemEstruturaIett.indAtivoIett = 'S'" + " and iettuc.indAtivoIettuc = 'S'");
51        query.setLong("codIett", itemEstrutura.getCodIett().longValue());
52  
53        return query.list();
54      } catch (HibernateException e) {
55        this.logger.error(e);
56        throw new ECARException(e);
57      }
58    }
59  
60    public int contaAtivos(List listaItemEstUC) {
61      int contadorAtivos = 0;
62      Iterator itItemEstUC = listaItemEstUC.iterator();
63      while (itItemEstUC.hasNext()) {
64        ItemEstrUplCategIettuc itemEstUC = (ItemEstrUplCategIettuc) itItemEstUC.next();
65        if (itemEstUC.getItemEstrutUploadIettups() != null) {
66          HashSet setItemEstrutUploadIettups = new HashSet();
67          Iterator itItemEstrutUploadIettups = itemEstUC.getItemEstrutUploadIettups().iterator();
68          while (itItemEstrutUploadIettups.hasNext()) {
69            ItemEstrutUploadIettup itemEstrutUploadIettup = (ItemEstrutUploadIettup) itItemEstrutUploadIettups.next();
70            if (Dominios.ATIVO.equalsIgnoreCase(itemEstrutUploadIettup.getIndAtivoIettup())) {
71              setItemEstrutUploadIettups.add(itemEstrutUploadIettup);
72              contadorAtivos++;
73            }
74          }
75        }
76      }
77      return contadorAtivos;
78    }
79  
80    public List excluiInativos(List listaItemEstUC) {
81      Iterator itItemEstUC = listaItemEstUC.iterator();
82      while (itItemEstUC.hasNext()) {
83        ItemEstrUplCategIettuc itemEstUC = (ItemEstrUplCategIettuc) itItemEstUC.next();
84        if (itemEstUC.getItemEstrutUploadIettups() != null) {
85          HashSet setItemEstrutUploadIettups = new HashSet();
86          Iterator itItemEstrutUploadIettups = itemEstUC.getItemEstrutUploadIettups().iterator();
87          while (itItemEstrutUploadIettups.hasNext()) {
88            ItemEstrutUploadIettup itemEstrutUploadIettup = (ItemEstrutUploadIettup) itItemEstrutUploadIettups.next();
89            if (Dominios.ATIVO.equalsIgnoreCase(itemEstrutUploadIettup.getIndAtivoIettup())) {
90              setItemEstrutUploadIettups.add(itemEstrutUploadIettup);
91            }
92          }
93          itemEstUC.setItemEstrutUploadIettups(setItemEstrutUploadIettups);
94        }
95      }
96      return listaItemEstUC;
97    }
98  
99    /**
100    * Retorna os ItemEstrUplCategIettuc ativos de um UploadTipoCategoria e de um
101    * ItemEstrutura
102    * @param UploadTipoCategoria
103    * @return Collection de Objetos ItemEstrUplCategIettuc
104    * @throws ECARException
105    */
106   public List getItemEstrUplCategIettucs(UploadTipoCategoriaUtc uploadTipoCat, ItemEstruturaIett itemEstrutura) throws ECARException {
107     try {
108       StringBuilder select = new StringBuilder("select itemEstrutUpCat from ItemEstrUplCategIettuc as itemEstrutUpCat").append(" where itemEstrutUpCat.uploadTipoCategoriaUtc.codUtc = :codUtc").append(" and itemEstrutUpCat.itemEstruturaIett.codIett = :codIett").append(" and itemEstrutUpCat.itemEstruturaIett.indAtivoIett = 'S'").append(" and itemEstrutUpCat.indAtivoIettuc = :indAtivo").append(" order by itemEstrutUpCat.nomeIettuc");
109 
110       Query query = this.getSession().createQuery(select.toString());
111       query.setLong("codUtc", uploadTipoCat.getCodUtc().longValue());
112       query.setLong("codIett", itemEstrutura.getCodIett().longValue());
113       query.setString("indAtivo", "S");
114 
115       List listaItemEstUC = query.list();
116       excluiInativos(listaItemEstUC);
117       return listaItemEstUC;
118 
119       // return query.list();
120 
121     } catch (HibernateException e) {
122       this.logger.error(e);
123       throw new ECARException(e);
124     }
125   }
126 
127   /**
128    * Retorna os ItemEstrUplCategIettuc ativas de um UploadTipoCategoria e de um
129    * ItemEstrutura com parâmetros para paginação.
130    * @param uploadTipoCat
131    * @param itemEstrutura
132    * @param pagina
133    * @param resultados Pagina
134    * @return Collection de Objetos ItemEstrUplCategIettuc
135    * @throws ECARException
136    */
137   public List getItemEstrUplCategIettucsPaginacao(UploadTipoCategoriaUtc uploadTipoCat, ItemEstruturaIett itemEstrutura, int pagina, int resultados) throws ECARException {
138     try {
139       StringBuilder select = new StringBuilder("select itemEstrutUpCat from ItemEstrUplCategIettuc as itemEstrutUpCat").append(" where itemEstrutUpCat.uploadTipoCategoriaUtc.codUtc = :codUtc").append(" and itemEstrutUpCat.itemEstruturaIett.codIett = :codIett").append(" and itemEstrutUpCat.indAtivoIettuc = :indAtivo").append(" order by itemEstrutUpCat.nomeIettuc");
140 
141       Query query = this.getSession().createQuery(select.toString());
142       query.setLong("codUtc", uploadTipoCat.getCodUtc().longValue());
143       query.setLong("codIett", itemEstrutura.getCodIett().longValue());
144       query.setString("indAtivo", "S");
145 
146       query.setFirstResult(pagina); /* inicia no 0 */
147       query.setMaxResults(resultados);
148 
149       List listaItemEstUC = query.list();
150       excluiInativos(listaItemEstUC);
151       return listaItemEstUC;
152 
153       // return query.list();
154 
155     } catch (HibernateException e) {
156       this.logger.error(e);
157       throw new ECARException(e);
158     }
159   }
160 
161   /**
162    * Contar os getItemEstrUplCategIettucs
163    * @param UploadTipoCategoria
164    * @return Collection de Objetos ItemEstrUplCategIettuc
165    * @throws ECARException
166    */
167   public int contarItemEstrUplCategIettucs(UploadTipoCategoriaUtc uploadTipoCat, ItemEstruturaIett itemEstrutura) throws ECARException {
168     try {
169       int resultado = 0;
170 
171       StringBuilder select = new StringBuilder("select itemEstrutUpCat from ItemEstrUplCategIettuc itemEstrutUpCat").append(" where itemEstrutUpCat.uploadTipoCategoriaUtc.codUtc = :codUtc").append(" and itemEstrutUpCat.itemEstruturaIett.codIett = :codIett").append(" and itemEstrutUpCat.indAtivoIettuc = :indAtivo");
172 
173       Query query = this.getSession().createQuery(select.toString());
174       query.setLong("codUtc", uploadTipoCat.getCodUtc().longValue());
175       query.setLong("codIett", itemEstrutura.getCodIett().longValue());
176       query.setString("indAtivo", "S");
177 
178       List retorno = query.list();
179       if (!retorno.isEmpty()) {
180         resultado = contaAtivos(retorno);
181         // resultado = retorno.size();
182       }
183       return resultado;
184     } catch (HibernateException e) {
185       this.logger.error(e);
186       throw new ECARException(e);
187     }
188   }
189 
190   /**
191    * Constrói um objeto ItemEstrUplCategIettuc a partir de atributos passados no
192    * request
193    * @param request
194    * @param categoria
195    * @throws ECARException
196    */
197   public void setItemEstruturaUploadCategoria(List campos, ItemEstrUplCategIettuc categoria, String pathRaiz, String pathRelativo, boolean salvarImagem) throws ECARException {
198 
199     try {
200       Iterator it = campos.iterator();
201       while (it.hasNext()) {
202         FileItem fileItem = (FileItem) it.next();
203         if (!fileItem.isFormField() && !"".equals(fileItem.getName()) && salvarImagem) {
204           /*
205            * se o campo é ser tratado é um campo file, e a categoria já possui
206            * um arquivo gravado, apaga este arquivo
207            */
208           if (categoria.getImagemIettuc() != null)
209             FileUpload.apagarArquivo(pathRaiz + categoria.getImagemIettuc());
210 
211           File arquivoGravado = FileUpload.salvarNoDisco(fileItem, FileUpload.getPathFisico(pathRaiz, pathRelativo, FileUpload.getNomeArquivo(fileItem)));
212           categoria.setImagemIettuc(FileUpload.getPathFisico("", pathRelativo, FileUpload.getNomeArquivo(fileItem)));
213         }
214         else {
215           if ("codIett".equals(fileItem.getFieldName())) {
216             ItemEstruturaIett itemEstrutura = (ItemEstruturaIett) this.buscar(ItemEstruturaIett.class, Long.valueOf(fileItem.getString()));
217             categoria.setItemEstruturaIett(itemEstrutura);
218           }
219           if ("cod".equals(fileItem.getFieldName()) && !"".equals(fileItem.getString()))
220             categoria.setCodIettuc(Long.valueOf(fileItem.getString()));
221           if ("descricaoIettuc".equals(fileItem.getFieldName()))
222             categoria.setDescricaoIettuc(fileItem.getString());
223           if ("nomeIettuc".equals(fileItem.getFieldName()))
224             categoria.setNomeIettuc(fileItem.getString());
225           if ("uploadTipoCategoriaUtc".equals(fileItem.getFieldName()) && !"".equals(fileItem.getString()))
226             categoria.setUploadTipoCategoriaUtc((UploadTipoCategoriaUtc) this.buscar(UploadTipoCategoriaUtc.class, Long.valueOf(fileItem.getString())));
227           if ("codAri".equals(fileItem.getFieldName()) && !"".equals(fileItem.getString()))
228             categoria.setAcompReferenciaItemAri((AcompReferenciaItemAri) this.buscar(AcompReferenciaItemAri.class, Long.valueOf(fileItem.getString())));
229 
230         }
231       }
232 
233       categoria.setIndAtivoIettuc("S");
234 
235     } catch (Exception e) {
236       this.logger.error(e);
237       throw new ECARException("erro.exception");
238     }
239 
240   }
241 
242   /**
243    * Constrói um objeto ItemEstrUplCategIettuc a partir de atributos passados no
244    * request
245    * @param request
246    * @param categoria
247    * @throws ECARException
248    */
249   public void setItemEstruturaUploadCategoria(List campos, ItemEstrUplCategIettuc categoria, String pathRaiz, String pathRelativo) throws ECARException {
250     this.setItemEstruturaUploadCategoria(campos, categoria, pathRaiz, pathRelativo, true);
251   }
252 
253   /**
254    * s Recebe um Array com Códigos de Categorias. Para cada uma das Categorias
255    * verifica a existência de Anexos. Se não existirem exclui a Categoria. Se
256    * existirem, dispara uma Exception
257    * @param codigosParaExcluir
258    * @throws ECARException
259    */
260   public void excluir(String[] codigosParaExcluir, String pathRaiz) throws ECARException {
261     for (int i = 0; i < codigosParaExcluir.length; i++) {
262       ItemEstrUplCategIettuc categoria = (ItemEstrUplCategIettuc) this.buscar(ItemEstrUplCategIettuc.class, Long.valueOf(codigosParaExcluir[i]));
263       if (categoria.getItemEstrutUploadIettups() != null && categoria.getItemEstrutUploadIettups().size() > 0) {
264         throw new ECARException("itemEstrutura.categoriaAnexo.exclusao.possuiUpload");
265       }
266       else if (categoria.getAcompReferenciaItemAri() != null) {
267         throw new ECARException("itemEstrutura.categoriaAnexo.exclusao.possuiAri");
268       }
269       else {
270         this.excluir(categoria, pathRaiz);
271       }
272     }
273   }
274 
275   /**
276    * Exclui uma categoria de upload e apaga o arquivo de Imagem vinculado a ela
277    * @param categoria
278    * @throws ECARException
279    */
280   public void excluir(ItemEstrUplCategIettuc categoria, String pathRaiz) throws ECARException {
281     try {
282 
283       categoria.setIndAtivoIettuc("N");
284 
285       if (categoria.getImagemIettuc() != null) {
286         if (FileUpload.apagarArquivo(FileUpload.getPathFisico(pathRaiz, categoria.getImagemIettuc(), ""))) {
287           // super.excluir(categoria);
288           super.alterar(categoria);
289         }
290         else {
291           throw new ECARException("erro.excluirArquivo");
292         }
293       }
294       else
295         super.alterar(categoria);
296 
297     } catch (Exception e) {
298       this.logger.error(e);
299       throw new ECARException("erro.exception");
300     }
301 
302   }
303 
304   /**
305    * Salva um registro de Categoria de Upload
306    * @param pontoCritico
307    * @throws ECARException
308    */
309   public void salvar(ItemEstrUplCategIettuc categoria) throws ECARException {
310     categoria.setDataInclusaoIettuc(Data.getDataAtual());
311     super.salvar(categoria);
312   }
313 
314   public void alterar(Object obj, String excluiImagem, String pathRaiz) throws ECARException {
315     try {
316       ItemEstrUplCategIettuc categoria = (ItemEstrUplCategIettuc) obj;
317 
318       if ("on".equals(excluiImagem)) {
319         if (FileUpload.apagarArquivo(FileUpload.getPathFisico(pathRaiz, categoria.getImagemIettuc(), ""))) {
320           alterar(obj);
321         }
322         else {
323           throw new ECARException("erro.excluirArquivo");
324         }
325       }
326       else {
327         alterar(obj);
328       }
329     } catch (Exception e) {
330       this.logger.error(e);
331       throw new ECARException("erro.exception");
332     }
333   }
334 
335   /**
336    * A partir de um ItemEstrUplCategIettuc retornar uma collection de
337    * ItemEstrutUploadIettups ordenada por nomeOriginalIettup
338    * @param itemEstUC
339    * @return
340    * @throws ECARException
341    */
342   public Collection getItemEstrutUploadIettups(ItemEstrUplCategIettuc itemEstUC) throws ECARException {
343     try {
344       Query query = this.getSession().createQuery("select iettup from ItemEstrutUploadIettup iettup" + " where iettup.itemEstrUplCategIettuc.codIettuc = :codIettuc" + " and iettup.indAtivoIettup = :indAtivo" + " order by iettup.nomeOriginalIettup");
345       query.setLong("codIettuc", itemEstUC.getCodIettuc().longValue());
346       query.setString("indAtivo", "S");
347 
348       return query.list();
349     } catch (HibernateException e) {
350       this.logger.error(e);
351       throw new ECARException(e);
352     }
353   }
354 }