View Javadoc

1   package ecar.dao;
2   
3   import java.io.BufferedReader;
4   import java.io.FileOutputStream;
5   import java.io.FileReader;
6   import java.math.BigDecimal;
7   import java.util.ArrayList;
8   import java.util.Collections;
9   import java.util.Comparator;
10  import java.util.Date;
11  import java.util.HashSet;
12  import java.util.Iterator;
13  import java.util.List;
14  import java.util.Set;
15  
16  import javax.servlet.http.HttpServletRequest;
17  
18  import org.hibernate.HibernateException;
19  import org.hibernate.Query;
20  import org.hibernate.Session;
21  import org.hibernate.Transaction;
22  
23  import comum.database.Dao;
24  import comum.util.Data;
25  import comum.util.Util;
26  
27  import ecar.bean.CargaFinalidadesPPA;
28  import ecar.bean.CargaProdutosPPA;
29  import ecar.exception.ECARException;
30  import ecar.login.SegurancaECAR;
31  import ecar.permissao.ControlePermissao;
32  import ecar.pojo.AreaAre;
33  import ecar.pojo.EfIettFonteTotEfieft;
34  import ecar.pojo.EfIettFonteTotEfieftPK;
35  import ecar.pojo.EfItemEstPrevisaoEfiep;
36  import ecar.pojo.EfItemEstPrevisaoEfiepPK;
37  import ecar.pojo.EspecieEsp;
38  import ecar.pojo.EstruturaEtt;
39  import ecar.pojo.ExercicioExe;
40  import ecar.pojo.FonteFon;
41  import ecar.pojo.FonteRecursoFonr;
42  import ecar.pojo.ItemEstUsutpfuacIettutfa;
43  import ecar.pojo.ItemEstrtIndResulIettr;
44  import ecar.pojo.ItemEstrtIndResulLocalIettirl;
45  import ecar.pojo.ItemEstrutFisicoIettf;
46  import ecar.pojo.ItemEstrutFisicoIettfPK;
47  import ecar.pojo.ItemEstrutLocalIettl;
48  import ecar.pojo.ItemEstrutLocalIettlPK;
49  import ecar.pojo.ItemEstrutUsuarioIettus;
50  import ecar.pojo.ItemEstruturaIett;
51  import ecar.pojo.ItemEstruturaSisAtributoIettSatb;
52  import ecar.pojo.LocalItemLit;
53  import ecar.pojo.OrgaoOrg;
54  import ecar.pojo.OrgaoPeriodoExercicioOrgPerExe;
55  import ecar.pojo.OrgaoPeriodoExercicioOrgPerExePK;
56  import ecar.pojo.PaiFilho;
57  import ecar.pojo.PeriodoExercicioPerExe;
58  import ecar.pojo.PoderPeriodoExercicioPodPerExe;
59  import ecar.pojo.PoderPeriodoExercicioPodPerExePK;
60  import ecar.pojo.PoderPod;
61  import ecar.pojo.RecursoRec;
62  import ecar.pojo.SisAtributoSatb;
63  import ecar.pojo.SubAreaSare;
64  import ecar.pojo.TipoFuncAcompTpfa;
65  import ecar.pojo.UnidadeOrcamentariaPeriodoExercicioUoPerExe;
66  import ecar.pojo.UnidadeOrcamentariaPeriodoExercicioUoPerExePK;
67  import ecar.pojo.UnidadeOrcamentariaUO;
68  import ecar.pojo.UsuarioUsu;
69  import ecar.util.Dominios;
70  
71  /**
72   * DAO temporária para carga/atualizacao em ItemEstruturaIetts
73   * @author aleixo
74   */
75  public class TempCargaIettsBDDao extends Dao {
76    /**
77       * 
78       */
79    public TempCargaIettsBDDao(HttpServletRequest request) {
80      super();
81      this.request = request;
82    }
83  
84    private static final int STRING = 1;
85    private static int LONG = 2;
86  
87    /**
88     * Metodo para lancar Exceção!
89     * @param mensagem
90     * @throws ECARException
91     */
92    private void lancarErro(String mensagem) throws ECARException {
93      System.out.println("[ERRO NA ATUALIZACAO] - " + mensagem);
94      throw new ECARException(mensagem);
95    }
96  
97    /**
98     * Exibe uma mensagem no console...
99     * @param mensagem
100    */
101   private void msg(String mensagem) {
102     System.out.println(mensagem);
103   }
104 
105   /**
106    * Faz um select simples da classe "objeto", onde "campoDeCondicao" =
107    * "valorCampo".
108    * @author aleixo
109    * @since 27/07/2007
110    * @param objeto
111    * @param campoDeCondicao
112    * @param tipoCampo
113    * @param valorCampo
114    * @return
115    * @throws ECARException
116    */
117   private Object selectObjeto(String objeto, String campoDeCondicao, int tipoCampo, Object valorCampo, Session s) throws ECARException {
118     Query q;
119     StringBuilder select;
120     Object o;
121 
122     select = new StringBuilder();
123     select.append("select o from " + objeto + " o where o." + campoDeCondicao + " = :valor");
124     if (s != null)
125       q = s.createQuery(select.toString());
126     else
127       q = this.session.createQuery(select.toString());
128 
129     if (tipoCampo == STRING) { // String
130       q.setString("valor", (String) valorCampo);
131     }
132     if (tipoCampo == LONG) { // Long
133       q.setLong("valor", ((Long) valorCampo).longValue());
134     }
135     q.setMaxResults(1);
136     o = q.uniqueResult();
137     if (o == null) {
138       System.out.println("++++++++ ERRO: " + objeto + " é Nulo para valor " + valorCampo.toString());
139       throw new ECARException(objeto + " is null");
140     }
141 
142     return o;
143   }
144 
145   /**
146    * Efetua carga de ações para PPA 2008-2011, importando os dados do COP.
147    * @author aleixo
148    * @since 11/07/2007
149    * @throws ECARException
150    */
151   public void efetuarCargaItens() throws ECARException {
152     // ItemEstruturaDao itemDao = new ItemEstruturaDao(request);
153 
154     // Buscando a estrutura de nível de ação do PPA 2008-2011
155     EstruturaEtt estrutura = (EstruturaEtt) new EstruturaDao(request).buscar(EstruturaEtt.class, Long.valueOf(20));
156 
157     Transaction tx = null;
158 
159     try {
160       ArrayList objetos = new ArrayList();
161 
162       super.inicializarLogBean();
163 
164       tx = session.beginTransaction();
165 
166       BufferedReader in = new BufferedReader(new FileReader("/home/aleixo/cop/dados.csv"));
167       String linha = "";
168       while ((linha = in.readLine()) != null) {
169 
170         String[] campos = linha.split(";");
171         System.out.println(linha);
172         // Número do Programa;Número do
173         // Projeto/Atividade(Ação);Nome;Órgão;Unidade;Função;Sub Função
174         String siglaPrograma = campos[0].trim();
175         String siglaAcao = campos[1].trim();
176         // String nomeAcao =
177         // Util.soPrimeiraLetraToUpperCase(campos[2].trim().replaceAll("\"",
178         // ""));
179         String nomeAcao = Util.todasPrimeirasLetrasToUpperCase(campos[2]);
180         String codIdentOrg = campos[3].trim();
181         String codIdentUo = campos[4].trim();
182         String codIdentFunc = campos[5].trim();
183         String codIdentSubFunc = campos[6].trim();
184 
185         String sqlBuscaPai = "select pai from ItemEstruturaIett pai where siglaIett = :sigla and pai.estruturaEtt.codEtt = :codEttPai";
186 
187         Query q = this.session.createQuery(sqlBuscaPai);
188         q.setString("sigla", siglaPrograma);
189         q.setLong("codEttPai", 22); // 22 é Programa do PPA 2008-2011
190         q.setMaxResults(1);
191         ItemEstruturaIett iettPai = (ItemEstruturaIett) q.uniqueResult();
192         if (iettPai == null)
193           throw new ECARException("IettPai Nulo");
194 
195         System.out.println(iettPai);
196         System.out.println("Item do Programa: " + siglaPrograma + " - " + iettPai.getNomeIett() + " - " + iettPai.getEstruturaEtt().getNomeEtt() + " - " + iettPai.getItemEstruturaIett().getNomeIett() + " - " + iettPai.getItemEstruturaIett().getEstruturaEtt().getNomeEtt());
197         System.out.println("Nome: " + siglaAcao + " - " + nomeAcao);
198         System.out.println("Org/Uo/Func/SubFunc: " + codIdentOrg + "/" + codIdentUo + "/" + codIdentFunc + "/" + codIdentSubFunc);
199 
200         ItemEstruturaIett iett = new ItemEstruturaIett();
201 
202         iett.setIndAtivoIett("S");
203         iett.setIndBloqPlanejamentoIett("N");
204         iett.setIndCriticaIett("N");
205         iett.setIndMonitoramentoIett("N");
206         iett.setDataInclusaoIett(Data.getDataAtual());
207         iett.setDataUltManutencaoIett(Data.getDataAtual());
208         iett.setDataInicioIett(Data.parseDate("01/01/2008"));
209         iett.setDataTerminoIett(Data.parseDate("31/12/2011"));
210         iett.setNivelIett(Integer.valueOf(3));
211 
212         iett.setItemEstruturaIett(iettPai);
213         iett.setSiglaIett(siglaAcao);
214         iett.setNomeIett(nomeAcao);
215 
216         iett.setEstruturaEtt(estrutura);
217 
218         /* Buscando unidade orçamentárias pelo codigo do COP */
219         String sql = "select unidade from UnidadeOrcamentariaUO unidade where " + " unidade.codigoIdentUo = :codIdentUo" + " and unidade.orgaoOrg.codigoIdentOrg = :codIdentOrg";
220         q = this.session.createQuery(sql);
221         q.setLong("codIdentUo", Long.valueOf(codIdentUo).longValue());
222         q.setLong("codIdentOrg", Long.valueOf(codIdentOrg).longValue());
223         q.setMaxResults(1);
224 
225         UnidadeOrcamentariaUO unidade = (UnidadeOrcamentariaUO) q.uniqueResult();
226         if (unidade == null)
227           throw new ECARException("Unidade Nulo");
228         iett.setUnidadeOrcamentariaUO(unidade);
229 
230         /* Buscando orgao pelo codigo do COP */
231         sql = "select orgao from OrgaoOrg orgao where orgao.codigoIdentOrg = :codIdentOrg";
232         q = this.session.createQuery(sql);
233         q.setLong("codIdentOrg", Long.valueOf(codIdentOrg).longValue());
234         q.setMaxResults(1);
235 
236         OrgaoOrg orgao = (OrgaoOrg) q.uniqueResult();
237         if (orgao == null)
238           throw new ECARException("Orgao Nulo");
239         iett.setOrgaoOrgByCodOrgaoResponsavel1Iett(orgao);
240 
241         /* Setando Usuario para funcao GPS */
242         TipoFuncAcompTpfa funcaoGPS = (TipoFuncAcompTpfa) new TipoFuncAcompDao(request).buscar(TipoFuncAcompTpfa.class, Long.valueOf(3)); // 3
243                                                                                                                                           // -
244                                                                                                                                           // GPS,
245                                                                                                                                           // 1
246                                                                                                                                           // -
247                                                                                                                                           // Administrador
248 
249         UsuarioUsu user = this.getUsuarioGPSByOrgao(orgao);
250 
251         if (user != null) {
252           ItemEstUsutpfuacIettutfa funcaoItemEstrutura = new ItemEstUsutpfuacIettutfa();
253           funcaoItemEstrutura.setItemEstruturaIett(iett);
254           funcaoItemEstrutura.setTipoFuncAcompTpfa(funcaoGPS);
255           funcaoItemEstrutura.setUsuarioUsu(user);
256           iett.setItemEstUsutpfuacIettutfas(new HashSet());
257           iett.getItemEstUsutpfuacIettutfas().add(funcaoItemEstrutura);
258 
259           System.out.println(orgao);
260           System.out.println(funcaoItemEstrutura.getUsuarioUsu());
261         }
262 
263         /* Buscando funcao pelo codigo do COP */
264         sql = "select funcao from AreaAre funcao where funcao.codigoIdentAre = :codIdentFunc";
265         q = this.session.createQuery(sql);
266         q.setLong("codIdentFunc", Long.valueOf(codIdentFunc).longValue());
267         q.setMaxResults(1);
268 
269         AreaAre funcao = (AreaAre) q.uniqueResult();
270         if (funcao == null)
271           throw new ECARException("Funcao Nulo");
272         iett.setAreaAre(funcao);
273 
274         /* Buscando subfuncao pelo codigo do COP */
275         sql = "select subfuncao from SubAreaSare subfuncao where subfuncao.codigoIdentSare = :codIdentSubFunc";
276         q = this.session.createQuery(sql);
277         q.setLong("codIdentSubFunc", Long.valueOf(codIdentSubFunc).longValue());
278         q.setMaxResults(1);
279 
280         SubAreaSare subFuncao = (SubAreaSare) q.uniqueResult();
281         if (subFuncao == null)
282           throw new ECARException("subFuncao Nulo");
283         iett.setSubAreaSare(subFuncao);
284 
285         /* Salvando item */
286         // itemDao.salvar(request, iett);
287         // Como preciso salvar todos os itens em transacao, foi "copiado" o
288         // método salvar e colocado todos os itens em transacao.
289         iett.setDataInclusaoIett(Data.getDataAtual());
290         List filhos = new ArrayList();
291         if (iett.getItemEstUsutpfuacIettutfas() != null)
292           filhos.addAll(iett.getItemEstUsutpfuacIettutfas());
293 
294         session.save(iett);
295         objetos.add(iett);
296 
297         //
298         // controlar as permissoes passando o item e a lista das funcoes de
299         // acompanhamento velhas (vai ser uma lista vazia)
300         //
301         new ControlePermissao().atualizarPermissoesItemEstrutura(iett, null, session, true, request);
302 
303         // gravar permissão para o usuário que criou o item
304         ItemEstrutUsuarioIettus itemEstrutUsuario = new ItemEstrutUsuarioIettus();
305 
306         itemEstrutUsuario.setItemEstruturaIett(iett);
307         itemEstrutUsuario.setItemEstruturaIettOrigem(iett);
308         itemEstrutUsuario.setCodTpPermIettus(ControlePermissao.PERMISSAO_USUARIO);
309         itemEstrutUsuario.setUsuarioUsu(((SegurancaECAR) request.getSession().getAttribute("seguranca")).getUsuario());
310 
311         itemEstrutUsuario.setIndLeituraIettus("S");
312         itemEstrutUsuario.setIndEdicaoIettus("S");
313         itemEstrutUsuario.setIndExcluirIettus("S");
314 
315         itemEstrutUsuario.setIndAtivMonitIettus("N");
316         itemEstrutUsuario.setIndDesatMonitIettus("N");
317         itemEstrutUsuario.setIndBloqPlanIettus("N");
318         itemEstrutUsuario.setIndDesblPlanIettus("N");
319         itemEstrutUsuario.setIndInfAndamentoIettus("N");
320         itemEstrutUsuario.setIndEmitePosIettus("N");
321         itemEstrutUsuario.setIndProxNivelIettus("N");
322 
323         itemEstrutUsuario.setDataInclusaoIettus(Data.getDataAtual());
324 
325         Iterator it = filhos.iterator();
326         while (it.hasNext()) {
327           PaiFilho object = (PaiFilho) it.next();
328           object.atribuirPKPai();
329           // salva os filhos
330           session.save(object);
331           objetos.add(object);
332         }
333 
334         session.save(itemEstrutUsuario);
335         objetos.add(itemEstrutUsuario);
336       }
337 
338       tx.commit();
339 
340       if (super.logBean != null) {
341         super.logBean.setCodigoTransacao(Data.getHoraAtual(false));
342         super.logBean.setOperacao("INC");
343         Iterator itObj = objetos.iterator();
344 
345         while (itObj.hasNext()) {
346           super.logBean.setObj(itObj.next());
347           super.loggerAuditoria.info(logBean.toString());
348         }
349       }
350 
351     } catch (Exception e) {
352       e.printStackTrace();
353       if (tx != null)
354         try {
355           tx.rollback();
356         } catch (HibernateException r) {
357           this.logger.error(r);
358           throw new ECARException("erro.hibernateException");
359         }
360       this.logger.error(e);
361       throw new ECARException("erro.hibernateException");
362     }
363   }
364 
365   /**
366    * Método somente usado em efetuarCargaItens() para retornar o usuário de um
367    * determinado órgão, seguindo planilha anexada no mantis 11861.
368    * @author aleixo
369    * @since 11/07/2007
370    * @param orgao
371    * @return
372    * @throws ECARException
373    */
374   private UsuarioUsu getUsuarioGPSByOrgao(OrgaoOrg orgao) throws ECARException {
375 
376     final long COD_ORG_SEPL = 1; /* Mirian Pappi Gomes - 325 */
377     final long COD_ORG_PGE = 5; /* Maristela Pioli - 155 */
378     final long COD_ORG_SEAP = 6; /* Luciane do Rocio Walesko Fantin - 136 */
379     final long COD_ORG_SEAB = 7; /* Teodoro Kostin Neto - 133 */
380     final long COD_ORG_SETI = 8; /* Sérgio Luiz Covalski - 149 */
381     final long COD_ORG_SECS = 9; /* Luis Carlos Fracaro - 157 */
382     final long COD_ORG_SEEC = 10; /* Matias Marino da Silva - 340 */
383     final long COD_ORG_SEDU = 11; /* Reynaldo Aquino de Paula - 158 */
384     final long COD_ORG_SEED = 12; /* Carlos Roberto Sottomaior Valiente - 139 */
385     final long COD_ORG_SEFA = 13; /* Roseli Naufal Schnekemberg - 141 */
386     final long COD_ORG_SEIM = 14; /* Eliziany Sutil de Oliveira Guimarães - 334 */
387     final long COD_ORG_SEJU = 15; /* Sílvio Carlos Nass - 143 */
388     final long COD_ORG_SEMA = 16; /* Walter Osternack Junior - 160 */
389     final long COD_ORG_SEOP = 17; /* Emir Carlos Grassani - 144 */
390     final long COD_ORG_SESA = 19; /* Sueli de Sá Riechi - 145 */
391     final long COD_ORG_SESP = 20; /* Maria Helena Paes - 147 */
392     final long COD_ORG_SETP = 21; /* Helena Oliveira Borges Saldanha - 151 */
393     final long COD_ORG_SETR = 22; /* Rejane Karam - 153 */
394     final long COD_ORG_SETU = 23; /* Elaine Ligiero Ferreira - 162 */
395     final long COD_ORG_CPE = 79; /* Maria Cristina da Silva Magalhães - 131 */
396 
397     Long chave = null;
398 
399     if (orgao != null) {
400       if (orgao.getCodOrg().longValue() == COD_ORG_SEPL)
401         chave = Long.valueOf(325);
402       if (orgao.getCodOrg().longValue() == COD_ORG_PGE)
403         chave = Long.valueOf(155);
404       if (orgao.getCodOrg().longValue() == COD_ORG_SEAP)
405         chave = Long.valueOf(136);
406       if (orgao.getCodOrg().longValue() == COD_ORG_SEAB)
407         chave = Long.valueOf(133);
408       if (orgao.getCodOrg().longValue() == COD_ORG_SETI)
409         chave = Long.valueOf(149);
410       if (orgao.getCodOrg().longValue() == COD_ORG_SECS)
411         chave = Long.valueOf(157);
412       if (orgao.getCodOrg().longValue() == COD_ORG_SEEC)
413         chave = Long.valueOf(340);
414       if (orgao.getCodOrg().longValue() == COD_ORG_SEDU)
415         chave = Long.valueOf(158);
416       if (orgao.getCodOrg().longValue() == COD_ORG_SEED)
417         chave = Long.valueOf(139);
418       if (orgao.getCodOrg().longValue() == COD_ORG_SEFA)
419         chave = Long.valueOf(141);
420       if (orgao.getCodOrg().longValue() == COD_ORG_SEIM)
421         chave = Long.valueOf(334);
422       if (orgao.getCodOrg().longValue() == COD_ORG_SEJU)
423         chave = Long.valueOf(143);
424       if (orgao.getCodOrg().longValue() == COD_ORG_SEMA)
425         chave = Long.valueOf(160);
426       if (orgao.getCodOrg().longValue() == COD_ORG_SEOP)
427         chave = Long.valueOf(144);
428       if (orgao.getCodOrg().longValue() == COD_ORG_SESA)
429         chave = Long.valueOf(145);
430       if (orgao.getCodOrg().longValue() == COD_ORG_SESP)
431         chave = Long.valueOf(147);
432       if (orgao.getCodOrg().longValue() == COD_ORG_SETP)
433         chave = Long.valueOf(151);
434       if (orgao.getCodOrg().longValue() == COD_ORG_SETR)
435         chave = Long.valueOf(153);
436       if (orgao.getCodOrg().longValue() == COD_ORG_SETU)
437         chave = Long.valueOf(162);
438       if (orgao.getCodOrg().longValue() == COD_ORG_CPE)
439         chave = Long.valueOf(131);
440 
441       if (chave != null) {
442         return (UsuarioUsu) new UsuarioDao(request).buscar(UsuarioUsu.class, chave);
443       }
444     }
445 
446     return null;
447   }
448 
449   /**
450    * Efetua carga nas tabelas de PoderPeriodoExercicioPodPerExe,
451    * OrgaoPeriodoExercicioOrgPerExe e
452    * UnidadeOrcamentariaPeriodoExercicioUoPerExe, relacionando PoderPod,
453    * OrgaoOrg e UnidadeOrcamentariaUo com PeriodoExercicioPerExe 2008-2011.
454    * @author aleixo
455    * @since 12/07/2007
456    * @throws ECARException
457    */
458   public void efetuarCargaPeriodoExercicios() throws ECARException {
459     Dao dao = new Dao();
460     PeriodoExercicioDao perExeDao = new PeriodoExercicioDao(request);
461     PeriodoExercicioPerExe perExe = (PeriodoExercicioPerExe) perExeDao.buscar(PeriodoExercicioPerExe.class, Long.valueOf(2)); // 2
462                                                                                                                               // é
463                                                                                                                               // o
464                                                                                                                               // 2008-2011
465 
466     PoderDao poderDao = new PoderDao(request);
467     List<PoderPod> poderes = poderDao.listar(PoderPod.class, null);
468     for (PoderPod poder : poderes) {
469       PoderPeriodoExercicioPodPerExePK compId = new PoderPeriodoExercicioPodPerExePK();
470       compId.setCodPerExe(perExe.getCodPerExe());
471       compId.setCodPod(poder.getCodPod());
472 
473       PoderPeriodoExercicioPodPerExe podPerExe = new PoderPeriodoExercicioPodPerExe();
474       podPerExe.setCompId(compId);
475       podPerExe.setIndAtivoPodPerExe("S");
476       podPerExe.setPoderPod(poder);
477       podPerExe.setPeriodoExercicioPerExe(perExe);
478 
479       dao.salvar(podPerExe);
480     }
481 
482     OrgaoDao orgaoDao = new OrgaoDao(request);
483     List<OrgaoOrg> orgaos = orgaoDao.listar(OrgaoOrg.class, null);
484     for (OrgaoOrg orgao : orgaos) {
485       OrgaoPeriodoExercicioOrgPerExePK compId = new OrgaoPeriodoExercicioOrgPerExePK();
486       compId.setCodPerExe(perExe.getCodPerExe());
487       compId.setCodOrg(orgao.getCodOrg());
488 
489       OrgaoPeriodoExercicioOrgPerExe orgPerExe = new OrgaoPeriodoExercicioOrgPerExe();
490       orgPerExe.setCompId(compId);
491       orgPerExe.setIndAtivoOrgPerExe("S");
492       orgPerExe.setOrgaoOrg(orgao);
493       orgPerExe.setPeriodoExercicioPerExe(perExe);
494 
495       dao.salvar(orgPerExe);
496     }
497 
498     UnidadeOrcamentariaDao uoDao = new UnidadeOrcamentariaDao(request);
499     List<UnidadeOrcamentariaUO> uos = uoDao.listar(UnidadeOrcamentariaUO.class, null);
500     for (UnidadeOrcamentariaUO unidade : uos) {
501       UnidadeOrcamentariaPeriodoExercicioUoPerExePK compId = new UnidadeOrcamentariaPeriodoExercicioUoPerExePK();
502       compId.setCodPerExe(perExe.getCodPerExe());
503       compId.setCodUo(unidade.getCodUo());
504 
505       UnidadeOrcamentariaPeriodoExercicioUoPerExe uoPerExe = new UnidadeOrcamentariaPeriodoExercicioUoPerExe();
506       uoPerExe.setCompId(compId);
507       uoPerExe.setIndAtivoUoPerExe("S");
508       uoPerExe.setPeriodoExercicioPerExe(perExe);
509       uoPerExe.setUnidadeOrcamentariaUO(unidade);
510 
511       dao.salvar(uoPerExe);
512     }
513   }
514 
515   /**
516    * Seta os Tipos de Ações do PPA 2008-2011 para a carga efetuada conforme a
517    * regra:<br>
518    * Para ações com o número iniciado por 1 - Projeto (ex.: 1144)<br>
519    * Para ações com o número iniciado por 2 - Atividade (ex.: 2079)<br>
520    * Para ações com o número iniciado por 9 - Operações Especiais (ex.: 9084)<br>
521    * @author aleixo
522    * @since 19/07/2007
523    * @throws ECARException
524    */
525   public void setTipoAcoesPPA20082011() throws ECARException {
526 
527     UsuarioUsu usuarioLogado = ((SegurancaECAR) request.getSession().getAttribute("seguranca")).getUsuario();
528 
529     SisAtributoDao sisDao = new SisAtributoDao(request);
530 
531     SisAtributoSatb projeto = (SisAtributoSatb) sisDao.buscar(SisAtributoSatb.class, Long.valueOf(46));
532     SisAtributoSatb atividade = (SisAtributoSatb) sisDao.buscar(SisAtributoSatb.class, Long.valueOf(47));
533     SisAtributoSatb operacaoEspecial = (SisAtributoSatb) sisDao.buscar(SisAtributoSatb.class, Long.valueOf(48));
534 
535     Transaction tx = null;
536 
537     try {
538       tx = session.beginTransaction();
539 
540       StringBuilder s = new StringBuilder();
541       s.append("select iett from ItemEstruturaIett iett where iett.estruturaEtt.codEtt = 20");
542       s.append(" and iett.siglaIett like '1%' ");
543 
544       Query q = this.session.createQuery(s.toString());
545 
546       List<ItemEstruturaIett> acoesProjeto = q.list();
547       for (ItemEstruturaIett iett : acoesProjeto) {
548 
549         ItemEstruturaSisAtributoIettSatb atbLivre = new ItemEstruturaSisAtributoIettSatb();
550         atbLivre.setItemEstruturaIett(iett);
551         atbLivre.setSisAtributoSatb(projeto);
552         atbLivre.setDataUltManutencaoIettSatb(Data.getDataAtual());
553         atbLivre.setUsuarioUsu(usuarioLogado);
554         atbLivre.atribuirPKPai();
555 
556         Set atbsLivres = iett.getItemEstruturaSisAtributoIettSatbs();
557 
558         boolean podeInserir = true;
559         if (atbsLivres != null && !atbsLivres.isEmpty()) {
560           for (Iterator it = atbsLivres.iterator(); it.hasNext();) {
561             ItemEstruturaSisAtributoIettSatb aux = (ItemEstruturaSisAtributoIettSatb) it.next();
562 
563             if (aux.getItemEstruturaIett().equals(iett) && aux.getSisAtributoSatb().equals(projeto)) {
564               podeInserir = false;
565               break;
566             }
567           }
568         }
569 
570         if (podeInserir) {
571           session.save(atbLivre);
572         }
573       }
574 
575       s = new StringBuilder();
576       s.append("select iett from ItemEstruturaIett iett where iett.estruturaEtt.codEtt = 20");
577       s.append(" and iett.siglaIett like '2%' ");
578 
579       q = this.session.createQuery(s.toString());
580 
581       List<ItemEstruturaIett> acoesAtividade = q.list();
582       for (ItemEstruturaIett iett : acoesAtividade) {
583 
584         ItemEstruturaSisAtributoIettSatb atbLivre = new ItemEstruturaSisAtributoIettSatb();
585         atbLivre.setItemEstruturaIett(iett);
586         atbLivre.setSisAtributoSatb(atividade);
587         atbLivre.setDataUltManutencaoIettSatb(Data.getDataAtual());
588         atbLivre.setUsuarioUsu(usuarioLogado);
589         atbLivre.atribuirPKPai();
590 
591         Set atbsLivres = iett.getItemEstruturaSisAtributoIettSatbs();
592 
593         boolean podeInserir = true;
594         if (atbsLivres != null && !atbsLivres.isEmpty()) {
595           for (Iterator it = atbsLivres.iterator(); it.hasNext();) {
596             ItemEstruturaSisAtributoIettSatb aux = (ItemEstruturaSisAtributoIettSatb) it.next();
597 
598             if (aux.getItemEstruturaIett().equals(iett) && aux.getSisAtributoSatb().equals(atividade)) {
599               podeInserir = false;
600               break;
601             }
602           }
603         }
604 
605         if (podeInserir) {
606           session.save(atbLivre);
607         }
608       }
609 
610       s = new StringBuilder();
611       s.append("select iett from ItemEstruturaIett iett where iett.estruturaEtt.codEtt = 20");
612       s.append(" and iett.siglaIett like '9%' ");
613 
614       q = this.session.createQuery(s.toString());
615 
616       List<ItemEstruturaIett> acoesOperEsp = q.list();
617       for (ItemEstruturaIett iett : acoesOperEsp) {
618 
619         ItemEstruturaSisAtributoIettSatb atbLivre = new ItemEstruturaSisAtributoIettSatb();
620         atbLivre.setItemEstruturaIett(iett);
621         atbLivre.setSisAtributoSatb(operacaoEspecial);
622         atbLivre.setDataUltManutencaoIettSatb(Data.getDataAtual());
623         atbLivre.setUsuarioUsu(usuarioLogado);
624         atbLivre.atribuirPKPai();
625 
626         Set atbsLivres = iett.getItemEstruturaSisAtributoIettSatbs();
627 
628         boolean podeInserir = true;
629         if (atbsLivres != null && !atbsLivres.isEmpty()) {
630           for (Iterator it = atbsLivres.iterator(); it.hasNext();) {
631             ItemEstruturaSisAtributoIettSatb aux = (ItemEstruturaSisAtributoIettSatb) it.next();
632 
633             if (aux.getItemEstruturaIett().equals(iett) && aux.getSisAtributoSatb().equals(operacaoEspecial)) {
634               podeInserir = false;
635               break;
636             }
637           }
638         }
639 
640         if (podeInserir) {
641           session.save(atbLivre);
642         }
643       }
644 
645       tx.commit();
646     } catch (Exception e) {
647       e.printStackTrace();
648       if (tx != null)
649         try {
650           tx.rollback();
651         } catch (HibernateException r) {
652           this.logger.error(r);
653           throw new ECARException("erro.hibernateException");
654         }
655       this.logger.error(e);
656       throw new ECARException("erro.hibernateException");
657     }
658   }
659 
660   /**
661    * Metodo para efetuar a carga de valores em EfItemEstPrevisaoEfiep conforme
662    * dados enviados pelo COP.
663    * @author aleixo
664    * @since 27/07/2007
665    * @throws ECARException
666    */
667   public void efetuarCargaValoresCOP() throws ECARException {
668 
669     final String CORRENTE = "C";
670     final String CAPITAL = "K";
671     final String TESOURO = "T";
672     final String OUTRAS_FONTES = "O";
673 
674     ItemEstruturaDao itemDao = new ItemEstruturaDao(request);
675 
676     Transaction tx = null;
677 
678     try {
679       // Buscando a estrutura de nível de ação do PPA 2008-2011
680       EstruturaEtt estrutura = (EstruturaEtt) new EstruturaDao(request).buscar(EstruturaEtt.class, Long.valueOf(20));
681       List<EfIettFonteTotEfieft> fontesTotEfieft = new ArrayList<EfIettFonteTotEfieft>();
682 
683       Query q = this.session.createQuery("from FonteRecursoFonr");
684       List<FonteRecursoFonr> fontesRecurso = (List<FonteRecursoFonr>) q.list();
685 
686       tx = session.beginTransaction();
687 
688       // BufferedReader in = new BufferedReader (new
689       // FileReader("/home/aleixo/cop/valores.csv"));
690       // BufferedReader in = new BufferedReader (new
691       // FileReader("/home/aleixo/cop/valores-quente-ok.csv"));
692       // BufferedReader in = new BufferedReader (new
693       // FileReader("/home/aleixo/cop/valores-novo-quente.csv"));
694       BufferedReader in = new BufferedReader(new FileReader("/home/aleixo/cop/valoresOK.csv"));
695       // BufferedReader in = new BufferedReader (new
696       // FileReader("/home/aleixo/cop/teste.csv"));
697       String linha = "";
698       System.out.println("+++++++++++++++ [Início do Processo]++++++++++++++++");
699       while ((linha = in.readLine()) != null) {
700         String[] campos = linha.split(";");
701 
702         // CODPAT ANOEXERCICIO C CODESPECIE T CODFONTE SUM(VLRPRODDESINICIAL)
703         String codProjAtiv = campos[0].trim();
704         String anoExe = campos[1].trim();
705         String indCapCor = campos[2].trim();
706         String codEsp = campos[3].trim();
707         String tipoFonte = campos[4].trim();
708         String codFonte = campos[5].trim();
709         String valor = campos[6].trim();
710 
711         Long codFonr = null;
712         if (CORRENTE.equals(indCapCor))
713           codFonr = new Long(1); // 1 Corrente
714         else if (CAPITAL.equals(indCapCor))
715           codFonr = new Long(2); // 2 Capital
716         else {
717           System.out.println("++++++++ ERRO: Indicador inválido para FonteRecursoFonr: " + indCapCor);
718           throw new ECARException("IndCapCor inválido");
719         }
720 
721         Long codTipoFon = null;
722         if (TESOURO.equals(tipoFonte))
723           codTipoFon = new Long(3);
724         else if (OUTRAS_FONTES.equals(tipoFonte))
725           codTipoFon = new Long(4);
726         else {
727           System.out.println("++++++++ ERRO: TipoFonte inválido para RecursoRec: " + tipoFonte);
728           throw new ECARException("tipoFonte inválido");
729         }
730 
731         ItemEstruturaIett projAtiv = itemDao.getIettBySigla(codProjAtiv, estrutura);
732         if (projAtiv == null) {
733           System.out.println("++++++++ ERRO: ItemEstruturaIett é Nulo para valor " + codProjAtiv);
734           throw new ECARException("ItemEstruturaIett is null");
735         }
736 
737         ExercicioExe exercicio = (ExercicioExe) this.selectObjeto("ExercicioExe", "descricaoExe", STRING, anoExe, null);
738         FonteRecursoFonr fonr = (FonteRecursoFonr) this.selectObjeto("FonteRecursoFonr", "codFonr", LONG, codFonr, null);
739         EspecieEsp esp = (EspecieEsp) this.selectObjeto("EspecieEsp", "codEsp", LONG, Long.valueOf(codEsp), null);
740         RecursoRec rec = (RecursoRec) this.selectObjeto("RecursoRec", "codRec", LONG, codTipoFon, null);
741         FonteFon fon = (FonteFon) this.selectObjeto("FonteFon", "codigoIdentFon", LONG, Long.valueOf(codFonte), null);
742         BigDecimal valorAprovado = new BigDecimal(valor).setScale(0);
743 
744         // Verifica se já existe objetos EfIettFonteTotEfieft para esse iett,
745         // caso contrário inclui o mesmo no banco.
746         ItemEstruturaFonteRecursoDao dao = new ItemEstruturaFonteRecursoDao(request);
747         // O ExercicioExe é apenas exigido no método, mas não considerado na
748         // consulta, a linha referente
749         // ao ExercicioExe está comentado no método.
750         List fontesRecursos = dao.getFontesRecursosByExercicio(projAtiv, new ExercicioExe());
751 
752         if ((fontesRecursos.size() == 0) && (!projAtiv.getSiglaIett().substring(0, 1).equals("0"))) {
753 
754           // Tá invertido, o Recurso responde pela Fonte do recurso e vice-versa
755           for (Iterator<FonteRecursoFonr> itFontes = fontesRecurso.iterator(); itFontes.hasNext();) {
756 
757             FonteRecursoFonr fonte = itFontes.next();
758 
759             EfIettFonteTotEfieft efTotEfieft = new EfIettFonteTotEfieft();
760 
761             EfIettFonteTotEfieftPK efTotEfieftPK = new EfIettFonteTotEfieftPK();
762             efTotEfieftPK.setCodFonr(fonte.getCodFonr());
763             efTotEfieftPK.setCodIett(projAtiv.getCodIett());
764 
765             efTotEfieft.setComp_id(efTotEfieftPK);
766             efTotEfieft.setDataInclusaoEfieft(new Date());
767             efTotEfieft.setIndAtivoEfieft("S");
768             efTotEfieft.setItemEstruturaIett(projAtiv);
769             efTotEfieft.setFonteRecursoFonr(fonte);
770 
771             // Acrescenta o objeto na lista que será salva posteriormente no
772             // banco.
773             if (!fontesTotEfieft.contains(efTotEfieft))
774               fontesTotEfieft.add(efTotEfieft);
775           }
776 
777         }
778 
779         EfItemEstPrevisaoEfiepPK compId = new EfItemEstPrevisaoEfiepPK();
780         compId.setCodExe(exercicio.getCodExe());
781         compId.setCodFonr(fonr.getCodFonr());
782         compId.setCodIett(projAtiv.getCodIett());
783         compId.setCodRec(rec.getCodRec());
784         // compId.setCodEsp(esp.getCodEsp());
785         // compId.setCodFon(fon.getCodFon());
786 
787         EfItemEstPrevisaoEfiep efiep = new EfItemEstPrevisaoEfiep();
788         efiep.setComp_id(compId);
789         efiep.setDataInclusaoEfiep(Data.getDataAtual());
790         efiep.setEspecieEsp(esp);
791         efiep.setExercicioExe(exercicio);
792         efiep.setFonteRecursoFonr(fonr);
793         efiep.setIndAtivoEfiep("S");
794         efiep.setItemEstruturaIett(projAtiv);
795         efiep.setRecursoRec(rec);
796         efiep.setFonteFon(fon);
797         efiep.setValorAprovadoEfiep(valorAprovado);
798 
799         System.out.println("--> " + projAtiv.getNomeIett());
800         session.save(efiep);
801       }
802 
803       // Salva os objetos no banco
804       for (EfIettFonteTotEfieft obj : fontesTotEfieft) {
805         session.save(obj);
806       }
807 
808       tx.commit(); // Não esquecer de descomentar o beginTransaction
809       System.out.println("+++++++++++++++ [Fim do Processo]++++++++++++++++");
810     } catch (Exception e) {
811       e.printStackTrace();
812       if (tx != null)
813         try {
814           tx.rollback();
815         } catch (HibernateException r) {
816           this.logger.error(r);
817           throw new ECARException("erro.hibernateException");
818         }
819       this.logger.error(e);
820       throw new ECARException("erro.hibernateException");
821     }
822   }
823 
824   /**
825    * Efetua a carga das finalidades das ações do PPA 2008-2011 - dados
826    * importados do COP.
827    * @throws ECARException
828    */
829   public void efetuarCargaFinalidadesCOP() throws ECARException {
830 
831     ItemEstruturaDao itemDao = new ItemEstruturaDao(request);
832 
833     Transaction tx = null;
834 
835     try {
836       // Buscando a estrutura de nível de ação do PPA 2008-2011
837       EstruturaEtt estrutura = (EstruturaEtt) new EstruturaDao(request).buscar(EstruturaEtt.class, Long.valueOf(20));
838 
839       System.out.println("+++++++++++++++ [Início do Processo]++++++++++++++++");
840       tx = session.beginTransaction();
841 
842       System.out.println("+++++++++++++++ [Lendo arquivo...]++++++++++++++++");
843       BufferedReader in = new BufferedReader(new FileReader("/home/aleixo/cop/FinalidadePat2008-teste.txt"));
844       String linha = "";
845 
846       List<String> linhas = new ArrayList<String>();
847 
848       String finalidade = "";
849       while ((linha = in.readLine()) != null) {
850         linha = linha.trim();
851 
852         if ("".equals(linha)) {
853           continue;
854         }
855 
856         // Ações sempre começam com 1, 2 ou 9 na sigla.
857         if (linha.charAt(0) == '1' || linha.charAt(0) == '2' || linha.charAt(0) == '9') {
858           // nova finalidade
859           linhas.add(finalidade.trim());
860           finalidade = "";
861         }
862         finalidade += linha + " ";
863       }
864 
865       System.out.println("+++++++++++++++ [Identificando \"Sigla\" e \"Finalidade\"...]++++++++++++++++");
866       List<CargaFinalidadesPPA> finalidades = new ArrayList<CargaFinalidadesPPA>();
867       for (String l : linhas) {
868 
869         if (!"".equals(l)) {
870           String sigla = l.substring(0, 4);
871           String fin = l.substring(5, l.length());
872 
873           CargaFinalidadesPPA cfPPA = new CargaFinalidadesPPA();
874           cfPPA.setSigla(sigla);
875           cfPPA.setFinalidade(fin);
876 
877           finalidades.add(cfPPA);
878         }
879       }
880 
881       System.out.println("+++++++++++++++ [Alterando ações...]++++++++++++++++");
882       for (CargaFinalidadesPPA cfPPA : finalidades) {
883         ItemEstruturaIett acao = itemDao.getIettBySigla(cfPPA.getSigla(), estrutura);
884 
885         if (acao == null) {
886           System.out.println("++++++++ ERRO: ItemEstruturaIett é Nulo para valor " + cfPPA.getSigla());
887           throw new ECARException("ItemEstruturaIett is null");
888         }
889 
890         acao.setObjetivoGeralIett(cfPPA.getFinalidade());
891         session.update(acao);
892       }
893 
894       System.out.println("+++++++++++++++ [COMMIT]++++++++++++++++");
895       tx.commit(); // Não esquecer de descomentar o beginTransaction
896       System.out.println("+++++++++++++++ [Fim do Processo]++++++++++++++++");
897     } catch (Exception e) {
898       e.printStackTrace();
899       if (tx != null)
900         try {
901           System.out.println("+++++++++++++++ [ROLLBACK]++++++++++++++++");
902           tx.rollback();
903         } catch (HibernateException r) {
904           this.logger.error(r);
905           throw new ECARException("erro.hibernateException");
906         }
907       this.logger.error(e);
908       throw new ECARException("erro.hibernateException");
909     }
910   }
911 
912   /**
913    * Método referente ao mantis 12295 Carga de Produtos e respectivas metas
914    * físicas por local.
915    * @author aleixo
916    * @throws ECARException
917    * @since 10/08/2007
918    */
919   public void efetuarCargaProdutosCOP() throws ECARException {
920 
921     // Buscando a estrutura de nível de projeto/atividade do PPA 2008-2011
922     EstruturaEtt estruturaProdutos = (EstruturaEtt) new EstruturaDao(request).buscar(EstruturaEtt.class, Long.valueOf(21));
923 
924     Transaction tx = null;
925 
926     try {
927 
928       UsuarioUsu usuarioLogado = ((SegurancaECAR) request.getSession().getAttribute("seguranca")).getUsuario();
929 
930       ArrayList objetos = new ArrayList();
931 
932       super.inicializarLogBean();
933 
934       msg("++++++++++++++++ [ Processo Iniciado ] ++++++++++++++++++++");
935       tx = session.beginTransaction();
936 
937       List<CargaProdutosPPA> itensArquivo = new ArrayList<CargaProdutosPPA>();
938       List<String> itens = new ArrayList<String>();
939 
940       msg("++++++++++++++++ [ Lendo Arquivo ] ++++++++++++++++++++");
941       BufferedReader in = new BufferedReader(new FileReader("/home/aleixo/cop/dadosProdutosOK.csv"));
942       // BufferedReader in = new BufferedReader (new
943       // FileReader("/home/aleixo/cop/dadosProdutos2604OK.csv"));
944       String linha = "";
945 
946       msg("++++++++++++++++ [ Adicionando itens do arquivo na lista itensArquivos] ++++++++++++++++++++");
947       while ((linha = in.readLine()) != null) {
948 
949         // ANOEXERCICIO; CODPAT; NOMEPRODUTOORC; DESCRPRODUTOPAT;
950         // SIGLAUNIDMEDIDA; QTDEPRODPATPREV; CODREGIAO; CODMUNICIPIO
951         // ANOEXERCICIO; CODPAT; CODPRODUTOPAT; Obra(S/N); NOMEPRODUTOORC;
952         // DESCRPRODUTOPAT; SIGLAUNIDMEDIDA; QTDEPRODPATPREV; CODREGIAO;
953         // CODMUNICIPIO
954         String[] campos = linha.split(";");
955 
956         String anoExe = campos[0].trim();
957         String siglaAcao = campos[1].trim();
958         String siglaProduto = campos[2].trim();
959         String indObra = campos[3].trim();
960         String nomeIndicador = campos[4].trim();
961         String nomeProduto = campos[5].trim();
962         String unidadeIndicador = campos[6].trim();
963         String valorPrevisto = campos[7].trim();
964         String codRegiao = campos[8].trim();
965 
966         String codMunicipio = "";
967         if (campos.length == 10)
968           codMunicipio = campos[9].trim();
969 
970         CargaProdutosPPA itemArquivo = new CargaProdutosPPA();
971         itemArquivo.setAnoExe(anoExe);
972         itemArquivo.setCodMunicipio(codMunicipio);
973         itemArquivo.setCodRegiao(codRegiao);
974         itemArquivo.setIndObra(indObra);
975         itemArquivo.setNomeIndicador(Util.removeEspacosDuplicados(nomeIndicador));
976         itemArquivo.setNomeProduto(Util.removeEspacosDuplicados(nomeProduto));
977         itemArquivo.setSiglaAcao(siglaAcao);
978         itemArquivo.setSiglaProduto(siglaProduto);
979         itemArquivo.setUnidadeIndicador(unidadeIndicador);
980         itemArquivo.setValorPrevisto(valorPrevisto);
981 
982         itensArquivo.add(itemArquivo);
983       }
984 
985       msg("++++++++++++++++ [ Ordenando itensArquivo pela siglaAcao e siglaProduto ] ++++++++++++++++++++");
986 
987       Collections.sort(itensArquivo, new Comparator() {
988 
989         public int compare(Object o1, Object o2) {
990           CargaProdutosPPA c1 = (CargaProdutosPPA) o1;
991           CargaProdutosPPA c2 = (CargaProdutosPPA) o2;
992 
993           String s1 = c1.getSiglaAcao();
994           String s2 = c2.getSiglaAcao();
995 
996           return s1.compareTo(s2);
997         }
998 
999       });
1000 
1001       List<CargaProdutosPPA> itensSalvos = new ArrayList<CargaProdutosPPA>();
1002       List<CargaProdutosPPA> itensIgnorados = new ArrayList<CargaProdutosPPA>();
1003 
1004       msg("++++++++++++++++ [ Percorrendo itensArquivo para inserção de itens ] ++++++++++++++++++++");
1005 
1006       String siglaAcaoAux = "";
1007       int siglaProdAux = 1;
1008 
1009       for (CargaProdutosPPA itemArquivo : itensArquivo) {
1010 
1011         /*
1012          * Obtendo local para cadastrar a abrangencia (pegando pela Região, que
1013          * já engloba o municipio)
1014          */
1015         StringBuilder select = new StringBuilder();
1016         select.append("select local from LocalItemLit local");
1017         select.append(" where local.codPlanejamentoLit = :codLocal");
1018         select.append("   and local.localGrupoLgp.codLgp = 11");
1019 
1020         Query q = this.session.createQuery(select.toString());
1021         q.setString("codLocal", itemArquivo.getCodRegiao());
1022 
1023         q.setMaxResults(1);
1024 
1025         Object o = q.uniqueResult();
1026         if (o == null) {
1027           lancarErro("Erro ao pesquisar abrangencia: Local invalido para Regiao: " + itemArquivo.getCodRegiao());
1028         }
1029         LocalItemLit localAbrangencia = (LocalItemLit) o;
1030 
1031         if ("".equals(itemArquivo.getValorPrevisto())) {
1032           lancarErro("Valor inválido: [" + itemArquivo.getValorPrevisto() + "]");
1033         }
1034 
1035         ItemEstruturaIett iett = null;
1036 
1037         // String chave = siglaAcao + "_" + siglaProduto + "_" + indObra;
1038         String chave = itemArquivo.getSiglaAcao() + "_" + itemArquivo.getIndObra() + "_" + itemArquivo.getNomeProduto();
1039 
1040         if (!itens.contains(chave)) {
1041           itensSalvos.add(itemArquivo);
1042           itens.add(chave);
1043 
1044           if (!siglaAcaoAux.equals(itemArquivo.getSiglaAcao())) {
1045             siglaAcaoAux = itemArquivo.getSiglaAcao();
1046             siglaProdAux = 1;
1047           }
1048 
1049           // Gravar item e indicador
1050 
1051           // Obtendo item Pai (do nível de ação do ppa 2008-2011
1052           String sqlBuscaPai = "select pai from ItemEstruturaIett pai where siglaIett = :sigla and pai.estruturaEtt.codEtt = :codEttPai";
1053           q = this.session.createQuery(sqlBuscaPai);
1054           q.setString("sigla", itemArquivo.getSiglaAcao());
1055           q.setLong("codEttPai", 20); // 20 é Ação do PPA 2008-2011
1056           q.setMaxResults(1);
1057           ItemEstruturaIett iettPai = (ItemEstruturaIett) q.uniqueResult();
1058           if (iettPai == null)
1059             lancarErro("Item Pai é Nulo para sigla " + itemArquivo.getSiglaAcao());
1060 
1061           // Setando item referente ao projeto/atividade
1062           iett = new ItemEstruturaIett();
1063 
1064           iett.setIndAtivoIett("S");
1065           iett.setIndBloqPlanejamentoIett("N");
1066           iett.setIndCriticaIett("N");
1067           iett.setIndMonitoramentoIett("N");
1068           iett.setUsuarioUsuByCodUsuIncIett(usuarioLogado);
1069           iett.setDataInclusaoIett(Data.getDataAtual());
1070           iett.setDataUltManutencaoIett(Data.getDataAtual());
1071           iett.setDataInicioIett(Data.parseDate("01/01/2008"));
1072           iett.setDataTerminoIett(Data.parseDate("31/12/2011"));
1073           iett.setNivelIett(Integer.valueOf(4));
1074 
1075           iett.setItemEstruturaIett(iettPai);
1076           // iett.setSiglaIett(itemArquivo.getSiglaProduto());
1077           iett.setSiglaIett(String.valueOf(siglaProdAux));
1078           iett.setNomeIett(itemArquivo.getNomeProduto());
1079 
1080           iett.setEstruturaEtt(estruturaProdutos);
1081 
1082           /* Buscando unidade orçamentárias pela unidade orçamentária da ação */
1083           UnidadeOrcamentariaUO unidade = iettPai.getUnidadeOrcamentariaUO();
1084           if (unidade == null)
1085             lancarErro("Unidade Orçamentária do Item Pai é Nulo");
1086           iett.setUnidadeOrcamentariaUO(unidade);
1087 
1088           /* Buscando orgao pelo orgao da acao */
1089           OrgaoOrg orgao = iettPai.getOrgaoOrgByCodOrgaoResponsavel1Iett();
1090           if (orgao == null)
1091             lancarErro("Orgao do Item Pai é Nulo");
1092 
1093           iett.setOrgaoOrgByCodOrgaoResponsavel1Iett(orgao);
1094 
1095           /* Salvando item */
1096           // itemDao.salvar(request, iett);
1097           // Como preciso salvar todos os itens em transacao, foi "copiado" o
1098           // método salvar e colocado todos os itens em transacao.
1099           session.save(iett);
1100           objetos.add(iett);
1101           msg("Salvando Item --> " + itemArquivo.getSiglaAcao() + " - " + itemArquivo.getSiglaProduto() + " - " + itemArquivo.getNomeProduto());
1102 
1103           siglaProdAux++;
1104 
1105           // Salvar Indicador de Obra.
1106           Long codIndObra = (Dominios.SIM.equals(itemArquivo.getIndObra()) ? Long.valueOf(51) : Long.valueOf(52));
1107           SisAtributoSatb obra = (SisAtributoSatb) buscar(SisAtributoSatb.class, codIndObra);
1108 
1109           ItemEstruturaSisAtributoIettSatb atbLivreObra = new ItemEstruturaSisAtributoIettSatb();
1110           atbLivreObra.setItemEstruturaIett(iett);
1111           atbLivreObra.setSisAtributoSatb(obra);
1112           atbLivreObra.setDataUltManutencaoIettSatb(Data.getDataAtual());
1113           atbLivreObra.setUsuarioUsu(usuarioLogado);
1114           atbLivreObra.atribuirPKPai();
1115 
1116           session.save(atbLivreObra);
1117           objetos.add(atbLivreObra);
1118 
1119           // Salvando a Abrangência
1120           ItemEstrutLocalIettl abrangencia = new ItemEstrutLocalIettl();
1121           ItemEstrutLocalIettlPK abrgCompId = new ItemEstrutLocalIettlPK();
1122 
1123           abrgCompId.setCodIett(iett.getCodIett());
1124           abrgCompId.setCodLit(localAbrangencia.getCodLit());
1125 
1126           abrangencia.setComp_id(abrgCompId);
1127           abrangencia.setDataInclusaoIettl(Data.getDataAtual());
1128           abrangencia.setItemEstruturaIett(iett);
1129           abrangencia.setLocalItemLit(localAbrangencia);
1130           abrangencia.setUsuarioUsuManutencao(usuarioLogado);
1131           session.save(abrangencia);
1132           objetos.add(abrangencia);
1133 
1134           //
1135           // controlar as permissoes passando o item e a lista das funcoes de
1136           // acompanhamento velhas (vai ser uma lista vazia)
1137           //
1138           new ControlePermissao().atualizarPermissoesItemEstrutura(iett, null, session, true, request);
1139 
1140           // gravar permissão para o usuário que criou o item
1141           ItemEstrutUsuarioIettus itemEstrutUsuario = new ItemEstrutUsuarioIettus();
1142 
1143           itemEstrutUsuario.setItemEstruturaIett(iett);
1144           itemEstrutUsuario.setItemEstruturaIettOrigem(iett);
1145           itemEstrutUsuario.setCodTpPermIettus(ControlePermissao.PERMISSAO_USUARIO);
1146           itemEstrutUsuario.setUsuarioUsu(usuarioLogado);
1147 
1148           itemEstrutUsuario.setIndLeituraIettus("S");
1149           itemEstrutUsuario.setIndEdicaoIettus("S");
1150           itemEstrutUsuario.setIndExcluirIettus("S");
1151 
1152           itemEstrutUsuario.setIndAtivMonitIettus("N");
1153           itemEstrutUsuario.setIndDesatMonitIettus("N");
1154           itemEstrutUsuario.setIndBloqPlanIettus("N");
1155           itemEstrutUsuario.setIndDesblPlanIettus("N");
1156           itemEstrutUsuario.setIndInfAndamentoIettus("N");
1157           itemEstrutUsuario.setIndEmitePosIettus("N");
1158           itemEstrutUsuario.setIndProxNivelIettus("N");
1159 
1160           itemEstrutUsuario.setDataInclusaoIettus(Data.getDataAtual());
1161 
1162           session.save(itemEstrutUsuario);
1163           objetos.add(itemEstrutUsuario);
1164         }
1165         else {
1166           itensIgnorados.add(itemArquivo);
1167         }
1168       }
1169 
1170       msg("++++++++++++++++ [ Realizando Commit ] ++++++++++++++++++++");
1171       tx.commit(); // Ao descomentar essa linha, não esquecer de descomentar o
1172                    // beginTransaction
1173 
1174       if (super.logBean != null) {
1175         super.logBean.setCodigoTransacao(Data.getHoraAtual(false));
1176         super.logBean.setOperacao("INC");
1177         Iterator itObj = objetos.iterator();
1178 
1179         while (itObj.hasNext()) {
1180           super.logBean.setObj(itObj.next());
1181           super.loggerAuditoria.info(logBean.toString());
1182         }
1183       }
1184       msg("++++++++++++++++ [ Processo Finalizado Com Sucesso ] ++++++++++++++++++++");
1185 
1186     } catch (Exception e) {
1187       e.printStackTrace();
1188       msg("++++++++++++++++ [ Erro no Processo. Executando RollBack ] ++++++++++++++++++++");
1189       if (tx != null)
1190         try {
1191           tx.rollback();
1192         } catch (HibernateException r) {
1193           this.logger.error(r);
1194           throw new ECARException("erro.hibernateException");
1195         }
1196       this.logger.error(e);
1197       throw new ECARException("erro.hibernateException");
1198     }
1199   }
1200 
1201   /**
1202    * Método complementar para o método efetuarCargaProdutosCOP(). Este método
1203    * carrega no sistema os valores do previsto por local para os produtos do
1204    * COP.
1205    * @throws ECARException
1206    */
1207   public void efetuarCargaIndicadoresProdutosCOP() throws ECARException {
1208 
1209     // ItemEstruturaDao itemDao = new ItemEstruturaDao(request);
1210 
1211     // Buscando a estrutura de nível de projeto/atividade do PPA 2008-2011
1212     EstruturaEtt estruturaProdutos = (EstruturaEtt) new EstruturaDao(request).buscar(EstruturaEtt.class, Long.valueOf(21));
1213 
1214     Transaction tx = null;
1215 
1216     try {
1217 
1218       UsuarioUsu usuarioLogado = ((SegurancaECAR) request.getSession().getAttribute("seguranca")).getUsuario();
1219 
1220       ArrayList objetos = new ArrayList();
1221 
1222       super.inicializarLogBean();
1223 
1224       msg("++++++++++++++++ [ Processo Iniciado ] ++++++++++++++++++++");
1225       tx = session.beginTransaction();
1226 
1227       msg("++++++++++++++++ [ Lendo Arquivo ] ++++++++++++++++++++");
1228       BufferedReader in = new BufferedReader(new FileReader("/home/aleixo/cop/dadosProdutosOK.csv"));
1229       // BufferedReader in = new BufferedReader (new
1230       // FileReader("/home/aleixo/cop/dadosProdutos2604OK.csv"));
1231 
1232       List<String> indicadoresIncluidos = new ArrayList<String>();
1233       String linha = "";
1234       while ((linha = in.readLine()) != null) {
1235 
1236         // ANOEXERCICIO; CODPAT; CODPRODUTOPAT; Obra(S/N); NOMEPRODUTOORC;
1237         // DESCRPRODUTOPAT; SIGLAUNIDMEDIDA; QTDEPRODPATPREV; CODREGIAO;
1238         // CODMUNICIPIO
1239         String[] campos = linha.split(";");
1240 
1241         String anoExe = campos[0].trim();
1242         String siglaAcao = campos[1].trim();
1243         String siglaProduto = campos[2].trim();
1244         String indObra = campos[3].trim();
1245         String nomeIndicador = Util.removeEspacosDuplicados(campos[4].trim());
1246         String nomeProduto = Util.removeEspacosDuplicados(campos[5].trim());
1247         String unidadeIndicador = campos[6].trim();
1248         String valorPrevisto = campos[7].trim();
1249         String codRegiao = campos[8].trim();
1250 
1251         String codMunicipio = "";
1252         if (campos.length == 10)
1253           codMunicipio = campos[9].trim();
1254 
1255         /* Buscando local do item */
1256         StringBuilder select = new StringBuilder();
1257         select.append("select local from LocalItemLit local");
1258         select.append(" where local.codPlanejamentoLit = :codLocal");
1259         select.append("   and (local.localGrupoLgp.codLgp = 8 or local.localGrupoLgp.codLgp = 11)");
1260 
1261         Query q = this.session.createQuery(select.toString());
1262         q.setString("codLocal", (!"".equals(codMunicipio) ? codMunicipio : codRegiao)); // Se
1263                                                                                         // existir
1264                                                                                         // o
1265                                                                                         // municipio,
1266                                                                                         // o
1267                                                                                         // local
1268                                                                                         // vai
1269                                                                                         // ser
1270                                                                                         // o
1271                                                                                         // municipio,
1272                                                                                         // senão
1273                                                                                         // vai
1274                                                                                         // ser
1275                                                                                         // a
1276                                                                                         // região
1277 
1278         q.setMaxResults(1);
1279 
1280         Object o = q.uniqueResult();
1281         if (o == null) {
1282           if (!"".equals(codMunicipio))
1283             lancarErro("Local invalido para Municipio: " + codMunicipio);
1284           else
1285             lancarErro("Local invalido para Regiao: " + codRegiao);
1286         }
1287         LocalItemLit local = (LocalItemLit) o;
1288 
1289         if ("".equals(valorPrevisto)) {
1290           lancarErro("Valor inválido: [" + valorPrevisto + "]");
1291         }
1292 
1293         ItemEstruturaIett iett = null;
1294 
1295         // Gravar somente o indicador
1296         // buscar o item para gravar o indicador
1297         // iett = (ItemEstruturaIett) this.selectObjeto("ItemEstruturaIett",
1298         // "siglaIett", STRING, siglaProduto, session);
1299         select = new StringBuilder();
1300         select.append("select item from ItemEstruturaIett item where item.nomeIett = :nome and item.estruturaEtt.codEtt = :codEtt and item.itemEstruturaIett.siglaIett = :siglaPai");
1301 
1302         q = session.createQuery(select.toString());
1303         q.setString("nome", nomeProduto);
1304         q.setString("siglaPai", siglaAcao);
1305         q.setLong("codEtt", estruturaProdutos.getCodEtt().longValue());
1306 
1307         List itensTemp = q.list();
1308         if (itensTemp != null && !itensTemp.isEmpty()) {
1309           iett = (ItemEstruturaIett) itensTemp.get(0);
1310         }
1311         else {
1312           lancarErro("Item Nulo para: " + nomeProduto + " para siglaPai: " + siglaAcao);
1313           // continue;
1314         }
1315 
1316         // Incluir o indicador!
1317 
1318         // Verificar se o indicador existe
1319         String chaveIndicador = iett.getItemEstruturaIett().getSiglaIett() + "_" + "_" + iett.getNomeIett() + "_" + nomeIndicador;
1320 
1321         if (!indicadoresIncluidos.contains(chaveIndicador)) {
1322 
1323           indicadoresIncluidos.add(chaveIndicador);
1324 
1325           // Cadastrar indicador
1326           ItemEstrtIndResulIettr indicador = new ItemEstrtIndResulIettr();
1327           indicador.setItemEstruturaIett(iett);
1328           indicador.setNomeIettir(nomeIndicador);
1329           indicador.setUnidMedidaIettr(unidadeIndicador);
1330           indicador.setIndProjecaoIettr(Dominios.NAO);
1331           indicador.setIndAtivoIettr(Dominios.SIM);
1332           indicador.setIndPrevPorLocal(Dominios.SIM);
1333           indicador.setIndRealPorLocal(Dominios.NAO);
1334           indicador.setIndTipoQtde(Dominios.IETTR_QUANTIDADE);
1335           indicador.setUsuarioUsuManutencao(usuarioLogado);
1336           indicador.setDataUltManutencao(Data.getDataAtual());
1337 
1338           // 41 é Meta Física PPA
1339           SisAtributoSatb metaFisicaPPA = (SisAtributoSatb) this.selectObjeto("SisAtributoSatb", "codSatb", LONG, Long.valueOf(41), session);
1340           indicador.setSisAtributoSatb(metaFisicaPPA);
1341 
1342           // itemEstrtIndResul.setIndValorFinalIettr(null); Não preencher
1343           // itemEstrtIndResul.setIndAcumulavelIettr(Pagina.getParamStr(request,
1344           // "indAcumulavelIettr")); não preencher
1345 
1346           session.save(indicador);
1347           objetos.add(indicador);
1348         }
1349       }
1350 
1351       msg("++++++++++++++++ [ Realizando Commit ] ++++++++++++++++++++");
1352       tx.commit(); // Ao descomentar essa linha, não esquecer de descomentar o
1353                    // beginTransaction
1354 
1355       if (super.logBean != null) {
1356         super.logBean.setCodigoTransacao(Data.getHoraAtual(false));
1357         super.logBean.setOperacao("INC");
1358         Iterator itObj = objetos.iterator();
1359 
1360         while (itObj.hasNext()) {
1361           super.logBean.setObj(itObj.next());
1362           super.loggerAuditoria.info(logBean.toString());
1363         }
1364       }
1365       msg("++++++++++++++++ [ Processo Finalizado Com Sucesso ] ++++++++++++++++++++");
1366 
1367     } catch (Exception e) {
1368       e.printStackTrace();
1369       msg("++++++++++++++++ [ Erro no Processo. Executando RollBack ] ++++++++++++++++++++");
1370       if (tx != null)
1371         try {
1372           tx.rollback();
1373         } catch (HibernateException r) {
1374           this.logger.error(r);
1375           throw new ECARException("erro.hibernateException");
1376         }
1377       this.logger.error(e);
1378       throw new ECARException("erro.hibernateException");
1379     }
1380   }
1381 
1382   public void efetuarCargaValoresIndicadoresProdutosCOP() throws ECARException {
1383     // ItemEstruturaDao itemDao = new ItemEstruturaDao(request);
1384 
1385     // Buscando a estrutura de nível de projeto/atividade do PPA 2008-2011
1386     EstruturaEtt estruturaProdutos = (EstruturaEtt) new EstruturaDao(request).buscar(EstruturaEtt.class, Long.valueOf(21));
1387 
1388     Transaction tx = null;
1389 
1390     try {
1391 
1392       // UsuarioUsu usuarioLogado =
1393       // ((SegurancaECAR)request.getSession().getAttribute("seguranca")).getUsuario();
1394 
1395       ArrayList objetos = new ArrayList();
1396 
1397       super.inicializarLogBean();
1398 
1399       msg("++++++++++++++++ [ Processo Iniciado ] ++++++++++++++++++++");
1400       tx = session.beginTransaction();
1401 
1402       msg("++++++++++++++++ [ Lendo Arquivo ] ++++++++++++++++++++");
1403       BufferedReader in = new BufferedReader(new FileReader("/home/aleixo/cop/dadosProdutosOK.csv"));
1404 
1405       String linha = "";
1406       while ((linha = in.readLine()) != null) {
1407 
1408         // ANOEXERCICIO; CODPAT; CODPRODUTOPAT; Obra(S/N); NOMEPRODUTOORC;
1409         // DESCRPRODUTOPAT; SIGLAUNIDMEDIDA; QTDEPRODPATPREV; CODREGIAO;
1410         // CODMUNICIPIO
1411         String[] campos = linha.split(";");
1412 
1413         String anoExe = campos[0].trim();
1414         String siglaAcao = campos[1].trim();
1415         String siglaProduto = campos[2].trim();
1416         String indObra = campos[3].trim();
1417         String nomeIndicador = Util.removeEspacosDuplicados(campos[4].trim());
1418         String nomeProduto = Util.removeEspacosDuplicados(campos[5].trim());
1419         String unidadeIndicador = campos[6].trim();
1420         String valorPrevisto = campos[7].trim();
1421         String codRegiao = campos[8].trim();
1422 
1423         String codMunicipio = "";
1424         if (campos.length == 10)
1425           codMunicipio = campos[9].trim();
1426 
1427         ExercicioExe exercicio = (ExercicioExe) this.selectObjeto("ExercicioExe", "descricaoExe", STRING, anoExe, session);
1428 
1429         /* Buscando local do item */
1430         StringBuilder select = new StringBuilder();
1431         select.append("select local from LocalItemLit local");
1432         select.append(" where local.codPlanejamentoLit = :codLocal");
1433         select.append("   and (local.localGrupoLgp.codLgp = 8 or local.localGrupoLgp.codLgp = 11)");
1434 
1435         Query q = this.session.createQuery(select.toString());
1436         q.setString("codLocal", (!"".equals(codMunicipio) ? codMunicipio : codRegiao)); // Se
1437                                                                                         // existir
1438                                                                                         // o
1439                                                                                         // municipio,
1440                                                                                         // o
1441                                                                                         // local
1442                                                                                         // vai
1443                                                                                         // ser
1444                                                                                         // o
1445                                                                                         // municipio,
1446                                                                                         // senão
1447                                                                                         // vai
1448                                                                                         // ser
1449                                                                                         // a
1450                                                                                         // região
1451 
1452         q.setMaxResults(1);
1453 
1454         Object o = q.uniqueResult();
1455         if (o == null) {
1456           if (!"".equals(codMunicipio))
1457             lancarErro("Local invalido para Municipio: " + codMunicipio);
1458           else
1459             lancarErro("Local invalido para Regiao: " + codRegiao);
1460         }
1461         LocalItemLit local = (LocalItemLit) o;
1462 
1463         if ("".equals(valorPrevisto)) {
1464           lancarErro("Valor inválido: [" + valorPrevisto + "]");
1465         }
1466 
1467         ItemEstruturaIett iett = null;
1468 
1469         select = new StringBuilder();
1470         select.append("select item from ItemEstruturaIett item where item.nomeIett = :nome and item.estruturaEtt.codEtt = :codEtt and item.itemEstruturaIett.siglaIett = :siglaPai");
1471 
1472         q = session.createQuery(select.toString());
1473         q.setString("nome", nomeProduto);
1474         q.setString("siglaPai", siglaAcao);
1475         q.setLong("codEtt", estruturaProdutos.getCodEtt().longValue());
1476 
1477         List itensTemp = q.list();
1478         if (itensTemp != null && !itensTemp.isEmpty()) {
1479           iett = (ItemEstruturaIett) itensTemp.get(0);
1480         }
1481         else {
1482           lancarErro("Item Nulo para: " + nomeProduto + " para siglaPai: " + siglaAcao);
1483           // continue;
1484         }
1485 
1486         // Verificar se o indicador existe
1487         select = new StringBuilder();
1488         select.append("select indicador from ItemEstrtIndResulIettr indicador");
1489         select.append(" where indicador.itemEstruturaIett.codIett = :item");
1490         select.append("   and lower(indicador.nomeIettir) = :nomeInd");
1491 
1492         q = this.session.createQuery(select.toString());
1493         q.setLong("item", iett.getCodIett().longValue());
1494         q.setString("nomeInd", nomeIndicador.toLowerCase());
1495 
1496         List indicadores = q.list();
1497 
1498         ItemEstrtIndResulIettr indicador = null;
1499         if (indicadores != null && !indicadores.isEmpty()) {
1500           // Indicador existe.
1501           indicador = (ItemEstrtIndResulIettr) indicadores.get(0);
1502         }
1503         else {
1504           lancarErro("Indicador = null para: " + nomeIndicador);
1505         }
1506 
1507         ItemEstrtIndResulLocalIettirl indResulLocal = new ItemEstrtIndResulLocalIettirl();
1508         indResulLocal.setDataInclusaoIettirl(Data.getDataAtual());
1509         indResulLocal.setExercicioExe(exercicio);
1510         indResulLocal.setIndAtivoIettirl(Dominios.SIM);
1511         indResulLocal.setItemEsrtIndResulIettr(indicador);
1512         indResulLocal.setLocalItemLit(local);
1513         indResulLocal.setQtdPrevistaIettirl(Double.valueOf(valorPrevisto));
1514 
1515         session.save(indResulLocal);
1516         objetos.add(indResulLocal);
1517 
1518       }
1519 
1520       msg("++++++++++++++++ [ Realizando Commit ] ++++++++++++++++++++");
1521       tx.commit(); // Ao descomentar essa linha, não esquecer de descomentar o
1522                    // beginTransaction
1523 
1524       if (super.logBean != null) {
1525         super.logBean.setCodigoTransacao(Data.getHoraAtual(false));
1526         super.logBean.setOperacao("INC");
1527         Iterator itObj = objetos.iterator();
1528 
1529         while (itObj.hasNext()) {
1530           super.logBean.setObj(itObj.next());
1531           super.loggerAuditoria.info(logBean.toString());
1532         }
1533       }
1534       msg("++++++++++++++++ [ Processo Finalizado Com Sucesso ] ++++++++++++++++++++");
1535 
1536     } catch (Exception e) {
1537       e.printStackTrace();
1538       msg("++++++++++++++++ [ Erro no Processo. Executando RollBack ] ++++++++++++++++++++");
1539       if (tx != null)
1540         try {
1541           tx.rollback();
1542         } catch (HibernateException r) {
1543           this.logger.error(r);
1544           throw new ECARException("erro.hibernateException");
1545         }
1546       this.logger.error(e);
1547       throw new ECARException("erro.hibernateException");
1548     }
1549   }
1550 
1551   public void efetuarTotalizacaoIndicadoresProdutosCOP() throws ECARException {
1552 
1553     // ItemEstruturaDao itemDao = new ItemEstruturaDao(request);
1554 
1555     // Buscando a estrutura de nível de projeto/atividade do PPA 2008-2011
1556     EstruturaEtt estruturaProdutos = (EstruturaEtt) new EstruturaDao(request).buscar(EstruturaEtt.class, Long.valueOf(21));
1557     ExercicioExe exe2008 = (ExercicioExe) buscar(ExercicioExe.class, Long.valueOf(6));
1558     ExercicioExe exe2009 = (ExercicioExe) buscar(ExercicioExe.class, Long.valueOf(7));
1559     ExercicioExe exe2010 = (ExercicioExe) buscar(ExercicioExe.class, Long.valueOf(8));
1560     ExercicioExe exe2011 = (ExercicioExe) buscar(ExercicioExe.class, Long.valueOf(9));
1561 
1562     Transaction tx = null;
1563 
1564     try {
1565 
1566       // UsuarioUsu usuarioLogado =
1567       // ((SegurancaECAR)request.getSession().getAttribute("seguranca")).getUsuario();
1568 
1569       List<CargaProdutosPPA> itensArquivo = new ArrayList<CargaProdutosPPA>();
1570 
1571       msg("++++++++++++++++ [ Processo Iniciado ] ++++++++++++++++++++");
1572       tx = session.beginTransaction();
1573 
1574       msg("++++++++++++++++ [ Lendo Arquivo ] ++++++++++++++++++++");
1575       BufferedReader in = new BufferedReader(new FileReader("/home/aleixo/cop/dadosProdutosOK.csv"));
1576       String linha = "";
1577       while ((linha = in.readLine()) != null) {
1578 
1579         // ANOEXERCICIO; CODPAT; CODPRODUTOPAT; Obra(S/N); NOMEPRODUTOORC;
1580         // DESCRPRODUTOPAT; SIGLAUNIDMEDIDA; QTDEPRODPATPREV; CODREGIAO;
1581         // CODMUNICIPIO
1582         String[] campos = linha.split(";");
1583 
1584         String anoExe = campos[0].trim();
1585         String siglaAcao = campos[1].trim();
1586         String siglaProduto = campos[2].trim();
1587         String indObra = campos[3].trim();
1588         String nomeIndicador = campos[4].trim();
1589         String nomeProduto = campos[5].trim();
1590         String unidadeIndicador = campos[6].trim();
1591         String valorPrevisto = campos[7].trim();
1592         String codRegiao = campos[8].trim();
1593 
1594         String codMunicipio = "";
1595         if (campos.length == 10)
1596           codMunicipio = campos[9].trim();
1597 
1598         CargaProdutosPPA itemArquivo = new CargaProdutosPPA();
1599         itemArquivo.setAnoExe(anoExe);
1600         itemArquivo.setCodMunicipio(codMunicipio);
1601         itemArquivo.setCodRegiao(codRegiao);
1602         itemArquivo.setIndObra(indObra);
1603         itemArquivo.setNomeIndicador(Util.removeEspacosDuplicados(nomeIndicador));
1604         itemArquivo.setNomeProduto(Util.removeEspacosDuplicados(nomeProduto));
1605         itemArquivo.setSiglaAcao(siglaAcao);
1606         itemArquivo.setSiglaProduto(siglaProduto);
1607         itemArquivo.setUnidadeIndicador(unidadeIndicador);
1608         itemArquivo.setValorPrevisto(valorPrevisto);
1609 
1610         itensArquivo.add(itemArquivo);
1611       }
1612 
1613       Set itens = estruturaProdutos.getItemEstruturaIetts();
1614       if (itens != null && !itens.isEmpty()) {
1615         for (Iterator it = itens.iterator(); it.hasNext();) {
1616           ItemEstruturaIett item = (ItemEstruturaIett) it.next();
1617 
1618           String chaveItem = item.getItemEstruturaIett().getSiglaIett() + "_" + "_" + item.getNomeIett();
1619 
1620           List<ItemEstrtIndResulIettr> indicadores = new ArrayList<ItemEstrtIndResulIettr>(item.getItemEstrtIndResulIettrs());
1621 
1622           msg("--> Percorrendo indicadores do item " + item.getNomeIett());
1623 
1624           for (ItemEstrtIndResulIettr indicador : indicadores) {
1625 
1626             double previsto2008 = 0;
1627             double previsto2009 = 0;
1628             double previsto2010 = 0;
1629             double previsto2011 = 0;
1630 
1631             for (CargaProdutosPPA itemArq : itensArquivo) {
1632               String chaveItemArq = itemArq.getSiglaAcao() + "_" + "_" + itemArq.getNomeProduto();
1633 
1634               if (chaveItem.equals(chaveItemArq)) {
1635                 if (indicador.getNomeIettir().equals(itemArq.getNomeIndicador())) {
1636                   if ("2008".equals(itemArq.getAnoExe())) {
1637                     previsto2008 += Double.valueOf(itemArq.getValorPrevisto()).doubleValue();
1638                   }
1639                   if ("2009".equals(itemArq.getAnoExe())) {
1640                     previsto2009 += Double.valueOf(itemArq.getValorPrevisto()).doubleValue();
1641                   }
1642                   if ("2010".equals(itemArq.getAnoExe())) {
1643                     previsto2010 += Double.valueOf(itemArq.getValorPrevisto()).doubleValue();
1644                   }
1645                   if ("2011".equals(itemArq.getAnoExe())) {
1646                     previsto2011 += Double.valueOf(itemArq.getValorPrevisto()).doubleValue();
1647                   }
1648                 }
1649               }
1650             }
1651 
1652             // Gravar valores previstos para cada ano do indicador
1653 
1654             // Gravando para: 2008
1655             if (previsto2008 > 0) {
1656               msg("-------> Gravando total para 2008: " + previsto2008);
1657 
1658               ItemEstrutFisicoIettfPK compId2008 = new ItemEstrutFisicoIettfPK();
1659               compId2008.setCodExe(exe2008.getCodExe());
1660               compId2008.setCodIettir(indicador.getCodIettir());
1661 
1662               ItemEstrutFisicoIettf iettf2008 = new ItemEstrutFisicoIettf();
1663               iettf2008.setComp_id(compId2008);
1664               iettf2008.setDataInclusaoIettf(Data.getDataAtual());
1665               iettf2008.setExercicioExe(exe2008);
1666               iettf2008.setIndAtivoIettf(Dominios.SIM);
1667               iettf2008.setItemEstrtIndResulIettr(indicador);
1668               iettf2008.setQtdPrevistaIettf(Double.valueOf(previsto2008));
1669 
1670               session.save(iettf2008);
1671             }
1672 
1673             // Gravando para: 2009
1674             if (previsto2009 > 0) {
1675               msg("-------> Gravando total para 2009: " + previsto2009);
1676 
1677               ItemEstrutFisicoIettfPK compId2009 = new ItemEstrutFisicoIettfPK();
1678               compId2009.setCodExe(exe2009.getCodExe());
1679               compId2009.setCodIettir(indicador.getCodIettir());
1680 
1681               ItemEstrutFisicoIettf iettf2009 = new ItemEstrutFisicoIettf();
1682               iettf2009.setComp_id(compId2009);
1683               iettf2009.setDataInclusaoIettf(Data.getDataAtual());
1684               iettf2009.setExercicioExe(exe2009);
1685               iettf2009.setIndAtivoIettf(Dominios.SIM);
1686               iettf2009.setItemEstrtIndResulIettr(indicador);
1687               iettf2009.setQtdPrevistaIettf(Double.valueOf(previsto2009));
1688 
1689               session.save(iettf2009);
1690             }
1691 
1692             // Gravando para: 2010
1693             if (previsto2010 > 0) {
1694               msg("-------> Gravando total para 2010: " + previsto2010);
1695 
1696               ItemEstrutFisicoIettfPK compId2010 = new ItemEstrutFisicoIettfPK();
1697               compId2010.setCodExe(exe2010.getCodExe());
1698               compId2010.setCodIettir(indicador.getCodIettir());
1699 
1700               ItemEstrutFisicoIettf iettf2010 = new ItemEstrutFisicoIettf();
1701               iettf2010.setComp_id(compId2010);
1702               iettf2010.setDataInclusaoIettf(Data.getDataAtual());
1703               iettf2010.setExercicioExe(exe2010);
1704               iettf2010.setIndAtivoIettf(Dominios.SIM);
1705               iettf2010.setItemEstrtIndResulIettr(indicador);
1706               iettf2010.setQtdPrevistaIettf(Double.valueOf(previsto2010));
1707 
1708               session.save(iettf2010);
1709             }
1710 
1711             // Gravando para: 2011
1712             if (previsto2011 > 0) {
1713               msg("-------> Gravando total para 2011: " + previsto2011);
1714 
1715               ItemEstrutFisicoIettfPK compId2011 = new ItemEstrutFisicoIettfPK();
1716               compId2011.setCodExe(exe2011.getCodExe());
1717               compId2011.setCodIettir(indicador.getCodIettir());
1718 
1719               ItemEstrutFisicoIettf iettf2011 = new ItemEstrutFisicoIettf();
1720               iettf2011.setComp_id(compId2011);
1721               iettf2011.setDataInclusaoIettf(Data.getDataAtual());
1722               iettf2011.setExercicioExe(exe2011);
1723               iettf2011.setIndAtivoIettf(Dominios.SIM);
1724               iettf2011.setItemEstrtIndResulIettr(indicador);
1725               iettf2011.setQtdPrevistaIettf(Double.valueOf(previsto2011));
1726 
1727               session.save(iettf2011);
1728             }
1729           }
1730         }
1731       }
1732 
1733       msg("++++++++++++++++ [ Realizando Commit ] ++++++++++++++++++++");
1734       tx.commit(); // Ao descomentar essa linha, não esquecer de descomentar o
1735                    // beginTransaction
1736 
1737       msg("++++++++++++++++ [ Processo Finalizado Com Sucesso ] ++++++++++++++++++++");
1738 
1739     } catch (Exception e) {
1740       e.printStackTrace();
1741       msg("++++++++++++++++ [ Erro no Processo. Executando RollBack ] ++++++++++++++++++++");
1742       if (tx != null)
1743         try {
1744           tx.rollback();
1745         } catch (HibernateException r) {
1746           this.logger.error(r);
1747           throw new ECARException("erro.hibernateException");
1748         }
1749       this.logger.error(e);
1750       throw new ECARException("erro.hibernateException");
1751     }
1752   }
1753 
1754   /**
1755    * Método para listar os produtos do COP
1756    * @return
1757    * @throws ECARException
1758    */
1759   public List listarCargaProdutosCOP() throws ECARException {
1760 
1761     try {
1762       msg("++++++++++++++++ [ Processo Iniciado ] ++++++++++++++++++++");
1763 
1764       List<CargaFinalidadesPPA> itens = new ArrayList<CargaFinalidadesPPA>();
1765       List<String> listVerif = new ArrayList<String>();
1766       msg("++++++++++++++++ [ Lendo Arquivo ] ++++++++++++++++++++");
1767       BufferedReader in = new BufferedReader(new FileReader("/home/aleixo/cop/dadosProdutosOK.csv"));
1768       String linha = "";
1769       while ((linha = in.readLine()) != null) {
1770 
1771         // ANOEXERCICIO; CODPAT; NOMEPRODUTOORC; DESCRPRODUTOPAT;
1772         // SIGLAUNIDMEDIDA; QTDEPRODPATPREV; CODREGIAO; CODMUNICIPIO
1773         // ANOEXERCICIO; CODPAT; CODPRODUTOPAT; Obra(S/N); NOMEPRODUTOORC;
1774         // DESCRPRODUTOPAT; SIGLAUNIDMEDIDA; QTDEPRODPATPREV; CODREGIAO;
1775         // CODMUNICIPIO
1776         String[] campos = linha.split(";");
1777 
1778         String anoExe = campos[0].trim();
1779         String siglaAcao = campos[1].trim();
1780         String siglaProduto = campos[2].trim();
1781         String indObra = campos[3].trim();
1782         String nomeIndicador = campos[4].trim();
1783         String nomeProduto = campos[5].trim();
1784         String unidadeIndicador = campos[6].trim();
1785         String valorPrevisto = campos[7].trim();
1786         String codRegiao = campos[8].trim();
1787 
1788         String codMunicipio = "";
1789         if (campos.length == 10)
1790           codMunicipio = campos[9].trim();
1791 
1792         CargaFinalidadesPPA item = new CargaFinalidadesPPA();
1793 
1794         item.setFinalidade(nomeProduto + " - " + siglaProduto + " - " + anoExe);
1795         item.setSigla(siglaAcao);
1796 
1797         String chave = nomeProduto;
1798         if (!listVerif.contains(chave)) {
1799           listVerif.add(chave);
1800           itens.add(item);
1801         }
1802 
1803       }
1804 
1805       Collections.sort(itens, new Comparator() {
1806         public int compare(Object o1, Object o2) {
1807           CargaFinalidadesPPA c1 = (CargaFinalidadesPPA) o1;
1808           CargaFinalidadesPPA c2 = (CargaFinalidadesPPA) o2;
1809 
1810           return c1.getFinalidade().compareTo(c2.getFinalidade());
1811         }
1812       });
1813 
1814       Collections.sort(itens, new Comparator() {
1815         public int compare(Object o1, Object o2) {
1816           CargaFinalidadesPPA c1 = (CargaFinalidadesPPA) o1;
1817           CargaFinalidadesPPA c2 = (CargaFinalidadesPPA) o2;
1818 
1819           return c1.getSigla().compareTo(c2.getSigla());
1820         }
1821       });
1822 
1823       msg("++++++++++++++++ [ Início do Arquivo ] ++++++++++++++++++++");
1824 
1825       FileOutputStream arquivo = new FileOutputStream("/home/aleixo/Desktop/itensRepProd_NOVO.txt");
1826 
1827       for (CargaFinalidadesPPA item : itens) {
1828         String total = item.getSigla() + " - " + item.getFinalidade() + "\n";
1829         arquivo.write(total.getBytes());
1830         arquivo.flush();
1831       }
1832 
1833       arquivo.close();
1834 
1835       msg("++++++++++++++++ [ Fim do Arquivo ] ++++++++++++++++++++");
1836 
1837       msg("++++++++++++++++ [ Processo Finalizado Com Sucesso ] ++++++++++++++++++++");
1838 
1839       return itens;
1840     } catch (Exception e) {
1841       e.printStackTrace();
1842       msg("++++++++++++++++ [ Erro no Processo. Executando RollBack ] ++++++++++++++++++++");
1843       this.logger.error(e);
1844       throw new ECARException("erro.hibernateException");
1845     }
1846   }
1847 
1848   /**
1849    * Efetuar carga do valor default ("Não") para o atributo livre
1850    * "Integralização de Capital" dos itens de nível de ação do PPA 2008-2011.
1851    * @author aleixo
1852    * @since 20/08/2007
1853    * @throws ECARException
1854    */
1855   public void efetuarCargaIntegralizacaoDeCapitalDefault() throws ECARException {
1856 
1857     final int COD_INT_NAO = 54;
1858 
1859     // Buscando a estrutura de nível de ação do PPA 2008-2011
1860     EstruturaEtt estrutura = (EstruturaEtt) new EstruturaDao(request).buscar(EstruturaEtt.class, Long.valueOf(20));
1861     SisAtributoSatb atbIntNao = (SisAtributoSatb) buscar(SisAtributoSatb.class, Long.valueOf(COD_INT_NAO));
1862     UsuarioUsu usuarioLogado = ((SegurancaECAR) request.getSession().getAttribute("seguranca")).getUsuario();
1863 
1864     Transaction tx = null;
1865 
1866     try {
1867       msg("+++++++++++++++++ [ INICIO TRANSACAO ] ++++++++++++++++++++");
1868       tx = session.beginTransaction();
1869 
1870       if (estrutura.getItemEstruturaIetts() != null && !estrutura.getItemEstruturaIetts().isEmpty()) {
1871 
1872         for (Iterator it = estrutura.getItemEstruturaIetts().iterator(); it.hasNext();) {
1873           ItemEstruturaIett item = (ItemEstruturaIett) it.next();
1874 
1875           if (Dominios.NAO.equals(item.getEstruturaEtt().getIndEtapaNivelSuperiorEtt())) {
1876             ItemEstruturaSisAtributoIettSatb atbLivre = new ItemEstruturaSisAtributoIettSatb();
1877             atbLivre.setDataUltManutencaoIettSatb(Data.getDataAtual());
1878             atbLivre.setItemEstruturaIett(item);
1879             atbLivre.setSisAtributoSatb(atbIntNao);
1880             atbLivre.setUsuarioUsu(usuarioLogado);
1881             atbLivre.atribuirPKPai();
1882 
1883             Set atbsLivres = item.getItemEstruturaSisAtributoIettSatbs();
1884 
1885             boolean podeInserir = true;
1886             if (atbsLivres != null && !atbsLivres.isEmpty()) {
1887               for (Iterator it2 = atbsLivres.iterator(); it2.hasNext();) {
1888                 ItemEstruturaSisAtributoIettSatb aux = (ItemEstruturaSisAtributoIettSatb) it2.next();
1889 
1890                 if (aux.getItemEstruturaIett().equals(item) && aux.getSisAtributoSatb().equals(atbIntNao)) {
1891                   podeInserir = false;
1892                   break;
1893                 }
1894               }
1895             }
1896 
1897             if (podeInserir) {
1898               session.save(atbLivre);
1899               msg("--> Gravando \"Não\" para item: " + item.getSiglaIett() + " - " + item.getNomeIett());
1900             }
1901           }
1902         }
1903       }
1904 
1905       msg("+++++++++++++++++ [ COMMIT TRANSACAO ] ++++++++++++++++++++");
1906       tx.commit();
1907       msg("+++++++++++++++++ [ FIM TRANSACAO ] ++++++++++++++++++++");
1908 
1909     } catch (Exception e) {
1910       e.printStackTrace();
1911       if (tx != null)
1912         try {
1913           msg("+++++++++++++++++ [ ROLLBACK TRANSACAO ] ++++++++++++++++++++");
1914           tx.rollback();
1915         } catch (HibernateException r) {
1916           this.logger.error(r);
1917           throw new ECARException("erro.hibernateException");
1918         }
1919       this.logger.error(e);
1920       throw new ECARException("erro.hibernateException");
1921     }
1922   }
1923 }