dom : datas) { if(SimNao.NAO.equals(dom.getMustInspectElement())) { encontrouUltimoNivel = true; } else { encontrouUltimoNivel = false; break; } } } if(encontrouUltimoNivel) { for(DataObjectMetadata data : datas) { data.setLevel(new Integer(1)); if(data.getDataObjectMetadata() == null) { List<DataObjectMetadata> dates = Collections.emptyList(); data.setDataObjectMetadata(dates); } } } } private void defineNivel(List<DataObjectMetadata> datas) { Boolean recebeuLevel = false; Integer level = new Integer(0); for(DataObjectMetadata data : datas) { if(SimNao.SIM.equals(data.getIsClassAntara()) && SimNao.SIM.equals(data.getMustInspectElement())) { if(data.getDataObjectMetadata().get(1).getLevel() != null) { if(data.getLevel() == null) { if(level < (data.getDataObjectMetadata().get(1).getLevel() + new Integer(1))) { level = (data.getDataObjectMetadata().get(1).getLevel() + new Integer(1)); } recebeuLevel = true; } else if(data.getLevel() < (data.getDataObjectMetadata().get(1).getLevel() + new Integer(1))) { if(level < (data.getDataObjectMetadata().get(1).getLevel() + new Integer(1))) { level = (data.getDataObjectMetadata().get(1).getLevel() + new Integer(1)); } recebeuLevel = true; } } else { defineNivel(data.getDataObjectMetadata()); if(data.getLevel() == null) { if(level < (data.getDataObjectMetadata().get(1).getLevel() + new Integer(1))) { level = (data.getDataObjectMetadata().get(1).getLevel() + new Integer(1)); } recebeuLevel = true; } } } } if(recebeuLevel) { for(DataObjectMetadata dom : datas) { if(dom.getLevel() == null) { dom.setLevel(level); if(dom.getDataObjectMetadata() == null) { List<DataObjectMetadata> dates = Collections.emptyList(); dom.setDataObjectMetadata(dates); } } } } } public void save(List<DataObjectMetadata> datas, String usuario) { List<DataObjectMetadata> saves = new ArrayList<DataObjectMetadata>(); desmembraObjetos(datas, saves); for(DataObjectMetadata save : saves) { save.setUsuarioStamp(usuario); domDAO.save(save); } } private void desmembraObjetos(List<DataObjectMetadata> datas, List<DataObjectMetadata> saves) { for(DataObjectMetadata dom : datas) { if(SimNao.SIM.equals(dom.getMustInspectElement())) { desmembraObjetos(dom.getDataObjectMetadata(), saves); adicionaObj(saves, dom); } else { adicionaObj(saves, dom); } } } private void adicionaObj(List<DataObjectMetadata> saves, DataObjectMetadata dom) { Boolean add = true; for(DataObjectMetadata save : saves) { if(save.getClassName().equals(dom.getClassName())) { if(save.getColumnName().equals(dom.getColumnName())) { add = false; break; } } } if(add) { saves.add(dom); } } public List<DataObjectMetadata> findToExport(DataObjectMetadata data) { return domDAO.findToExport(data); } public List<DataObjectMetadata> getEstruturaExportacaoXml(List<DataObjectMetadata> metadatasRequisitados) { List<DataObjectMetadata> retorno = new ArrayList<DataObjectMetadata>(metadatasRequisitados); List<DataObjectMetadata> metadatas = domDAO.findAll(); metadatas.removeAll(retorno); adicionaSubNiveis(retorno, metadatas); return retorno; } private void adicionaSubNiveis(List<DataObjectMetadata> niveisSelecionados, List<DataObjectMetadata> todosMetadatas) { List<DataObjectMetadata> subniveis = new ArrayList<DataObjectMetadata>(); List<String> classesEsperadasSubniveis = getSubniveisEsperadosParaListaDeDatas(niveisSelecionados); // adiciona os metadatas relacionados aos subniveis selecionados for(DataObjectMetadata metadata : todosMetadatas) { if(classesEsperadasSubniveis.contains(metadata.getClassName())) { subniveis.add(metadata); } } // remove os metadatas adicionados da lista geral todosMetadatas.removeAll(subniveis); if(!subniveis.isEmpty()) { adicionaSubNiveis(subniveis, todosMetadatas); } niveisSelecionados.addAll(subniveis); } private List<String> getSubniveisEsperadosParaListaDeDatas(List<DataObjectMetadata> metadatasParaAnalisar) { List<String> classesEsperadasSubniveis = new ArrayList<String>(metadatasParaAnalisar.size()); for(DataObjectMetadata metadata : metadatasParaAnalisar) { if(isClasseAntara(metadata.getColumnType()) == SimNao.SIM) { classesEsperadasSubniveis.add(metadata.getColumnType()); } } return classesEsperadasSubniveis; } private List<DataObjectMetadata> montaDadosProgs(AbstractEntityPersister persister, List<DataObjectMetadata> impedeRetorno) { List<DataObjectMetadata> ir = copiaListaRetorno(impedeRetorno); List<DataObjectMetadata> datas = new ArrayList<DataObjectMetadata>(); DataObjectMetadata data = null; if(persister != null) { String[] columnNames = persister.getPropertyNames(); Type[] columnTypes = persister.getPropertyTypes(); if((columnNames != null) && (columnTypes != null)) { List<String> colunas = new ArrayList<String>(Arrays.asList(columnNames)); List<Type> tipos = new ArrayList<Type>(Arrays.asList(columnTypes)); if((colunas != null) && (tipos != null)) { for(int i = 0; i < colunas.size(); i++) { data = new DataObjectMetadata(); if(SimNao.SIM.equals(isClasseAntara(tipos.get(i).getName()))){ data.setDataStamp(new Date()); data.setTableName(persister.getTableName()); data.setClassName(persister.getName()); data.setColumnName(colunas.get(i)); data.setColumnType(tipos.get(i).getName()); data.setIsClassAntara(isClasseAntara(data.getColumnType())); data.setMustInspectElement(deveInspecionarElemento(data.getColumnType(), ir)); data.setDataObjectMetadata(verificaSubObjetos(data, ir)); completaDadosProg(data); datas.add(data); } } } } } return datas; } private void completaDadosCampos(DataObjectMetadata data) { Integer indexInicio = data.getClassName().lastIndexOf("."); Integer indexFinal = data.getClassName().length(); String nmBean = data.getClassName().substring((indexInicio+1), (indexFinal)); for (Programa prog : progs) { indexInicio = prog.getNmPrograma().lastIndexOf("."); indexFinal = prog.getNmPrograma().length(); String nmPrograma = prog.getNmPrograma().substring((indexInicio+1), (indexFinal)); if(!nmPrograma.contains("Rep")){ if("Frm".equals(prog.getNmPrograma().substring((indexFinal-3), indexFinal))){ nmPrograma = prog.getNmPrograma().substring((indexInicio+1), (indexFinal-3)); } if(nmPrograma.equals(nmBean)){ data.setProgramName(prog.getProgramaIdioma(new Locale("pt", "BR")).getNmTituloPrograma()); data.setProgramCode(prog.getCdPrograma()); break; } } } } private void completaDadosProg(DataObjectMetadata data) { Integer indexInicio = data.getColumnType().lastIndexOf("."); Integer indexFinal