package jetbrains.mps.smodel.persistence.def.v7; /*Generated by MPS */ import jetbrains.mps.util.xml.XMLSAXHandler; import java.util.List; import jetbrains.mps.smodel.persistence.lines.LineContent; import java.util.Stack; import org.xml.sax.Locator; import jetbrains.mps.smodel.persistence.def.v5.LineContentAccumulator; import org.xml.sax.SAXException; import org.xml.sax.Attributes; import org.xml.sax.SAXParseException; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.smodel.SNodeId; public class LineToContentMapReader7Handler extends XMLSAXHandler<List<LineContent>> { private LineToContentMapReader7Handler.ModelElementHandler modelHandler = new LineToContentMapReader7Handler.ModelElementHandler(); private LineToContentMapReader7Handler.RootsElementHandler rootsHandler = new LineToContentMapReader7Handler.RootsElementHandler(); private LineToContentMapReader7Handler.RootContentElementHandler rootContentHandler = new LineToContentMapReader7Handler.RootContentElementHandler(); private LineToContentMapReader7Handler.NodeElementHandler nodeHandler = new LineToContentMapReader7Handler.NodeElementHandler(); private LineToContentMapReader7Handler.PropertyElementHandler propertyHandler = new LineToContentMapReader7Handler.PropertyElementHandler(); private LineToContentMapReader7Handler.LinkElementHandler linkHandler = new LineToContentMapReader7Handler.LinkElementHandler(); private LineToContentMapReader7Handler.NullElementHandler nullHandler = new LineToContentMapReader7Handler.NullElementHandler(); private Stack<LineToContentMapReader7Handler.ElementHandler> myHandlersStack = new Stack<LineToContentMapReader7Handler.ElementHandler>(); private Stack<LineToContentMapReader7Handler.ChildHandler> myChildHandlersStack = new Stack<LineToContentMapReader7Handler.ChildHandler>(); private Stack<Object> myValues = new Stack<Object>(); private Locator myLocator; private List<LineContent> myResult; private LineContentAccumulator my_accumulatorField; public LineToContentMapReader7Handler() { } public List<LineContent> getResult() { return myResult; } @Override public void setDocumentLocator(Locator locator) { myLocator = locator; } @Override public void characters(char[] array, int start, int len) throws SAXException { globalHandleText(myValues.firstElement(), new String(array, start, len)); LineToContentMapReader7Handler.ElementHandler current = (myHandlersStack.empty() ? (LineToContentMapReader7Handler.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 { LineToContentMapReader7Handler.ElementHandler current = myHandlersStack.pop(); Object childValue = myValues.pop(); current.validate(childValue); if (myChildHandlersStack.empty()) { myResult = (List<LineContent>) childValue; } else { LineToContentMapReader7Handler.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 { LineToContentMapReader7Handler.ElementHandler current = (myHandlersStack.empty() ? (LineToContentMapReader7Handler.ElementHandler) null : myHandlersStack.peek()); if (current == null) { // root current = modelHandler; } 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 = (List<LineContent>) 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); } public void globalHandleText(Object resultObject, String value) { List<LineContent> result = (List<LineContent>) resultObject; my_accumulatorField.processText(value, myLocator); } 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 LineToContentMapReader7Handler.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 ModelElementHandler extends LineToContentMapReader7Handler.ElementHandler { public ModelElementHandler() { } @Override protected List<LineContent> createObject(Attributes attrs) throws SAXException { my_accumulatorField = new LineContentAccumulator(); return my_accumulatorField.getLineToContentMap(); } @Override protected LineToContentMapReader7Handler.ElementHandler createChild(Object resultObject, String tagName, Attributes attrs) throws SAXException { if ("persistence".equals(tagName)) { myChildHandlersStack.push(null); return nullHandler; } if ("language".equals(tagName)) { myChildHandlersStack.push(null); return nullHandler; } if ("language-engaged-on-generation".equals(tagName)) { myChildHandlersStack.push(null); return nullHandler; } if ("devkit".equals(tagName)) { myChildHandlersStack.push(null); return nullHandler; } if ("import".equals(tagName)) { myChildHandlersStack.push(null); return nullHandler; } if ("roots".equals(tagName)) { myChildHandlersStack.push(null); return rootsHandler; } if ("root".equals(tagName)) { myChildHandlersStack.push(null); return rootContentHandler; } return super.createChild(resultObject, tagName, attrs); } } public class RootsElementHandler extends LineToContentMapReader7Handler.ElementHandler { public RootsElementHandler() { } @Override protected LineToContentMapReader7Handler.ElementHandler createChild(Object resultObject, String tagName, Attributes attrs) throws SAXException { if ("node".equals(tagName)) { myChildHandlersStack.push(new LineToContentMapReader7Handler.ChildHandler() { @Override public void apply(Object resultObject, Object value) throws SAXException { handleChild_5797832288566425574(resultObject, value); } }); return nodeHandler; } return super.createChild(resultObject, tagName, attrs); } private void handleChild_5797832288566425574(Object resultObject, Object value) throws SAXException { SNode child = (SNode) value; my_accumulatorField.popNode(myLocator); } } public class RootContentElementHandler extends LineToContentMapReader7Handler.ElementHandler { public RootContentElementHandler() { } @Override protected void handleAttribute(Object resultObject, String name, String value) throws SAXException { SNode result = (SNode) resultObject; if ("id".equals(name)) { my_accumulatorField.pushNode(SNodeId.fromString(value), myLocator); return; } super.handleAttribute(resultObject, name, value); } @Override protected LineToContentMapReader7Handler.ElementHandler createChild(Object resultObject, String tagName, Attributes attrs) throws SAXException { if ("node".equals(tagName)) { myChildHandlersStack.push(new LineToContentMapReader7Handler.ChildHandler() { @Override public void apply(Object resultObject, Object value) throws SAXException { handleChild_5797832288566425598(resultObject, value); } }); return nodeHandler; } return super.createChild(resultObject, tagName, attrs); } private void handleChild_5797832288566425598(Object resultObject, Object value) throws SAXException { SNode child = (SNode) value; my_accumulatorField.popNode(myLocator); } } public class NodeElementHandler extends LineToContentMapReader7Handler.ElementHandler { public NodeElementHandler() { } @Override protected void handleAttribute(Object resultObject, String name, String value) throws SAXException { SNode result = (SNode) resultObject; if ("id".equals(name)) { my_accumulatorField.pushNode(SNodeId.fromString(value), myLocator); return; } super.handleAttribute(resultObject, name, value); } @Override protected LineToContentMapReader7Handler.ElementHandler createChild(Object resultObject, String tagName, Attributes attrs) throws SAXException { if ("property".equals(tagName)) { myChildHandlersStack.push(new LineToContentMapReader7Handler.ChildHandler() { @Override public void apply(Object resultObject, Object value) throws SAXException { handleChild_5797832288566425627(resultObject, value); } }); return propertyHandler; } if ("link".equals(tagName)) { myChildHandlersStack.push(new LineToContentMapReader7Handler.ChildHandler() { @Override public void apply(Object resultObject, Object value) throws SAXException { handleChild_5797832288566425650(resultObject, value); } }); return linkHandler; } if ("node".equals(tagName)) { myChildHandlersStack.push(new LineToContentMapReader7Handler.ChildHandler() { @Override public void apply(Object resultObject, Object value) throws SAXException { handleChild_5797832288566425695(resultObject, value); } }); return nodeHandler; } return super.createChild(resultObject, tagName, attrs); } private void handleChild_5797832288566425627(Object resultObject, Object value) throws SAXException { String child = (String) value; if (child != null) { my_accumulatorField.saveProperty(child, myLocator); } } private void handleChild_5797832288566425650(Object resultObject, Object value) throws SAXException { String child = (String) value; if (child != null) { my_accumulatorField.saveReference(child, myLocator); } } private void handleChild_5797832288566425695(Object resultObject, Object value) throws SAXException { SNode child = (SNode) value; my_accumulatorField.popNode(myLocator); } } public class PropertyElementHandler extends LineToContentMapReader7Handler.ElementHandler { public PropertyElementHandler() { setRequiredAttributes("name"); } @Override protected String createObject(Attributes attrs) throws SAXException { return attrs.getValue("name"); } } public class LinkElementHandler extends LineToContentMapReader7Handler.ElementHandler { public LinkElementHandler() { setRequiredAttributes("role"); } @Override protected String createObject(Attributes attrs) throws SAXException { return attrs.getValue("role"); } } public class NullElementHandler extends LineToContentMapReader7Handler.ElementHandler { public NullElementHandler() { } } }