View Javadoc

1   /*
2    * Created on 20/02/2006
3    *
4    */
5   package ecar.servlet.relatorio;
6   
7   import java.util.ArrayList;
8   import java.util.Date;
9   import java.util.Iterator;
10  import java.util.List;
11  
12  import javax.servlet.http.HttpServletRequest;
13  
14  import comum.database.Dao;
15  import comum.util.Data;
16  import comum.util.Pagina;
17  import comum.util.Util;
18  import comum.util.XmlBuilder;
19  
20  import ecar.bean.AtributoEstruturaListagemItens;
21  import ecar.bean.TotalizadorRelatorios;
22  import ecar.dao.ConfiguracaoDao;
23  import ecar.dao.EstruturaDao;
24  import ecar.dao.FuncaoDao;
25  import ecar.dao.ItemEstruturaCriterioDao;
26  import ecar.dao.ItemEstruturaDao;
27  import ecar.dao.SituacaoDao;
28  import ecar.exception.ECARException;
29  import ecar.pojo.AtributoLivre;
30  import ecar.pojo.ConfiguracaoCfg;
31  import ecar.pojo.CriterioCri;
32  import ecar.pojo.FuncaoFun;
33  import ecar.pojo.ItemEstruturaIett;
34  import ecar.pojo.ItemEstruturaSisAtributoIettSatb;
35  import ecar.pojo.ObjetoEstrutura;
36  import ecar.pojo.OrgaoOrg;
37  import ecar.pojo.SisAtributoSatb;
38  import ecar.pojo.SituacaoSit;
39  
40  /**
41   * @author aleixo
42   *
43   */
44  public class RelacaoItemEstrutura extends AbstractServletReportXmlXsl {
45  
46  	private static final long serialVersionUID = 2395457474744685932L;
47  	private List idsEstrutura;
48  	private List totalizadores;
49  	private ItemEstruturaCriterioDao itemCriterioDao;
50  	private SituacaoDao situacaoDao;
51  	private FuncaoDao funcaoDao;
52  	private List itensSelecionados;
53  	private boolean imprimirEstrutura;
54  	
55  	/**
56  	 * CONSTANTES
57  	 */
58  	private static final int COMBOBOX = 1;
59  	private static final int CHECKBOX = 2;
60  	private static final int LISTBOX = 3;
61  	private static final int RADIO_BUTTON = 4;
62  	private static final int TEXT = 5;
63  	private static final int IMAGEM = 6;   
64  	private static final int MULTITEXTO = 7;   
65  	private static final int VALIDACAO = 8;
66  	private static final int MULTIPLO = 9;
67  	private static final int TEXTAREA = 10;
68  	
69  	/**
70  	 * Gera XML.<br>
71  	 * 
72  	 * @author N/C
73       * @since N/C
74       * @version N/C
75  	 * @param HttpServletRequest request
76  	 * @return StringBuffer
77  	 * @throws ECARException
78  	 */
79  	public StringBuffer getXml(HttpServletRequest request) throws ECARException{
80  		
81  		Dao dao = new Dao();
82          idsEstrutura = new ArrayList();
83          totalizadores = new ArrayList();
84          itemCriterioDao = new ItemEstruturaCriterioDao(request);
85          funcaoDao = new FuncaoDao(request);
86          situacaoDao =  new SituacaoDao(request);
87          itensSelecionados = new ArrayList();
88          
89          
90          XmlBuilder builder = new XmlBuilder();
91  
92      	imprimirEstrutura = ("S".equals(Pagina.getParamStr(request, "imprimirEstrutura"))) ? true : false;
93      	
94          String datahora = Data.parseDateHour(new Date()).substring(0,16); //este método retorna dd/mm/aaaa hh:mm:ss:ssss. Faço Substring para poder pegar só "dd/mm/aaaa hh:mm"
95          String orgao = request.getParameter("codOrgaoSelecionado");
96          
97          ConfiguracaoCfg config = new ConfiguracaoDao(null).getConfiguracao();
98          String titulo = config.getTituloSistema();
99          String tituloItens = "";
100         String cabecalho = "Relação dos Itens da Estrutura do " + titulo;
101         String indTipoRelatorio = Pagina.getParamStr(request, "indTipoRelatorio");
102         
103     	//Pegando os critérios que foram selecionados como filtro
104     	String criteriosCom = Pagina.getParamStr(request, "criteriosIncluidosCom");
105     	String criteriosSem = Pagina.getParamStr(request, "criteriosIncluidosSem");
106     	String[] criteriosParaFiltrarCom = (!"".equals(criteriosCom.trim())) ? criteriosCom.split("\\|") : new String[] {};
107     	String[] criteriosParaFiltrarSem = (!"".equals(criteriosSem.trim())) ? criteriosSem.split("\\|") : new String[] {};
108 
109     	List listaCriteriosCom = new ArrayList();					
110     	List listaCriteriosSem = new ArrayList();					
111 
112     	for(int i = 0; i < criteriosParaFiltrarCom.length; i++){
113     		listaCriteriosCom.add(criteriosParaFiltrarCom[i]);
114     	}        
115 
116     	for(int i = 0; i < criteriosParaFiltrarSem.length; i++){
117     		listaCriteriosSem.add(criteriosParaFiltrarSem[i]);
118     	}        
119         
120     	//Pegando as situacoes que foram selecionados como filtro
121     	String situacoes = Pagina.getParamStr(request, "situacoesIncluidas");
122     	String[] situacoesParaFiltrar = (!"".equals(situacoes.trim())) ? situacoes.split("\\|") : new String[] {};
123 
124     	List listaSituacoes = new ArrayList();					
125 
126     	for(int i = 0; i < situacoesParaFiltrar.length; i++){
127     		listaSituacoes.add(situacoesParaFiltrar[i]);
128     	}        
129     	
130     	//Pegando o órgão selecionado
131     	OrgaoOrg orgaoResponsavel = new OrgaoOrg();
132     	if(!"".equals(orgao) && orgao != null){
133     		orgaoResponsavel = (OrgaoOrg) dao.buscar(OrgaoOrg.class, Long.valueOf(orgao));
134     	}
135     	
136     	String orgaoEscolhido = (orgaoResponsavel.getCodOrg() != null) ? orgaoResponsavel.getSiglaOrg() : "Todos os Órgãos";
137         
138         if("T".equals(Pagina.getParamStr(request, "todosCheck"))){
139         	tituloItens = "Todos";
140         }
141         else if("M".equals(Pagina.getParamStr(request, "todosCheck"))){
142         	tituloItens = "Monitorados";
143         }
144         else if("N".equals(Pagina.getParamStr(request, "todosCheck"))){
145         	tituloItens = "Não Monitorados";
146         }
147         else {
148         	tituloItens = "Conforme Relação Informada Pelo Usuário";
149         }
150         
151         ItemEstruturaDao itemEstruturaDao = new ItemEstruturaDao(request);
152         ItemEstruturaIett item = new ItemEstruturaIett();
153         	
154         if(!imprimirEstrutura){
155         	item = (ItemEstruturaIett) itemEstruturaDao.buscar(ItemEstruturaIett.class, Long.valueOf(Pagina.getParamStr(request, "codIett")));
156         }
157         
158         builder.addNode("relatorio", 
159         		"titulo=\"" + builder.normalize(cabecalho) + "\"" +
160         		" datahora=\"" + datahora + "\"");
161         
162         geraXMLCapa(builder, titulo, tituloItens, orgaoEscolhido, listaCriteriosCom, listaCriteriosSem, listaSituacoes);
163         
164         builder.addNode("item");
165         String[] filhos = request.getParameterValues("itemFilho");
166         if(filhos != null){
167             for(int i=0; i < filhos.length;i++){
168             	itensSelecionados.add((ItemEstruturaIett) itemEstruturaDao.buscar(ItemEstruturaIett.class, Long.valueOf(filhos[i])));
169             }                
170         }
171         
172         List listaFilhos = new ArrayList();
173         
174         if(!imprimirEstrutura){
175         	//listaFilhos.addAll(itemEstruturaDao.getArvoreItens(itensSelecionados, item));
176         	listaFilhos.addAll(itensSelecionados);
177         }
178         else {
179 //        	long codIettPai = Pagina.getParamLong(request, "codIettPaiImprimir");
180 //        	ItemEstruturaIett iettPai = null;
181 //        	if(codIettPai != 0){
182 //        		iettPai = (ItemEstruturaIett) itemEstruturaDao.buscar(ItemEstruturaIett.class, Long.valueOf(codIettPai));
183 //        	}
184         	//listaFilhos.addAll(itemEstruturaDao.getArvoreItens(itensSelecionados,iettPai));
185         	listaFilhos.addAll(itensSelecionados);
186         }
187         
188         List listaFilhosOrdenada = new ArrayList(itemEstruturaDao.getItensOrdenados(listaFilhos, null));
189         
190         //Iterator itFilhos = listaFilhos.iterator();
191         Iterator itFilhos = listaFilhosOrdenada.iterator();
192         while(itFilhos.hasNext()){
193         	AtributoEstruturaListagemItens atbList = (AtributoEstruturaListagemItens) itFilhos.next();
194         	//ItemEstruturaIett filho = (ItemEstruturaIett) itFilhos.next();
195         	ItemEstruturaIett filho = atbList.getItem();
196         	String nomeDinamico = "".equals(atbList.getDescricao().trim()) ? filho.getNomeIett() : atbList.getDescricao();
197         	geraXMLEstrutura(builder, atbList.getItem(), nomeDinamico, indTipoRelatorio, orgao);
198         }
199         
200         builder.closeNode("item");
201         
202         this.geraXMLTotalizador(builder);
203         
204         builder.closeNode("relatorio");
205         return builder.toStringBuffer();
206     }
207     
208 	/**
209 	 * Gera capa XML.<br>
210 	 * 
211 	 * @author N/C
212      * @since N/C
213      * @version N/C
214 	 * @param XmlBuilder builder
215 	 * @param String titulo
216 	 * @param String tituloItens
217 	 * @param String orgao
218 	 * @param List listaCriteriosCom
219 	 * @param List listaCriteriosSem
220 	 * @param List listaSituacoes
221 	 * @throws ECARException
222 	 */
223     public void geraXMLCapa(XmlBuilder builder, String titulo, String tituloItens, String orgao, 
224     		List listaCriteriosCom, List listaCriteriosSem, List listaSituacoes) throws ECARException{
225         builder.addNode("capa",
226         		"titulo=\"" + builder.normalize(titulo) + "\"" +
227         		" tituloItens=\"" + builder.normalize(tituloItens) + "\"" +
228         		" orgao=\"" + builder.normalize(orgao) + "\"");
229         
230     	FuncaoFun criterioFun = funcaoDao.getFuncao(Long.valueOf("6")); // 6 = Critérios
231     	
232     	if(criterioFun != null && 
233     			(listaCriteriosCom != null && listaCriteriosCom.size() > 0
234     			|| listaCriteriosSem != null && listaCriteriosSem.size() > 0)){
235         	builder.addNode("filtros", "tipo=\"" + builder.normalize(criterioFun.getLabelPadraoFun()) + "\"" +
236         					" estilo=\"CS\""); //CS --> Monta tabela com colunas de Com/Sem
237 	        
238         	if(listaCriteriosCom != null && listaCriteriosCom.size() > 0){
239 	        	Iterator itCriterios = listaCriteriosCom.iterator();
240 		        while(itCriterios.hasNext()){
241 		        	String id = (String) itCriterios.next();
242 		        	CriterioCri criterio = (CriterioCri) itemCriterioDao.buscar(CriterioCri.class, Long.valueOf(id));
243 		        	
244 		        	if(criterio != null){
245 		        		builder.addClosedNode("filtro", " valor=\"" + builder.normalize(criterio.getDescricaoCri()) + "\" tipo=\"C\"");
246 		        	}
247 		        }
248         	}
249         	
250         	if(listaCriteriosSem != null && listaCriteriosSem.size() > 0){
251 	        	Iterator itCriterios = listaCriteriosSem.iterator();
252 		        while(itCriterios.hasNext()){
253 		        	String id = (String) itCriterios.next();
254 		        	CriterioCri criterio = (CriterioCri) itemCriterioDao.buscar(CriterioCri.class, Long.valueOf(id));
255 		        	
256 		        	if(criterio != null){
257 		        		builder.addClosedNode("filtro", " valor=\"" + builder.normalize(criterio.getDescricaoCri()) + "\" tipo=\"S\"");
258 		        	}
259 		        }
260         	}
261 	        
262         	builder.closeNode("filtros");
263     	}
264     	
265     	if(listaSituacoes != null && listaSituacoes.size() > 0){
266         	builder.addNode("filtros", "tipo=\"" + builder.normalize("Situações") + "\"" +
267 			" estilo=\"SI\""); //SI --> Simples, Sem colunas de Com/Sem
268         	
269         	Iterator itSituacoes = listaSituacoes.iterator();
270         	while(itSituacoes.hasNext()){
271         		String id = (String) itSituacoes.next();
272         		SituacaoSit situacao = (SituacaoSit) situacaoDao.buscar(SituacaoSit.class, Long.valueOf(id)); 
273         		if(situacao != null){
274         			builder.addClosedNode("filtro", " valor=\"" + builder.normalize(situacao.getDescricaoSit()) + "\" tipo=\"N\"");
275         		}
276         	}
277         	builder.closeNode("filtros");
278     	}
279         
280         builder.closeNode("capa");
281     }
282 
283     /**
284      * Gera estrutura Xml.<br>
285      * 
286      * @author N/C
287      * @since N/C
288      * @version N/C
289      * @param XmlBuilder builder
290      * @param ItemEstruturaIett item
291      * @param String nomeDinamico
292      * @param String tipoRelatorio
293      * @param String orgao
294      * @throws ECARException
295      */
296     public void geraXMLEstrutura(XmlBuilder builder, ItemEstruturaIett item, String nomeDinamico, 
297     		String tipoRelatorio, String orgao) throws ECARException{
298 
299     	String itemSelecionado = "S";
300         
301     	if(!itensSelecionados.contains(item)){
302     		itemSelecionado = "N";
303     	}
304     	
305         builder.addNode("estrutura", "nome=\"" + builder.normalize(item.getEstruturaEtt().getNomeEtt()) + "\" " +
306         		//" descricao=\"" + builder.normalize(item.getSiglaIett()) + " - " + builder.normalize(item.getNomeIett()) + "\" " +
307         		" descricao=\"" + builder.normalize(Util.normalizaCaracterMarcador(nomeDinamico)) + "\" " +
308         		" nivel=\"" + builder.normalize(item.getNivelIett().toString()) + "\"" +
309         		" itemSelecionado=\"" + builder.normalize(itemSelecionado) + "\"");
310         
311         this.incrementarTotalizador(item.getEstruturaEtt().getCodEtt(), item.getEstruturaEtt().getNomeEtt());
312         
313         boolean mostrarDados = false;
314         
315         if("".equals(orgao) || orgao == null){ //Todos
316         	mostrarDados = true;
317         }
318         else if (orgao != null && item.getOrgaoOrgByCodOrgaoResponsavel1Iett() != null && orgao.equals(item.getOrgaoOrgByCodOrgaoResponsavel1Iett().getCodOrg())){
319         	mostrarDados = true;
320         }
321         
322         if (!itensSelecionados.contains(item)){
323         	mostrarDados = false;
324         }
325         
326         if(mostrarDados){
327 	        List dados = new EstruturaDao(null).getAtributosEstruturaRelatorio(item.getEstruturaEtt(), tipoRelatorio);
328 	        if(dados.size() > 0){
329 	            builder.addNode("campos");
330 	            Iterator itDados = dados.iterator();
331 	            while(itDados.hasNext()){
332 	                ObjetoEstrutura estruturaAtributo = (ObjetoEstrutura) itDados.next();
333 	
334 	                
335                     String valor = "";
336                     
337                     if(estruturaAtributo.iGetGrupoAtributosLivres() != null){
338                     	//Atributo Livre:
339                     	if(item.getItemEstruturaSisAtributoIettSatbs() != null){
340                     		int tam = item.getItemEstruturaSisAtributoIettSatbs().size();
341                     		int pos = 1;
342                 	    	Iterator itAtribLivres = item.getItemEstruturaSisAtributoIettSatbs().iterator();
343                 	    	while(itAtribLivres.hasNext()){
344                 	    		ItemEstruturaSisAtributoIettSatb atributo = (ItemEstruturaSisAtributoIettSatb) itAtribLivres.next();
345                 	    		AtributoLivre atributoLivre = new AtributoLivre();
346                 	    		atributoLivre.setSisAtributoSatb(atributo.getSisAtributoSatb());
347                 	    		atributoLivre.setInformacao(atributo.getInformacaoIettSatb());
348                 	    		
349                    	    		if(!atributoLivre.getSisAtributoSatb().getSisGrupoAtributoSga().equals(estruturaAtributo.iGetGrupoAtributosLivres()))
350                 	    			continue;
351                 	    		
352                 	    		if((atributoLivre.getSisAtributoSatb()
353                 	    				.getSisGrupoAtributoSga()
354                 	    				.getSisTipoExibicGrupoSteg()
355                 	    				.getCodSteg().intValue() != TEXT) && 
356                 	    			(atributoLivre.getSisAtributoSatb()
357                         	    			.getSisGrupoAtributoSga()
358                         	    			.getSisTipoExibicGrupoSteg()
359                         	    			.getCodSteg().intValue() != TEXTAREA)) {
360                 	    		
361 		                	    		String separador = "";
362 		                	    		if(tam > 1 && pos < tam){
363 		                	    			separador = ", ";
364 		                	    		}
365 		                	    		
366 		                	    		if(atributoLivre.getSisAtributoSatb() != null)
367 		                	    			valor += atributoLivre.getSisAtributoSatb().getDescricaoSatb() + separador;
368 		                	    		else
369 		                	    			valor += atributoLivre.getInformacao() + separador;
370 		                	    		
371 		                	    		pos++;
372 		                	    		
373                 	    		} else {
374                 	    			valor = atributoLivre.getInformacao();
375                 	    		}
376                 	    	}
377                     	}
378              
379                     	valor = valor.trim(); 
380                     }
381                     else {
382                     	if("nivelPlanejamento".equals(estruturaAtributo.iGetNome())){
383                         	if(item.getItemEstruturaNivelIettns() != null){
384                         		int tam = item.getItemEstruturaNivelIettns().size();
385                         		int pos = 1;
386                     	    	Iterator niveis = item.getItemEstruturaNivelIettns().iterator();
387                     	    	while(niveis.hasNext()){
388                     	    		SisAtributoSatb nivel = (SisAtributoSatb) niveis.next();
389                     	    		
390                     	    		String separador = "";
391                     	    		if(tam > 1 && pos < tam){
392                     	    			separador = ", ";
393                     	    		}
394 
395                     	    		valor += nivel.getDescricaoSatb() + separador;
396                     	    		
397                     	    		pos++;
398                     	    	}
399                         	}
400                  
401                         	valor = valor.trim(); 
402                     		
403                     	}
404                     	else {
405                         	valor = estruturaAtributo.iGetValor(item);
406                     	}
407                     }
408 	                
409 	                valor = Util.normalizaCaracterMarcador(valor);
410                     
411 	                builder.addClosedNode("campo", "label=\"" + builder.normalize(estruturaAtributo.iGetLabel()) + ": \"" + " valor=\"" + builder.normalize(valor) + "\"");
412 	            }
413 	            builder.closeNode("campos");
414 	        }            
415         }
416         builder.closeNode("estrutura");
417     }
418 
419     /**
420      * Gera Xml totalizador.<br>
421      * 
422      * @author N/C
423      * @since N/C
424      * @version N/C
425      * @param XmlBuilder builder
426      * @throws ECARException
427      */
428     public void geraXMLTotalizador(XmlBuilder builder) throws ECARException{
429         try{
430         	int total = 0;
431         	builder.addNode("totalizadores");        	
432             Iterator itTotalizadores = totalizadores.iterator();
433             while(itTotalizadores.hasNext()){
434             	TotalizadorRelatorios tr = (TotalizadorRelatorios) itTotalizadores.next();
435             	String nome = tr.getEstrutura();
436             	String valor = "" + tr.getTotal();
437             	total += tr.getTotal();
438             	builder.addClosedNode("totalizador",
439             			"nome=\"" + builder.normalize(nome) + ":\"" +
440             			" valor=\"" + builder.normalize(valor) + "\"");
441             }        	
442         	builder.addClosedNode("total", 
443         			"nome=\"Total:\"" +
444         			" valor=\"" + builder.normalize(String.valueOf(total)) + "\"");
445             builder.closeNode("totalizadores");
446         } catch(Exception e){
447         	this.logger.error(e);
448             throw new ECARException("Erro na criação do relatório: Totalizadores");
449         }            
450     }
451     
452     /**
453      * Incrementa totalizador.<br>
454      * 
455      * @author N/C
456      * @since N/C
457      * @version N/C
458      * @param Long idEstrutura
459      * @param String nomeEstrutura
460      */
461     private void incrementarTotalizador(Long idEstrutura, String nomeEstrutura){
462     	if(!idsEstrutura.contains(idEstrutura)){
463     		TotalizadorRelatorios totalizador = new TotalizadorRelatorios();
464     		totalizador.setId(idEstrutura);
465     		totalizador.setEstrutura(nomeEstrutura);
466     		totalizador.setTotal(1);
467     		
468     		idsEstrutura.add(idEstrutura);
469     		totalizadores.add(totalizador);
470     	}
471     	else {
472     		Iterator itTotalizadores = totalizadores.iterator();
473     		while(itTotalizadores.hasNext()){
474     	   		TotalizadorRelatorios totalizador = (TotalizadorRelatorios) itTotalizadores.next();
475     	   	    
476     	   		if(idEstrutura.equals(totalizador.getId())){
477     	   			totalizador.incrementeTotal();
478     	   			break;
479     	   	    }
480     		}
481     	}
482     }
483     
484 
485     /**
486      * Pega o nome do arquivo xls.<br>
487      * 
488      * @author N/C
489      * @since N/C
490      * @version N/C
491      * @return String
492      */
493     public String getXslFileName() {
494         return "relacaoEstrutura.xsl";
495     }
496     
497     /**
498      * Pega o erro de pagina.<br>
499      * 
500      * @author N/C
501      * @since N/C
502      * @version N/C
503      * @param HttpServletRequest request
504      * @param String mensagem
505      * @return String
506      */
507     public String getErrorPage(HttpServletRequest request, String mensagem){        
508         String errorPage = "frm_rel.jsp?codIett=" + Pagina.getParamStr(request, "codIett") + "&msgOperacao=" + mensagem + "&codAba="+Pagina.getParamStr(request, "codAba"); 
509         return errorPage;
510     }
511 
512 }