package br.com.centralit.citcorpore.comm.server;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import br.com.centralit.citcorpore.bean.CaracteristicaDTO;
import br.com.centralit.citcorpore.bean.ItemConfiguracaoDTO;
import br.com.centralit.citcorpore.bean.TipoItemConfiguracaoDTO;
import br.com.centralit.citcorpore.bean.ValorDTO;
import br.com.centralit.citcorpore.util.Enumerados;
import br.com.centralit.citcorpore.util.ParametroUtil;
import br.com.citframework.excecao.LogicException;
import br.com.citframework.excecao.ServiceException;
/**
* @author Maycon.Fernandes
*
*/
public class XmlReadDtdAgente {
private static final String VALUE = "HARDWARE";
private Document doc = null;
private List<ItemConfiguracaoDTO> listElementos = new ArrayList<ItemConfiguracaoDTO>();
/**
* @param ioos
* InputStream
* @throws Exception
* @throws ServiceException
*/
public XmlReadDtdAgente(InputStream ioos) throws ServiceException, Exception, LogicException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = factory.newDocumentBuilder();
doc = builder.parse(ioos);
listElementos.add(gravaDados());
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* @param ioos
* @throws Exception
* @throws ServiceException
*/
public List<ItemConfiguracaoDTO> XmlReadDtdAgent(final String string) throws ServiceException, Exception, LogicException {
try {
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
InputSource inStream = new InputSource();
//inStream.setEncoding("UTF-8");
inStream.setCharacterStream(new StringReader(string));
doc = db.parse(inStream);
listElementos.add(gravaDados());
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return listElementos;
}
/**
*
* Caminho onde encotra os xml Ex(d:\\nomeDiretorio);
*
* @param file
* File
* @throws Exception
* @throws ServiceException
*/
public XmlReadDtdAgente(File file) throws ServiceException, Exception, LogicException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
for (File string : file.listFiles()) {
DocumentBuilder builder = factory.newDocumentBuilder();
doc = builder.parse(string.getPath());
listElementos.add(gravaDados());
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Caminho do XML (Ex: C:\\nomexml.xml)
*
* @param file
* String
* @throws Exception
* @throws ServiceException
*/
public XmlReadDtdAgente(String file) throws ServiceException, Exception, LogicException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = factory.newDocumentBuilder();
doc = builder.parse(new File(file));
listElementos.add(gravaDados());
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public XmlReadDtdAgente() {
}
/**
* @return ItemConfiguracaoDTO
* @throws Exception
* @throws ServiceException
*/
private ItemConfiguracaoDTO gravaDados() throws ServiceException, Exception, LogicException {
Node noRoot = null;
ItemConfiguracaoDTO beanItem = new ItemConfiguracaoDTO();
CaracteristicaDTO beanCaracteristica = new CaracteristicaDTO();
List<TipoItemConfiguracaoDTO> lstTipoItemConfi = new ArrayList<TipoItemConfiguracaoDTO>();
String atributos = "";
String noPesquisa = "";
noPesquisa = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.NoPesquisa, null);
//List<ParametroCorporeDTO> listParametroNoPesquisa = paramentroService.pesquisarParamentro(Enumerados.ParametroSistema.NoPesquisa.id(), Enumerados.ParametroSistema.NoPesquisa.campo());
//noPesquisa = ((ParametroCorporeDTO) listParametroNoPesquisa.get(0)).getValor();
if(!VALUE.equalsIgnoreCase((noPesquisa == null ? "" : noPesquisa.trim())))
noPesquisa = "HARDWARE";
atributos = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.Atributo, null);
// Euler.Ramos - Corre��o do incidente 163237 - os itens de configura��o
// estavam duplicando numa rede com ip din�mico.
// O c�digo antigo seria apenas uma valida��o e n�o deveria acontecer na
// hora de utilizar o par�metro e sim na hora de grav�-lo;
// o valor estava sendo alterado para "IPADDR,NAME,USERID" contra a
// vontade do usu�rio, ele devia ficar sabendo da incompatibilidade
// de valores antes de gravar.
if (atributos == null || atributos.trim().equalsIgnoreCase("")) {
atributos = "NAME";
}
atributos = atributos.trim();
noPesquisa = noPesquisa.trim();
try {
noRoot = doc.getChildNodes().item(0);
NodeList listNoPesquisa = doc.getElementsByTagName(noPesquisa);
String[] listAtributos = atributos.split(",");
Node firstPersonNode = listNoPesquisa.item(0);
String atributoAux = "";
for (String string : listAtributos) {
if (percorreListaXml(firstPersonNode, string.trim()) != null) {
lstTipoItemConfi.add(percorreListaXml(firstPersonNode, string.trim()));
}
}
for (TipoItemConfiguracaoDTO tipoItemCfg : lstTipoItemConfi) {
beanCaracteristica = (CaracteristicaDTO) tipoItemCfg.getCaracteristicas().get(0);
if (atributoAux.trim().equalsIgnoreCase("")) {
atributoAux += beanCaracteristica.getValor().getValorStr();
} else {
atributoAux += " - " + beanCaracteristica.getValor().getValorStr();
}
}
beanItem.setIdentificacao(atributoAux.trim());
/**
* Setando a identifica��o padr�o pelo ip
*/
if (atributos.startsWith("NAME")){
beanItem.setIdentificacaoPadrao(doc.getElementsByTagName("NAME").item(0).getTextContent());
}else{
beanItem.setIdentificacaoPadrao(doc.getElementsByTagName("IPADDR").item(0).getTextContent());
}
lstTipoItemConfi.clear();
for (int j = 0; j < noRoot.getChildNodes().getLength(); j++) {
Node noAgente = noRoot.getChildNodes().item(j);
if (noAgente == null || noAgente.getNodeName() == null) {
continue;
}
if (noAgente.getNodeName().equals("#text"))
continue;
if (noAgente.hasChildNodes() && noAgente.getChildNodes().getLength() > 0) {
for (int i = 0; i < noAgente.getChildNodes().getLength(); i++) {
Node noAgenteAux = noAgente.getChildNodes().item(i);
if (noAgenteAux == null || noAgenteAux.getNodeName() == null) {
continue;
}
if (noAgenteAux.getNodeName().equals("#text"))
continue;
if (noAgenteAux.hasChildNodes() && noAgenteAux.getChildNodes().getLength() > 0) {
procurarProximoNode(noAgenteAux, true, lstTipoItemConfi);
} else {
lstTipoItemConfi.add(percorreListaXml(noAgenteAux.getParentNode(), ""));
break;
}
}
} else {
lstTipoItemConfi.add(percorreListaXml(noAgente, ""));
}
}
beanItem.setTipoItemConfiguracao(lstTipoItemConfi);
return beanItem;
} catch (Exception e) {
System.out.println("Erro ao fazer a leitura do XML: " + e.getMessage());
throw new LogicException("Par�mentros de Configura��o Atributo Pesquisa/No Pesquisa inv�lidos");
}
}
/**
* Procura pr�ximo Node.
*
* @param noAgente
* Node
* @param existNoFilho
* Boolean
* @param lstTipoItem
* TipoItemConfiguracaoDTO
* @return boolean true se existir pr�ximo node.
*/
private Boolean procurarProximoNode(Node noAgente, Boolean existNoFilho, List<TipoItemConfiguracaoDTO> lstTipoItem) {
for (int j = 0; j < noAgente.getChildNodes().getLength(); j++) {
Node noAgente2 = noAgente.getChildNodes().item(j);
if ((noAgente2 != null) && (!existNoFilho || noAgente2.getChildNodes().getLength() == 1)) {
lstTipoItem.add(percorreListaXml(noAgente2.getParentNode(), ""));
break;
}
if (noAgente2 == null || noAgente2.getNodeName() == null) {
continue;
}
if (noAgente2.getNodeName().equals("#text"))
continue;
if (noAgente2.hasChildNodes()) {
procurarProximoNode(noAgente2, true, lstTipoItem);
break;
} else {
procurarProximoNode(noAgente2, false, lstTipoItem);
}
}
return true;
}
/**
* Percorre Atributos do Node
*
* OBS: String Identifica atributo atraves desse parametro (Caso queira percorre o node por completo deixar vazio)
*
* @param noAtual
* Node
* @param campoIdentificacao
* String
* @return TipoItemConfiguracaoDTO
*
*/
private TipoItemConfiguracaoDTO percorreListaXml(Node noAtual, String campoIdentificacao) {
TipoItemConfiguracaoDTO tpItemConfigbean = new TipoItemConfiguracaoDTO();
ValorDTO valorbean = null;
CaracteristicaDTO caracteristicabean = null;
tpItemConfigbean.setTag(noAtual.getNodeName());
tpItemConfigbean.setNome(noAtual.getNodeName());
List<CaracteristicaDTO> lstCaracteristica = new ArrayList<CaracteristicaDTO>();
if (noAtual.getChildNodes().getLength() > 0) {
for (int j = 0; j < noAtual.getChildNodes().getLength(); j++) {
caracteristicabean = new CaracteristicaDTO();
valorbean = new ValorDTO();
Node noAgente2 = noAtual.getChildNodes().item(j);
if (noAgente2 == null || noAgente2.getNodeName() == null) {
continue;
}
if (!noAgente2.getNodeName().equals("#text")) {
if (!campoIdentificacao.equalsIgnoreCase("")) {
if (!noAgente2.getNodeName().equalsIgnoreCase(campoIdentificacao)) {
continue;
}
}
caracteristicabean.setNome(noAgente2.getNodeName());
caracteristicabean.setTipo("A");
caracteristicabean.setTag(noAgente2.getNodeName());
valorbean.setValorStr(noAgente2.getTextContent());
caracteristicabean.setValor(valorbean);
lstCaracteristica.add(caracteristicabean);
} else {
continue;
}
}
} else {
valorbean = new ValorDTO();
caracteristicabean = new CaracteristicaDTO();
caracteristicabean.setNome(noAtual.getNodeName());
caracteristicabean.setTipo("A");
caracteristicabean.setTag(noAtual.getNodeName());
valorbean.setValorStr(noAtual.getTextContent());
caracteristicabean.setValor(valorbean);
lstCaracteristica.add(caracteristicabean);
}
if (lstCaracteristica.size() > 0) {
tpItemConfigbean.setCaracteristicas(lstCaracteristica);
return tpItemConfigbean;
} else {
return null;
}
}
/**
* Retorna Lista Preenchida pelos Node do xml
*
* @return Lista Item Configuracao
*/
public List<ItemConfiguracaoDTO> getRetornaListaItemConfiguracao() {
return listElementos;
}
}