package gcom.util;
import gcom.cadastro.atualizacaocadastral.bean.DadosTabelaAtualizacaoCadastralHelper;
import gcom.seguranca.transacao.TabelaColuna;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class AtualizacaoCadastralUtil {
public List<DadosTabelaAtualizacaoCadastralHelper> linhasAtualizacaoCadastral(Collection<DadosTabelaAtualizacaoCadastralHelper> existentes,
Map<String, List<DadosTabelaAtualizacaoCadastralHelper>> alterados) {
List<DadosTabelaAtualizacaoCadastralHelper> retorno = new ArrayList<DadosTabelaAtualizacaoCadastralHelper>();
Map<String, DadosTabelaAtualizacaoCadastralHelper> subcategorias = new LinkedHashMap<String, DadosTabelaAtualizacaoCadastralHelper>();
for (DadosTabelaAtualizacaoCadastralHelper item : existentes) {
if (alterados.containsKey(item.getNomeColuna())){
if (!isSubcategoria(item)){
retorno.add(alterados.get(item.getNomeColuna()).get(0));
}else{
subcategorias.put(item.getComplemento().trim(), item);
}
}else{
retorno.add(item);
}
}
retorno.addAll(acrescentaSubcategorias(subcategorias, alterados));
retorno.addAll(acrescentaNaoSubcategorias(retorno, alterados));
Collections.sort(retorno, new AtualizacaoCadastralComparator());
return retorno;
}
private Collection<DadosTabelaAtualizacaoCadastralHelper> acrescentaNaoSubcategorias(Collection<DadosTabelaAtualizacaoCadastralHelper> existentes, Map<String, List<DadosTabelaAtualizacaoCadastralHelper>> alterados) {
List<DadosTabelaAtualizacaoCadastralHelper> naoSubcategorias = new ArrayList<DadosTabelaAtualizacaoCadastralHelper>();
List<String> colunas = new ArrayList<String>();
for (DadosTabelaAtualizacaoCadastralHelper item : existentes) {
colunas.add(item.getNomeColuna());
}
for (String coluna : alterados.keySet()) {
if (!colunas.contains(coluna)){
naoSubcategorias.addAll(alterados.get(coluna));
}
}
return naoSubcategorias;
}
private Collection<DadosTabelaAtualizacaoCadastralHelper> acrescentaSubcategorias(
Map<String, DadosTabelaAtualizacaoCadastralHelper> subcategorias, Map<String, List<DadosTabelaAtualizacaoCadastralHelper>> alterados) {
if (alterados.containsKey(TabelaColuna.NOME_COLUNA_ECONOMIAS)){
for (DadosTabelaAtualizacaoCadastralHelper alterado : alterados.get(TabelaColuna.NOME_COLUNA_ECONOMIAS)) {
subcategorias.put(alterado.getComplemento().trim(), alterado);
}
}
return subcategorias.values();
}
private boolean isSubcategoria(DadosTabelaAtualizacaoCadastralHelper existente) {
if (existente.getNomeColuna().equals(TabelaColuna.NOME_COLUNA_ECONOMIAS))
return true;
else
return false;
}
}