/*
* Created on 08/06/2005
*
*/
package ecar.permissao;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import comum.database.Dao;
import comum.util.Data;
import ecar.dao.ConfiguracaoDao;
import ecar.dao.EstruturaDao;
import ecar.dao.ItemEstrutUsuarioDao;
import ecar.dao.ItemEstruturaDao;
import ecar.exception.ECARException;
import ecar.historico.HistoricoIettus;
import ecar.historico.IHistoricoAntigo;
import ecar.pojo.ConfiguracaoCfg;
import ecar.pojo.EstrutTpFuncAcmpEtttfa;
import ecar.pojo.HistoricoIettusH;
import ecar.pojo.HistoricoMaster;
import ecar.pojo.HistoricoMotivo;
import ecar.pojo.ItemEstUsutpfuacIettutfa;
import ecar.pojo.ItemEstrutUsuarioIettus;
import ecar.pojo.ItemEstruturaIett;
import ecar.pojo.TipoFuncAcompTpfa;
import gov.pr.celepar.framework.database.HibernateUtil;
/**
* @author garten
*/
public class ControlePermissao {
public static final String PERMISSAO_FUNCAO_ACOMPANHAMENTO = "F";
public static final String PERMISSAO_USUARIO = "U";
public static final String PERMISSAO_GRUPO = "G";
public static final String SIM = "S";
public static final String NAO = "N";
/**
* Atualiza todos os registros de item_estrut_usuario_iettus para uma dado item da Estrutura.<br>
*
* @author N/C
* @since N/C
* @version N/C
* @param ItemEstruturaIett item
* @param Set fuacAnteriores - Cole��o de fuac existente antes da altera��o do item
* @param Session session
* @param boolean novoItem
*/
public void atualizarPermissoesItemEstrutura(ItemEstruturaIett item, Set fuacAnteriores, Session session, boolean novoItem, HttpServletRequest request) throws ECARException {
Iterator itFuncoesAcompanhamento = item.getEstruturaEtt().getEstrutTpFuncAcmpEtttfas().iterator();
/****** historico *****/
HistoricoIettus historico = new HistoricoIettus(new ItemEstrutUsuarioIettus(),
HistoricoIettus.excluirPermissoes,
session,
new ConfiguracaoDao(request),
request);
/****** historico *****/
while(itFuncoesAcompanhamento.hasNext()){
TipoFuncAcompTpfa funcaoAcompanhamento = ((EstrutTpFuncAcmpEtttfa) itFuncoesAcompanhamento.next()).getTipoFuncAcompTpfa();
ItemEstUsutpfuacIettutfa fuacNovo = getUsuarioAcompanhamento(item, funcaoAcompanhamento);
ItemEstUsutpfuacIettutfa fuacAnterior = getUsuarioAcompanhamento(fuacAnteriores, item, funcaoAcompanhamento);
if(fuacNovo == null && fuacAnterior != null) {
excluirPermissoesItem(item, fuacAnterior, session, request, historico);
}
}
itFuncoesAcompanhamento = item.getEstruturaEtt().getEstrutTpFuncAcmpEtttfas().iterator();
while(itFuncoesAcompanhamento.hasNext()){
EstrutTpFuncAcmpEtttfa funcaoAcomp = (EstrutTpFuncAcmpEtttfa) itFuncoesAcompanhamento.next();
TipoFuncAcompTpfa funcaoAcompanhamento = funcaoAcomp.getTipoFuncAcompTpfa();
ItemEstUsutpfuacIettutfa fuacNovo = getUsuarioAcompanhamento(item, funcaoAcompanhamento);
ItemEstUsutpfuacIettutfa fuacAnterior = getUsuarioAcompanhamento(fuacAnteriores, item, funcaoAcompanhamento);
if(fuacNovo != null){
if(fuacAnterior == null){
String manterProximoNivel = funcaoAcomp.getIndManterProximoNivelEtttfa();
ItemEstrutUsuarioIettus iettus = incluirPermissaoItem(item, fuacNovo,manterProximoNivel);
session.save(iettus);
item.getEstruturaEtt();
//Manter a permiss�o no pr�ximo n�vel de acordo com o definido na 'Fun��o de Acompanhamento na Estrutura'
if(manterProximoNivel != null && manterProximoNivel.equals("S")){
incluirPermissoesItensFilho(item, fuacNovo, session,manterProximoNivel);
}
} else {
if(fuacNovo.getUsuarioUsu() != null && fuacAnterior.getUsuarioUsu() != null && !fuacNovo.getUsuarioUsu().equals(fuacAnterior.getUsuarioUsu())){
alterarPermissoesItem(item, fuacAnterior, session, request, historico);
} else if(fuacNovo.getSisAtributoSatb() != null && fuacAnterior.getSisAtributoSatb() != null && !fuacNovo.getSisAtributoSatb().equals(fuacAnterior.getSisAtributoSatb())){
alterarPermissoesItem(item, fuacAnterior, session, request, historico);
} else if(fuacNovo.getUsuarioUsu() != null && fuacAnterior.getUsuarioUsu() == null){
alterarPermissoesItem(item, fuacAnterior, session, request, historico);
} else if(fuacNovo.getSisAtributoSatb() != null && fuacAnterior.getSisAtributoSatb() == null){
alterarPermissoesItem(item, fuacAnterior, session, request, historico);
}
}
}
}
if(novoItem) {
Set iettusCopiaPai = copiarPermissoesItemPai(item);
Iterator it = iettusCopiaPai.iterator();
while(it.hasNext()) {
ItemEstrutUsuarioIettus iettus = (ItemEstrutUsuarioIettus)it.next();
session.save(iettus);
}
}
}
/**
* Atualiza todos os registros de item_estrut_usuario_iettus para uma dado item da Estrutura usado como modelo.<br>
*
* @author N/C
* @since N/C
* @version N/C
* @param ItemEstruturaIett item
* @param Set fuacAnteriores - Cole��o de fuac existente antes da altera��o do item
* @param Session session
* @param boolean novoItem
*/
public Set getPermissoesItemEstruturaUsarModelo(ItemEstruturaIett item, HttpServletRequest request) throws ECARException {
Set itemEstrutUsuarioIettus = new HashSet();
Iterator itFuncoesAcompanhamento = item.getEstruturaEtt().getEstrutTpFuncAcmpEtttfas().iterator();
while(itFuncoesAcompanhamento.hasNext()){
EstrutTpFuncAcmpEtttfa funcaoAcomp = (EstrutTpFuncAcmpEtttfa) itFuncoesAcompanhamento.next();
TipoFuncAcompTpfa funcaoAcompanhamento = funcaoAcomp.getTipoFuncAcompTpfa();
ItemEstUsutpfuacIettutfa fuacNovo = getUsuarioAcompanhamento(item, funcaoAcompanhamento);
if(fuacNovo != null){
String manterProximoNivel = funcaoAcomp.getIndManterProximoNivelEtttfa();
ItemEstrutUsuarioIettus iettus = incluirPermissaoItem(item, fuacNovo,manterProximoNivel);
itemEstrutUsuarioIettus.add(iettus);
item.getEstruturaEtt();
}
}
Set iettusCopiaPai = copiarPermissoesItemPai(item);
Iterator it = iettusCopiaPai.iterator();
while(it.hasNext()) {
ItemEstrutUsuarioIettus iettus = (ItemEstrutUsuarioIettus)it.next();
itemEstrutUsuarioIettus.add(iettus);
}
return itemEstrutUsuarioIettus;
}
/**
* Atualiza todos os registros de item_estrut_usuario_iettus para uma dada funcao de acompanhamento.<br>
*
* @author N/C
* @since N/C
* @version N/C
* @param TipoFuncAcompTpfa funcao
* @throws ECARException
*/
public void atualizarPermissoesPorFuncaoDeAcompanhamento(TipoFuncAcompTpfa funcao) throws ECARException {
ItemEstrutUsuarioIettus iettus;
Iterator it = funcao.getItemEstrutUsuarioIettuses().iterator();
while (it.hasNext()) {
iettus = (ItemEstrutUsuarioIettus) it.next();
if (PERMISSAO_FUNCAO_ACOMPANHAMENTO.equals(iettus.getCodTpPermIettus()) &&
iettus.getTipoFuncAcompTpfa().equals(funcao)) {
iettus.setIndLeituraIettus(getIndLeitura());
iettus.setIndExcluirIettus(getIndExcluir(funcao));
iettus.setIndEdicaoIettus(getIndEdicao(funcao));
iettus.setIndLeituraParecerIettus(getIndLeituraParecer(funcao));
iettus.setIndAtivMonitIettus(getIndAtivMonit(funcao));
iettus.setIndDesatMonitIettus(getIndDesatMonit(funcao));
iettus.setIndBloqPlanIettus(getIndBloqPlan(funcao));
iettus.setIndDesblPlanIettus(getIndDesblPlan(funcao));
iettus.setIndInfAndamentoIettus(getIndInfAndamento(funcao));
iettus.setIndEmitePosIettus(getIndEmitePos(funcao));
iettus.setIndProxNivelIettus(getIndProxNivel());
}
}
}
/**
* Inclui permiss�es para todos os filhos de um item.<br>
*
* @author N/C
* @since N/C
* @version N/C
* @param ItemEstruturaIett item
* @param ItemEstUsutpfuacIettutfa fuac
* @param Session session
*/
private void incluirPermissoesItensFilho(ItemEstruturaIett item, ItemEstUsutpfuacIettutfa fuac, Session session,String manterProximoNivel) {
List itensFilhos = getDescendentesItem(item);
if(itensFilhos != null){
Iterator it = itensFilhos.iterator();
while(it.hasNext()){
ItemEstruturaIett itemFilho = (ItemEstruturaIett) it.next();
if(getPermissao(itemFilho, item, fuac.getTipoFuncAcompTpfa()) == null){
ItemEstrutUsuarioIettus permissaoItemFilho = incluirPermissaoItem(itemFilho, fuac,manterProximoNivel);
permissaoItemFilho.setItemEstruturaIettOrigem(item);
session.save(permissaoItemFilho);
}
}
}
}
/**
* Retorna um objeto itemEstrutUsuario a partir de um item , item de origem e fun��o de acompanhamento.<br>
*
* @author N/C
* @since N/C
* @version N/C
* @param ItemEstruturaIett item
* @param ItemEstruturaIett itemOrigem
* @param TipoFuncAcompTpfa funcaoAcomp
* @return ItemEstrutUsuarioIettus
*/
public ItemEstrutUsuarioIettus getPermissao(ItemEstruturaIett item, ItemEstruturaIett itemOrigem, TipoFuncAcompTpfa funcaoAcomp){
Iterator it = item.getItemEstrutUsuarioIettusesByCodIett().iterator();
while(it.hasNext()){
ItemEstrutUsuarioIettus ieUsuario = (ItemEstrutUsuarioIettus) it.next();
if(ieUsuario.getItemEstruturaIett().equals(item) &&
ieUsuario.getItemEstruturaIettOrigem().equals(itemOrigem) &&
ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_FUNCAO_ACOMPANHAMENTO) &&
ieUsuario.getTipoFuncAcompTpfa().equals(funcaoAcomp)){
return ieUsuario;
}
}
return null;
}
/**
* Retorna os descendentes de um item. N�o � utilizado o m�todo getDescendentes de ItemEstruturaDao pois ele
* faz um refresh no objeto e nesta classe os objetos est�o sendo alterados em mem�ria e por isso n�o �
* desejado que sejam recarregados.<br>
*
* @author N/C
* @since N/C
* @version N/C
* @param ItemEstruturaIett itemEstrutura
* @return List
*/
public List getDescendentesItem(ItemEstruturaIett itemEstrutura) {
List retorno = new ArrayList();
if (itemEstrutura.getItemEstruturaIetts() != null) {
Iterator it = itemEstrutura.getItemEstruturaIetts().iterator();
while (it.hasNext()) {
ItemEstruturaIett itemEstruturaFilho = (ItemEstruturaIett) it.next();
if (!retorno.contains(itemEstruturaFilho))
retorno.add(itemEstruturaFilho);
retorno.addAll(this.getDescendentesItem(itemEstruturaFilho));
}
}
return retorno;
}
/**
* Seleciona todas as permiss�es do pai do item atual onde indProxNivel='S'.
* Gerando uma c�pia das permiss�es do pai para o item atual.<br>
*
* @author N/C
* @since N/C
* @version N/C
* @param ItemEstruturaIett item - (itemPai)
* @return Set - (Iettus)
*/
protected Set copiarPermissoesItemPai(ItemEstruturaIett item) {
Set iettusPai = new HashSet();
Set iettusHeranca = new HashSet();
if (item.getItemEstruturaIett() != null) {
iettusPai = item.getItemEstruturaIett().getItemEstrutUsuarioIettusesByCodIett();
if (iettusPai!=null) {
Iterator it = iettusPai.iterator();
while(it.hasNext()) {
ItemEstrutUsuarioIettus pai = (ItemEstrutUsuarioIettus) it.next();
if("S".equals(pai.getIndProxNivelIettus())) {
ItemEstrutUsuarioIettus itemEstUsuario = copiarItemEstUsuario(pai);
itemEstUsuario.setItemEstruturaIett(item);
iettusHeranca.add(itemEstUsuario);
}
}
}
}
return iettusHeranca;
}
/**
* Devolve um registro de permissao iettus a partir de um item e de uma funcao de acompanhamento.<br>
*
* @author N/C
* @since N/C
* @version N/C
* @param ItemEstruturaIett item
* @param ItemEstUsutpfuacIettutfa fuac
* @return ItemEstrutUsuarioIettus
*/
protected ItemEstrutUsuarioIettus incluirPermissaoItem(ItemEstruturaIett item, ItemEstUsutpfuacIettutfa fuac, String manterProximoNivel) {
return new ItemEstrutUsuarioIettus(
item,
item,
fuac.getUsuarioUsu(),
ControlePermissao.PERMISSAO_FUNCAO_ACOMPANHAMENTO,
fuac.getSisAtributoSatb(),
fuac.getTipoFuncAcompTpfa(),
getIndLeitura(),
getIndEdicao(fuac.getTipoFuncAcompTpfa()),
getIndExcluir(fuac.getTipoFuncAcompTpfa()),
getIndAtivMonit(fuac.getTipoFuncAcompTpfa()),
getIndDesatMonit(fuac.getTipoFuncAcompTpfa()),
getIndBloqPlan(fuac.getTipoFuncAcompTpfa()),
getIndDesblPlan(fuac.getTipoFuncAcompTpfa()),
getIndInfAndamento(fuac.getTipoFuncAcompTpfa()),
getIndEmitePos(fuac.getTipoFuncAcompTpfa()),
manterProximoNivel,
Data.getDataAtual(),
getIndLeituraParecer(fuac.getTipoFuncAcompTpfa())
);
}
/**
* Procura na lista de fuac de um item um objeto fuac para um item e uma fun��o de acomanhamento.<br>
*
* @author N/C
* @since N/C
* @version N/C
* @param ItemEstruturaIett item
* @param TipoFuncAcompTpfa funcao
* @return ItemEstUsutpfuacIettutfa
*/
protected ItemEstUsutpfuacIettutfa getUsuarioAcompanhamento(ItemEstruturaIett item, TipoFuncAcompTpfa funcao){
if(item.getItemEstUsutpfuacIettutfas() != null){
Iterator it = item.getItemEstUsutpfuacIettutfas().iterator();
while(it.hasNext()){
ItemEstUsutpfuacIettutfa fuac = (ItemEstUsutpfuacIettutfa) it.next();
if(fuac.getItemEstruturaIett().equals(item) && fuac.getTipoFuncAcompTpfa().equals(funcao))
return fuac;
}
}
return null;
}
/**
* Procura na lista de fuac um objeto fuac para um item e uma fun��o de acomanhamento.<br>
*
* @author N/C
* @since N/C
* @version N/C
* @param Set lFuac
* @param ItemEstruturaIett item
* @param TipoFuncAcompTpfa funcao
* @return ItemEstUsutpfuacIettutfa
*/
protected ItemEstUsutpfuacIettutfa getUsuarioAcompanhamento(Set lFuac, ItemEstruturaIett item, TipoFuncAcompTpfa funcao){
if(lFuac != null){
Iterator it = lFuac.iterator();
while(it.hasNext()){
ItemEstUsutpfuacIettutfa fuac = (ItemEstUsutpfuacIettutfa) it.next();
if(fuac.getItemEstruturaIett().equals(item) && fuac.getTipoFuncAcompTpfa().equals(funcao))
return fuac;
}
}
return null;
}
/**
* Altera a lista de cod_iett_orig do item, pesquisando o usuario anterior e trocando para o novo usuario.
* O novo usuario est� no fuac associado no item.<br>
*
* @author N/C
* @since N/C
* @version N/C
* @param ItemEstruturaIett item
* @param ItemEstUsutpfuacIettutfa fuacAnterior
* @param Session session
*/
protected void alterarPermissoesItem(ItemEstruturaIett item, ItemEstUsutpfuacIettutfa fuacAnterior, Session session, HttpServletRequest request, HistoricoIettus historico) throws ECARException {
try
{
Iterator it = item.getItemEstrutUsuarioIettusesByCodIettOrigem().iterator();
/******** Historico *********/
historico.gerarMaster(HistoricoIettus.alterarPermissoes);
/******** Historico *********/
while(it.hasNext()){
ItemEstrutUsuarioIettus ieUsuario = (ItemEstrutUsuarioIettus) it.next();
ItemEstrutUsuarioIettus old = (ItemEstrutUsuarioIettus)ieUsuario.clone();
if(ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_FUNCAO_ACOMPANHAMENTO)
&&
( (ieUsuario.getUsuarioUsu() != null && ieUsuario.getUsuarioUsu().equals(fuacAnterior.getUsuarioUsu()))
|| (ieUsuario.getSisAtributoSatb() != null && ieUsuario.getSisAtributoSatb().equals(fuacAnterior.getSisAtributoSatb())) )
&& ieUsuario.getTipoFuncAcompTpfa().equals(fuacAnterior.getTipoFuncAcompTpfa())){
ieUsuario.setUsuarioUsu(getUsuarioAcompanhamento(item, fuacAnterior.getTipoFuncAcompTpfa()).getUsuarioUsu());
ieUsuario.setSisAtributoSatb(getUsuarioAcompanhamento(item, fuacAnterior.getTipoFuncAcompTpfa()).getSisAtributoSatb());
/******** Historico *********/
historico.gerarHistorico(old);
/******** Historico *********/
session.update(ieUsuario);
}
}
}catch (HibernateException e) {
throw new ECARException("erro.hibernateException");
}
}
/**
* Exclui os cod_item_orig da lista do item, utilizando o usuario associado � funcao de acompanhamento anterior.
*
* @author N/C
* @since N/C
* @version N/C
* @param ItemEstruturaIett item
* @param ItemEstUsutpfuacIettutfa fuacAnterior
* @param Session session
*/
protected void excluirPermissoesItem(ItemEstruturaIett item, ItemEstUsutpfuacIettutfa fuacAnterior, Session session, HttpServletRequest request, HistoricoIettus historico) throws ECARException {
Iterator it = item.getItemEstrutUsuarioIettusesByCodIettOrigem().iterator();
while(it.hasNext()){
ItemEstrutUsuarioIettus ieUsuario = (ItemEstrutUsuarioIettus) it.next();
ItemEstrutUsuarioIettus old = (ItemEstrutUsuarioIettus) ieUsuario.clone();
if(ieUsuario.getCodTpPermIettus().equals(ControlePermissao.PERMISSAO_FUNCAO_ACOMPANHAMENTO)
&&
( (ieUsuario.getUsuarioUsu() != null && ieUsuario.getUsuarioUsu().equals(fuacAnterior.getUsuarioUsu()))
|| (ieUsuario.getSisAtributoSatb() != null && ieUsuario.getSisAtributoSatb().equals(fuacAnterior.getSisAtributoSatb())) )
&& ieUsuario.getTipoFuncAcompTpfa().equals(fuacAnterior.getTipoFuncAcompTpfa())){
/******** Historico *********/
historico.gerarHistorico(old);
/******** Historico *********/
session.delete(ieUsuario);
}
}
}
/**
* Recebe um itemEstrutUsuarioIettus persistente e devolve uma copia transiente.<br>
*
* @author N/C
* @since N/C
* @version N/C
* @param itemEstrutUsuarioIettus itemEstUsuario
* @return itemEstrutUsuarioIettus
*/
protected ItemEstrutUsuarioIettus copiarItemEstUsuario (ItemEstrutUsuarioIettus itemEstUsuario) {
return new ItemEstrutUsuarioIettus(
itemEstUsuario.getItemEstruturaIett(),
itemEstUsuario.getItemEstruturaIettOrigem(),
itemEstUsuario.getUsuarioUsu(),
itemEstUsuario.getCodTpPermIettus(),
itemEstUsuario.getSisAtributoSatb(),
itemEstUsuario.getTipoFuncAcompTpfa(),
itemEstUsuario.getIndLeituraIettus(),
itemEstUsuario.getIndEdicaoIettus(),
itemEstUsuario.getIndExcluirIettus(),
itemEstUsuario.getIndAtivMonitIettus(),
itemEstUsuario.getIndDesatMonitIettus(),
itemEstUsuario.getIndBloqPlanIettus(),
itemEstUsuario.getIndDesblPlanIettus(),
itemEstUsuario.getIndInfAndamentoIettus(),
itemEstUsuario.getIndEmitePosIettus(),
itemEstUsuario.getIndProxNivelIettus(),
Data.getDataAtual(),
itemEstUsuario.getIndLeituraParecerIettus()
);
}
/**
* Atualizar os dados de um itemEstrutUsuarioIettus destino de acordo com o origem.<br>
*
* @author N/C
* @since N/C
* @version N/C
* @param ItemEstrutUsuarioIettus itemEstrutUsuarioIettusOrigem
* @param ItemEstrutUsuarioIettus itemEstrutUsuarioIettusDestino
* @return ItemEstrutUsuarioIettus - (itemEstrutUsuarioIettusDestino)
*/
protected ItemEstrutUsuarioIettus atualizarItemEstUsuario (ItemEstrutUsuarioIettus itemEstrutUsuarioIettusOrigem, ItemEstrutUsuarioIettus itemEstrutUsuarioIettusDestino){
itemEstrutUsuarioIettusDestino.setIndLeituraIettus( itemEstrutUsuarioIettusOrigem.getIndLeituraIettus() );
itemEstrutUsuarioIettusDestino.setIndEdicaoIettus( itemEstrutUsuarioIettusOrigem.getIndEdicaoIettus() );
itemEstrutUsuarioIettusDestino.setIndExcluirIettus( itemEstrutUsuarioIettusOrigem.getIndExcluirIettus() );
itemEstrutUsuarioIettusDestino.setIndLeituraParecerIettus( itemEstrutUsuarioIettusOrigem.getIndLeituraParecerIettus() );
itemEstrutUsuarioIettusDestino.setIndAtivMonitIettus( itemEstrutUsuarioIettusOrigem.getIndAtivMonitIettus() );
itemEstrutUsuarioIettusDestino.setIndDesatMonitIettus( itemEstrutUsuarioIettusOrigem.getIndDesatMonitIettus() );
itemEstrutUsuarioIettusDestino.setIndBloqPlanIettus( itemEstrutUsuarioIettusOrigem.getIndBloqPlanIettus() );
itemEstrutUsuarioIettusDestino.setIndDesblPlanIettus( itemEstrutUsuarioIettusOrigem.getIndDesblPlanIettus() );
itemEstrutUsuarioIettusDestino.setIndInfAndamentoIettus( itemEstrutUsuarioIettusOrigem.getIndInfAndamentoIettus() );
itemEstrutUsuarioIettusDestino.setIndEmitePosIettus( itemEstrutUsuarioIettusOrigem.getIndEmitePosIettus() );
itemEstrutUsuarioIettusDestino.setIndProxNivelIettus( itemEstrutUsuarioIettusOrigem.getIndProxNivelIettus() );
itemEstrutUsuarioIettusDestino.setIndLeituraParecerIettus( itemEstrutUsuarioIettusOrigem.getIndLeituraParecerIettus() );
return itemEstrutUsuarioIettusDestino;
}
/**
* Propagar permiss�es para todos os filhos de um item caso o itemEstrutUsuario.getIndProxNivelIettus() seja 'S',
* Utilizado na inclus�o de permiss�o de acesso de itens da estrutura.<br>
*
* @author N/C
* @since N/C
* @version N/C
* @param ItemEstrutUsuarioIettus itemEstrutUsuarioIettus - itemEstrutUsuarioIettus que est� sendo inclu�do
* @param Session session
*/
public void propagarPermissoesItensFilhos(ItemEstrutUsuarioIettus itemEstrutUsuarioIettus, Session session) {
if("S".equals(itemEstrutUsuarioIettus.getIndProxNivelIettus())) {
ItemEstruturaIett item = itemEstrutUsuarioIettus.getItemEstruturaIett();
List itensFilhos = getDescendentesItem(item);
if(itensFilhos != null){
List iettusAux = new ArrayList();
Iterator it = itensFilhos.iterator();
while(it.hasNext()){
ItemEstruturaIett itemFilho = (ItemEstruturaIett) it.next();
ItemEstrutUsuarioIettus itemEstrutUsuarioIettusFilho = this.copiarItemEstUsuario(itemEstrutUsuarioIettus);
itemEstrutUsuarioIettusFilho.setItemEstruturaIett(itemFilho);
if(!iettusAux.contains(itemEstrutUsuarioIettusFilho)) {
session.save(itemEstrutUsuarioIettusFilho);
iettusAux.add(itemEstrutUsuarioIettusFilho);
}
}
}
}
}
/**
* Atualiza permiss�es para todos os filhos de um item.
* Utilizado na altera��o de permiss�o de acesso de itens da estrutura.<br>
*
* @author N/C
* @since N/C
* @version N/C
* @param ItemEstrutUsuarioIettus itemEstrutUsuarioIettusNovo - itemEstrutUsuarioIettus que est� sendo alterado
* @param String indProxNivelIettusAnterior - itemEstrutUsuarioIettus que foi alterado
* @param Session session
* @throws HibernateException
*/
public void atualizarPermissoesItensFilhos(ItemEstrutUsuarioIettus itemEstrutUsuarioIettusNovo,
String indProxNivelIettusAnterior, Session session, HttpServletRequest request, HistoricoIettus historico) throws HibernateException, ECARException {
ItemEstruturaIett item = itemEstrutUsuarioIettusNovo.getItemEstruturaIett();
List itensFilhos = getDescendentesItem(item);
List listIettusAtualizados = new ArrayList();
if(itensFilhos != null){
Iterator it = itensFilhos.iterator();
while(it.hasNext()){
ItemEstruturaIett itemFilho = (ItemEstruturaIett) it.next();
ItemEstrutUsuarioIettus itemEstrutUsuarioIettusFilho = this.copiarItemEstUsuario(itemEstrutUsuarioIettusNovo);
itemEstrutUsuarioIettusFilho.setItemEstruturaIett(itemFilho);
itemEstrutUsuarioIettusFilho.setIndExclusaoPosHistorico(Boolean.FALSE); // n�o apaga pelo historico (Mantis #2156)
// se a op��o "pr�ximo n�vel" anterior n�o for mais 'S' remover as permiss�es dos itens filhos
if(("S".equals(indProxNivelIettusAnterior) && "N".equals(itemEstrutUsuarioIettusNovo.getIndProxNivelIettus()))) {
if(itemFilho.getItemEstrutUsuarioIettusesByCodIett() != null) {
Iterator itEstrutAnterior = itemFilho.getItemEstrutUsuarioIettusesByCodIett().iterator();
while(itEstrutAnterior.hasNext()){
ItemEstrutUsuarioIettus ieUsuario = (ItemEstrutUsuarioIettus) itEstrutAnterior.next();
if(ieUsuario.getItemEstruturaIettOrigem().equals(item)) {
if(ieUsuario.getUsuarioUsu() != null && ieUsuario.getUsuarioUsu().equals(itemEstrutUsuarioIettusNovo.getUsuarioUsu())) {
ieUsuario.setUsuManutencao(itemEstrutUsuarioIettusNovo.getUsuManutencao());
/******** Historico *********/
historico.gerarHistorico(ieUsuario);
/******** Historico *********/
session.delete(ieUsuario);
}
else if(ieUsuario.getCodTpPermIettus().equals(PERMISSAO_GRUPO)
&& (ieUsuario.getSisAtributoSatb() != null && itemEstrutUsuarioIettusNovo.getSisAtributoSatb() != null &&
ieUsuario.getSisAtributoSatb().getCodSatb().longValue() == itemEstrutUsuarioIettusNovo.getSisAtributoSatb().getCodSatb().longValue())){
ieUsuario.setUsuManutencao(itemEstrutUsuarioIettusNovo.getUsuManutencao());
/******** Historico *********/
historico.gerarHistorico(ieUsuario);
/******** Historico *********/
session.delete(ieUsuario);
}
}
}
}
}
else if("S".equals(itemEstrutUsuarioIettusNovo.getIndProxNivelIettus())) {
if(itemFilho.getItemEstrutUsuarioIettusesByCodIett() != null) {
boolean achou = false;
Iterator itAux = itemFilho.getItemEstrutUsuarioIettusesByCodIett().iterator();
while(itAux.hasNext()) {
ItemEstrutUsuarioIettus ieUsuario = (ItemEstrutUsuarioIettus) itAux.next();
if(ieUsuario.getItemEstruturaIettOrigem().equals(item)) {
if(ieUsuario.getUsuarioUsu() != null && ieUsuario.getUsuarioUsu().equals(itemEstrutUsuarioIettusNovo.getUsuarioUsu())) {
ItemEstrutUsuarioIettus old = (ItemEstrutUsuarioIettus) ieUsuario.clone();
old.setUsuManutencao(itemEstrutUsuarioIettusNovo.getUsuManutencao());
/******** Historico *********/
historico.gerarHistorico(old);
/******** Historico *********/
achou = true;
ieUsuario = this.atualizarItemEstUsuario(itemEstrutUsuarioIettusFilho, ieUsuario);
session.update(ieUsuario);
}
else if(ieUsuario.getCodTpPermIettus().equals(PERMISSAO_GRUPO)
&& (ieUsuario.getSisAtributoSatb() != null && itemEstrutUsuarioIettusNovo.getSisAtributoSatb() != null &&
ieUsuario.getSisAtributoSatb().getCodSatb().longValue() == itemEstrutUsuarioIettusNovo.getSisAtributoSatb().getCodSatb().longValue())){
ItemEstrutUsuarioIettus old = (ItemEstrutUsuarioIettus) ieUsuario.clone();
old.setUsuManutencao(itemEstrutUsuarioIettusNovo.getUsuManutencao());
/******** Historico *********/
historico.gerarHistorico(old);
/******** Historico *********/
achou = true;
ieUsuario = this.atualizarItemEstUsuario(itemEstrutUsuarioIettusFilho, ieUsuario);
session.update(ieUsuario);
}
}
}
if(!achou && !listIettusAtualizados.contains(itemEstrutUsuarioIettusNovo)) {
listIettusAtualizados.add(itemEstrutUsuarioIettusNovo);
this.propagarPermissoesItensFilhos(itemEstrutUsuarioIettusNovo, session);
}
}
else {
session.save(itemEstrutUsuarioIettusFilho);
}
}
else {
break;
}
}
}
}
/**
* Remover permiss�es para todos os filhos de um item.
* Utilizado na exclus�o de permiss�o de acesso de itens da estrutura.<br>
*
* @author N/C
* @since N/C
* @version N/C
* @param ItemEstrutUsuarioIettus itemEstrutUsuario
* @param Session session
* @throws HibernateException
*/
public void removerPermissoesItensFilhos(ItemEstrutUsuarioIettus itemEstrutUsuario, Session session, HttpServletRequest request) throws HibernateException, ECARException {
ItemEstruturaIett item = itemEstrutUsuario.getItemEstruturaIett();
List itensFilhos = getDescendentesItem(item);
if(itensFilhos != null){
Iterator it = itensFilhos.iterator();
while(it.hasNext()){
ItemEstruturaIett itemFilho = (ItemEstruturaIett) it.next();
if(itemFilho.getItemEstrutUsuarioIettusesByCodIett() != null) {
Iterator itEstrutAnterior = itemFilho.getItemEstrutUsuarioIettusesByCodIett().iterator();
while(itEstrutAnterior.hasNext()){
ItemEstrutUsuarioIettus ieUsuario = (ItemEstrutUsuarioIettus) itEstrutAnterior.next();
if(ieUsuario.getItemEstruturaIettOrigem() != null && ieUsuario.getItemEstruturaIettOrigem().equals(item)) {
if(ieUsuario.getUsuarioUsu() != null && ieUsuario.getUsuarioUsu().equals(itemEstrutUsuario.getUsuarioUsu())) {
ieUsuario.setUsuManutencao(itemEstrutUsuario.getUsuManutencao());
/******** Historico *********/
HistoricoIettus historico = new HistoricoIettus(ieUsuario,
HistoricoIettus.excluirPermissoes,
session,
new ConfiguracaoDao(request),
request);
historico.gerarHistorico();
/******** Historico *********/
session.delete(ieUsuario);
}
else if(ieUsuario.getCodTpPermIettus().equals(PERMISSAO_GRUPO)
&& (ieUsuario.getSisAtributoSatb() != null && itemEstrutUsuario.getSisAtributoSatb() != null &&
ieUsuario.getSisAtributoSatb().getCodSatb().longValue() == itemEstrutUsuario.getSisAtributoSatb().getCodSatb().longValue())){
ieUsuario.setUsuManutencao(itemEstrutUsuario.getUsuManutencao());
/******** Historico *********/
HistoricoIettus historico = new HistoricoIettus(ieUsuario,
HistoricoIettus.excluirPermissoes,
session,
new ConfiguracaoDao(request),
request);
historico.gerarHistorico();
/******** Historico *********/
session.delete(ieUsuario);
}
}
}
}
}
}
}
/**
* Verificar se � poss�vel incluir um usu�rio ou grupo com indicador de 'manter
* permiss�o no pr�ximo n�vel' para um mesmo item da estrutura.<br>
*
* @author N/C
* @since N/C
* @version N/C
* @param ItemEstruturaIett item
* @param ItemEstrutUsuarioIettus iettusParaIncluir
* @return boolean
*/
public boolean verificarInclusaoUsuarioGrupo(ItemEstruturaIett item, ItemEstrutUsuarioIettus iettusParaIncluir ) {
boolean permiteInclusao = true;
if("S".equals(iettusParaIncluir.getIndProxNivelIettus())) {
Iterator it = item.getItemEstrutUsuarioIettusesByCodIett().iterator();
while(it.hasNext() && permiteInclusao){
ItemEstrutUsuarioIettus iettusGravado = (ItemEstrutUsuarioIettus) it.next();
if("S".equals(iettusGravado.getIndProxNivelIettus()) && !iettusGravado.getCodIettus().equals(iettusParaIncluir.getCodIettus())) {
if(iettusGravado.getCodTpPermIettus().equals(PERMISSAO_USUARIO) && iettusGravado.getUsuarioUsu() != null && iettusGravado.getUsuarioUsu().equals(iettusParaIncluir.getUsuarioUsu())) {
permiteInclusao = false;
}
else if(iettusGravado.getCodTpPermIettus().equals(PERMISSAO_GRUPO)
&& (iettusGravado.getSisAtributoSatb() != null && iettusParaIncluir.getSisAtributoSatb() != null &&
iettusGravado.getSisAtributoSatb().getCodSatb().longValue() == iettusParaIncluir.getSisAtributoSatb().getCodSatb().longValue())) {
permiteInclusao = false;
}
}
}
}
return permiteInclusao;
}
/**
* Para a funcao de acompanhamento, se IndPlaneja == "S" retorna "S", cc "N".<br>
*
* @author N/C
* @since N/C
* @version N/C
* @param TipoFuncAcompTpfa funcao
* @return String - "S" ou "N"
*/
protected String getIndEdicao(TipoFuncAcompTpfa funcao) {
return SIM.equals(funcao.getIndAlterarItemEstrutura()) ? SIM : NAO;
}
/**
* Por enquanto, retorna um valor constante "S", pois todos podem ler.<br>
*
* @author N/C
* @since N/C
* @version N/C
* @return String - "S"
*/
protected String getIndLeitura() {
return SIM;
}
/**
* Por enquanto, retorna um valor constante "S", pois todos podem ler.<br>
*
* @author N/C
* @since N/C
* @version N/C
* @return String - "S"
*/
protected String getIndLeituraParecer(TipoFuncAcompTpfa funcao) {
return SIM.equals(funcao.getIndVisualizarParecer()) ? SIM : NAO;
}
/**
* Para a funcao de acompanhamento, se IndPlaneja == "S" retorna "S", cc "N".<br>
*
* @author N/C
* @since N/C
* @version N/C
* @param TipoFuncAcompTpfa funcao
* @return String - "S" ou "N"
*/
protected String getIndExcluir(TipoFuncAcompTpfa funcao) {
return SIM.equals(funcao.getIndExcluirItemEstrutura()) ? SIM : NAO;
}
/**
* Para a funcao de acompanhamento, se IndPlaneja ou IndMonitora == "S" retorna "S", cc "N".<br>
*
* @author N/C
* @since N/C
* @version N/C
* @param TipoFuncAcompTpfa funcao
* @return String - "S" ou "N"
*/
protected String getIndAtivMonit(TipoFuncAcompTpfa funcao) {
return SIM.equals(funcao.getIndAtivarMonitoramento()) ? SIM : NAO;
}
/**
* Para a funcao de acompanhamento, se IndMonitora == "S" retorna "S", cc "N".<br>
*
* @author N/C
* @since N/C
* @version N/C
* @param TipoFuncAcompTpfa funcao
* @return String
*/
protected String getIndDesatMonit(TipoFuncAcompTpfa funcao) {
return SIM.equals(funcao.getIndDesativarMonitoramento()) ? SIM : NAO;
}
/**
* Para a funcao de acompanhamento, se IndPlaneja ou IndMonitora == "S" retorna "S", cc "N".<br>
*
* @author N/C
* @since N/C
* @version N/C
* @param TipoFuncAcompTpfa funcao
* @return String - "S" ou "N"
*/
protected String getIndBloqPlan(TipoFuncAcompTpfa funcao) {
return SIM.equals(funcao.getIndBloquearPlanejamento()) ? SIM : NAO;
}
/**
* Para a funcao de acompanhamento, se IndMonitora == "S" retorna "S", cc "N".<br>
*
* @author N/C
* @since N/C
* @version N/C
* @param TipoFuncAcompTpfa funcao
* @return String
*/
protected String getIndDesblPlan(TipoFuncAcompTpfa funcao) {
return SIM.equals(funcao.getIndDesbloquearPlanejamento()) ? SIM : NAO;
}
/**
* Para a funcao de acompanhamento, se IndInformaAndamento == "S" retorna "S", cc "N".<br>
*
* @author N/C
* @since N/C
* @version N/C
* @param TipoFuncAcompTpfa funcao
* @return String
*/
protected String getIndInfAndamento(TipoFuncAcompTpfa funcao) {
return SIM.equals(funcao.getIndInformaAndamentoTpfa()) ? SIM : NAO;
}
/**
* Para a funcao de acompanhamento, se IndEmitePosicao == "S" retorna "S", cc "N".<br>
*
* @author N/C
* @since N/C
* @version N/C
* @param TipoFuncAcompTpfa funcao
* @return String
*/
protected String getIndEmitePos(TipoFuncAcompTpfa funcao) {
return SIM.equals(funcao.getIndEmitePosicaoTpfa()) ? SIM : NAO;
}
/**
* Retorna String SIM.<br>
*
* @author N/C
* @since N/C
* @version N/C
* @return String
*/
protected String getIndProxNivel() {
return SIM;
}
/**Atualiza, de acordo com a op��o "manter pr�ximo n�vel", as permiss�es de acesso de todos os itens filhos da estrutura
* passada como par�metro.
*
* @param estrutTpFuncAcmpEtttfa
* @param session
*/
public void atualizarPermissaoManterProximoNivel(EstrutTpFuncAcmpEtttfa estrutTpFuncAcmpEtttfa, Session session, HttpServletRequest request) throws ECARException{
ItemEstrutUsuarioDao itemEstrutUsuarioDao = new ItemEstrutUsuarioDao(request);
ItemEstruturaIett itemEstruturaIettFiltro = new ItemEstruturaIett();
itemEstruturaIettFiltro.setIndAtivoIett("S");
itemEstruturaIettFiltro.setEstruturaEtt(estrutTpFuncAcmpEtttfa.getEstruturaEtt());
List itensEstruturaIetts = itemEstrutUsuarioDao.pesquisar(itemEstruturaIettFiltro, null);
Iterator itItensEstruturaIetts = itensEstruturaIetts.iterator();
String manterProximoNivel = estrutTpFuncAcmpEtttfa.getIndManterProximoNivelEtttfa();
while (itItensEstruturaIetts.hasNext()){
ItemEstruturaIett itemEstruturaIett = (ItemEstruturaIett) itItensEstruturaIetts.next();
ItemEstrutUsuarioIettus itemEstrutUsuarioIettusFiltro = new ItemEstrutUsuarioIettus();
itemEstrutUsuarioIettusFiltro.setItemEstruturaIett(itemEstruturaIett);
itemEstrutUsuarioIettusFiltro.setTipoFuncAcompTpfa(estrutTpFuncAcmpEtttfa.getTipoFuncAcompTpfa());
itemEstrutUsuarioIettusFiltro.setCodTpPermIettus(ControlePermissao.PERMISSAO_FUNCAO_ACOMPANHAMENTO);
itemEstrutUsuarioIettusFiltro.setItemEstruturaIettOrigem(itemEstruturaIett);
List itensEstrutUsuarioIettus = itemEstrutUsuarioDao.pesquisar(itemEstrutUsuarioIettusFiltro, null);
Iterator itIettus = itensEstrutUsuarioIettus.iterator();
while (itIettus.hasNext()){
ItemEstrutUsuarioIettus itemEstrutUsuarioIettus = (ItemEstrutUsuarioIettus) itIettus.next();
if(manterProximoNivel != null && manterProximoNivel.equals("S")){
this.propagarPermissoesIndProximoNivel(itemEstrutUsuarioIettus, session);
}else {
this.removerPermissoesIndProximoNivel(itemEstrutUsuarioIettus, session, request);
}
}
}
}
/**
* Propagar permiss�es para todos os filhos de um item caso o itemEstrutUsuario.getIndProxNivelIettus() seja 'S',
* Utilizado na inclus�o de permiss�o de acesso de itens da estrutura.<br>
*
* @author N/C
* @since N/C
* @version N/C
* @param ItemEstrutUsuarioIettus itemEstrutUsuarioIettus - itemEstrutUsuarioIettus que est� sendo inclu�do
* @param Session session
*/
public void propagarPermissoesIndProximoNivel(ItemEstrutUsuarioIettus itemEstrutUsuarioIettus, Session session) {
itemEstrutUsuarioIettus.setIndProxNivelIettus("S");
session.update(itemEstrutUsuarioIettus);
ItemEstruturaIett item = itemEstrutUsuarioIettus.getItemEstruturaIett();
List itensFilhos = getDescendentesItem(item);
if(itensFilhos != null){
List iettusAux = new ArrayList();
Iterator it = itensFilhos.iterator();
while(it.hasNext()){
ItemEstruturaIett itemFilho = (ItemEstruturaIett) it.next();
ItemEstrutUsuarioIettus itemEstrutUsuarioIettusFilho = this.copiarItemEstUsuario(itemEstrutUsuarioIettus);
itemEstrutUsuarioIettusFilho.setItemEstruturaIett(itemFilho);
if(!iettusAux.contains(itemEstrutUsuarioIettusFilho)) {
session.save(itemEstrutUsuarioIettusFilho);
iettusAux.add(itemEstrutUsuarioIettusFilho);
}
}
}
}
/**
* Propagar permiss�es para todos os filhos de um item caso o itemEstrutUsuario.getIndProxNivelIettus() seja 'S',
* Utilizado na inclus�o de permiss�o de acesso de itens da estrutura.<br>
*
* @author N/C
* @since N/C
* @version N/C
* @param ItemEstrutUsuarioIettus itemEstrutUsuarioIettus - itemEstrutUsuarioIettus que est� sendo inclu�do
* @param Session session
* @throws ECARException
*/
public void removerPermissoesIndProximoNivel(ItemEstrutUsuarioIettus itemEstrutUsuarioIettus, Session session, HttpServletRequest request) throws ECARException {
ItemEstrutUsuarioDao itemEstrutUsuarioDao = new ItemEstrutUsuarioDao(request);
List itensFilhos = getDescendentesItem(itemEstrutUsuarioIettus.getItemEstruturaIett());
itemEstrutUsuarioIettus.setIndProxNivelIettus("N");
session.update(itemEstrutUsuarioIettus);
if(itensFilhos != null){
Iterator it = itensFilhos.iterator();
while(it.hasNext()){
ItemEstruturaIett itemFilho = (ItemEstruturaIett) it.next();
ItemEstrutUsuarioIettus itemEstrutUsuarioIettusFiltro = new ItemEstrutUsuarioIettus();
itemEstrutUsuarioIettusFiltro.setItemEstruturaIett(itemFilho);
itemEstrutUsuarioIettusFiltro.setItemEstruturaIettOrigem(itemEstrutUsuarioIettus.getItemEstruturaIett());
itemEstrutUsuarioIettusFiltro.setCodTpPermIettus(PERMISSAO_FUNCAO_ACOMPANHAMENTO);
itemEstrutUsuarioIettusFiltro.setTipoFuncAcompTpfa(itemEstrutUsuarioIettus.getTipoFuncAcompTpfa());
List itensEstrutUsuarioIettus = itemEstrutUsuarioDao.pesquisar(itemEstrutUsuarioIettusFiltro, null);
if(itensEstrutUsuarioIettus != null) {
Iterator itEstrutAnterior = itensEstrutUsuarioIettus.iterator();
while(itEstrutAnterior.hasNext()){
ItemEstrutUsuarioIettus ieUsuario = (ItemEstrutUsuarioIettus) itEstrutAnterior.next();
ieUsuario.setUsuManutencao(itemEstrutUsuarioIettus.getUsuManutencao());
/******** Historico *********/
HistoricoIettus historico = new HistoricoIettus(ieUsuario,
HistoricoIettus.excluirPermissoes,
session,
new ConfiguracaoDao(request),
request);
historico.gerarHistorico();
/******** Historico *********/
session.delete(ieUsuario);
}
}
}
}
}
}