View Javadoc

1   package ecar.servlet.relatorio.PPA;
2   
3   import java.math.BigDecimal;
4   import java.util.ArrayList;
5   import java.util.Collection;
6   import java.util.Iterator;
7   import java.util.Set;
8   import java.util.TreeSet;
9   
10  import javax.servlet.http.HttpServletRequest;
11  
12  import org.apache.log4j.Logger;
13  
14  import comum.util.Util;
15  
16  import ecar.exception.ECARException;
17  import ecar.pojo.ItemEstrtIndResulIettr;
18  import ecar.pojo.ItemEstrutFisicoIettf;
19  import ecar.pojo.ItemEstruturaIettPPA;
20  import ecar.pojo.ItemEstruturaSisAtributoIettSatb;
21  import ecar.pojo.UsuarioUsu;
22  import ecar.servlet.relatorio.PPA.bean.AcaoBean;
23  import ecar.servlet.relatorio.PPA.bean.IndicadorBean;
24  import ecar.servlet.relatorio.PPA.bean.ProdutoBean;
25  import ecar.servlet.relatorio.PPA.bean.ProgramaBean;
26  import ecar.servlet.relatorio.PPA.bean.RelatorioPPABean;
27  import ecar.servlet.relatorio.PPA.bean.comparator.ItemEstruturaComparatorNome;
28  import ecar.servlet.relatorio.PPA.bean.comparator.ItemEstruturaComparatorSiglaNumero;
29  import ecar.servlet.relatorio.PPA.bean.comparator.ProdutoBeanComparatorDescricao;
30  import ecar.servlet.relatorio.PPA_Util.CalcularTotalVisitor;
31  
32  /**
33   * Classe de acoplamento do relatorio PPA com o sistema E-car
34   * 
35   * 
36   * @author Gabriel Solana
37   * @since 08/2007
38   */
39  public class RelatorioPPAService {
40  
41  	/**
42  	 * Log da classe
43  	 */
44  	private Logger logger = Logger.getLogger(this.getClass());
45  
46  	/**
47  	 * Requisicao
48  	 */
49  	private HttpServletRequest request;
50  
51  	/**
52  	 * Dados do relatorio
53  	 */
54  	private ArrayList<RelatorioPPABean> dados;
55  
56  	/**
57  	 * Calcula os totais na tabela de resumo do relatorio PPA
58  	 */
59  	private final CalcularTotalVisitor calcularTotal = new CalcularTotalVisitor();
60  
61  	private RelatorioParametro buscarItensService;
62  
63  	private CalcularPrevisaoService calcularPrevisaoService;
64  	
65  	CarregaItensCompleto itensService = null;
66  	
67  	private final String CONSTANTE_LINHA_ACAO_OBRIGACOES_ESPECIAIS = "99";
68  	
69  	/*
70  	 * Impossibilita instanciar objeto de classe externa
71  	 */
72  	private RelatorioPPAService() {
73  		dados = new ArrayList<RelatorioPPABean>();
74  	}
75  
76  	
77  
78  	
79  	/**
80  	 * Retorna instancia da classe RelatorioPPAService com parametro de entrada
81  	 * request
82  	 * 
83  	 * @param paramRequest
84  	 * @return
85  	 */
86  	public static RelatorioPPAService getInstance(
87  			HttpServletRequest paramRequest) {
88  		RelatorioPPAService objeto = new RelatorioPPAService();
89  		objeto.request = paramRequest;
90  
91  		return objeto;
92  	}
93  
94  	/**
95  	 * Recupera dados e dispara actions para geracao do relatorio
96  	 * 
97  	 * @return Listagem
98  	 */
99  	public ArrayList<RelatorioPPABean> generatePPA(String tipoParametro,
100 			ArrayList<String> programa, String orgao,
101 			ArrayList<String> listaCriteriosCom,
102 			ArrayList<String> listaCriteriosSem) throws ECARException {
103 
104 		try {
105 			calcularPrevisaoService = new CalcularPrevisaoService(request);
106 
107 			testParametros(tipoParametro, programa, orgao, listaCriteriosCom,
108 					listaCriteriosSem);
109 			logger.info("Carregando dados de linhas de acao...");
110 			ArrayList<ItemEstruturaIettPPA> itens = buscarItensService.execute(
111 					programa, Long.valueOf(orgao), listaCriteriosCom,
112 					listaCriteriosSem);
113 
114 			if (buscarItensService.getTipo().equals(
115 					TipoPesquisaRelatorio.TIPO_1)
116 					|| buscarItensService.getTipo().equals(
117 							TipoPesquisaRelatorio.TIPO_2)) {
118 				getDados(itens);
119 			}
120 
121 		} catch (Exception e) {
122 			e.printStackTrace(System.out);
123 			logger.error(e);
124 			throw new ECARException(
125 					"Nao foi possivel carregar dados do relatorio");
126 		}
127 
128 		return dados == null ? new ArrayList<RelatorioPPABean>() : dados;
129 
130 	}
131 
132 
133 	/**
134 	 * Realiza testes de parametros e instancia service para consulta de itens
135 	 * 
136 	 * @param programa
137 	 * @param orgao
138 	 * @param listaCriteriosCom
139 	 * @param listaCriteriosSem
140 	 * @return
141 	 */
142 	private void testParametros(String tipoParametro, ArrayList programa,
143 			String orgao, ArrayList listaCriteriosCom,
144 			ArrayList listaCriteriosSem) {
145 
146 		final String PPA_COMPLETO = "completo";
147 		final String PPA_ORGAO = "orgao";
148 		final String PPA_PROGRAMA = "programa";
149 
150 		if (PPA_COMPLETO.equalsIgnoreCase(tipoParametro)) {
151 
152 			if (listaCriteriosCom.isEmpty() && listaCriteriosSem.isEmpty()) {
153 				logger.info("Carregando relatorio PPA Projeto de Lei:::: Parametro:Completo sem criterios");
154 				buscarItensService = RelatorioParametroFactory.getPesquisa(
155 						request, TipoPesquisaRelatorio.TIPO_1);
156 			} else {
157 				logger.info("Carregando relatorio PPA Projeto de Lei:::: Parametro:Completo com filtro de criterios");
158 				buscarItensService = RelatorioParametroFactory.getPesquisa(
159 						request, TipoPesquisaRelatorio.TIPO_2);
160 			}
161 
162 		}
163 
164 		// caso nao seja possivel identificar parametros trazer todos
165 		if (buscarItensService == null) {
166 			buscarItensService = RelatorioParametroFactory.getPesquisa(request,
167 					TipoPesquisaRelatorio.TIPO_1);
168 		}
169 
170 	}
171 
172 	/**
173 	 * recebe todos os itens ativos da estrutura de nivel de programa, percorre
174 	 * e gera os beans de relatorio
175 	 * 
176 	 */
177 	private void getDados(ArrayList<ItemEstruturaIettPPA> itensLinhaAcao) {
178 
179 		boolean vazio = true;
180 		try {
181 
182 			
183 			
184 			TipoPesquisaRelatorio tipoRelatorio = buscarItensService.getTipo();
185 
186 			if ( tipoRelatorio.equals(TipoPesquisaRelatorio.TIPO_1)){
187 				itensService = new CarregaItensCompleto(request, false);	
188 			}else{
189 				itensService = new CarregaItensCompleto(request, true);
190 			}			
191 			itensService.initPrevisao(request);
192 			
193 			dados = new ArrayList<RelatorioPPABean>();
194 
195 			for (Iterator<ItemEstruturaIettPPA> iter = itensLinhaAcao.iterator(); iter
196 					.hasNext();) {
197 				ItemEstruturaIettPPA iett = iter.next();
198 
199 				boolean check99 = "99".equals( iett.getSiglaIett() )?false:true;
200 				
201 				vazio = false;
202 
203 				RelatorioPPABean linha = new RelatorioPPABean();
204 				linha.setCodigo(iett.getSiglaIett());
205 				linha.setNome(iett.getNomeIett());
206 				linha.setDescricao( iett.getDescricaoIett() );
207 				logger.info("Carregando dados de programa da linha de acao::" + linha.getNome());
208 				
209 				//Set programaTmp = Reduzir.reduzir( iett.getItemEstruturaIetts() );
210 				linha.setProgramas(generateBeanPrograma(  iett.getItemEstruturaIetts() , check99 ) ); 
211 
212 				dados.add(linha);
213 
214 			}
215 
216 			if (vazio) {
217 				logger.info("Nao existe item de nivelprograma na estrutura no periodo estipulado!!!");
218 			}
219 
220 		} catch (Exception e) {
221 			logger.error("Nao foi possivel carregar dados", e);
222 		}
223 	}
224 
225 	/**
226 	 * gera bean de programa, realiza chamada para calculo de previsao e realiza
227 	 * calculo de total da tabela.
228 	 * 
229 	 * @param itemPrograma
230 	 *            Item de programa referencial
231 	 * @throws Exception
232 	 */
233 	private ArrayList<ProgramaBean> generateBeanPrograma(
234 			Set<ItemEstruturaIettPPA> programas, boolean bean99 ) throws Exception {
235 
236 		ArrayList<ProgramaBean> progs = new ArrayList<ProgramaBean>();
237 
238 		for (Iterator iter = reordenarPorNome(programas).iterator(); iter
239 				.hasNext();) {
240 			ItemEstruturaIettPPA programa = (ItemEstruturaIettPPA) iter.next();
241 
242 			if ("S".equalsIgnoreCase(programa.getIndAtivoIett())) {
243 
244 				ProgramaBean item = geraPrograma(programa,bean99);
245 				
246 				if ( bean99 ){
247 					geraPrevisao(item, programa);
248 					calcularTotal.visit(item); // gera calculo dos totais
249 				}else{
250 					item.setTotalGeralRecursoTot( new BigDecimal(-1) );
251 				}
252 
253 				progs.add(item);
254 
255 			}
256 
257 		}
258 
259 		return progs;
260 
261 	}
262 
263 	/**
264 	 * Reordena Colecao de elementos de acordo com objeto Comparator
265 	 * 
266 	 * @param list
267 	 *            listagem
268 	 * @return Set de objetos reordenados
269 	 */
270 	private Set reordenarPorSiglaNumero(Collection list) {
271 		TreeSet<ItemEstruturaIettPPA> novalista = new TreeSet<ItemEstruturaIettPPA>(
272 				new ItemEstruturaComparatorSiglaNumero());
273 		for (Iterator iter = list.iterator(); iter.hasNext();) {
274 			ItemEstruturaIettPPA item = (ItemEstruturaIettPPA) iter.next();
275 			novalista.add(item);
276 
277 		}
278 		return novalista;
279 	}	
280 	
281 	
282 	/**
283 	 * Reordena Colecao de elementos de acordo com objeto Comparator
284 	 * 
285 	 * @param list
286 	 *            listagem
287 	 * @return Set de objetos reordenados
288 	 */
289 	private Set reordenarPorNome(Collection list) {
290 		TreeSet<ItemEstruturaIettPPA> novalista = new TreeSet<ItemEstruturaIettPPA>(
291 				new ItemEstruturaComparatorNome());
292 		for (Iterator iter = list.iterator(); iter.hasNext();) {
293 			ItemEstruturaIettPPA item = (ItemEstruturaIettPPA) iter.next();
294 			novalista.add(item);
295 
296 		}
297 		return novalista;
298 	}
299 
300 	/**
301 	 * Realiza chamada para calculo de valor aprovado para o item de programa e
302 	 * gera previsao bean.
303 	 * 
304 	 * @param item
305 	 *            POJO a ser populado
306 	 * @param itemPrograma
307 	 *            Item de programa referencial
308 	 * @throws ECARException
309 	 */
310 	private void geraPrevisao(ProgramaBean item, ItemEstruturaIettPPA itemPrograma)
311 			throws ECARException {
312 		BigDecimal[] previsoes = calcularPrevisaoService.calcularPrevisao((itemPrograma));
313 		final BigDecimal ZERO = new BigDecimal(0);
314 		// populando bean de relatorio com os valores de previsao
315 		if (previsoes != null && previsoes.length == 24) {
316 			item.setValor1(previsoes[0] == null ? ZERO : previsoes[0]);
317 			item.setValor2(previsoes[1] == null ? ZERO : previsoes[1]);
318 			item.setValor3(previsoes[2] == null ? ZERO : previsoes[2]);
319 			item.setValor4(previsoes[3] == null ? ZERO : previsoes[3]);
320 			item.setValor5(previsoes[4] == null ? ZERO : previsoes[4]);
321 			item.setValor6(previsoes[5] == null ? ZERO : previsoes[5]);
322 			item.setValor7(previsoes[6] == null ? ZERO : previsoes[6]);
323 			item.setValor8(previsoes[7] == null ? ZERO : previsoes[7]);
324 
325 			item.setValor9(previsoes[8] == null ? ZERO : previsoes[8]);
326 			item.setValor10(previsoes[9] == null ? ZERO : previsoes[9]);
327 			item.setValor11(previsoes[10] == null ? ZERO : previsoes[10]);
328 			item.setValor12(previsoes[11] == null ? ZERO : previsoes[11]);
329 			item.setValor13(previsoes[12] == null ? ZERO : previsoes[12]);
330 			item.setValor14(previsoes[13] == null ? ZERO : previsoes[13]);
331 			item.setValor15(previsoes[14] == null ? ZERO : previsoes[14]);
332 			item.setValor16(previsoes[15] == null ? ZERO : previsoes[15]);
333 
334 			item.setValor17(previsoes[16] == null ? ZERO : previsoes[16]);
335 			item.setValor18(previsoes[17] == null ? ZERO : previsoes[17]);
336 			item.setValor19(previsoes[18] == null ? ZERO : previsoes[18]);
337 			item.setValor20(previsoes[19] == null ? ZERO : previsoes[19]);
338 			item.setValor21(previsoes[20] == null ? ZERO : previsoes[20]);
339 			item.setValor22(previsoes[21] == null ? ZERO : previsoes[21]);
340 			item.setValor23(previsoes[22] == null ? ZERO : previsoes[22]);
341 			item.setValor24(previsoes[23] == null ? ZERO : previsoes[23]);
342 
343 		} else {
344 
345 			item.setValor1(ZERO);
346 			item.setValor2(ZERO);
347 			item.setValor3(ZERO);
348 			item.setValor4(ZERO);
349 			item.setValor5(ZERO);
350 			item.setValor6(ZERO);
351 			item.setValor7(ZERO);
352 			item.setValor8(ZERO);
353 
354 			item.setValor9(ZERO);
355 			item.setValor10(ZERO);
356 			item.setValor11(ZERO);
357 			item.setValor12(ZERO);
358 			item.setValor13(ZERO);
359 			item.setValor14(ZERO);
360 			item.setValor15(ZERO);
361 			item.setValor16(ZERO);
362 
363 			item.setValor17(ZERO);
364 			item.setValor18(ZERO);
365 			item.setValor19(ZERO);
366 			item.setValor20(ZERO);
367 			item.setValor21(ZERO);
368 			item.setValor22(ZERO);
369 			item.setValor23(ZERO);
370 			item.setValor24(ZERO);
371 		}
372 
373 	}
374 
375 	/**
376 	 * Gera Bean de Valores Aprovados.
377 	 * 
378 	 * @param acao
379 	 *            POJO a ser populado
380 	 * @param item
381 	 *            Item de programa referencial
382 	 * @throws ECARException
383 	 */
384 	private void geraPrevisao(AcaoBean acao, ItemEstruturaIettPPA item)
385 			throws ECARException {
386 		BigDecimal[] previsoes = calcularPrevisaoService.calcularPrevisaoSemIntegralizacao((item));
387 		final BigDecimal ZERO = new BigDecimal(0);
388 		// populando bean de relatorio com os valores de previsao
389 		if (previsoes != null && previsoes.length == 24) {
390 			acao.setValor1(previsoes[0] == null ? ZERO : previsoes[0]);
391 			acao.setValor2(previsoes[1] == null ? ZERO : previsoes[1]);
392 			acao.setValor3(previsoes[2] == null ? ZERO : previsoes[2]);
393 			acao.setValor4(previsoes[3] == null ? ZERO : previsoes[3]);
394 			acao.setValor5(previsoes[4] == null ? ZERO : previsoes[4]);
395 			acao.setValor6(previsoes[5] == null ? ZERO : previsoes[5]);
396 			acao.setValor7(previsoes[6] == null ? ZERO : previsoes[6]);
397 			acao.setValor8(previsoes[7] == null ? ZERO : previsoes[7]);
398 
399 			acao.setValor9(previsoes[8] == null ? ZERO : previsoes[8]);
400 			acao.setValor10(previsoes[9] == null ? ZERO : previsoes[9]);
401 			acao.setValor11(previsoes[10] == null ? ZERO : previsoes[10]);
402 			acao.setValor12(previsoes[11] == null ? ZERO : previsoes[11]);
403 			acao.setValor13(previsoes[12] == null ? ZERO : previsoes[12]);
404 			acao.setValor14(previsoes[13] == null ? ZERO : previsoes[13]);
405 			acao.setValor15(previsoes[14] == null ? ZERO : previsoes[14]);
406 			acao.setValor16(previsoes[15] == null ? ZERO : previsoes[15]);
407 
408 			acao.setValor17(previsoes[16] == null ? ZERO : previsoes[16]);
409 			acao.setValor18(previsoes[17] == null ? ZERO : previsoes[17]);
410 			acao.setValor19(previsoes[18] == null ? ZERO : previsoes[18]);
411 			acao.setValor20(previsoes[19] == null ? ZERO : previsoes[19]);
412 			acao.setValor21(previsoes[20] == null ? ZERO : previsoes[20]);
413 			acao.setValor22(previsoes[21] == null ? ZERO : previsoes[21]);
414 			acao.setValor23(previsoes[22] == null ? ZERO : previsoes[22]);
415 			acao.setValor24(previsoes[23] == null ? ZERO : previsoes[23]);
416 
417 		} else {
418 
419 			acao.setValor1(ZERO);
420 			acao.setValor2(ZERO);
421 			acao.setValor3(ZERO);
422 			acao.setValor4(ZERO);
423 			acao.setValor5(ZERO);
424 			acao.setValor6(ZERO);
425 			acao.setValor7(ZERO);
426 			acao.setValor8(ZERO);
427 
428 			acao.setValor9(ZERO);
429 			acao.setValor10(ZERO);
430 			acao.setValor11(ZERO);
431 			acao.setValor12(ZERO);
432 			acao.setValor13(ZERO);
433 			acao.setValor14(ZERO);
434 			acao.setValor15(ZERO);
435 			acao.setValor16(ZERO);
436 
437 			acao.setValor17(ZERO);
438 			acao.setValor18(ZERO);
439 			acao.setValor19(ZERO);
440 			acao.setValor20(ZERO);
441 			acao.setValor21(ZERO);
442 			acao.setValor22(ZERO);
443 			acao.setValor23(ZERO);
444 			acao.setValor24(ZERO);
445 		}
446 
447 	}
448 
449 	/**
450 	 * Adiciona um bean de Programa para a tabela de PPA
451 	 * 
452 	 * @param itemPrograma
453 	 */
454 	private ProgramaBean geraPrograma(ItemEstruturaIettPPA itemPrograma, boolean bean99  )
455 			throws ECARException {
456 
457 		ProgramaBean programa = new ProgramaBean();
458 
459 		
460 		if ( bean99 ){
461 			programa.setCodigo(itemPrograma.getSiglaIett());
462 			programa.setNome(itemPrograma.getNomeIett());
463 			programa.setJustificativa(Util.normalizaCaracterMarcador(itemPrograma.getDescricaoIett()));
464 			programa.setObjetivo(Util.normalizaCaracterMarcador(itemPrograma.getObjetivoEspecificoIett()));
465 			programa.setEstrategiaImpl(Util.normalizaCaracterMarcador(itemPrograma.getObjetivoGeralIett()));
466 			programa.setOrgao(itemPrograma.getOrgaoOrgByCodOrgaoResponsavel1Iett()
467 					.getDescricaoOrg());
468 	
469 			Set usuarioOrgao = itemPrograma.getOrgaoOrgByCodOrgaoResponsavel1Iett()
470 					.getUsuarioUsus();
471 			String usrTmp = "";
472 			for (Iterator iter = usuarioOrgao.iterator(); iter.hasNext();) {
473 				UsuarioUsu element = (UsuarioUsu) iter.next();
474 				usrTmp = element.getNomeUsu();
475 			}
476 	
477 			programa.setGestorPrograma(usrTmp);
478 			programa.setInicio(itemPrograma.getDataInicioIett());
479 			programa.setFim(itemPrograma.getDataTerminoIett());
480 			programa.setPublicoAlvo(Util.normalizaCaracterMarcador(itemPrograma.getDescricaoR2()));
481 	
482 			Set atributos = itemPrograma.getItemEstruturaSisAtributoIettSatbs();
483 			String tipoAcao = null;
484 			
485 			for (Iterator iter = atributos.iterator(); iter.hasNext();) {
486 				ItemEstruturaSisAtributoIettSatb atributo = (ItemEstruturaSisAtributoIettSatb) iter
487 						.next();
488 				if ( atributo.getSisAtributoSatb().getSisGrupoAtributoSga().getCodSga().longValue() == 15L  ){
489 					tipoAcao = atributo.getSisAtributoSatb().getDescricaoSatb();
490 					break;
491 				}
492 				
493 			}
494 			programa.setTipoAcao(tipoAcao == null ? "" : tipoAcao);
495 
496 			
497 			
498 			
499 			//logger.info("Carregando dados de Indicadores do programa ::" + itemPrograma.getNomeIett());
500 			
501 	//		logger.info("Codigo do item:: " + itemPrograma.getCodIett().toString());
502 			ArrayList<IndicadorBean> indicadores = generateIndicadores(itemPrograma.getItemEstrtIndResulIettrs());
503 	
504 			programa.setIndicadores(indicadores);
505 
506 	
507 			//logger.info("Carregando dados de acao do programa ::"
508 					//+ itemPrograma.getNomeIett());
509 		}
510 			//Set acaoTmp = Reduzir.reduzir( itemPrograma.getItemEstruturaIetts()  );
511 			ArrayList<AcaoBean> ItensAcao = generateAcaoBean( itemPrograma.getItemEstruturaIetts()  );
512 
513 		programa.setAcoes(ItensAcao);
514 
515 		return programa;
516 
517 	}
518 	
519 	private ArrayList<IndicadorBean> generateIndicadores(Set indicadores)
520 			throws ECARException {
521 
522 		IndicadorBean bean = null;
523 
524 		ArrayList<IndicadorBean> retorno = new ArrayList<IndicadorBean>();
525 
526 		for (Iterator iter = indicadores.iterator(); iter.hasNext();) {
527 			ItemEstrtIndResulIettr ind = (ItemEstrtIndResulIettr) iter.next();
528 			
529 			if ( ind.getIndAtivoIettr()!=null &&  "S".equalsIgnoreCase(ind.getIndAtivoIettr())) {
530 
531 				bean = new IndicadorBean();
532 
533 				bean.setNome(ind.getNomeIettir());
534 				bean.setUnidade(ind.getUnidMedidaIettr());
535 				bean.setPeriodicidade(ind.getPeriodicidadePrdc() != null ? ind
536 						.getPeriodicidadePrdc().getDescricaoPrdc() : "");
537 				bean.setFonte(ind.getFonteIettr());
538 				bean.setIndiceRecente(ind.getIndiceMaisRecenteIettr());
539 				bean.setDataApuracao(ind.getDataApuracaoIettr());
540 
541 				Set fisico = ind.getItemEstrutFisicoIettfs();
542 				for (Iterator iterator = fisico.iterator(); iterator.hasNext();) {
543 					ItemEstrutFisicoIettf elemento = (ItemEstrutFisicoIettf) iterator
544 							.next();
545 
546 					if (elemento.getExercicioExe().getDescricaoExe()
547 							.equalsIgnoreCase("2008")) {
548 						bean.setIndiceDt1(elemento.getQtdPrevistaIettf());
549 
550 					}
551 					if (elemento.getExercicioExe().getDescricaoExe()
552 							.equalsIgnoreCase("2009")) {
553 						bean.setIndiceDt2(elemento.getQtdPrevistaIettf());
554 
555 					}
556 					if (elemento.getExercicioExe().getDescricaoExe()
557 							.equalsIgnoreCase("2010")) {
558 						bean.setIndiceDt3(elemento.getQtdPrevistaIettf());
559 
560 					}
561 
562 					if (elemento.getExercicioExe().getDescricaoExe()
563 							.equalsIgnoreCase("2011")) {
564 						bean.setIndiceDt4(elemento.getQtdPrevistaIettf());
565 
566 					}
567 
568 				} // for fisicoiett
569 
570 				retorno.add(bean);
571 			} // if ( "S" )
572 		} // for indicadores
573 		
574 		return contadorIndicador(retorno);
575 
576 	}
577 
578 	private ArrayList<IndicadorBean> contadorIndicador(ArrayList<IndicadorBean> list){
579 		
580 		
581 		int cont =0;
582 		for (Iterator iter = list.iterator(); iter.hasNext();) {
583 			IndicadorBean element = (IndicadorBean) iter.next();
584 			element.setIndice(new Integer(cont));
585 			cont++;
586 			
587 		}
588 		return list;
589 	}
590 	
591 	
592 	/**
593 	 * Gera o Bean de itens de acao
594 	 * 
595 	 * @param acoesParam
596 	 *            Itens de acao
597 	 * @return Itens de acao ( Pojo do relatorio )
598 	 * @throws ECARException
599 	 */
600 	private ArrayList<AcaoBean> generateAcaoBean(Set acoesParam)
601 			throws ECARException {
602 
603 		try {
604 			AcaoBean beanTmp = new AcaoBean();
605 			ArrayList<AcaoBean> acoes = new ArrayList<AcaoBean>();
606 			for (Iterator iterAcao = reordenarPorSiglaNumero(acoesParam)
607 					.iterator(); iterAcao.hasNext();) {
608 				ItemEstruturaIettPPA itemAcao = (ItemEstruturaIettPPA) iterAcao.next();
609 
610 				if ("S".equalsIgnoreCase(itemAcao.getIndAtivoIett())) {
611 
612 					beanTmp = new AcaoBean();
613 
614 					beanTmp.setCodigo(itemAcao.getSiglaIett());
615 					beanTmp.setNome(itemAcao.getNomeIett());
616 					beanTmp.setOrgao(itemAcao.getOrgaoOrgByCodOrgaoResponsavel1Iett().getSiglaOrg());
617 					
618 					// Nao exibir finalidade e descricao para acoes de linha de acao Obrigaçoes especiais
619 					if (  itemAcao.getItemEstruturaIett().getSiglaIett().equalsIgnoreCase( CONSTANTE_LINHA_ACAO_OBRIGACOES_ESPECIAIS ) ){
620 						beanTmp.setFinalidade( null );
621 						beanTmp.setDescricao( null );						
622 					}else{
623 						beanTmp.setFinalidade( itemAcao.getObjetivoGeralIett() );
624 						beanTmp.setDescricao( itemAcao.getDescricaoIett() );						
625 					}
626 
627 					
628 					geraPrevisao(beanTmp, itemAcao); // recebe os valores da tabela
629 					calcularTotal.visit(beanTmp); // calcula os totais da tabela
630 					
631 /*					if (  "2380".equalsIgnoreCase(itemAcao.getSiglaIett()) ){
632 						logger.info("Carregando dados de Produtos da acao ::  " + itemAcao.getCodIett()  + "  " + itemAcao.getNomeIett());
633 					}
634 */					//Set prodColecao = Reduzir.reduzir( itemAcao.getItemEstruturaIetts() );
635 					Set produtos =  itemAcao.getItemEstruturaIetts();
636 					
637 					if ( produtos!=null && !produtos.isEmpty()){
638 						ArrayList<ProdutoBean> prod = itensService.generateProdutoPPA(produtos);						
639 						beanTmp.setProdutos( contadorProduto(reordenarProduto(prod))  );
640 						
641 					}
642 					
643 					acoes.add(beanTmp);
644 
645 				}
646 
647 			}
648 
649 			return acoes;
650 		} catch (Exception e) {
651 			e.printStackTrace(System.out);
652 			logger.error(e);
653 			throw new ECARException("Nao foi possivel gerar bean de acao", e);
654 		}
655 
656 	}
657 
658 	// ordenar produto por descricao
659 	private TreeSet<ProdutoBean> reordenarProduto(ArrayList<ProdutoBean> colecao){
660 		TreeSet<ProdutoBean> novaColecao = new TreeSet<ProdutoBean>( new ProdutoBeanComparatorDescricao() );
661 		for (Iterator iter = colecao.iterator(); iter.hasNext();) {
662 			ProdutoBean prod = (ProdutoBean) iter.next();			
663 			novaColecao.add( prod );
664 		}		
665 		return novaColecao;
666 	}
667 	
668 	// linha corsim cor nao
669 	private TreeSet<ProdutoBean> contadorProduto(TreeSet<ProdutoBean> colecao){
670 		int cont = 0;
671 		for (Iterator iter = colecao.iterator(); iter.hasNext();) {
672 			ProdutoBean prod = (ProdutoBean) iter.next();
673 			prod.setIndice( new Integer(cont) );			
674 			cont++;
675 		}		
676 		return colecao;
677 	}
678 
679 	
680 	
681 }