package br.com.citframework.util; import java.io.File; import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; public class XmlReadDBItemConvertion { private static final Logger LOGGER = Logger.getLogger(XmlReadDBItemConvertion.class); private static final String ERROR_BUILDER_PARSE = "Erro ao construir documento XML a partir do arquivo de CONVERSOES DE BANCO DE DADOS!"; private static XmlReadDBItemConvertion xmlReaderItemConvertion = null; private Document doc = null; private static Collection<DBItemConvertion> colItens = null; public static XmlReadDBItemConvertion getInstance(final String dbName) { if (xmlReaderItemConvertion == null) { final String strNameDb = dbName.toLowerCase(); xmlReaderItemConvertion = new XmlReadDBItemConvertion(XmlReadDBItemConvertion.class.getResourceAsStream("/" + strNameDb + "-convert.xml")); } return xmlReaderItemConvertion; } public XmlReadDBItemConvertion(final InputStream ioos) { if (ioos == null) { LOGGER.info("XmlReadDBItemConvertion :: InputStream ioos IS NULL!!!"); return; } final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { final DocumentBuilder builder = factory.newDocumentBuilder(); doc = builder.parse(ioos); } catch (final Exception e) { LOGGER.error(ERROR_BUILDER_PARSE, e); } } public XmlReadDBItemConvertion(final String file) { final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { final DocumentBuilder builder = factory.newDocumentBuilder(); doc = builder.parse(new File(file)); } catch (final Exception e) { LOGGER.error(ERROR_BUILDER_PARSE, e); } } public Collection<DBItemConvertion> getItens() { if (colItens != null) { return colItens; } colItens = new ArrayList<DBItemConvertion>(); if (doc == null) { return null; } final Node noRoot = doc.getChildNodes().item(0); String nameToBeConverted = StringUtils.EMPTY; String nameAfterConversion = StringUtils.EMPTY; for (int j = 0; j < noRoot.getChildNodes().getLength(); j++) { final Node noLookup = noRoot.getChildNodes().item(j); if (noLookup.getNodeName().equals("#text") || noLookup.getNodeName().equals("#comment")) { continue; } final NamedNodeMap map = noLookup.getAttributes(); nameToBeConverted = map.getNamedItem("nameToBeConverted").getNodeValue(); nameAfterConversion = map.getNamedItem("nameAfterConversion").getNodeValue(); final DBItemConvertion dbItemConvertion = new DBItemConvertion(); dbItemConvertion.setNameToBeConverted(nameToBeConverted); dbItemConvertion.setNameAfterConversion(nameAfterConversion); if (nameAfterConversion != null && !nameAfterConversion.equalsIgnoreCase("")) { colItens.add(dbItemConvertion); } } return colItens; } }