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);
}
}
}