package fr.adrienbrault.idea.symfony2plugin.dic; import org.apache.commons.lang.StringUtils; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; /** * @author Adrien Brault <adrien.brault@gmail.com> */ public class ServiceMapParser { private DocumentBuilder documentBuilder; public ServiceMapParser() throws ParserConfigurationException { DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); documentBuilder = dbFactory.newDocumentBuilder(); } public ServiceMap parse(InputStream stream) throws IOException, SAXException { return parse(documentBuilder.parse(stream)); } public ServiceMap parse(File file) throws IOException, SAXException { return parse(documentBuilder.parse(file)); } public ServiceMap parse(Document document) { Map<String, String> map = new HashMap<>(); Map<String, String> publicMap = new HashMap<>(); NodeList servicesNodes = document.getElementsByTagName("service"); for (int i = 0; i < servicesNodes.getLength(); i++) { Element node = (Element) servicesNodes.item(i); if (node.hasAttribute("class") && node.hasAttribute("id")) { map.put(node.getAttribute("id"), StringUtils.stripStart(node.getAttribute("class"), "\\")); } if (!(node.hasAttribute("public") && node.getAttribute("public").equals("false"))) { publicMap.put(node.getAttribute("id"), StringUtils.stripStart(node.getAttribute("class"), "\\")); } if (node.hasAttribute("alias") && publicMap.get(node.getAttribute("alias")) != null) { map.put(node.getAttribute("id"), map.get(node.getAttribute("alias"))); publicMap.put(node.getAttribute("id"), map.get(node.getAttribute("alias"))); } } return new ServiceMap(map, publicMap); } }