package jetbrains.mps.make.java; /*Generated by MPS */ import jetbrains.mps.util.xml.XMLSAXHandler; import java.util.Stack; import org.xml.sax.Locator; import org.xml.sax.SAXException; import org.xml.sax.Attributes; import org.xml.sax.SAXParseException; import jetbrains.mps.util.InternUtil; public class BLDependenciesHandler extends XMLSAXHandler<ModelDependencies> { private BLDependenciesHandler.DependenciesRootElementHandler dependenciesRootHandler = new BLDependenciesHandler.DependenciesRootElementHandler(); private BLDependenciesHandler.DependencyElementHandler dependencyHandler = new BLDependenciesHandler.DependencyElementHandler(); private BLDependenciesHandler.ClassNodeElementHandler classNodeHandler = new BLDependenciesHandler.ClassNodeElementHandler(); private Stack<BLDependenciesHandler.ElementHandler> myHandlersStack = new Stack<BLDependenciesHandler.ElementHandler>(); private Stack<BLDependenciesHandler.ChildHandler> myChildHandlersStack = new Stack<BLDependenciesHandler.ChildHandler>(); private Stack<Object> myValues = new Stack<Object>(); private Locator myLocator; private ModelDependencies myResult; public BLDependenciesHandler() { } public ModelDependencies getResult() { return myResult; } @Override public void setDocumentLocator(Locator locator) { myLocator = locator; } @Override public void characters(char[] array, int start, int len) throws SAXException { BLDependenciesHandler.ElementHandler current = (myHandlersStack.empty() ? (BLDependenciesHandler.ElementHandler) null : myHandlersStack.peek()); if (current != null) { current.handleText(myValues.peek(), new String(array, start, len)); } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { BLDependenciesHandler.ElementHandler current = myHandlersStack.pop(); Object childValue = myValues.pop(); current.validate(childValue); if (myChildHandlersStack.empty()) { myResult = (ModelDependencies) childValue; } else { BLDependenciesHandler.ChildHandler ch = myChildHandlersStack.pop(); if (ch != null) { ch.apply(myValues.peek(), childValue); } } } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { BLDependenciesHandler.ElementHandler current = (myHandlersStack.empty() ? (BLDependenciesHandler.ElementHandler) null : myHandlersStack.peek()); if (current == null) { // root current = dependenciesRootHandler; } else { current = current.createChild(myValues.peek(), qName, attributes); } // check required for (String attr : current.requiredAttributes()) { if (attributes.getValue(attr) == null) { throw new SAXParseException("attribute " + attr + " is absent", null); } } Object result = current.createObject(attributes); if (myHandlersStack.empty()) { myResult = (ModelDependencies) result; } // handle attributes for (int i = 0; i < attributes.getLength(); i++) { String name = attributes.getQName(i); String value = attributes.getValue(i); current.handleAttribute(result, name, value); } myHandlersStack.push(current); myValues.push(result); } private interface ChildHandler { void apply(Object resultObject, Object value) throws SAXException; } private class ElementHandler { private String[] requiredAttributes = new String[0]; private ElementHandler() { } protected Object createObject(Attributes attrs) throws SAXException { return null; } protected void handleAttribute(Object resultObject, String name, String value) throws SAXException { } protected BLDependenciesHandler.ElementHandler createChild(Object resultObject, String tagName, Attributes attrs) throws SAXException { throw new SAXParseException("unknown tag: " + tagName, null); } protected void handleText(Object resultObject, String value) throws SAXException { if (value.trim().length() == 0) { return; } throw new SAXParseException("text is not accepted: '" + value + "'", null); } protected String[] requiredAttributes() { return requiredAttributes; } protected void setRequiredAttributes(String... required) { requiredAttributes = required; } protected void validate(Object resultObject) throws SAXException { } } public class DependenciesRootElementHandler extends BLDependenciesHandler.ElementHandler { public DependenciesRootElementHandler() { } @Override protected ModelDependencies createObject(Attributes attrs) throws SAXException { return new ModelDependencies(); } @Override protected BLDependenciesHandler.ElementHandler createChild(Object resultObject, String tagName, Attributes attrs) throws SAXException { if ("dependency".equals(tagName)) { myChildHandlersStack.push(new BLDependenciesHandler.ChildHandler() { @Override public void apply(Object resultObject, Object value) throws SAXException { handleChild_757342313568246030(resultObject, value); } }); return dependencyHandler; } return super.createChild(resultObject, tagName, attrs); } private void handleChild_757342313568246030(Object resultObject, Object value) throws SAXException { ModelDependencies result = (ModelDependencies) resultObject; RootDependencies child = (RootDependencies) value; result.addDependencies(child); } } public class DependencyElementHandler extends BLDependenciesHandler.ElementHandler { public DependencyElementHandler() { setRequiredAttributes("className"); } @Override protected RootDependencies createObject(Attributes attrs) throws SAXException { return new RootDependencies(); } @Override protected void handleAttribute(Object resultObject, String name, String value) throws SAXException { RootDependencies result = (RootDependencies) resultObject; if ("className".equals(name)) { result.setClassName(value); return; } if ("file".equals(name)) { result.setFileName(value); return; } super.handleAttribute(resultObject, name, value); } @Override protected BLDependenciesHandler.ElementHandler createChild(Object resultObject, String tagName, Attributes attrs) throws SAXException { if ("classNode".equals(tagName)) { myChildHandlersStack.push(new BLDependenciesHandler.ChildHandler() { @Override public void apply(Object resultObject, Object value) throws SAXException { handleChild_757342313568246045(resultObject, value); } }); return classNodeHandler; } return super.createChild(resultObject, tagName, attrs); } private void handleChild_757342313568246045(Object resultObject, Object value) throws SAXException { RootDependencies result = (RootDependencies) resultObject; Object[] child = (Object[]) value; String s = (String) child[0]; if ((s == null || s.length() == 0)) { return; } if ((Boolean) child[1]) { result.addExtendsNode(s); } else { result.addDependNode(s); } } } public class ClassNodeElementHandler extends BLDependenciesHandler.ElementHandler { public ClassNodeElementHandler() { } @Override protected Object[] createObject(Attributes attrs) throws SAXException { return new Object[2]; } @Override protected void handleAttribute(Object resultObject, String name, String value) throws SAXException { Object[] result = (Object[]) resultObject; if ("dependClassName".equals(name)) { result[0] = InternUtil.intern(value); result[1] = Boolean.FALSE; return; } if ("extendsClassName".equals(name)) { result[0] = InternUtil.intern(value); result[1] = Boolean.TRUE; return; } super.handleAttribute(resultObject, name, value); } } }