package br.com.centralit.citquestionario.util; import java.io.FileInputStream; 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.citajax.util.CitAjaxUtil; import br.com.centralit.citquestionario.bean.ListagemDTO; import br.com.centralit.citquestionario.bean.ListagemItemDTO; import br.com.citframework.util.Constantes; public class ListagemConfig { private static final Logger LOGGER = Logger.getLogger(ListagemConfig.class); private static ListagemConfig singleton; private Document doc = null; private Collection listagens; public static ListagemConfig getInstance() throws Exception { if (singleton == null) { String fileNameConfig = "listagem-config.xml"; if (Constantes.getValue("LISTAGEM_QUESTIONARIO_CFG") != null && !Constantes.getValue("LISTAGEM_QUESTIONARIO_CFG").trim().equalsIgnoreCase("")){ fileNameConfig = Constantes.getValue("LISTAGEM_QUESTIONARIO_CFG"); } InputStream listagemConfigFile = ListagemConfig.class.getResourceAsStream(fileNameConfig); if (listagemConfigFile == null){ listagemConfigFile = new FileInputStream(CitAjaxUtil.CAMINHO_REAL_APP + "/WEB-INF/" + fileNameConfig); } if (listagemConfigFile == null){ listagemConfigFile = new FileInputStream(Constantes.getValue("CAMINHO_LISTAGEM_QUESTIONARIO_CFG") + fileNameConfig); } LOGGER.info("CITAJAX_CONFIG: " + fileNameConfig); singleton = new ListagemConfig(listagemConfigFile, fileNameConfig); } return singleton; } public ListagemConfig(InputStream ioos, String fileNameConfig){ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = factory.newDocumentBuilder(); if (ioos == null){ throw new Exception("ARQUIVO (LISTAGEM_QUESTIONARIO_CFG): " + fileNameConfig + " NAO ENCONTRADO!!!!!!!!!"); } doc = builder.parse(ioos); load(); } catch (Exception e) { e.printStackTrace(); doc = null; } } public void load(){ if (doc == null) return; String nome = "", descricao = "", SQL = ""; listagens = new ArrayList(); ListagemDTO listagem; 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(); listagem = new ListagemDTO(); listagem.setNome(nome); listagem.setDescricao(descricao); listagem = getCampos(listagem, noItem); listagens.add(listagem); } } public ListagemDTO getCampos(ListagemDTO listagem, Node noItem){ if (noItem == null) return listagem; String nome = "", descricao = ""; ListagemItemDTO item; if (noItem.getChildNodes() != null){ for (int i = 0; i < noItem.getChildNodes().getLength(); i++){ Node noListagemItem = noItem.getChildNodes().item(i); if (noListagemItem.getNodeName().equals("SQL")) { listagem.setSQL(noListagemItem.getTextContent()); continue; } if (noListagemItem.getNodeName().equals("campos") && noListagemItem.getChildNodes() != null){ for (int c = 0; c < noListagemItem.getChildNodes().getLength(); c++){ Node noCampo = noListagemItem.getChildNodes().item(c); if(noCampo.getNodeName().equals("#text")) continue; NamedNodeMap map = noCampo.getAttributes(); nome = map.getNamedItem("nome").getNodeValue(); descricao = ""; if (map.getNamedItem("descricao") != null) { descricao = map.getNamedItem("descricao").getNodeValue(); } item = new ListagemItemDTO(); item.setNome(nome); item.setDescricao(descricao); Collection col = listagem.getCampos(); if (col == null){ col = new ArrayList(); listagem.setCampos(col); } col.add(item); } } } } return listagem; } public Collection getListagens() { return listagens; } public void setListagens(Collection listagens) { this.listagens = listagens; } public ListagemDTO find(String nomeListagem) { ListagemDTO result = null; for (Iterator it = listagens.iterator(); it.hasNext();){ ListagemDTO listagem = (ListagemDTO) it.next(); if (listagem.getNome().equalsIgnoreCase(nomeListagem)) { result = listagem; break; } } return result; } }