package fr.adrienbrault.idea.symfony2plugin.templating.assets; import fr.adrienbrault.idea.symfony2plugin.util.service.AbstractServiceParser; import org.apache.commons.lang.StringUtils; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import java.io.InputStream; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; /** * @author Daniel Espendiller <daniel@espendiller.net> */ public class TwigNamedAssetsServiceParser extends AbstractServiceParser { protected Map<String, String[]> namedAssets = new HashMap<>(); @Override public String getXPathFilter() { return "/container/services/service[@id='assetic.asset_manager']//call[@method='addResource']//service[@class='Symfony\\Bundle\\AsseticBundle\\Factory\\Resource\\ConfigurationResource']//argument/argument[@key]"; } public void parser(InputStream file) { NodeList nodeList = this.parserer(file); if(nodeList == null) { return; } for (int i = 0; i < nodeList.getLength(); i++) { Element node = (Element) nodeList.item(i); String key = node.getAttribute("key"); if(key != null && StringUtils.isNotBlank(key)) { Set<String> files = new HashSet<>(); NodeList argument1 = node.getElementsByTagName("argument"); if(argument1.getLength() > 1) { Element argument = (Element) argument1.item(0); NodeList firstChild = argument.getElementsByTagName("argument"); for (int x = 0; x < firstChild.getLength(); x++) { String textContent = firstChild.item(x).getTextContent(); if(StringUtils.isNotBlank(textContent)) { files.add(textContent); } } } namedAssets.put(key, files.toArray(new String[files.size()])); } } } public Map<String, String[]> getNamedAssets() { return namedAssets; } }