View Javadoc

1   /*
2    * Created on 08/06/2005
3    *
4    */
5   package ecar.permissao;
6   
7   import java.util.ArrayList;
8   import java.util.Date;
9   import java.util.HashSet;
10  import java.util.Iterator;
11  import java.util.List;
12  import java.util.Set;
13  
14  import javax.servlet.http.HttpServletRequest;
15  
16  import org.hibernate.HibernateException;
17  import org.hibernate.Session;
18  import org.hibernate.Transaction;
19  
20  import comum.database.Dao;
21  import comum.util.Data;
22  
23  import ecar.dao.ConfiguracaoDao;
24  import ecar.dao.EstruturaDao;
25  import ecar.dao.ItemEstrutUsuarioDao;
26  import ecar.dao.ItemEstruturaDao;
27  import ecar.exception.ECARException;
28  import ecar.historico.HistoricoIettus;
29  import ecar.historico.IHistorico;
30  import ecar.pojo.ConfiguracaoCfg;
31  import ecar.pojo.EstrutTpFuncAcmpEtttfa;
32  import ecar.pojo.HistoricoIettusH;
33  import ecar.pojo.HistoricoMaster;
34  import ecar.pojo.HistoricoMotivo;
35  import ecar.pojo.ItemEstUsutpfuacIettutfa;
36  import ecar.pojo.ItemEstrutUsuarioIettus;
37  import ecar.pojo.ItemEstruturaIett;
38  import ecar.pojo.TipoFuncAcompTpfa;
39  import gov.pr.celepar.framework.database.HibernateUtil;
40  
41  /**
42   * @author garten
43   */
44  public class ControlePermissao {
45      
46      public static final String PERMISSAO_FUNCAO_ACOMPANHAMENTO = "F";
47      public static final String PERMISSAO_USUARIO = "U";
48      public static final String PERMISSAO_GRUPO = "G";
49      public static final String SIM = "S";
50      public static final String NAO = "N";
51          
52  
53      
54  	/**
55  	 * Atualiza todos os registros de item_estrut_usuario_iettus para uma dado item da Estrutura.<br>
56  	 * 
57  	 * @author N/C
58       * @since N/C
59       * @version N/C
60  	 * @param ItemEstruturaIett item
61  	 * @param Set fuacAnteriores - Coleção de fuac existente antes da alteração do item
62  	 * @param Session session
63  	 * @param boolean novoItem
64  	 */
65  	public void atualizarPermissoesItemEstrutura(ItemEstruturaIett item, Set fuacAnteriores, Session session, boolean novoItem, HttpServletRequest request) throws ECARException {
66  		
67  		Iterator itFuncoesAcompanhamento = item.getEstruturaEtt().getEstrutTpFuncAcmpEtttfas().iterator();
68  		
69  		/****** historico *****/
70          HistoricoIettus historico = new HistoricoIettus(new ItemEstrutUsuarioIettus(), 
71  				HistoricoIettus.excluirPermissoes,
72  				session,
73  				new ConfiguracaoDao(request),
74  				request);
75          /****** historico *****/
76  		
77  		while(itFuncoesAcompanhamento.hasNext()){
78  			
79  			TipoFuncAcompTpfa funcaoAcompanhamento = ((EstrutTpFuncAcmpEtttfa) itFuncoesAcompanhamento.next()).getTipoFuncAcompTpfa();
80  			ItemEstUsutpfuacIettutfa fuacNovo = getUsuarioAcompanhamento(item, funcaoAcompanhamento);
81  			ItemEstUsutpfuacIettutfa fuacAnterior = getUsuarioAcompanhamento(fuacAnteriores, item, funcaoAcompanhamento);
82  			if(fuacNovo == null && fuacAnterior != null) {
83  				excluirPermissoesItem(item, fuacAnterior, session, request, historico);
84  			}
85  		}
86  		
87  		itFuncoesAcompanhamento = item.getEstruturaEtt().getEstrutTpFuncAcmpEtttfas().iterator();
88  
89  		while(itFuncoesAcompanhamento.hasNext()){
90  			
91  			EstrutTpFuncAcmpEtttfa funcaoAcomp = (EstrutTpFuncAcmpEtttfa) itFuncoesAcompanhamento.next(); 
92  			TipoFuncAcompTpfa funcaoAcompanhamento = funcaoAcomp.getTipoFuncAcompTpfa();
93  			ItemEstUsutpfuacIettutfa fuacNovo = getUsuarioAcompanhamento(item, funcaoAcompanhamento);
94  			ItemEstUsutpfuacIettutfa fuacAnterior = getUsuarioAcompanhamento(fuacAnteriores, item, funcaoAcompanhamento);
95  			if(fuacNovo != null){
96  				if(fuacAnterior == null){
97  					String manterProximoNivel = funcaoAcomp.getIndManterProximoNivelEtttfa();
98  					ItemEstrutUsuarioIettus iettus = incluirPermissaoItem(item, fuacNovo,manterProximoNivel);
99  					session.save(iettus);
100 
101 					item.getEstruturaEtt();
102 
103 					//Manter a permissão no próximo nível de acordo com o definido na 'Função de Acompanhamento na Estrutura'
104 					if(manterProximoNivel != null && manterProximoNivel.equals("S")){
105 						incluirPermissoesItensFilho(item, fuacNovo, session,manterProximoNivel);
106 					}
107 
108 				} else {
109 					if(fuacNovo.getUsuarioUsu() != null && fuacAnterior.getUsuarioUsu() != null && !fuacNovo.getUsuarioUsu().equals(fuacAnterior.getUsuarioUsu())){
110 						alterarPermissoesItem(item, fuacAnterior, session, request, historico);						
111 					} else if(fuacNovo.getSisAtributoSatb() != null && fuacAnterior.getSisAtributoSatb() != null && !fuacNovo.getSisAtributoSatb().equals(fuacAnterior.getSisAtributoSatb())){
112 						alterarPermissoesItem(item, fuacAnterior, session, request, historico);						
113 					} else if(fuacNovo.getUsuarioUsu() != null && fuacAnterior.getUsuarioUsu() == null){
114 						alterarPermissoesItem(item, fuacAnterior, session, request, historico);
115 					} else if(fuacNovo.getSisAtributoSatb() != null && fuacAnterior.getSisAtributoSatb() == null){
116 						alterarPermissoesItem(item, fuacAnterior, session, request, historico);
117 					}
118 				}
119 			}							
120 		}
121 		
122 		if(novoItem) {
123 			Set iettusCopiaPai = copiarPermissoesItemPai(item);
124 			
125 			Iterator it = iettusCopiaPai.iterator();
126 			while(it.hasNext()) {
127 				ItemEstrutUsuarioIettus iettus = (ItemEstrutUsuarioIettus)it.next();
128 				session.save(iettus);
129 			}
130 		}
131 	}
132 	
133 	
134     /**
135      * Atualiza todos os registros de item_estrut_usuario_iettus para uma dada funcao de acompanhamento.<br>
136      * 
137      * @author N/C
138      * @since N/C
139      * @version N/C
140      * @param TipoFuncAcompTpfa funcao
141      * @throws ECARException
142      */
143     public void atualizarPermissoesPorFuncaoDeAcompanhamento(TipoFuncAcompTpfa funcao) throws ECARException {
144         
145         ItemEstrutUsuarioIettus iettus;
146         
147         Iterator it = funcao.getItemEstrutUsuarioIettuses().iterator();
148         while (it.hasNext()) {
149             iettus = (ItemEstrutUsuarioIettus) it.next();
150             
151             if (PERMISSAO_FUNCAO_ACOMPANHAMENTO.equals(iettus.getCodTpPermIettus()) &&
152                 iettus.getTipoFuncAcompTpfa().equals(funcao)) {
153                 
154                 iettus.setIndLeituraIettus(getIndLeitura());
155                 iettus.setIndExcluirIettus(getIndExcluir(funcao));
156                 iettus.setIndEdicaoIettus(getIndEdicao(funcao));
157                 iettus.setIndLeituraParecerIettus(getIndLeituraParecer(funcao));
158                 iettus.setIndAtivMonitIettus(getIndAtivMonit(funcao));
159                 iettus.setIndDesatMonitIettus(getIndDesatMonit(funcao));
160                 iettus.setIndBloqPlanIettus(getIndBloqPlan(funcao));
161                 iettus.setIndDesblPlanIettus(getIndDesblPlan(funcao));
162                 iettus.setIndInfAndamentoIettus(getIndInfAndamento(funcao));
163                 iettus.setIndEmitePosIettus(getIndEmitePos(funcao));
164                 iettus.setIndProxNivelIettus(getIndProxNivel());
165             }
166         }
167     }
168     
169 	/**
170 	 * Inclui permissões para todos os filhos de um item.<br>
171 	 * 
172 	 * @author N/C
173      * @since N/C
174      * @version N/C
175 	 * @param ItemEstruturaIett item
176 	 * @param ItemEstUsutpfuacIettutfa fuac
177 	 * @param Session session
178 	 */
179 	private void incluirPermissoesItensFilho(ItemEstruturaIett item, ItemEstUsutpfuacIettutfa fuac, Session session,String manterProximoNivel) {
180 
181 		List itensFilhos = getDescendentesItem(item);
182 		
183 		if(itensFilhos != null){
184 			Iterator it = itensFilhos.iterator();
185 			while(it.hasNext()){
186 				ItemEstruturaIett itemFilho = (ItemEstruturaIett) it.next();
187 				if(getPermissao(itemFilho, item, fuac.getTipoFuncAcompTpfa()) == null){
188 					ItemEstrutUsuarioIettus permissaoItemFilho = incluirPermissaoItem(itemFilho, fuac,manterProximoNivel);
189 					permissaoItemFilho.setItemEstruturaIettOrigem(item);
190 
191 					session.save(permissaoItemFilho);
192 				}
193 			}			
194 		}			
195 	}
196 	
197 	/**
198 	 * Retorna um objeto itemEstrutUsuario a partir de um item , item de origem e função de acompanhamento.<br>
199 	 * 
200 	 * @author N/C
201      * @since N/C
202      * @version N/C
203 	 * @param ItemEstruturaIett item
204 	 * @param ItemEstruturaIett itemOrigem
205 	 * @param TipoFuncAcompTpfa funcaoAcomp
206 	 * @return ItemEstrutUsuarioIettus
207 	 */
208 	public ItemEstrutUsuarioIettus getPermissao(ItemEstruturaIett item, ItemEstruturaIett itemOrigem, TipoFuncAcompTpfa funcaoAcomp){
209 		Iterator it = item.getItemEstrutUsuarioIettusesByCodIett().iterator();
210 		while(it.hasNext()){
211 			ItemEstrutUsuarioIettus ieUsuario = (ItemEstrutUsuarioIettus) it.next();
212 			if(ieUsuario.getItemEstruturaIett().equals(item) && 
213 					ieUsuario.getItemEstruturaIettOrigem().equals(itemOrigem) && 
214 					ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_FUNCAO_ACOMPANHAMENTO) && 
215 					ieUsuario.getTipoFuncAcompTpfa().equals(funcaoAcomp)){
216 					return ieUsuario;
217 			}
218 		}
219 		return null;
220 	}
221 	
222     /**
223      * Retorna os descendentes de um item. Não é utilizado o método getDescendentes de ItemEstruturaDao pois ele
224      * faz um refresh no objeto e nesta classe os objetos estão sendo alterados em memória e por isso não é 
225      * desejado que sejam recarregados.<br>
226      * 
227      * @author N/C
228      * @since N/C
229      * @version N/C
230      * @param ItemEstruturaIett itemEstrutura
231      * @return List
232      */
233     public List getDescendentesItem(ItemEstruturaIett itemEstrutura) {
234         List retorno = new ArrayList();
235 
236         if (itemEstrutura.getItemEstruturaIetts() != null) {
237             
238             Iterator it = itemEstrutura.getItemEstruturaIetts().iterator();
239             while (it.hasNext()) {
240                 ItemEstruturaIett itemEstruturaFilho = (ItemEstruturaIett) it.next();
241                 
242                 if (!retorno.contains(itemEstruturaFilho))
243                     retorno.add(itemEstruturaFilho);
244                 retorno.addAll(this.getDescendentesItem(itemEstruturaFilho));
245             }
246         }
247         return retorno;
248     }
249 	
250     /**
251      * Seleciona todas as permissões do pai do item atual onde indProxNivel='S'.
252      * Gerando uma cópia das permissões do pai para o item atual.<br>
253      * 
254      * @author N/C
255      * @since N/C
256      * @version N/C
257      * @param ItemEstruturaIett item - (itemPai)
258      * @return Set - (Iettus)
259      */
260     protected Set copiarPermissoesItemPai(ItemEstruturaIett item) {
261     	Set iettusPai = new HashSet();
262     	Set iettusHeranca = new HashSet();
263     	
264     	if (item.getItemEstruturaIett() != null) {
265     	    
266 	    	iettusPai = item.getItemEstruturaIett().getItemEstrutUsuarioIettusesByCodIett();
267 	    	
268 	    	Iterator it = iettusPai.iterator();
269 	    	
270 	    	while(it.hasNext()) {
271 	    		ItemEstrutUsuarioIettus pai = (ItemEstrutUsuarioIettus) it.next();
272 	    		
273     			if("S".equals(pai.getIndProxNivelIettus())) {
274 		    		ItemEstrutUsuarioIettus itemEstUsuario = copiarItemEstUsuario(pai);
275 
276 		    		itemEstUsuario.setItemEstruturaIett(item);
277 		    		
278 	    			iettusHeranca.add(itemEstUsuario);			
279 	    		}
280 	    	}
281     	}
282 	
283 	    return iettusHeranca;
284     }
285     
286     /**
287      * Devolve um registro de permissao iettus a partir de um item e de uma funcao de acompanhamento.<br>
288      * 
289      * @author N/C
290      * @since N/C
291      * @version N/C
292      * @param ItemEstruturaIett item
293      * @param ItemEstUsutpfuacIettutfa fuac
294      * @return ItemEstrutUsuarioIettus
295      */
296     protected ItemEstrutUsuarioIettus incluirPermissaoItem(ItemEstruturaIett item, ItemEstUsutpfuacIettutfa fuac, String manterProximoNivel) {
297         
298         return new ItemEstrutUsuarioIettus(
299 				item, 
300 				item, 
301 				fuac.getUsuarioUsu(), 
302 				ControlePermissao.PERMISSAO_FUNCAO_ACOMPANHAMENTO,
303 				fuac.getSisAtributoSatb(), 
304 				fuac.getTipoFuncAcompTpfa(), 
305 				getIndLeitura(),
306 				getIndEdicao(fuac.getTipoFuncAcompTpfa()),
307 				getIndExcluir(fuac.getTipoFuncAcompTpfa()),
308 				getIndAtivMonit(fuac.getTipoFuncAcompTpfa()),
309 				getIndDesatMonit(fuac.getTipoFuncAcompTpfa()),
310 				getIndBloqPlan(fuac.getTipoFuncAcompTpfa()),
311 				getIndDesblPlan(fuac.getTipoFuncAcompTpfa()),
312 				getIndInfAndamento(fuac.getTipoFuncAcompTpfa()),
313 				getIndEmitePos(fuac.getTipoFuncAcompTpfa()),
314 				manterProximoNivel,
315 				Data.getDataAtual(), 
316 				getIndLeituraParecer(fuac.getTipoFuncAcompTpfa())
317 		);
318     }
319     
320 	/**
321 	 * Procura na lista de fuac de um item um objeto fuac para um item e uma função de acomanhamento.<br>
322 	 * 
323 	 * @author N/C
324      * @since N/C
325      * @version N/C
326 	 * @param ItemEstruturaIett item
327 	 * @param TipoFuncAcompTpfa funcao
328 	 * @return ItemEstUsutpfuacIettutfa
329 	 */
330 	protected ItemEstUsutpfuacIettutfa getUsuarioAcompanhamento(ItemEstruturaIett item, TipoFuncAcompTpfa funcao){
331 		
332 		if(item.getItemEstUsutpfuacIettutfas() != null){
333 			Iterator it = item.getItemEstUsutpfuacIettutfas().iterator();
334 			while(it.hasNext()){
335 				ItemEstUsutpfuacIettutfa fuac = (ItemEstUsutpfuacIettutfa) it.next();
336 				if(fuac.getItemEstruturaIett().equals(item) && fuac.getTipoFuncAcompTpfa().equals(funcao))
337 					return fuac;
338 			}			
339 		}
340 		return null;
341 		
342 	}
343 
344 	/**
345 	 * Procura na lista de fuac um objeto fuac para um item e uma função de acomanhamento.<br>
346 	 * 
347 	 * @author N/C
348      * @since N/C
349      * @version N/C
350      * @param Set lFuac
351 	 * @param ItemEstruturaIett item
352 	 * @param TipoFuncAcompTpfa funcao
353 	 * @return ItemEstUsutpfuacIettutfa
354 	 */
355 	protected ItemEstUsutpfuacIettutfa getUsuarioAcompanhamento(Set lFuac, ItemEstruturaIett item, TipoFuncAcompTpfa funcao){
356 		
357 		if(lFuac != null){
358 			Iterator it = lFuac.iterator();
359 			while(it.hasNext()){
360 				ItemEstUsutpfuacIettutfa fuac = (ItemEstUsutpfuacIettutfa) it.next();
361 				if(fuac.getItemEstruturaIett().equals(item) && fuac.getTipoFuncAcompTpfa().equals(funcao))
362 					return fuac;
363 			}			
364 		}
365 		return null;
366 		
367 	}
368 
369 	
370     /**
371      * Altera a lista de cod_iett_orig do item, pesquisando o usuario anterior e trocando para o novo usuario.
372      * O novo usuario está no fuac associado no item.<br>
373      * 
374      * @author N/C
375      * @since N/C
376      * @version N/C
377      * @param ItemEstruturaIett item
378      * @param ItemEstUsutpfuacIettutfa fuacAnterior
379      * @param Session session
380      */
381     protected void alterarPermissoesItem(ItemEstruturaIett item, ItemEstUsutpfuacIettutfa fuacAnterior, Session session, HttpServletRequest request, HistoricoIettus historico) throws ECARException {
382     	try
383     	{
384 	        Iterator it = item.getItemEstrutUsuarioIettusesByCodIettOrigem().iterator();
385 	        
386 	        /******** Historico *********/
387 	        historico.gerarMaster(HistoricoIettus.alterarPermissoes);
388 	        /******** Historico *********/
389 	        
390 			while(it.hasNext()){
391 				ItemEstrutUsuarioIettus ieUsuario = (ItemEstrutUsuarioIettus) it.next();
392 				ItemEstrutUsuarioIettus old = (ItemEstrutUsuarioIettus)ieUsuario.clone();
393 				if(ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_FUNCAO_ACOMPANHAMENTO)
394 						&& 
395 						( (ieUsuario.getUsuarioUsu() != null && ieUsuario.getUsuarioUsu().equals(fuacAnterior.getUsuarioUsu()))
396 						 || (ieUsuario.getSisAtributoSatb() != null && ieUsuario.getSisAtributoSatb().equals(fuacAnterior.getSisAtributoSatb())) )
397 						
398 						&& ieUsuario.getTipoFuncAcompTpfa().equals(fuacAnterior.getTipoFuncAcompTpfa())){
399 					ieUsuario.setUsuarioUsu(getUsuarioAcompanhamento(item, fuacAnterior.getTipoFuncAcompTpfa()).getUsuarioUsu());
400 					ieUsuario.setSisAtributoSatb(getUsuarioAcompanhamento(item, fuacAnterior.getTipoFuncAcompTpfa()).getSisAtributoSatb());
401 					/******** Historico *********/
402 		            historico.gerarHistorico(old);
403 		        	/******** Historico *********/				
404 					
405 					session.update(ieUsuario);
406 				}
407 			}
408     	}catch (HibernateException e) {
409 			throw new ECARException("erro.hibernateException"); 			
410 		}
411     }
412     
413     /**
414      * Exclui os cod_item_orig da lista do item, utilizando o usuario associado à funcao de acompanhamento anterior.
415      * 
416      * @author N/C
417      * @since N/C
418      * @version N/C
419      * @param ItemEstruturaIett item
420      * @param ItemEstUsutpfuacIettutfa fuacAnterior
421      * @param Session session
422      */
423     protected void excluirPermissoesItem(ItemEstruturaIett item, ItemEstUsutpfuacIettutfa fuacAnterior, Session session, HttpServletRequest request, HistoricoIettus historico) throws ECARException {
424 		Iterator it = item.getItemEstrutUsuarioIettusesByCodIettOrigem().iterator();
425 		while(it.hasNext()){
426 			ItemEstrutUsuarioIettus ieUsuario = (ItemEstrutUsuarioIettus) it.next();
427 			ItemEstrutUsuarioIettus old = (ItemEstrutUsuarioIettus) ieUsuario.clone();
428 			if(ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_FUNCAO_ACOMPANHAMENTO)
429 					&& 
430 						( (ieUsuario.getUsuarioUsu() != null && ieUsuario.getUsuarioUsu().equals(fuacAnterior.getUsuarioUsu()))
431 						 || (ieUsuario.getSisAtributoSatb() != null && ieUsuario.getSisAtributoSatb().equals(fuacAnterior.getSisAtributoSatb())) )
432 						
433 					&& ieUsuario.getTipoFuncAcompTpfa().equals(fuacAnterior.getTipoFuncAcompTpfa())){
434 								
435 	            /******** Historico *********/
436 	            historico.gerarHistorico(old);
437 	        	/******** Historico *********/
438 				
439 				session.delete(ieUsuario);
440 			}
441 		}
442     }
443     
444     /**
445      * Recebe um itemEstrutUsuarioIettus persistente e devolve uma copia transiente.<br>
446      * 
447      * @author N/C
448      * @since N/C
449      * @version N/C
450      * @param itemEstrutUsuarioIettus itemEstUsuario
451      * @return itemEstrutUsuarioIettus
452      */
453     protected ItemEstrutUsuarioIettus copiarItemEstUsuario (ItemEstrutUsuarioIettus itemEstUsuario) {
454     	return new ItemEstrutUsuarioIettus(
455 				itemEstUsuario.getItemEstruturaIett(),
456 				itemEstUsuario.getItemEstruturaIettOrigem(),
457 				itemEstUsuario.getUsuarioUsu(),
458 				itemEstUsuario.getCodTpPermIettus(),
459 				itemEstUsuario.getSisAtributoSatb(),
460 				itemEstUsuario.getTipoFuncAcompTpfa(),
461 				itemEstUsuario.getIndLeituraIettus(),
462 				itemEstUsuario.getIndEdicaoIettus(),
463 				itemEstUsuario.getIndExcluirIettus(),
464 				itemEstUsuario.getIndAtivMonitIettus(),
465 				itemEstUsuario.getIndDesatMonitIettus(),
466 				itemEstUsuario.getIndBloqPlanIettus(),
467 				itemEstUsuario.getIndDesblPlanIettus(),
468 				itemEstUsuario.getIndInfAndamentoIettus(),
469 				itemEstUsuario.getIndEmitePosIettus(),
470 				itemEstUsuario.getIndProxNivelIettus(),
471 				Data.getDataAtual(),
472 				itemEstUsuario.getIndLeituraParecerIettus()
473 		);    	
474     }
475         
476     
477     /**
478      * Atualizar os dados de um itemEstrutUsuarioIettus destino de acordo com o origem.<br>
479      * 
480      * @author N/C
481      * @since N/C
482      * @version N/C
483      * @param ItemEstrutUsuarioIettus itemEstrutUsuarioIettusOrigem
484      * @param ItemEstrutUsuarioIettus itemEstrutUsuarioIettusDestino
485      * @return ItemEstrutUsuarioIettus - (itemEstrutUsuarioIettusDestino)
486      */
487     protected ItemEstrutUsuarioIettus atualizarItemEstUsuario (ItemEstrutUsuarioIettus itemEstrutUsuarioIettusOrigem, ItemEstrutUsuarioIettus itemEstrutUsuarioIettusDestino){
488     	itemEstrutUsuarioIettusDestino.setIndLeituraIettus( itemEstrutUsuarioIettusOrigem.getIndLeituraIettus() );
489     	itemEstrutUsuarioIettusDestino.setIndEdicaoIettus( itemEstrutUsuarioIettusOrigem.getIndEdicaoIettus() );
490     	itemEstrutUsuarioIettusDestino.setIndExcluirIettus( itemEstrutUsuarioIettusOrigem.getIndExcluirIettus() );
491     	itemEstrutUsuarioIettusDestino.setIndLeituraParecerIettus( itemEstrutUsuarioIettusOrigem.getIndLeituraParecerIettus() );
492     	itemEstrutUsuarioIettusDestino.setIndAtivMonitIettus( itemEstrutUsuarioIettusOrigem.getIndAtivMonitIettus() );
493     	itemEstrutUsuarioIettusDestino.setIndDesatMonitIettus( itemEstrutUsuarioIettusOrigem.getIndDesatMonitIettus() );
494     	itemEstrutUsuarioIettusDestino.setIndBloqPlanIettus( itemEstrutUsuarioIettusOrigem.getIndBloqPlanIettus() );
495     	itemEstrutUsuarioIettusDestino.setIndDesblPlanIettus( itemEstrutUsuarioIettusOrigem.getIndDesblPlanIettus() );
496     	itemEstrutUsuarioIettusDestino.setIndInfAndamentoIettus( itemEstrutUsuarioIettusOrigem.getIndInfAndamentoIettus() );
497     	itemEstrutUsuarioIettusDestino.setIndEmitePosIettus( itemEstrutUsuarioIettusOrigem.getIndEmitePosIettus() );
498     	itemEstrutUsuarioIettusDestino.setIndProxNivelIettus( itemEstrutUsuarioIettusOrigem.getIndProxNivelIettus() );
499     	itemEstrutUsuarioIettusDestino.setIndLeituraParecerIettus( itemEstrutUsuarioIettusOrigem.getIndLeituraParecerIettus() );
500     	
501     	return itemEstrutUsuarioIettusDestino;
502     }
503     
504 	/**
505 	 * Propagar permissões para todos os filhos de um item caso o itemEstrutUsuario.getIndProxNivelIettus() seja 'S',
506 	 * Utilizado na inclusão de permissão de acesso de itens da estrutura.<br>
507 	 * 
508 	 * @author N/C
509      * @since N/C
510      * @version N/C
511 	 * @param ItemEstrutUsuarioIettus itemEstrutUsuarioIettus - itemEstrutUsuarioIettus que está sendo incluído
512 	 * @param Session session
513 	 */
514 	public void propagarPermissoesItensFilhos(ItemEstrutUsuarioIettus itemEstrutUsuarioIettus, Session session) {
515 		
516 		if("S".equals(itemEstrutUsuarioIettus.getIndProxNivelIettus())) {
517 			
518 			ItemEstruturaIett item = itemEstrutUsuarioIettus.getItemEstruturaIett();
519 	
520 			List itensFilhos = getDescendentesItem(item);
521 
522 			if(itensFilhos != null){
523 				List iettusAux = new ArrayList();
524 				Iterator it = itensFilhos.iterator();
525 				while(it.hasNext()){
526 					ItemEstruturaIett itemFilho = (ItemEstruturaIett) it.next();
527 					
528 					ItemEstrutUsuarioIettus itemEstrutUsuarioIettusFilho = this.copiarItemEstUsuario(itemEstrutUsuarioIettus);
529 					
530 					itemEstrutUsuarioIettusFilho.setItemEstruturaIett(itemFilho);
531 					if(!iettusAux.contains(itemEstrutUsuarioIettusFilho)) {
532 						session.save(itemEstrutUsuarioIettusFilho);
533 						iettusAux.add(itemEstrutUsuarioIettusFilho);
534 					}
535 				}			
536 			}	
537 		}
538 	}
539 
540         
541     
542 	/**
543 	 * Atualiza permissões para todos os filhos de um item.
544 	 * Utilizado na alteração de permissão de acesso de itens da estrutura.<br>
545 	 * 
546 	 * @author N/C
547      * @since N/C
548      * @version N/C
549 	 * @param ItemEstrutUsuarioIettus itemEstrutUsuarioIettusNovo - itemEstrutUsuarioIettus que está sendo alterado
550 	 * @param String indProxNivelIettusAnterior - itemEstrutUsuarioIettus que foi alterado
551 	 * @param Session session
552 	 * @throws HibernateException
553 	 */
554 	public void atualizarPermissoesItensFilhos(ItemEstrutUsuarioIettus itemEstrutUsuarioIettusNovo, 
555 			String indProxNivelIettusAnterior, Session session, HttpServletRequest request, HistoricoIettus historico) throws HibernateException, ECARException {
556 
557 		ItemEstruturaIett item = itemEstrutUsuarioIettusNovo.getItemEstruturaIett();
558 
559 		List itensFilhos = getDescendentesItem(item);
560 		List listIettusAtualizados = new ArrayList();
561 
562 		if(itensFilhos != null){
563 			Iterator it = itensFilhos.iterator();
564 			while(it.hasNext()){
565 				ItemEstruturaIett itemFilho = (ItemEstruturaIett) it.next();
566 				
567 				ItemEstrutUsuarioIettus itemEstrutUsuarioIettusFilho = this.copiarItemEstUsuario(itemEstrutUsuarioIettusNovo);
568 			
569 				itemEstrutUsuarioIettusFilho.setItemEstruturaIett(itemFilho);
570 				itemEstrutUsuarioIettusFilho.setIndExclusaoPosHistorico(Boolean.FALSE); // não apaga pelo historico (Mantis #2156)
571 				
572 				// se a opção "próximo nível" anterior não for mais 'S' remover as permissões dos itens filhos
573 				if(("S".equals(indProxNivelIettusAnterior) && "N".equals(itemEstrutUsuarioIettusNovo.getIndProxNivelIettus()))) {
574 					
575 					if(itemFilho.getItemEstrutUsuarioIettusesByCodIett() != null) { 
576 
577 						Iterator itEstrutAnterior = itemFilho.getItemEstrutUsuarioIettusesByCodIett().iterator();
578 						while(itEstrutAnterior.hasNext()){
579 							ItemEstrutUsuarioIettus ieUsuario = (ItemEstrutUsuarioIettus) itEstrutAnterior.next();
580 							
581 							if(ieUsuario.getItemEstruturaIettOrigem().equals(item)) {
582 								if(ieUsuario.getUsuarioUsu() != null && ieUsuario.getUsuarioUsu().equals(itemEstrutUsuarioIettusNovo.getUsuarioUsu())) {
583 									
584 									ieUsuario.setUsuManutencao(itemEstrutUsuarioIettusNovo.getUsuManutencao());
585 						            /******** Historico *********/
586 						            historico.gerarHistorico(ieUsuario);
587 						        	/******** Historico *********/									
588 									
589 									session.delete(ieUsuario);
590 								}
591 								else if(ieUsuario.getCodTpPermIettus().equals(PERMISSAO_GRUPO) 
592 										&& (ieUsuario.getSisAtributoSatb() != null && itemEstrutUsuarioIettusNovo.getSisAtributoSatb() != null &&
593 												ieUsuario.getSisAtributoSatb().getCodSatb().longValue() == itemEstrutUsuarioIettusNovo.getSisAtributoSatb().getCodSatb().longValue())){
594 									
595 									ieUsuario.setUsuManutencao(itemEstrutUsuarioIettusNovo.getUsuManutencao());
596 						            /******** Historico *********/
597 						            historico.gerarHistorico(ieUsuario);
598 						        	/******** Historico *********/									
599 									
600 									session.delete(ieUsuario);
601 								}
602 							}
603 						}
604 					}
605 				}
606 				else if("S".equals(itemEstrutUsuarioIettusNovo.getIndProxNivelIettus())) {
607 
608 					if(itemFilho.getItemEstrutUsuarioIettusesByCodIett() != null) { 
609 
610 						boolean achou = false;
611 						
612 						Iterator itAux = itemFilho.getItemEstrutUsuarioIettusesByCodIett().iterator();
613 						while(itAux.hasNext()) {
614 							ItemEstrutUsuarioIettus ieUsuario = (ItemEstrutUsuarioIettus) itAux.next();
615 							
616 							if(ieUsuario.getItemEstruturaIettOrigem().equals(item)) {
617 								if(ieUsuario.getUsuarioUsu() != null && ieUsuario.getUsuarioUsu().equals(itemEstrutUsuarioIettusNovo.getUsuarioUsu())) {
618 									
619 									ItemEstrutUsuarioIettus old = (ItemEstrutUsuarioIettus) ieUsuario.clone();
620 									old.setUsuManutencao(itemEstrutUsuarioIettusNovo.getUsuManutencao());
621 						            /******** Historico *********/
622 						            historico.gerarHistorico(old);
623 						        	/******** Historico *********/
624 						            
625 									achou = true;
626 									ieUsuario = this.atualizarItemEstUsuario(itemEstrutUsuarioIettusFilho, ieUsuario);						            
627 									
628 									session.update(ieUsuario);
629 								}
630 								else if(ieUsuario.getCodTpPermIettus().equals(PERMISSAO_GRUPO) 
631 										&& (ieUsuario.getSisAtributoSatb() != null && itemEstrutUsuarioIettusNovo.getSisAtributoSatb() != null &&
632 												ieUsuario.getSisAtributoSatb().getCodSatb().longValue() == itemEstrutUsuarioIettusNovo.getSisAtributoSatb().getCodSatb().longValue())){
633 									
634 									
635 									ItemEstrutUsuarioIettus old = (ItemEstrutUsuarioIettus) ieUsuario.clone();
636 									old.setUsuManutencao(itemEstrutUsuarioIettusNovo.getUsuManutencao());
637 						            /******** Historico *********/
638 						            historico.gerarHistorico(old);
639 						        	/******** Historico *********/									
640 																		
641 									achou = true;
642 									ieUsuario = this.atualizarItemEstUsuario(itemEstrutUsuarioIettusFilho, ieUsuario);
643 									session.update(ieUsuario);
644 								}
645 							}
646 						}
647 						
648 						if(!achou && !listIettusAtualizados.contains(itemEstrutUsuarioIettusNovo)) {
649 							listIettusAtualizados.add(itemEstrutUsuarioIettusNovo);
650 							this.propagarPermissoesItensFilhos(itemEstrutUsuarioIettusNovo, session);
651 						}
652 					}
653 					else {
654 						session.save(itemEstrutUsuarioIettusFilho);
655 					}
656 				}
657 				else {
658 					break;
659 				}
660 			}			
661 		}	
662 	}
663 	
664         
665     
666 	/**
667 	 * Remover permissões para todos os filhos de um item.
668 	 * Utilizado na exclusão de permissão de acesso de itens da estrutura.<br>
669 	 * 
670 	 * @author N/C
671      * @since N/C
672      * @version N/C
673 	 * @param ItemEstrutUsuarioIettus itemEstrutUsuario
674 	 * @param Session session
675 	 * @throws HibernateException
676 	 */
677 	public void removerPermissoesItensFilhos(ItemEstrutUsuarioIettus itemEstrutUsuario, Session session, HttpServletRequest request) throws HibernateException, ECARException {
678 		ItemEstruturaIett item = itemEstrutUsuario.getItemEstruturaIett();
679 		
680 		List itensFilhos = getDescendentesItem(item);
681 
682 		if(itensFilhos != null){
683 			Iterator it = itensFilhos.iterator();
684 			while(it.hasNext()){
685 				ItemEstruturaIett itemFilho = (ItemEstruturaIett) it.next();
686 				
687 				if(itemFilho.getItemEstrutUsuarioIettusesByCodIett() != null) { 
688 
689 					Iterator itEstrutAnterior = itemFilho.getItemEstrutUsuarioIettusesByCodIett().iterator();
690 					while(itEstrutAnterior.hasNext()){
691 						ItemEstrutUsuarioIettus ieUsuario = (ItemEstrutUsuarioIettus) itEstrutAnterior.next();
692 						if(ieUsuario.getItemEstruturaIettOrigem().equals(item)) {
693 							if(ieUsuario.getUsuarioUsu() != null && ieUsuario.getUsuarioUsu().equals(itemEstrutUsuario.getUsuarioUsu())) {
694 								
695 								ieUsuario.setUsuManutencao(itemEstrutUsuario.getUsuManutencao());
696 					            /******** Historico *********/
697 					            
698 					            HistoricoIettus historico = new HistoricoIettus(ieUsuario, 
699 					            												HistoricoIettus.excluirPermissoes,
700 					            												session,
701 					            												new ConfiguracaoDao(request),
702 					            												request);
703 					            historico.gerarHistorico();
704 					            
705 					        	/******** Historico *********/								
706 								
707 								
708 								session.delete(ieUsuario);
709 							}
710 							else if(ieUsuario.getCodTpPermIettus().equals(PERMISSAO_GRUPO) 
711 									&& (ieUsuario.getSisAtributoSatb() != null && itemEstrutUsuario.getSisAtributoSatb() != null &&
712 											ieUsuario.getSisAtributoSatb().getCodSatb().longValue() == itemEstrutUsuario.getSisAtributoSatb().getCodSatb().longValue())){
713 								
714 								ieUsuario.setUsuManutencao(itemEstrutUsuario.getUsuManutencao());
715 					            /******** Historico *********/
716 					            
717 					            HistoricoIettus historico = new HistoricoIettus(ieUsuario, 
718 					            												HistoricoIettus.excluirPermissoes,
719 					            												session,
720 					            												new ConfiguracaoDao(request),
721 					            												request);
722 					            historico.gerarHistorico();
723 					            
724 					        	/******** Historico *********/								
725 								
726 								session.delete(ieUsuario);
727 							}
728 						}
729 					}
730 				}
731 			}			
732 		}	
733 	}
734 	
735 
736     
737 	/**
738 	 * Verificar se é possível incluir um usuário ou grupo com indicador de 'manter 
739 	 * permissão no próximo nível' para um mesmo item da estrutura.<br>
740 	 * 
741 	 * @author N/C
742      * @since N/C
743      * @version N/C
744 	 * @param ItemEstruturaIett item
745 	 * @param ItemEstrutUsuarioIettus iettusParaIncluir
746 	 * @return boolean
747 	 */
748 	public boolean verificarInclusaoUsuarioGrupo(ItemEstruturaIett item, ItemEstrutUsuarioIettus iettusParaIncluir ) {
749 		boolean permiteInclusao = true;
750 
751 		if("S".equals(iettusParaIncluir.getIndProxNivelIettus())) {
752 				
753 			Iterator it = item.getItemEstrutUsuarioIettusesByCodIett().iterator();
754 			
755 			while(it.hasNext() && permiteInclusao){
756 				ItemEstrutUsuarioIettus iettusGravado = (ItemEstrutUsuarioIettus) it.next();
757 				
758 				if("S".equals(iettusGravado.getIndProxNivelIettus()) && !iettusGravado.getCodIettus().equals(iettusParaIncluir.getCodIettus())) {
759 					if(iettusGravado.getCodTpPermIettus().equals(PERMISSAO_USUARIO) && iettusGravado.getUsuarioUsu() != null && iettusGravado.getUsuarioUsu().equals(iettusParaIncluir.getUsuarioUsu())) {
760 						permiteInclusao = false;
761 					}
762 					else if(iettusGravado.getCodTpPermIettus().equals(PERMISSAO_GRUPO) 
763 							&& (iettusGravado.getSisAtributoSatb() != null && iettusParaIncluir.getSisAtributoSatb() != null &&
764 									iettusGravado.getSisAtributoSatb().getCodSatb().longValue() == iettusParaIncluir.getSisAtributoSatb().getCodSatb().longValue())) {
765 						permiteInclusao = false;
766 					}
767 				}
768 			}
769 		}
770 		
771 		return permiteInclusao;
772 	}
773 	
774 	/**
775      * Para a funcao de acompanhamento, se IndPlaneja == "S" retorna "S", cc "N".<br>
776      * 
777      * @author N/C
778      * @since N/C
779      * @version N/C
780      * @param TipoFuncAcompTpfa funcao
781      * @return String - "S" ou "N"
782      */
783     protected String getIndEdicao(TipoFuncAcompTpfa funcao) {
784         return SIM.equals(funcao.getIndAlterarItemEstrutura()) ? SIM : NAO;
785     }
786     
787     /**
788      * Por enquanto, retorna um valor constante "S", pois todos podem ler.<br>
789      * 
790      * @author N/C
791      * @since N/C
792      * @version N/C
793      * @return String - "S"
794      */
795     protected String getIndLeitura() {
796         return SIM;
797     }
798 
799     /**
800      * Por enquanto, retorna um valor constante "S", pois todos podem ler.<br>
801      * 
802      * @author N/C
803      * @since N/C
804      * @version N/C
805      * @return String - "S"
806      */
807     protected String getIndLeituraParecer(TipoFuncAcompTpfa funcao) {
808         return SIM.equals(funcao.getIndVisualizarParecer()) ? SIM : NAO;
809     }
810 
811     /**
812      * Para a funcao de acompanhamento, se IndPlaneja == "S" retorna "S", cc "N".<br>
813      * 
814      * @author N/C
815      * @since N/C
816      * @version N/C
817      * @param TipoFuncAcompTpfa funcao
818      * @return String - "S" ou "N"
819      */
820     protected String getIndExcluir(TipoFuncAcompTpfa funcao) {
821         return SIM.equals(funcao.getIndExcluirItemEstrutura()) ? SIM : NAO;
822     }
823 
824     /**
825      * Para a funcao de acompanhamento, se IndPlaneja ou IndMonitora == "S" retorna "S", cc "N".<br>
826      * 
827      * @author N/C
828      * @since N/C
829      * @version N/C
830      * @param TipoFuncAcompTpfa funcao
831      * @return String - "S" ou "N"
832      */
833     protected String getIndAtivMonit(TipoFuncAcompTpfa funcao) {
834         return SIM.equals(funcao.getIndAtivarMonitoramento()) ? SIM : NAO;
835     }
836     
837     /**
838      * Para a funcao de acompanhamento, se IndMonitora == "S" retorna "S", cc "N".<br>
839      * 
840      * @author N/C
841      * @since N/C
842      * @version N/C
843      * @param TipoFuncAcompTpfa funcao
844      * @return String
845      */
846     protected String getIndDesatMonit(TipoFuncAcompTpfa funcao) {
847         return SIM.equals(funcao.getIndDesativarMonitoramento()) ? SIM : NAO;
848     }
849 
850 
851     /**
852      * Para a funcao de acompanhamento, se IndPlaneja ou IndMonitora == "S" retorna "S", cc "N".<br>
853      * 
854      * @author N/C
855      * @since N/C
856      * @version N/C
857      * @param TipoFuncAcompTpfa funcao
858      * @return String - "S" ou "N"
859      */
860     protected String getIndBloqPlan(TipoFuncAcompTpfa funcao) {
861         return SIM.equals(funcao.getIndBloquearPlanejamento()) ? SIM : NAO;
862     }
863     
864     /**
865      * Para a funcao de acompanhamento, se IndMonitora == "S" retorna "S", cc "N".<br>
866      * 
867      * @author N/C
868      * @since N/C
869      * @version N/C
870      * @param TipoFuncAcompTpfa funcao
871      * @return String
872      */
873     protected String getIndDesblPlan(TipoFuncAcompTpfa funcao) {
874         return SIM.equals(funcao.getIndDesbloquearPlanejamento()) ? SIM : NAO;
875     }
876     
877     /**
878      * Para a funcao de acompanhamento, se IndInformaAndamento == "S" retorna "S", cc "N".<br>
879      * 
880      * @author N/C
881      * @since N/C
882      * @version N/C
883      * @param TipoFuncAcompTpfa funcao
884      * @return String
885      */
886     protected String getIndInfAndamento(TipoFuncAcompTpfa funcao) {
887         return SIM.equals(funcao.getIndInformaAndamentoTpfa()) ? SIM : NAO;
888     }
889     
890     /**
891      * Para a funcao de acompanhamento, se IndEmitePosicao == "S" retorna "S", cc "N".<br>
892      * 
893      * @author N/C
894      * @since N/C
895      * @version N/C
896      * @param TipoFuncAcompTpfa funcao
897      * @return String
898      */
899     protected String getIndEmitePos(TipoFuncAcompTpfa funcao) {
900         return SIM.equals(funcao.getIndEmitePosicaoTpfa()) ? SIM : NAO;
901     }
902     
903     /**
904      * Retorna String SIM.<br>
905      * 
906      * @author N/C
907      * @since N/C
908      * @version N/C
909      * @return String
910      */
911     protected String getIndProxNivel() {
912         return SIM;
913     }
914     
915     /**Atualiza, de acordo com a opção "manter próximo nível", as permissões de acesso de todos os itens filhos da estrutura
916      * passada como parâmetro. 
917      * 
918      * @param estrutTpFuncAcmpEtttfa
919      * @param session
920      */
921     public void atualizarPermissaoManterProximoNivel(EstrutTpFuncAcmpEtttfa estrutTpFuncAcmpEtttfa, Session session, HttpServletRequest request) throws ECARException{
922     	
923     	
924     	ItemEstrutUsuarioDao itemEstrutUsuarioDao = new ItemEstrutUsuarioDao(request);
925     	ItemEstruturaIett itemEstruturaIettFiltro = new ItemEstruturaIett();
926     	itemEstruturaIettFiltro.setIndAtivoIett("S");
927     	itemEstruturaIettFiltro.setEstruturaEtt(estrutTpFuncAcmpEtttfa.getEstruturaEtt());
928     	
929     	List itensEstruturaIetts = itemEstrutUsuarioDao.pesquisar(itemEstruturaIettFiltro, null);
930     	Iterator itItensEstruturaIetts = itensEstruturaIetts.iterator();
931     	String manterProximoNivel = estrutTpFuncAcmpEtttfa.getIndManterProximoNivelEtttfa();
932     	while (itItensEstruturaIetts.hasNext()){
933     		ItemEstruturaIett itemEstruturaIett = (ItemEstruturaIett) itItensEstruturaIetts.next();
934     		ItemEstrutUsuarioIettus itemEstrutUsuarioIettusFiltro = new ItemEstrutUsuarioIettus();
935     		itemEstrutUsuarioIettusFiltro.setItemEstruturaIett(itemEstruturaIett);
936     		itemEstrutUsuarioIettusFiltro.setTipoFuncAcompTpfa(estrutTpFuncAcmpEtttfa.getTipoFuncAcompTpfa());
937     		itemEstrutUsuarioIettusFiltro.setCodTpPermIettus(ControlePermissao.PERMISSAO_FUNCAO_ACOMPANHAMENTO);
938     		itemEstrutUsuarioIettusFiltro.setItemEstruturaIettOrigem(itemEstruturaIett);
939     		
940     		List itensEstrutUsuarioIettus = itemEstrutUsuarioDao.pesquisar(itemEstrutUsuarioIettusFiltro, null);
941     		Iterator itIettus = itensEstrutUsuarioIettus.iterator();
942     		
943     		while (itIettus.hasNext()){
944 				ItemEstrutUsuarioIettus itemEstrutUsuarioIettus = (ItemEstrutUsuarioIettus) itIettus.next();
945 				if(manterProximoNivel != null && manterProximoNivel.equals("S")){
946 					this.propagarPermissoesIndProximoNivel(itemEstrutUsuarioIettus, session);
947 				}else {
948 					this.removerPermissoesIndProximoNivel(itemEstrutUsuarioIettus, session, request);
949 				}
950 			}
951     	}    	
952     }
953 
954     /**
955 	 * Propagar permissões para todos os filhos de um item caso o itemEstrutUsuario.getIndProxNivelIettus() seja 'S',
956 	 * Utilizado na inclusão de permissão de acesso de itens da estrutura.<br>
957 	 * 
958 	 * @author N/C
959      * @since N/C
960      * @version N/C
961 	 * @param ItemEstrutUsuarioIettus itemEstrutUsuarioIettus - itemEstrutUsuarioIettus que está sendo incluído
962 	 * @param Session session
963 	 */
964 	public void propagarPermissoesIndProximoNivel(ItemEstrutUsuarioIettus itemEstrutUsuarioIettus, Session session) {
965 
966 		itemEstrutUsuarioIettus.setIndProxNivelIettus("S");
967 		session.update(itemEstrutUsuarioIettus);
968 		
969 		ItemEstruturaIett item = itemEstrutUsuarioIettus.getItemEstruturaIett();
970 
971 		List itensFilhos = getDescendentesItem(item);
972 
973 		if(itensFilhos != null){
974 			List iettusAux = new ArrayList();
975 			Iterator it = itensFilhos.iterator();
976 			while(it.hasNext()){
977 				ItemEstruturaIett itemFilho = (ItemEstruturaIett) it.next();
978 				
979 				ItemEstrutUsuarioIettus itemEstrutUsuarioIettusFilho = this.copiarItemEstUsuario(itemEstrutUsuarioIettus);
980 				
981 				itemEstrutUsuarioIettusFilho.setItemEstruturaIett(itemFilho);
982 				if(!iettusAux.contains(itemEstrutUsuarioIettusFilho)) {
983 					session.save(itemEstrutUsuarioIettusFilho);
984 					iettusAux.add(itemEstrutUsuarioIettusFilho);
985 				}
986 			}			
987 		}	
988 		
989 	}
990 	
991 	/**
992 	 * Propagar permissões para todos os filhos de um item caso o itemEstrutUsuario.getIndProxNivelIettus() seja 'S',
993 	 * Utilizado na inclusão de permissão de acesso de itens da estrutura.<br>
994 	 * 
995 	 * @author N/C
996      * @since N/C
997      * @version N/C
998 	 * @param ItemEstrutUsuarioIettus itemEstrutUsuarioIettus - itemEstrutUsuarioIettus que está sendo incluído
999 	 * @param Session session
1000 	 * @throws ECARException 
1001 	 */
1002 	public void removerPermissoesIndProximoNivel(ItemEstrutUsuarioIettus itemEstrutUsuarioIettus, Session session, HttpServletRequest request) throws ECARException {
1003 		
1004 		ItemEstrutUsuarioDao itemEstrutUsuarioDao = new ItemEstrutUsuarioDao(request);
1005 		List itensFilhos = getDescendentesItem(itemEstrutUsuarioIettus.getItemEstruturaIett());
1006 		itemEstrutUsuarioIettus.setIndProxNivelIettus("N");
1007 		session.update(itemEstrutUsuarioIettus);
1008 
1009 		if(itensFilhos != null){
1010 			Iterator it = itensFilhos.iterator();
1011 			while(it.hasNext()){
1012 				ItemEstruturaIett itemFilho = (ItemEstruturaIett) it.next();
1013 				
1014 				ItemEstrutUsuarioIettus itemEstrutUsuarioIettusFiltro = new ItemEstrutUsuarioIettus();
1015 				itemEstrutUsuarioIettusFiltro.setItemEstruturaIett(itemFilho);
1016 				itemEstrutUsuarioIettusFiltro.setItemEstruturaIettOrigem(itemEstrutUsuarioIettus.getItemEstruturaIett());
1017 				itemEstrutUsuarioIettusFiltro.setCodTpPermIettus(PERMISSAO_FUNCAO_ACOMPANHAMENTO);
1018 				itemEstrutUsuarioIettusFiltro.setTipoFuncAcompTpfa(itemEstrutUsuarioIettus.getTipoFuncAcompTpfa());
1019 
1020 				List itensEstrutUsuarioIettus = itemEstrutUsuarioDao.pesquisar(itemEstrutUsuarioIettusFiltro, null);
1021 				
1022 				if(itensEstrutUsuarioIettus != null) { 
1023 
1024 					Iterator itEstrutAnterior = itensEstrutUsuarioIettus.iterator();
1025 					while(itEstrutAnterior.hasNext()){
1026 						ItemEstrutUsuarioIettus ieUsuario = (ItemEstrutUsuarioIettus) itEstrutAnterior.next();
1027 													
1028 						
1029 						ieUsuario.setUsuManutencao(itemEstrutUsuarioIettus.getUsuManutencao());
1030 			            /******** Historico *********/
1031 			            
1032 			            HistoricoIettus historico = new HistoricoIettus(ieUsuario, 
1033 			            												HistoricoIettus.excluirPermissoes,
1034 			            												session,
1035 			            												new ConfiguracaoDao(request),
1036 			            												request);
1037 			            historico.gerarHistorico();
1038 			            
1039 			        	/******** Historico *********/								
1040 								
1041 								
1042 						session.delete(ieUsuario);
1043 						
1044 					}
1045 				}	
1046 			}
1047 		}
1048 	}
1049 	
1050 }