* @return ItemEstruturaIett
* @throws Exception
*/
private ItemEstruturaIett alterar(Transaction transactionArg, HttpServletRequest request, UsuarioUsu usuarioLogado, Set gruposAcesso, HistoricoIett historico,ItemEstruturaIett itemEstruturaArg) throws Exception {
Transaction tx = null;
HistoricoItemEstruturaIett historicoItemEstruturaIett = new HistoricoItemEstruturaIett();
ItemEstruturaIett itemEstrutura = null;
boolean existeSisAtributoStabUsadoComoRestrititvo = false;
List listaSisAtributosSatbUsadosComoRestritivo = new ArrayList();
EstruturaDao estruturaDao = new EstruturaDao(request);
SisGrupoAtributoDao sgaDao = new SisGrupoAtributoDao(request);
try{
ArrayList objetos = new ArrayList();
super.inicializarLogBean();
if (transactionArg == null) {
tx = session.beginTransaction();
}
if (itemEstruturaArg == null) {
itemEstrutura = (ItemEstruturaIett) buscar(ItemEstruturaIett.class, Long.valueOf(Pagina.getParamStr(request, "codIett")));
} else {
itemEstrutura = itemEstruturaArg;
}
ItemEstruturaIett old = (ItemEstruturaIett) itemEstrutura.clone();
String indBloqPlanejamentoAnterior = itemEstrutura.getIndBloqPlanejamentoIett();
String indMonitoramentoAnterior = itemEstrutura.getIndMonitoramentoIett();
itemEstrutura.getItemEstUsutpfuacIettutfas().size();
Set lFuac = itemEstrutura.getItemEstUsutpfuacIettutfas();
/***Historico***/
historico.gerarHistorico(old);
/***Historico***/
// Verifica se o planejamento est� bloqueado
Boolean planejamentoBloqueado = false;
if (itemEstrutura.getIndBloqPlanejamentoIett() != null && itemEstrutura.getIndBloqPlanejamentoIett().equals("S")) {
planejamentoBloqueado = true;
}
List funcoesDoUsuario = (new TipoFuncAcompDao(null)).getFuncoesAcompNaEstruturaDoUsuario(itemEstrutura , usuarioLogado, gruposAcesso);
List funcoesBloqueadas = new ArrayList();
// Caso o planejamento esteja bloqueado, Busca as fun��es de acompanhamento que
// est�o bloqueadas e adiciona elas na lista "funcoesBloqueadas".
if (planejamentoBloqueado) {
// Descobre a Estrutura do item
EstruturaEtt estrutura = itemEstrutura.getEstruturaEtt();
// Descobre as fun��es de acompanhamento de uma estrutura
Set funcoesAcomp = estrutura.getEstrutTpFuncAcmpEtttfas();
// Itera pelas fun��es buscando as que est�o bloqueadas para altera��o
if (funcoesAcomp != null) {
for (Iterator it = funcoesAcomp.iterator(); it.hasNext();) {
EstrutTpFuncAcmpEtttfa funcao = (EstrutTpFuncAcmpEtttfa) it.next();
if (funcao.iGetBloqueado() && ( !podeEditarAtributoBloqueadoNaEstrutura(itemEstrutura, funcao, funcoesDoUsuario)) ) {
funcoesBloqueadas.add(funcao);
}
}
}
}
List funcoesNaoAlteradas = new ArrayList();
// apagar as funcoes de acompanhamento do item
if (itemEstrutura.getItemEstUsutpfuacIettutfas() != null) {
Iterator it = itemEstrutura.getItemEstUsutpfuacIettutfas().iterator();
while (it.hasNext()) {
ItemEstUsutpfuacIettutfa obj = (ItemEstUsutpfuacIettutfa)it.next();
// Assume que a fun��o est� desbloqueada
Boolean podeAlterar = true;
// Itera entre as fun��es que est�o bloqueadas. S� haver� valores nesta lista,
// caso o planejamento esteja bloqueado.
Iterator it2 = funcoesBloqueadas.iterator();
while (it2.hasNext()) {
EstrutTpFuncAcmpEtttfa funcaoBloqueada = (EstrutTpFuncAcmpEtttfa)it2.next();
// compara a fun��o e verifica se a confira��o est� para bloqueada.
// Caso bloqueada, define que o usu�rio n�o pode ter alterado a fun��o.
if (funcaoBloqueada.getComp_id().getCodTpfa().equals(obj.getComp_id().getCodTpfa())) {
podeAlterar = false;
break;
}
}
// S� remove do banco de dados as fun��es que o usu�rio poderia ter alterado.
if (podeAlterar) {
obj.setDataUltManutencao(Data.getDataAtual());
obj.setUsuManutencao(usuarioLogado);
//System.out.println("Deletou Fun��o Acomp: " + obj.getTipoFuncAcompTpfa().getDescricaoTpfa());
session.delete(obj);
objetos.add(obj);
} else {
funcoesNaoAlteradas.add(obj);
}
}
}
// Verifica quais s�o os atributos livres vinculados a estrutura.
// Isto s� � feito se o planejamento estiver bloqueado.
List sgas = new ArrayList();
if (planejamentoBloqueado) {
// busca os atributos livre configurados para o item em seu n�vel na estrutura
if(itemEstrutura.getEstruturaEtt() != null && itemEstrutura.getEstruturaEtt().getEstruturaAtributoEttats() != null && !itemEstrutura.getEstruturaEtt().getEstruturaAtributoEttats().isEmpty()){
for(Iterator it = itemEstrutura.getEstruturaEtt().getEstruturaAtributoEttats().iterator(); it.hasNext();){
EstruturaAtributoEttat ettat = (EstruturaAtributoEttat) it.next();
if(ettat.getAtributosAtb() != null && ettat.getAtributosAtb().getSisGrupoAtributoSga() != null){
// verifica se o atributo livre esta configurado para estar bloqueado.
if (ettat.iGetBloqueado() && ( !podeEditarAtributoBloqueadoNaEstrutura(itemEstrutura, ettat, funcoesDoUsuario)) ) {
//System.out.println("Atributo Livre" + ettat.getLabelEstruturaEttat());
sgas.add(ettat.getAtributosAtb().getSisGrupoAtributoSga());
}
}
}
}
}
List atributosLivres = this.getAtributosLivresItemEstrutura(request, itemEstrutura);
// apagar os atributos livres do item
if (itemEstrutura.getItemEstruturaSisAtributoIettSatbs() != null){
//busca os atributos livre configurados para este n�vel da estrutura
Iterator it = itemEstrutura.getItemEstruturaSisAtributoIettSatbs().iterator();
List satbsRestritivos = new ArrayList();
SisGrupoAtributoSga sgaRestritivo = null;
while (it.hasNext()) {
ItemEstruturaSisAtributoIettSatb obj = (ItemEstruturaSisAtributoIettSatb)it.next();
// assumo que o usu�rio poderia alterar este atributo.
Boolean podeAlterar = true;
if (planejamentoBloqueado) {
for(Iterator it2 = sgas.iterator(); it2.hasNext();){
SisGrupoAtributoSga grupoAtributo = (SisGrupoAtributoSga) it2.next();
if(grupoAtributo.getCodSga().equals(obj.getSisAtributoSatb().getSisGrupoAtributoSga().getCodSga())) {
// System.out.println("Atributo livre n�o editavel: " + grupoAtributo.getDescricaoSga());
podeAlterar = false;
break;
}
}
}
//verifica se a estrutura do item tem estrturas filhas e o atributo � um atributo restritivo.
if(obj.getSisAtributoSatb().getSisGrupoAtributoSga().getSisTipoExibicGrupoSteg().getCodSteg() == Input.LISTBOX ||
obj.getSisAtributoSatb().getSisGrupoAtributoSga().getSisTipoExibicGrupoSteg().getCodSteg() == Input.RADIO_BUTTON ||
obj.getSisAtributoSatb().getSisGrupoAtributoSga().getSisTipoExibicGrupoSteg().getCodSteg() == Input.COMBOBOX ||
obj.getSisAtributoSatb().getSisGrupoAtributoSga().getSisTipoExibicGrupoSteg().getCodSteg() == Input.CHECKBOX) {
if(existeEstruturaFilhaUsandoAtributoComoRestritivo( itemEstrutura, obj.getSisAtributoSatb()) &&
!atributosLivres.contains(obj) && podeAlterar) {
if (sgaRestritivo == null){
sgaRestritivo = obj.getSisAtributoSatb().getSisGrupoAtributoSga();
satbsRestritivos.add(obj.getSisAtributoSatb());
sgaRestritivo = obj.getSisAtributoSatb().getSisGrupoAtributoSga();
//estruturaDao.getLabelAtributoEstrutra(itemEstrutura.getEstruturaEtt(), obj.getSisAtributoSatb().getSisGrupoAtributoSga());
} else if (sgaRestritivo.equals(obj.getSisAtributoSatb().getSisGrupoAtributoSga())){
sgaRestritivo = obj.getSisAtributoSatb().getSisGrupoAtributoSga();
satbsRestritivos.add(obj.getSisAtributoSatb());
//args.append(", ").append(obj.getSisAtributoSatb().getDescricaoSatb());
}
existeSisAtributoStabUsadoComoRestrititvo = true;
}
}
if (podeAlterar && !existeSisAtributoStabUsadoComoRestrititvo) {
if(obj.getSisAtributoSatb().getSisGrupoAtributoSga().getSisTipoExibicGrupoSteg().getCodSteg() == Input.IMAGEM){
String nomeCampo = request.getParameter("a" + obj.getSisAtributoSatb().getSisGrupoAtributoSga().getCodSga().toString());
if (nomeCampo != null && nomeCampo.equals("")){
String fullFile = obj.getInformacao();
if (fullFile.lastIndexOf("=") != -1)
fullFile = fullFile.substring(fullFile.lastIndexOf("=") + 1);
File f = new File(fullFile);
if( f.exists() )
FileUpload.apagarArquivo(fullFile);
}
}
session.delete(obj);
objetos.add(obj);
}
}
if(existeSisAtributoStabUsadoComoRestrititvo && satbsRestritivos.size() > 0) {
String labelAtributoRestritivo = "'" + estruturaDao.getLabelAtributoEstrutra(itemEstrutura.getEstruturaEtt(), sgaRestritivo) + "'";
List satbsRestritivosOrdenados = sgaDao.ordenadarSisAtributos(sgaRestritivo, satbsRestritivos);
Iterator itSatbsRestritivosOrdenados = satbsRestritivosOrdenados.iterator();
StringBuffer labelSatbsRestritivos = new StringBuffer();
while (itSatbsRestritivosOrdenados.hasNext()){
SisAtributoSatb sisAtb = (SisAtributoSatb) itSatbsRestritivosOrdenados.next();
labelSatbsRestritivos.append("'" + sisAtb.getDescricaoSatb() + "'");
if (itSatbsRestritivosOrdenados.hasNext()){
labelSatbsRestritivos.append(", ");
}
}
if (satbsRestritivosOrdenados.size() > 1){
throw new ECARException("itemEstrutura.sisAtributoSatbEttSuperior.sisAtributoSatbUsadoComoAtributoRestritoEstruturaFilha", null, new String[]{labelSatbsRestritivos.toString(), labelAtributoRestritivo});
} else {
throw new ECARException("itemEstrutura.sisAtributoSatbEttSuperior.umSisAtributoSatbUsadoComoAtributoRestritoEstruturaFilha", null, new String[]{labelSatbsRestritivos.toString(), labelAtributoRestritivo});
}
}
}
// seta o novo item_estrutura
/**
* S� dever� setar os dados recebidos do request no objeto item Estrutura, se o objeto itemEstruturaArg passado
* como par�metro estiver nulo, caso o objeto itemEstruturaArg tenha valor ele j� dever� estar com todos os dados que
* ser�o alterados.
*/
if (itemEstruturaArg == null ) {
this.setItemEstrutura(request, itemEstrutura);
}
itemEstrutura.setUsuarioUsuByCodUsuUltManutIett(usuarioLogado);
itemEstrutura.setDataUltManutencaoIett(Data.getDataAtual());
/*
* Salvar os atributos livres, pois agora j� tenho o codIett
*/
for(Iterator it = atributosLivres.iterator(); it.hasNext();){
ItemEstruturaSisAtributoIettSatb atbLivre = (ItemEstruturaSisAtributoIettSatb) it.next();
SisAtributoSatb sisAtributo = atbLivre.getSisAtributoSatb();
FuncaoFun funcao;
FuncaoDao funcaoDao;
//Caso o tipo de valida��o seja igual a Mascara Editavel, ser� gerado um c�digo incremental.
if (sisAtributo.getAtribInfCompSatb() != null && sisAtributo.isAtributoMascaraEditavel()) {
funcaoDao = new FuncaoDao(request);
funcao = funcaoDao.getFuncaoDadosGerais();
this.atualizaValorAtributosID(atbLivre,sisAtributo,funcao);
} else if (sisAtributo.getAtribInfCompSatb() != null &&
(sisAtributo.isAtributoAutoIcremental() || sisAtributo.isAtributoMascara())) {
ItemEstruturaSisAtributoIettSatb atributoLivreNoItem = atbLivre.getItemEstruturaIett().buscarItemEstruturaSisAtributoLista(sisAtributo);
funcaoDao = new FuncaoDao(request);
funcao = funcaoDao.getFuncaoDadosGerais();
if (atributoLivreNoItem != null && atributoLivreNoItem.getTiposValores() != null && !atributoLivreNoItem.getTiposValores().isEmpty()) {
this.copiarTipoValorSemID(atbLivre, atributoLivreNoItem.getTiposValores(),funcao);
} else {
String arg = "Item "+atbLivre.getItemEstruturaIett().getCodIett()+" atributo livre "+sisAtributo.getCodSatb();
throw new ECARException("erro.atributo.item.inconsistente");
}
}
session.save(atbLivre);
objetos.add(atbLivre);
}
// Salva as Fun��es de acompanhamento do item.
if(itemEstrutura.getItemEstUsutpfuacIettutfas() != null) {
Iterator it = itemEstrutura.getItemEstUsutpfuacIettutfas().iterator();
while(it.hasNext()) {
PaiFilho object = (PaiFilho) it.next();
object.atribuirPKPai();
//salva os filhos
session.save(object);
objetos.add(object);
}
}
// Seta no itemEstrutura as fun��es de acompanhamento que o usu�rio n�o podia modificar.
// para atualizar logo abaixo as permiss�es do item.
Iterator it = funcoesNaoAlteradas.iterator();
while(it.hasNext()) {
itemEstrutura.getItemEstUsutpfuacIettutfas().add((ItemEstUsutpfuacIettutfa)it.next());
}
//
//controlar as permissoes passando o item e a lista das funcoes de acompanhamento antigas
//
new ControlePermissao().atualizarPermissoesItemEstrutura(itemEstrutura, lFuac, session, false, request);
if(Dominios.SIM.equals(Pagina.getParamStr(request, "ativarRetirarMonitoramentoItensFilho"))){
if(indMonitoramentoAnterior != null && !indMonitoramentoAnterior.equals(itemEstrutura.getIndMonitoramentoIett())){
this.propagarMonitoramento(itemEstrutura, historico);
}
}
if(indBloqPlanejamentoAnterior != null && !indBloqPlanejamentoAnterior.equals(itemEstrutura.getIndBloqPlanejamentoIett())) {
this.propagarPlanejamento(itemEstrutura, historico);
}
// Salva o ItemEstrutura
session.update(itemEstrutura);
objetos.add(itemEstrutura);
historicoItemEstruturaIett.carregar(itemEstrutura);
if (atributosLivres != null){
historicoItemEstruturaIett.setItemEstruturaSisAtributoIettSatbs(new HashSet(atributosLivres));
} else {
historicoItemEstruturaIett.setItemEstruturaSisAtributoIettSatbs(new HashSet<SisAtributoSatb>());
}
gerarHistorico(historicoItemEstruturaIett, Historico.ALTERAR);
if (transactionArg == null){