//configura��o de upload
String caminho = configuracao.getRaizUpload() + configuracao.getUploadExportacaoDemandas();
// indica que o relatorio a ser montado � gerado a partir de cadastro
String relatorioTipoMonitoramento = "N";
ItemEstruturaIett item = new ItemEstruturaIett();
List retorno = new ArrayList();
if(!caminho.endsWith("/"))
caminho = caminho + "/";
try{
Iterator itEstruturas = listaEstruturas.iterator();
EstruturaEtt estruturaCorrente;
List itensEstruturaCorrente = new ArrayList();
List itensPais = new ArrayList();
List listEstruturasGeral = new ArrayList();
int sequencialItensPai = 1;
int sequencialItemPaiAtual = 1;
int sequencialEstrutura = 1;
Date dataInicio = Data.getDataAtual();
//gera uma lista com as estruturas filhas da estrutura selecionada
while (itEstruturas.hasNext()){
estruturaCorrente = (EstruturaEtt)itEstruturas.next();
//adiciona a estrutura � lista de exporta��o caso a mesma esteja ativa
if (estruturaCorrente.getIndAtivoEtt().equals("S")){
listEstruturasGeral.add(estruturaCorrente);
}
//Re-consultar a estrutura para resolver exce��o de LazyInitializationException
estruturaCorrente = (EstruturaEtt) estruturaDao.buscar(EstruturaEtt.class, estruturaCorrente.getCodEtt());
if (estruturaCorrente.getEstruturaEtts() != null && !estruturaCorrente.getEstruturaEtts().isEmpty()){
listEstruturasGeral.addAll(getEstruturasFilhas(estruturaCorrente));
}
}
Iterator itEstruturasGeral = listEstruturasGeral.iterator();
Date dataInicioItens = Data.getDataAtual();
Collection<ItemEstruturaIett> listaItemPrincipal = null;
Collection<ItemEstruturaIett> listItensPorEstrutura = null;
while (itEstruturasGeral.hasNext()){
int sequencialItens = 1;
sequencialItensPai=1;
estruturaCorrente = (EstruturaEtt) itEstruturasGeral.next();
// Cria um arquivo para cada estrutura
String caminhoCompleto = "";
//Cria o nome do arquivo -> <ID Sequencial>_<Nome da Estrutura Pai>_<Nome da Estrutura Utilizada>.txt
String nomeArquivo = String.valueOf(sequencialEstrutura);
if(estruturaCorrente.getEstruturaEtt()!=null) {
if(!estruturaCorrente.getEstruturaEtt().getNomeEtt().equals(""))
nomeArquivo += "_" + estruturaCorrente.getEstruturaEtt().getNomeEtt();
else
nomeArquivo += "_" + estruturaCorrente.getEstruturaEtt().getLabelEtt();
}
if(!estruturaCorrente.getNomeEtt().equals(""))
nomeArquivo += "_" + estruturaCorrente.getNomeEtt();
else
nomeArquivo += "_" + estruturaCorrente.getLabelEtt();
nomeArquivo+= ".txt";
nomeArquivo = nomeArquivo.replaceAll("/", "-");
sequencialEstrutura++;
caminhoCompleto = caminho + nomeArquivo;
String[] caminhoArquivo = {caminhoCompleto, nomeArquivo};
retorno.add(caminhoArquivo);
File diretorio = new File(caminho);
if(!diretorio.isDirectory())
diretorio.mkdirs();
FileOutputStream arquivo = new FileOutputStream(caminhoCompleto);
//Re-consultar a estrutura para resolver exce��o de LazyInitializationException
//estruturaCorrente = (EstruturaEtt) estruturaDao.buscar(EstruturaEtt.class, estruturaCorrente.getCodEtt());
System.out.println("Inicio Obter EstruturaAtributo:"+new Date());
List<ObjetoEstrutura> atributosOrdenados = estruturaDao.getAtributosEstruturaDadosGerais(estruturaCorrente);
Iterator<ObjetoEstrutura> atributosOrdenadosIt = atributosOrdenados.iterator();
System.out.println("Fim Obter EstruturaAtributo:"+new Date());
String linha = montaLinhaCabecalhoEstrutura(atributosOrdenadosIt, estruturaCorrente, relatorioTipoMonitoramento);
if (itemPrincipal != null){
//Modelo antigo
System.out.println("Inicio Obter Lista de descendentes: "+new Date());
List codPossiveisItensPais = montarListaCodigosPais(itemPrincipal);
listItensPorEstrutura = itemEstruturaDao.getItensByEstruturaOrdenadosPorItemPai(estruturaCorrente.getCodEtt(), codPossiveisItensPais);
System.out.println("Fim Obter Lista de descendentes: "+new Date());
} else {
listItensPorEstrutura = itemEstruturaDao.getItensByEstrutura(estruturaCorrente.getCodEtt());
}
if( listItensPorEstrutura != null && !listItensPorEstrutura.isEmpty() &&
atributosOrdenados != null && !atributosOrdenados.isEmpty()) {
Iterator<ItemEstruturaIett> listItensPorEstruturaIt = listItensPorEstrutura.iterator();
ItemEstruturaIett itemEstruturaPaiCorrente = null;
int contItens = 0;
//Para cada item de estrutura criar a linhas com os campos da estrutura correspondente
while(listItensPorEstruturaIt.hasNext()) {
System.out.println("Inicio do procesamento do item: "+new Date());
atributosOrdenadosIt = atributosOrdenados.iterator();
ItemEstruturaIett itemEstruturaCorrente = (ItemEstruturaIett) listItensPorEstruturaIt.next();
// Verifica se o usu�rio tem acesso ao item
ValidaPermissao validaPermissao = new ValidaPermissao();
SegurancaECAR seguranca = (SegurancaECAR) request.getSession().getAttribute("seguranca");
boolean permissaoAcessoItem = validaPermissao.permissaoConsultarItem(itemEstruturaCorrente, seguranca.getUsuario(), seguranca.getGruposAcesso()) ||
validaPermissao.permissaoExcluirItem(itemEstruturaCorrente, seguranca.getUsuario(), seguranca.getGruposAcesso());
boolean permissaoAcessoItensFilhos = false;
/* hint de otimiza��o. S� testa se tem permiss�o para os filhos (recursivo) se n�o tiver para si pr�prio */
if(!permissaoAcessoItem){
permissaoAcessoItensFilhos = validaPermissao.permissaoAcessoItensFilhos(itemEstruturaCorrente, seguranca.getUsuario(), seguranca.getGruposAcesso());
}
if(permissaoAcessoItem || permissaoAcessoItensFilhos){
//Se for o primeiro item o item pai passa a ser o pai desse item
if (itemEstruturaPaiCorrente == null && itemEstruturaCorrente.getItemEstruturaIett() != null){
itemEstruturaPaiCorrente = itemEstruturaCorrente.getItemEstruturaIett();
sequencialItemPaiAtual = verificaSequencialPai(itemEstruturaCorrente,itensPais);
}
//Se o pr�ximo item tiver um item pai diferente do anterior, o sequencial de itens pais �
//incrementado e um novo item pai corrente � atribuido
if (itemEstruturaPaiCorrente != null &&
!itemEstruturaPaiCorrente.equals(itemEstruturaCorrente.getItemEstruturaIett())) {
sequencialItemPaiAtual = verificaSequencialPai(itemEstruturaCorrente,itensPais);
itemEstruturaPaiCorrente = itemEstruturaCorrente.getItemEstruturaIett();
}
int[] pai = {itemEstruturaCorrente.getCodIett().intValue(),sequencialItensPai};
itensPais.add(pai);
sequencialItensPai++;
//Consulta o itemEstrutura pois quando vai pegar a cole��o de