package br.com.centralit.citcorpore.ajaxForms; import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.apache.log4j.Logger; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import br.com.centralit.citcorpore.bean.InformacoesContratoConfigDTO; import br.com.centralit.citcorpore.bean.InformacoesContratoItem; import br.com.centralit.citcorpore.bean.UsuarioDTO; import br.com.centralit.citcorpore.negocio.InformacoesContratoConfigService; import br.com.citframework.excecao.ServiceException; import br.com.citframework.service.ServiceLocator; import br.com.citframework.util.Constantes; public class InformacoesContratoConfig { private static final Logger LOGGER = Logger.getLogger(InformacoesContratoConfig.class); private static InformacoesContratoConfig singleton; private Document doc = null; private Collection prontuarioItens; public static InformacoesContratoConfig getInstance() throws Exception { return getInstance(null); } public static InformacoesContratoConfig getInstance(UsuarioDTO user) throws Exception { String idEmpStr = Constantes.getValue("ID_EMPRESA_PROC_BATCH"); Integer idUsuario; if (idEmpStr == null || idEmpStr.trim().equalsIgnoreCase("")){ idUsuario = new Integer(1); }else{ idUsuario = new Integer(idEmpStr); } // POR BD. InformacoesContratoConfigService prontuarioEletronicoConfigService = (InformacoesContratoConfigService) ServiceLocator.getInstance().getService(InformacoesContratoConfigService.class, null); Collection colItensProntuariosSemPai = prontuarioEletronicoConfigService.findSemPai(idUsuario); singleton = new InformacoesContratoConfig(colItensProntuariosSemPai, user); return singleton; } public InformacoesContratoConfig(InputStream ioos, String fileNameConfig){ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = factory.newDocumentBuilder(); if (ioos == null){ throw new Exception("ARQUIVO (PRONTUARIOELETRONICO_CONFIG): " + fileNameConfig + " NAO ENCONTRADO!!!!!!!!!"); } doc = builder.parse(ioos); load(); } catch (Exception e) { e.printStackTrace(); doc = null; } } public InformacoesContratoConfig(Collection colItensDB, UsuarioDTO user) throws ServiceException, Exception{ doc = null; loadFromDB(colItensDB, user); } public void load(){ if (doc == null) return; String nome = "", descricao = "", path = ""; prontuarioItens = new ArrayList(); InformacoesContratoItem item; Node noRoot = doc.getChildNodes().item(0); for(int j = 0; j < noRoot.getChildNodes().getLength(); j++){ Node noItem = noRoot.getChildNodes().item(j); if(noItem.getNodeName().equals("#text")) continue; NamedNodeMap map = noItem.getAttributes(); nome = map.getNamedItem("nome").getNodeValue(); descricao = map.getNamedItem("descricao").getNodeValue(); path = map.getNamedItem("path").getNodeValue(); item = new InformacoesContratoItem(); item.setNome(nome); item.setDescricao(descricao); item.setPath(path); item.setGrupo(false); item = getSubTree(item, noItem); prontuarioItens.add(item); } } public void loadFromDB(Collection colItensEmDB, UsuarioDTO user) throws ServiceException, Exception{ if (colItensEmDB == null) return; prontuarioItens = new ArrayList(); Collection prontuarioTratamento = new ArrayList(); InformacoesContratoItem item; if (user == null){ return; } //ProntuarioEletronicoPerfSegService prontuarioEletronicoPerfSegService = (ProntuarioEletronicoPerfSegService) ServiceLocator.getInstance().getService(ProntuarioEletronicoPerfSegService.class, null); for(Iterator it = colItensEmDB.iterator(); it.hasNext();){ InformacoesContratoConfigDTO prontuarioEletronicoConfigDTO = (InformacoesContratoConfigDTO)it.next(); if (prontuarioEletronicoConfigDTO.getFuncItem().equalsIgnoreCase("J")){ //Nao eh para ser apresentado no prontuario normal continue; } //Collection colPerfisAssociados = prontuarioEletronicoPerfSegService.findByIdProntuarioEletronicoConfig(prontuarioEletronicoConfigDTO.getIdInformacoesContratoConfig()); //if (isPerfilUsuarioLogadoInCollection(colPerfisAssociados, user)){ item = new InformacoesContratoItem(); item.setNome(prontuarioEletronicoConfigDTO.getNome()); item.setDescricao(prontuarioEletronicoConfigDTO.getDescricao()); item.setPath(prontuarioEletronicoConfigDTO.getFuncionalidadeCompleta()); item.setIdQuestionario(prontuarioEletronicoConfigDTO.getIdQuestionario()); item.setFuncItem(prontuarioEletronicoConfigDTO.getFuncItem()); item = getSubTreeDB(item, prontuarioEletronicoConfigDTO, user); prontuarioTratamento.add(item); //} } prontuarioItens = retiraGruposVazios(prontuarioTratamento); } private Collection retiraGruposVazios(Collection col){ if (col == null){ return null; } Collection colAjustada = new ArrayList(); for(Iterator it = col.iterator(); it.hasNext();){ InformacoesContratoItem prontuarioEletronicoItem = (InformacoesContratoItem)it.next(); if (prontuarioEletronicoItem.isGrupo()){ Collection colAux = retiraGruposVazios(prontuarioEletronicoItem.getColSubItens()); if (colAux != null && colAux.size() > 0){ colAjustada.add(prontuarioEletronicoItem); } }else{ colAjustada.add(prontuarioEletronicoItem); } } return colAjustada; } private boolean isPerfilUsuarioLogadoInCollection(Collection colPerfisAssociados, UsuarioDTO user){ return true; } /* private boolean isPerfilUsuarioLogadoInCollection(Collection colPerfisAssociados, UsuarioDTO user){ if (colPerfisAssociados != null){ for(Iterator it = colPerfisAssociados.iterator(); it.hasNext();){ InformacoesContratoPerfSegDTO prontuarioEletronicoPerfSegDTO = (InformacoesContratoPerfSegDTO) it.next(); if (user.getColPerfis() != null){ for(Iterator itPerfUser = user.getColPerfis().iterator(); itPerfUser.hasNext();){ PessoasPerfilSegurancaDTO pessoasPerfilSegurancaDTO = (PessoasPerfilSegurancaDTO) itPerfUser.next(); if (pessoasPerfilSegurancaDTO.getIdPerfilSeguranca().intValue() == prontuarioEletronicoPerfSegDTO.getIdPerfilSeguranca().intValue()){ return true; } } } } } return false; } */ public InformacoesContratoItem getSubTree(InformacoesContratoItem p, Node noItem){ if (noItem == null) return p; String nome = "", descricao = "", path = ""; InformacoesContratoItem item; if (noItem.getChildNodes() != null){ for (int i = 0; i < noItem.getChildNodes().getLength(); i++){ Node noMenuItem = noItem.getChildNodes().item(i); if(noMenuItem.getNodeName().equals("#text")) continue; NamedNodeMap map = noMenuItem.getAttributes(); nome = map.getNamedItem("nome").getNodeValue(); descricao = map.getNamedItem("descricao").getNodeValue(); path = map.getNamedItem("path").getNodeValue(); item = new InformacoesContratoItem(); item.setNome(nome); item.setDescricao(descricao); item.setPath(path); item.setGrupo(false); item = getSubTree(item, noMenuItem); Collection col = p.getColSubItens(); if (col == null){ col = new ArrayList(); p.setColSubItens(col); } col.add(item); p.setGrupo(true); } } return p; } public InformacoesContratoItem getSubTreeDB(InformacoesContratoItem prontuarioEletronicoItem, InformacoesContratoConfigDTO prontuarioEletronicoConfigDTO, UsuarioDTO user) throws ServiceException, Exception{ if (prontuarioEletronicoConfigDTO == null) return prontuarioEletronicoItem; InformacoesContratoItem item; InformacoesContratoConfigService prontuarioEletronicoConfigService = (InformacoesContratoConfigService) ServiceLocator.getInstance().getService(InformacoesContratoConfigService.class, null); Collection colItensProntuariosDoPai = prontuarioEletronicoConfigService.findByPai(prontuarioEletronicoConfigDTO.getIdInformacoesContratoConfig()); //ProntuarioEletronicoPerfSegService prontuarioEletronicoPerfSegService = (ProntuarioEletronicoPerfSegService) ServiceLocator.getInstance().getService(ProntuarioEletronicoPerfSegService.class, null); if (colItensProntuariosDoPai != null){ for (Iterator it = colItensProntuariosDoPai.iterator(); it.hasNext();){ InformacoesContratoConfigDTO informacoesContratoConfigDTOAux = (InformacoesContratoConfigDTO)it.next(); if (informacoesContratoConfigDTOAux.getFuncItem().equalsIgnoreCase("J")){ //Nao eh para ser apresentado no prontuario normal continue; } //Collection colPerfisAssociados = prontuarioEletronicoPerfSegService.findByIdProntuarioEletronicoConfig(prontuarioEletronicoConfigDTOAux.getIdInformacoesContratoConfig()); //if (isPerfilUsuarioLogadoInCollection(colPerfisAssociados, user)){ item = new InformacoesContratoItem(); item.setNome(informacoesContratoConfigDTOAux.getNome()); item.setDescricao(informacoesContratoConfigDTOAux.getDescricao()); item.setPath(informacoesContratoConfigDTOAux.getFuncionalidadeCompleta()); item.setIdQuestionario(informacoesContratoConfigDTOAux.getIdQuestionario()); item.setFuncItem(informacoesContratoConfigDTOAux.getFuncItem()); item.setGrupo(false); item = getSubTreeDB(item, informacoesContratoConfigDTOAux, user); Collection col = prontuarioEletronicoItem.getColSubItens(); if (col == null){ col = new ArrayList(); prontuarioEletronicoItem.setColSubItens(col); } col.add(item); //} prontuarioEletronicoItem.setGrupo(true); } } return prontuarioEletronicoItem; } public Collection getProntuarioItens() { return prontuarioItens; } public void setProntuarioItens(Collection prontuarioItens) { this.prontuarioItens = prontuarioItens; } }