Subversion Repositories Integrator Subversion

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
346 espaco 1
package br.com.ec.repository.jpa;
2
 
3
import java.util.List;
4
 
5
import javax.persistence.TypedQuery;
6
 
7
import org.springframework.stereotype.Repository;
8
 
9
import br.com.ec.core.util.DataUtils;
10
import br.com.ec.domain.dto.EntregaDTO;
11
import br.com.ec.domain.dto.ExtratoEntregasDTO;
12
import br.com.ec.domain.model.Pedido;
13
import br.com.ec.repository.PedidoRepository;
14
import br.com.ec.repository.SistemaAbstractRepository;
15
 
16
@Repository
17
public class PedidoRepositoryJpaImpl extends SistemaAbstractRepository<Pedido> implements PedidoRepository {
18
 
19
        @Override
20
        protected String getColunaOrdenadora() {
21
//              return "dataUltimaAlteracaoSituacao, dataPedido";
22
                return "dataPedido";
23
        }
24
 
25
        @Override
26
        public List<EntregaDTO> consultarEntregas(ExtratoEntregasDTO extratoEntregasDTO) {
27
                StringBuilder sql = new StringBuilder();
28
                sql.append("SELECT new br.com.ec.domain.dto.EntregaDTO(p.sequencial, p.dataPedido, p.dataEntrega, p.kilometragemEntrega) FROM Pedido p ");
29
                sql.append("WHERE p.dataEntrega >= :dataInicial AND p.dataEntrega <= :dataFinal ");
30
                sql.append("ORDER BY dataEntrega ");
31
                try {
32
                        TypedQuery<EntregaDTO> query = getEntityManager().createQuery(sql.toString(), EntregaDTO.class);
33
                        query.setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(extratoEntregasDTO.getVigenciaDTO().getDataInicio()));
34
                        query.setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(extratoEntregasDTO.getVigenciaDTO().getDataFim()));
35
                        return query.getResultList();
36
                } catch(Exception ex) {
37
                        ex.printStackTrace();
38
                        return null;
39
                }
40
        }
41
 
42
        /*
43
        @Override
44
        protected void setarStringParametrosConsulta(StringBuilder sql, ParametrosConsulta<Pedido> parametros) {
45
                if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade())) {
46
                        if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getSequencial())) {
47
                                sql.append("AND e.sequencial = :sequencial ");
48
                        } else {
49
                                if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getContatoCliente())) {
50
                                        sql.append("AND (");
51
                                        sql.append(sqlConsultarSemAcento("e.contatoCliente") + " LIKE upper(:contatoCliente) ");
52
                                        sql.append("OR EXISTS (SELECT c FROM Cliente c WHERE c.sequencial = e.cliente.sequencial AND ( ");
53
                                        sql.append(sqlConsultarSemAcento("e.cliente.nome") + " LIKE upper(:contatoCliente) OR ");
54
                                        sql.append("e.cliente.telefone LIKE upper(:contatoCliente) OR e.cliente.contato LIKE upper(:contatoCliente)))");
55
                                        sql.append(") ");
56
                                }
57
                                if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getTipoSituacao())) {
58
                                        sql.append("AND e.tipoSituacao = :tipoSituacao ");
59
                                }
60
                                if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getLoja())) {
61
                                        sql.append("AND e.loja.sequencial = :sequencialLoja ");
62
                                }
63
                                if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getObservacao())) {
64
                                        sql.append("AND ");
65
                                        sql.append(sqlConsultarSemAcento("e.observacao"));
66
                                        sql.append(" LIKE upper(:observacaoPedido) ");
67
                                }
68
                                if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getModelo())) {
69
                                        sql.append("AND e.modelo.sequencial = :sequencialModelo ");
70
                                }
71
                                if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getTipoPedido())) {
72
                                        sql.append("AND e.tipoPedido = :tipoPedido ");
73
                                }
74
                                if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getAtendido())) {
75
                                        if (((ParametrosConsultaPedidoDTO)parametros).getAtendido()) {
76
                                                sql.append("AND e.tipoSituacao IN (" + TipoSituacaoPedido.tipoSituacoesAtendidos() + ") ");
77
                                        } else {
78
                                                sql.append("AND e.tipoSituacao NOT IN (" + TipoSituacaoPedido.tipoSituacoesAtendidos() + ") ");
79
                                        }
80
                                }
81
                                if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getValidos())) {
82
                                        if (((ParametrosConsultaPedidoDTO)parametros).getValidos()) {
83
                                                sql.append("AND e.tipoSituacao != '" + TipoSituacaoPedido.INVALIDO.getValor() + "' ");
84
                                        }
85
                                }
86
                                if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getCompraSolicitada())) {
87
                                        if (((ParametrosConsultaPedidoDTO)parametros).getCompraSolicitada()) {
88
                                                sql.append("AND e.dataSolicitadoParaComprar != NULL ");
89
                                        } else {
90
                                                sql.append("AND e.dataSolicitadoParaComprar IS NULL ");
91
                                        }
92
                                }
93
                        }
94
                }
95
                if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getPessoa())) {
96
                        sql.append("AND e.usuarioPedido.pessoa.sequencial = :sequencialPessoa ");
97
                }
98
                if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getDataInicial())
99
                                && VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getDataFinal())) {
100
                        sql.append("AND e.dataPedido >= :dataInicial ");
101
                        sql.append("AND e.dataPedido <= :dataFinal ");
102
                }
103
        }
104
 
105
        @Override
106
        protected void setarQueryParametrosConsulta(Query query, ParametrosConsulta<Pedido> parametros) {
107
                if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade())) {
108
                        if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getSequencial())) {
109
                                query.setParameter("sequencial", ((ParametrosConsultaPedidoDTO)parametros).getEntidade().getSequencial());
110
                        } else {
111
                                if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getContatoCliente())) {
112
                                        query.setParameter("contatoCliente", "%" + removerAcentuacao(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getContatoCliente()) + "%");
113
                                }
114
                                if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getTipoSituacao())) {
115
                                        query.setParameter("tipoSituacao", ((ParametrosConsultaPedidoDTO)parametros).getEntidade().getTipoSituacao());
116
                                }
117
                                if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getTipoPedido())) {
118
                                        query.setParameter("tipoPedido", ((ParametrosConsultaPedidoDTO)parametros).getEntidade().getTipoPedido());
119
                                }
120
                                if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getLoja())) {
121
                                        query.setParameter("sequencialLoja", ((ParametrosConsultaPedidoDTO)parametros).getEntidade().getSequencialDaLoja());                    }
122
                                if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getObservacao())) {
123
                                        query.setParameter("observacaoPedido", "%" + removerAcentuacao(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getObservacao()) + "%");
124
                                }
125
                                if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getModelo())) {
126
                                        query.setParameter("sequencialModelo", ((ParametrosConsultaPedidoDTO)parametros).getEntidade().getSequencialDoModelo());
127
                                }
128
                        }
129
                }
130
                if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getPessoa())) {
131
                        query.setParameter("sequencialPessoa", ((ParametrosConsultaPedidoDTO)parametros).getPessoa().getSequencial());
132
                }
133
                if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getDataInicial())
134
                                && VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getDataFinal())) {
135
                        Date dataInicial = DataUtils.getDataComHorarioMinimo(((ParametrosConsultaPedidoDTO)parametros).getDataInicial());
136
                        Date dataFinal = DataUtils.getDataComHorarioMaximo(((ParametrosConsultaPedidoDTO)parametros).getDataFinal());
137
                        query.setParameter("dataInicial", dataInicial);
138
                        query.setParameter("dataFinal", dataFinal);
139
                }
140
        }
141
 
142
        @Override
143
        protected void setarStringParametrosConsultar(StringBuilder sql, Pedido pedido) {
144
                if (VerificadorUtil.naoEstaNuloOuVazio(pedido)) {
145
                        if (VerificadorUtil.naoEstaNuloOuVazio(pedido.getTipoSituacao())) {
146
                                sql.append("AND e.tipoSituacao = :tipoSituacao ");
147
                        }
148
                        if (VerificadorUtil.naoEstaNuloOuVazio(pedido.getTipoPedido())) {
149
                                sql.append("AND e.tipoPedido = :tipoPedido ");
150
                        }
151
                        if (VerificadorUtil.naoEstaNuloOuVazio(pedido.getLoja())) {
152
                                sql.append("AND e.loja.sequencial = :sequencialLoja ");
153
                        }
154
                        if (VerificadorUtil.naoEstaNuloOuVazio(pedido.getObservacao())) {
155
                                sql.append("AND ");
156
                                sql.append(sqlConsultarSemAcento("e.observacao"));
157
                                sql.append(" like upper(:observacaoPedido) ");
158
                        }
159
                        if (VerificadorUtil.naoEstaNuloOuVazio(pedido.getModelo())) {
160
                                sql.append("AND e.modelo.sequencial = :sequencialModelo ");
161
                        }
162
                }
163
        }
164
 
165
        @Override
166
        protected void setarQueryParametrosConsultar(Query query, Pedido pedido) {
167
                if (VerificadorUtil.naoEstaNuloOuVazio(pedido)) {
168
                        if (VerificadorUtil.naoEstaNuloOuVazio(pedido.getTipoSituacao())) {
169
                                query.setParameter("tipoSituacao", pedido.getTipoSituacao());
170
                        }
171
                        if (VerificadorUtil.naoEstaNuloOuVazio(pedido.getTipoPedido())) {
172
                                query.setParameter("tipoPedido", pedido.getTipoPedido());
173
                        }
174
                        if (VerificadorUtil.naoEstaNuloOuVazio(pedido.getLoja())) {
175
                                query.setParameter("sequencialLoja", pedido.getSequencialDaLoja());                     }
176
                        if (VerificadorUtil.naoEstaNuloOuVazio(pedido.getObservacao())) {
177
                                query.setParameter("observacaoPedido", "%" + removerAcentuacao(pedido.getObservacao()) + "%");
178
                        }
179
                        if (VerificadorUtil.naoEstaNuloOuVazio(pedido.getModelo())) {
180
                                query.setParameter("sequencialModelo", pedido.getSequencialDoModelo());
181
                        }
182
                }
183
        }
184
 
185
        @Override
186
        public Pedido consultarPedidoCompleto(Pedido pedido) {
187
                StringBuilder jpql = new StringBuilder();
188
                try {
189
                        jpql.append("SELECT p FROM Pedido p ");
190
                        jpql.append("LEFT JOIN FETCH p.historico h ");
191
                        jpql.append("WHERE p = :pedido");
192
                        return getEntityManager().createQuery(jpql.toString(), Pedido.class).setParameter("pedido", pedido).getSingleResult();
193
                } catch (NoResultException e) {
194
                        return null;
195
                }
196
        }
197
 
198
        @Override
199
        public Pedido consultarPedidoCompletoDaVenda(Venda venda) {
200
                StringBuilder jpql = new StringBuilder();
201
                try {
202
                        jpql.append("SELECT p FROM Pedido p ");
203
                        jpql.append("LEFT JOIN FETCH p.historico h ");
204
                        jpql.append("WHERE p.venda = :venda");
205
                        return getEntityManager().createQuery(jpql.toString(), Pedido.class).setParameter("venda", venda).getSingleResult();
206
                } catch (NoResultException e) {
207
                        return null;
208
                }
209
        }
210
 
211
        @Override
212
        public List<RankingPedidoDTO> consultarRankingPedidosNaoAtendidos(String generoPedidos, Date dataInicial, Date dataFinal) {
213
                StringBuilder sql = new StringBuilder();
214
                sql.append("SELECT new br.com.ec.domain.dto.RankingPedidoDTO(p.modelo, COUNT(p.modelo)) FROM Pedido p ");
215
                sql.append("WHERE p.dataPedido >= :dataInicial AND p.dataPedido <= :dataFinal ");
216
                sql.append("AND p.tipoSituacao not in (" + TipoSituacaoPedido.tipoSituacoesAtendidos() + ") ");
217
                if (VerificadorUtil.naoEstaNuloOuVazio(generoPedidos)) {
218
                        sql.append("AND p.genero = :genero ");
219
                }
220
                sql.append("GROUP BY p.modelo ");
221
                sql.append("ORDER BY COUNT(p.modelo) DESC ");
222
                try {
223
                        TypedQuery<RankingPedidoDTO> query = getEntityManager().createQuery(sql.toString(), RankingPedidoDTO.class);
224
                        query.setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(dataInicial));
225
                        query.setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(dataFinal));
226
                        if (VerificadorUtil.naoEstaNulo(generoPedidos)) {
227
                                query.setParameter("genero", generoPedidos);
228
                        }
229
                        return query.getResultList();
230
                } catch(Exception ex) {
231
                        ex.printStackTrace();
232
                        return null;
233
                }
234
        }
235
 
236
        @Override
237
        public List<RankingPedidoDTO> consultarRankingPedidos(String generoPedidos, Date dataInicial, Date dataFinal) {
238
                StringBuilder sql = new StringBuilder();
239
                sql.append("SELECT new br.com.ec.domain.dto.RankingPedidoDTO(p.modelo, COUNT(p.modelo)) FROM Pedido p ");
240
                sql.append("WHERE p.dataPedido >= :dataInicial AND p.dataPedido <= :dataFinal ");
241
                if (VerificadorUtil.naoEstaNuloOuVazio(generoPedidos)) {
242
                        sql.append("AND p.genero = :genero ");
243
                }
244
                sql.append("GROUP BY p.modelo ");
245
                sql.append("ORDER BY COUNT(p.modelo) DESC ");
246
                try {
247
                        TypedQuery<RankingPedidoDTO> query = getEntityManager().createQuery(sql.toString(), RankingPedidoDTO.class);
248
                        if (VerificadorUtil.naoEstaNulo(generoPedidos)) {
249
                                query.setParameter("genero", generoPedidos);
250
                        }
251
                        query.setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(dataInicial));
252
                        query.setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(dataFinal));
253
                        return query.getResultList();
254
                } catch(Exception ex) {
255
                        ex.printStackTrace();
256
                        return null;
257
                }
258
        }
259
 
260
        @Override
261
        public Integer obterQuantidadePedidosPorSituacao(String tipoPedido, String tipoSituacaoPedido) {
262
                StringBuilder sql = new StringBuilder();
263
                sql.append("SELECT COUNT(p) FROM Pedido p ");
264
                sql.append("WHERE p.tipoSituacao = :tipoSituacao ");
265
                if (VerificadorUtil.naoEstaNuloOuVazio(tipoPedido)) {
266
                        sql.append("AND p.tipoPedido = :tipoPedido ");
267
                }
268
                TypedQuery<Long> query = getEntityManager().createQuery(sql.toString(), Long.class);
269
                if (VerificadorUtil.naoEstaNulo(tipoPedido)) {
270
                        query.setParameter("tipoPedido", tipoPedido);
271
                }
272
                query.setParameter("tipoSituacao", tipoSituacaoPedido);
273
                return query.getSingleResult().intValue();
274
        }
275
 
276
        @Override
277
        public Integer obterQuantidadePedidosPorSituacaoEePeriodo(String tipoPedido, String tipoSituacaoPedido, Date dataInicial, Date dataFinal) {
278
                StringBuilder sql = new StringBuilder();
279
                sql.append("SELECT COUNT(p) FROM Pedido p ");
280
                sql.append("WHERE p.tipoSituacao = :tipoSituacao ");
281
                if (VerificadorUtil.naoEstaNuloOuVazio(tipoPedido)) {
282
                        sql.append("AND p.tipoPedido = :tipoPedido ");
283
                }
284
                if (VerificadorUtil.naoEstaNulo(dataInicial)) {
285
                        sql.append("AND p.dataUltimaAlteracaoSituacao >= :dataInicial ");
286
                }
287
                sql.append("AND p.dataUltimaAlteracaoSituacao <= :dataFinal ");
288
                TypedQuery<Long> query = getEntityManager().createQuery(sql.toString(), Long.class);
289
                if (VerificadorUtil.naoEstaNulo(tipoPedido)) {
290
                        query.setParameter("tipoPedido", tipoPedido);
291
                }
292
                if (VerificadorUtil.naoEstaNulo(dataInicial)) {
293
                        query.setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(dataInicial));
294
                }
295
                query.setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(dataFinal));
296
                query.setParameter("tipoSituacao", tipoSituacaoPedido);
297
                return query.getSingleResult().intValue();
298
 
299
        }
300
 
301
        @Override
302
        public void excluirHistoricosDoPedido(Pedido pedido) {
303
                StringBuilder sql = new StringBuilder();
304
                sql.append("DELETE FROM PedidoHistorico ph ");
305
                sql.append("WHERE ph.pedido = :pedido ");
306
                try {
307
                        getEntityManager().createQuery(sql.toString())
308
                                .setParameter("pedido", pedido)
309
                                .executeUpdate();
310
                        getEntityManager().flush();
311
                } catch(Exception ex) {
312
                        ex.printStackTrace();
313
                }
314
        }
315
 
316
        @Override
317
        public void solicitarEntrarEmContatoCasoExistaPedidoParaLojaSolicitante(Loja lojaEntrada, Produto produto) {
318
                StringBuilder sql = new StringBuilder();
319
                sql.append("UPDATE Pedido ppc SET ppc.usuarioAtendimento = null, ppc.dataUltimaAlteracaoSituacao = now(), ppc.tipoSituacao = '" + TipoSituacaoPedido.ENTRAR_EM_CONTATO.getValor() + "' ");
320
                sql.append("WHERE ppc.loja = :lojaEntrada ");
321
                sql.append("AND ppc.tipoSituacao NOT IN (" + TipoSituacaoPedido.tipoSituacoesNaoPendentes() + ") ");
322
                sql.append("AND ppc in (SELECT pp.pedido FROM PedidoProduto pp WHERE pp.pedido = ppc AND pp.produto = :produto) ");
323
                try {
324
                        getEntityManager().createQuery(sql.toString())
325
                                .setParameter("lojaEntrada", lojaEntrada)
326
                                .setParameter("produto", produto)
327
                                .executeUpdate();
328
                        getEntityManager().flush();
329
                } catch(Exception ex) {
330
                        ex.printStackTrace();
331
                }
332
        }
333
 
334
        @Override
335
        public List<PedidoProduto> consultarPedidosNaoAtendidos(Produto produto) {
336
                StringBuilder sql = new StringBuilder();
337
                try {
338
                        sql.append("SELECT pp FROM PedidoProduto pp ");
339
                        sql.append("WHERE pp.produto.sequencial = :sequencialProduto ");
340
                        sql.append("AND pp.pedido.tipoSituacao NOT IN (" + TipoSituacaoPedido.tipoSituacoesAtendidos() + ") ");
341
                        TypedQuery<PedidoProduto> query = getEntityManager().createQuery(sql.toString(), PedidoProduto.class);
342
                        query.setParameter("sequencialProduto", produto.getSequencial());
343
                        return query.getResultList();
344
                } catch(Exception ex) {
345
                        ex.printStackTrace();
346
                        return null;
347
                }
348
        }
349
 
350
        @Override
351
        public List<Pedido> consultarPedidosDoCliente(Cliente cliente) {
352
                StringBuilder sql = new StringBuilder();
353
                try {
354
                        sql.append("SELECT p FROM Pedido p ");
355
                        sql.append("WHERE p.cliente = :cliente ");
356
                        TypedQuery<Pedido> query = getEntityManager().createQuery(sql.toString(), Pedido.class);
357
                        query.setParameter("cliente", cliente);
358
                        return query.getResultList();
359
                } catch(Exception ex) {
360
                        ex.printStackTrace();
361
                        return null;
362
                }
363
        }
364
 
365
        @Override
366
        public List<Pedido> consultarPedidosDoProdutoOuModeloPendentes(Produto produto) {
367
                StringBuilder sql = new StringBuilder();
368
                try {
369
                        sql.append("SELECT p FROM Pedido p ");
370
                        sql.append("WHERE p.tipoPedido = '" + TipoPedido.RESERVA.getValor() + "' ");
371
                        sql.append("AND p.tipoSituacao NOT IN (" + TipoSituacaoPedido.tipoSituacoesNaoPendentes() + ") ");
372
                        sql.append("AND ((p.modelo.sequencial = :modeloProduto ");
373
                        sql.append("AND (p.tipoProduto = :tipoProduto OR p.tipoProduto IS NULL) ");
374
                        if (!produto.getGenero().equals(TipoGenero.UNISSEX.getValor())) {
375
                                sql.append("AND (p.genero = :generoProduto OR p.genero IS NULL)) ");
376
                        } else {
377
                                sql.append(") ");
378
                        }
379
                        sql.append("OR p in (SELECT pp.pedido FROM PedidoProduto pp WHERE pp.pedido = p AND pp.produto.sequencial = :sequencialProduto)) ");
380
 
381
                        TypedQuery<Pedido> query = getEntityManager().createQuery(sql.toString(), Pedido.class);
382
                        query.setParameter("modeloProduto", produto.getSequencialDoModelo());
383
                        query.setParameter("tipoProduto", produto.getTipo());
384
                        if (!produto.getGenero().equals(TipoGenero.UNISSEX.getValor())) {
385
                                query.setParameter("generoProduto", produto.getGenero());
386
                        }
387
                        query.setParameter("sequencialProduto", produto.getSequencial());
388
                        return query.getResultList();
389
                } catch(Exception ex) {
390
                        ex.printStackTrace();
391
                        return null;
392
                }
393
        }
394
        */
395
}