package com.intellij.lang.javascript.flex.build; import com.intellij.flex.build.FlexCompilerConfigFileUtilBase; import com.intellij.openapi.util.Pair; import com.intellij.util.xml.NanoXmlUtil; import java.io.Reader; import java.util.ArrayList; import java.util.Collection; import static com.intellij.lang.javascript.flex.build.FlexCompilerConfigFileUtil.*; public class NamespacesXmlBuilder extends NanoXmlUtil.BaseXmlBuilder { private static final String INCLUDE_NAMESPACES_URI_LOCATION = NanoXmlUtil.createLocation(FlexCompilerConfigFileUtilBase.FLEX_CONFIG, INCLUDE_NAMESPACES, URI); private static final String NAMESPACE_LOCATION = NanoXmlUtil.createLocation(FlexCompilerConfigFileUtilBase.FLEX_CONFIG, FlexCompilerConfigFileUtilBase.COMPILER, NAMESPACES, NAMESPACE); private static final String NAMESPACE_URI_LOCATION = NanoXmlUtil.createLocation(FlexCompilerConfigFileUtilBase.FLEX_CONFIG, FlexCompilerConfigFileUtilBase.COMPILER, NAMESPACES, NAMESPACE, URI); private static final String MANIFEST_LOCATION = NanoXmlUtil.createLocation(FlexCompilerConfigFileUtilBase.FLEX_CONFIG, FlexCompilerConfigFileUtilBase.COMPILER, NAMESPACES, NAMESPACE, MANIFEST); private Collection<String> myIncludedNamespaces = new ArrayList<>(); private Collection<Pair<String, String>> myNamespacesAndManifests = new ArrayList<>(); private StringBuilder myNamespaceUri = new StringBuilder(); private StringBuilder myManifest = new StringBuilder(); public void startElement(final String name, final String nsPrefix, final String nsURI, final String systemID, final int lineNr) throws Exception { super.startElement(name, nsPrefix, nsURI, systemID, lineNr); final String location = getLocation(); if (NAMESPACE_LOCATION.equals(location)) { myNamespaceUri.delete(0, myNamespaceUri.length()); myManifest.delete(0, myManifest.length()); } else if (NAMESPACE_URI_LOCATION.equals(location)) { myNamespaceUri.delete(0, myNamespaceUri.length()); } else if (MANIFEST_LOCATION.equals(location)) { myManifest.delete(0, myManifest.length()); } } public void addPCData(final Reader reader, final String systemID, final int lineNr) throws Exception { final String location = getLocation(); if (INCLUDE_NAMESPACES_URI_LOCATION.equals(location)) { myIncludedNamespaces.add(readText(reader)); } else if (NAMESPACE_URI_LOCATION.equals(location)) { myNamespaceUri.append(readText(reader)); } else if (MANIFEST_LOCATION.equals(location)) { myManifest.append(readText(reader)); } } public void endElement(final String name, final String nsPrefix, final String nsURI) throws Exception { if (NAMESPACE_LOCATION.equals(getLocation())) { final String uri = myNamespaceUri.toString().trim(); final String manifest = myManifest.toString().trim(); if (uri.length() > 0 && manifest.length() > 0) { myNamespacesAndManifests.add(Pair.create(uri, manifest)); } } super.endElement(name, nsPrefix, nsURI); } public Collection<String> getIncludedNamespaces() { return myIncludedNamespaces; } public Collection<Pair<String, String>> getNamespacesAndManifests() { return myNamespacesAndManifests; } }