package br.com.centralit.citgerencial.config; import java.io.ByteArrayInputStream; import java.io.FileInputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import javax.servlet.http.HttpServletRequest; 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.citgerencial.bean.GerencialFieldDTO; import br.com.centralit.citgerencial.bean.GerencialGraphInformationDTO; import br.com.centralit.citgerencial.bean.GerencialGroupDTO; import br.com.centralit.citgerencial.bean.GerencialItemInformationDTO; import br.com.centralit.citgerencial.bean.GerencialSQLDTO; import br.com.centralit.citgerencial.bean.GerencialSummaryInformationDTO; import br.com.centralit.citgerencial.util.CITGerencialUtil; import br.com.citframework.util.Constantes; import br.com.citframework.util.UtilI18N; public class GerencialItemInformationConfig { private static final Logger LOGGER = Logger.getLogger(GerencialItemInformationConfig.class); private Document doc = null; public static GerencialItemInformationDTO getInstance(String fileNameConfig, HttpServletRequest request) throws Exception { //InputStream itemInformationConfigFile = new FileInputStream(Constantes.getValue("CAMINHO_ITENS_INFORMATION_CONFIG") + fileNameConfig); InputStream itemInformationConfigFile = GerencialItemInformationConfig.class.getClassLoader().getResourceAsStream("/"+fileNameConfig); if (itemInformationConfigFile == null){ itemInformationConfigFile = GerencialItemInformationConfig.class.getResourceAsStream(fileNameConfig); } if (itemInformationConfigFile == null){ itemInformationConfigFile = GerencialItemInformationConfig.class.getResourceAsStream("/WEB-INF/classes/" + fileNameConfig); } if (itemInformationConfigFile == null){ itemInformationConfigFile = ClassLoader.getSystemResourceAsStream(fileNameConfig); } if (itemInformationConfigFile == null){ itemInformationConfigFile = ClassLoader.getSystemClassLoader().getResourceAsStream(fileNameConfig); } if (itemInformationConfigFile == null){ //Tenta pelo ClassLoader do Log4j. itemInformationConfigFile = LOGGER.getClass().getClassLoader().getResourceAsStream(fileNameConfig); } if (itemInformationConfigFile == null){ LOGGER.info("Tentando abrir arquivo de Relatorio: " + CITGerencialUtil.caminho_real_app + fileNameConfig); itemInformationConfigFile = new FileInputStream(CITGerencialUtil.caminho_real_app + fileNameConfig); } if (itemInformationConfigFile == null){ LOGGER.info("Tentando abrir arquivo de Relatorio: " + CITGerencialUtil.caminho_real_app + "WEB-INF/classes/" + fileNameConfig); itemInformationConfigFile = new FileInputStream(CITGerencialUtil.caminho_real_app + "WEB-INF/classes/" + fileNameConfig); } LOGGER.info("Arquivo de Relatorio: " + fileNameConfig); GerencialItemInformationConfig gerencialConfig = new GerencialItemInformationConfig(); return gerencialConfig.getItemInformation(itemInformationConfigFile, fileNameConfig, request); } public GerencialItemInformationDTO getItemInformation(InputStream ioos, String fileNameConfig, HttpServletRequest request){ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = factory.newDocumentBuilder(); if (ioos == null){ throw new Exception("ARQUIVO (ITEM_INFORMACAO_CONFIG): " + fileNameConfig + " NAO ENCONTRADO!!!!!!!!!"); } doc = builder.parse(ioos); return load(request); } catch (Exception e) { e.printStackTrace(); doc = null; return null; } } public GerencialItemInformationDTO getItemInformationString(String textoItem, String fileNameConfig, HttpServletRequest request){ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = factory.newDocumentBuilder(); if (textoItem == null){ throw new Exception(" (ITEM_INFORMACAO_CONFIG): " + fileNameConfig + " NAO ENCONTRADO!!!!!!!!!"); } InputStream is = new ByteArrayInputStream(textoItem.getBytes()); doc = builder.parse(is); return load(request); } catch (Exception e) { e.printStackTrace(); doc = null; return null; } } public GerencialItemInformationDTO load(HttpServletRequest request){ if (doc == null) return null; GerencialItemInformationDTO gerencialItemDto = new GerencialItemInformationDTO(); Node noRoot = doc.getChildNodes().item(0); if (noRoot != null){ NamedNodeMap map = noRoot.getAttributes(); gerencialItemDto.setType(map.getNamedItem("type").getNodeValue()); gerencialItemDto.setDescription(map.getNamedItem("description").getNodeValue()); gerencialItemDto.setTitle(map.getNamedItem("title").getNodeValue()); gerencialItemDto.setHDetailSpacing(map.getNamedItem("hDetailSpacing").getNodeValue()); gerencialItemDto.setReport(Boolean.valueOf(map.getNamedItem("report").getNodeValue()).booleanValue()); gerencialItemDto.setGraph(Boolean.valueOf(map.getNamedItem("graph").getNodeValue()).booleanValue()); if(map.getNamedItem("porcentagem")!=null) gerencialItemDto.setPorcentagem(Boolean.valueOf(map.getNamedItem("porcentagem").getNodeValue()).booleanValue()); gerencialItemDto.setReportPageLayout(map.getNamedItem("reportPageLayout").getNodeValue()); gerencialItemDto.setDefaultVisualization(map.getNamedItem("defaultVisualization").getNodeValue()); gerencialItemDto = getSubTree(gerencialItemDto, noRoot, request); } return gerencialItemDto; } public GerencialItemInformationDTO getSubTree(GerencialItemInformationDTO item, Node noItem, HttpServletRequest request){ if (noItem == null) return item; if (noItem.getChildNodes() != null){ for (int i = 0; i < noItem.getChildNodes().getLength(); i++){ Node noSubItem = noItem.getChildNodes().item(i); if(noSubItem.getNodeName().equals("#text")) continue; if (noSubItem.getNodeName().equalsIgnoreCase("SQL")){ item.setGerencialSQL(getItemSQL(noSubItem)); } if (noSubItem.getNodeName().equalsIgnoreCase("CLASS")){ NamedNodeMap map = noSubItem.getAttributes(); item.setClassExecute(map.getNamedItem("class").getNodeValue()); } if (noSubItem.getNodeName().equalsIgnoreCase("SERVICE")){ NamedNodeMap map = noSubItem.getAttributes(); item.setClassExecute(map.getNamedItem("class").getNodeValue()); } if (noSubItem.getNodeName().equalsIgnoreCase("JSP")){ NamedNodeMap map = noSubItem.getAttributes(); item.setClassExecute(map.getNamedItem("path").getNodeValue()); } if (noSubItem.getNodeName().equalsIgnoreCase("FIELDS")){ item.setListFields(getSubTreeFields(noSubItem, request)); } if (noSubItem.getNodeName().equalsIgnoreCase("GRAPHS")){ item.setListGraphs(getSubTreeGraphs(noSubItem)); } if (noSubItem.getNodeName().equalsIgnoreCase("GROUPS")){ item.setListGroups(getSubTreeGroups(noSubItem)); } if (noSubItem.getNodeName().equalsIgnoreCase("SUMMARY")){ GerencialSummaryInformationDTO gerencialSummary = new GerencialSummaryInformationDTO(); item.setGerencialSummary(gerencialSummary); } } } return item; } public Collection getSubTreeFields(Node noItem, HttpServletRequest request){ Collection colFields = new ArrayList(); GerencialFieldDTO gerencialField; if (noItem.getChildNodes() != null){ for (int i = 0; i < noItem.getChildNodes().getLength(); i++){ Node noSubItem = noItem.getChildNodes().item(i); if(noSubItem.getNodeName().equals("#text")) continue; if (noSubItem.getNodeName().equalsIgnoreCase("FIELD")){ gerencialField = new GerencialFieldDTO(); NamedNodeMap map = noSubItem.getAttributes(); gerencialField.setType(map.getNamedItem("type").getNodeValue()); gerencialField.setWidth(map.getNamedItem("width").getNodeValue()); gerencialField.setTitle(UtilI18N.internacionaliza(request, map.getNamedItem("title").getNodeValue())); gerencialField.setName(map.getNamedItem("name").getNodeValue()); gerencialField.setTotals(Boolean.valueOf(map.getNamedItem("totals").getNodeValue()).booleanValue()); gerencialField.setCount(Boolean.valueOf(map.getNamedItem("count").getNodeValue()).booleanValue()); gerencialField.setDecimals(Integer.valueOf(map.getNamedItem("decimals").getNodeValue())); gerencialField.setMask(map.getNamedItem("mask").getNodeValue()); try { gerencialField.setClassField(Class.forName(gerencialField.getType())); } catch (ClassNotFoundException e) { e.printStackTrace(); gerencialField.setClassField(null); } colFields.add(gerencialField); } } } return colFields; } public Collection getSubTreeGroups(Node noItem){ Collection colGroups = new ArrayList(); GerencialGroupDTO gerencialGroup; if (noItem.getChildNodes() != null){ for (int i = 0; i < noItem.getChildNodes().getLength(); i++){ Node noSubItem = noItem.getChildNodes().item(i); if(noSubItem.getNodeName().equals("#text")) continue; if (noSubItem.getNodeName().equalsIgnoreCase("GROUP")){ gerencialGroup = new GerencialGroupDTO(); NamedNodeMap map = noSubItem.getAttributes(); gerencialGroup.setSpacingLeft(map.getNamedItem("spacingLeft").getNodeValue()); gerencialGroup.setFieldName(map.getNamedItem("fieldName").getNodeValue()); colGroups.add(gerencialGroup); } } } return colGroups; } public Collection getSubTreeGraphs(Node noItem){ Collection colGraphs = new ArrayList(); GerencialGraphInformationDTO gerencialGraph; if (noItem.getChildNodes() != null){ for (int i = 0; i < noItem.getChildNodes().getLength(); i++){ Node noSubItem = noItem.getChildNodes().item(i); if(noSubItem.getNodeName().equals("#text")) continue; if (noSubItem.getNodeName().equalsIgnoreCase("GRAPH")){ gerencialGraph = new GerencialGraphInformationDTO(); NamedNodeMap map = noSubItem.getAttributes(); gerencialGraph.setType(map.getNamedItem("type").getNodeValue()); colGraphs.add(gerencialGraph); } } } return colGraphs; } public GerencialSQLDTO getItemSQL(Node noItem){ GerencialSQLDTO gerencialSQL = new GerencialSQLDTO(); String strOwner = Constantes.getValue("OWNER_DB"); if (strOwner == null){ strOwner = ""; } strOwner = strOwner.replaceAll("\\.", ""); //Retira o ponto, pois o owner, na lookup.xml ja esta com . String strTratar = noItem.getChildNodes().item(0).getNodeValue(); strTratar = strTratar.replaceAll("\\{OWNER_BD\\}", strOwner); gerencialSQL.setSql(strTratar); return gerencialSQL; } /* public static void main(String[] args) throws Exception { System.out.println("vai"); GerencialItemInformationDTO item = GerencialItemInformationConfig.getInstance("atendimentosAgenda.xml"); System.out.println("foi"); } */ }