package jetbrains.mps.smodel.persistence.def.v9; /*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.LineContentAccumulator; import org.xml.sax.SAXException; import org.xml.sax.Attributes; import org.xml.sax.SAXParseException; public class AnnotationInfoReader9Handler extends XMLSAXHandler<List<LineContent>> { private AnnotationInfoReader9Handler.ModelElementHandler modelHandler = new AnnotationInfoReader9Handler.ModelElementHandler(); private AnnotationInfoReader9Handler.RegistryElementHandler registryHandler = new AnnotationInfoReader9Handler.RegistryElementHandler(); private AnnotationInfoReader9Handler.Registry_languageElementHandler registry_languageHandler = new AnnotationInfoReader9Handler.Registry_languageElementHandler(); private AnnotationInfoReader9Handler.Registry_conceptElementHandler registry_conceptHandler = new AnnotationInfoReader9Handler.Registry_conceptElementHandler(); private AnnotationInfoReader9Handler.Registry_propertyElementHandler registry_propertyHandler = new AnnotationInfoReader9Handler.Registry_propertyElementHandler(); private AnnotationInfoReader9Handler.Registry_associationElementHandler registry_associationHandler = new AnnotationInfoReader9Handler.Registry_associationElementHandler(); private AnnotationInfoReader9Handler.NodeElementHandler nodeHandler = new AnnotationInfoReader9Handler.NodeElementHandler(); private AnnotationInfoReader9Handler.PropertyElementHandler propertyHandler = new AnnotationInfoReader9Handler.PropertyElementHandler(); private AnnotationInfoReader9Handler.ReferenceElementHandler referenceHandler = new AnnotationInfoReader9Handler.ReferenceElementHandler(); private AnnotationInfoReader9Handler.DefaultElementHandler defaultHandler = new AnnotationInfoReader9Handler.DefaultElementHandler(); private Stack<AnnotationInfoReader9Handler.ElementHandler> myHandlersStack = new Stack<AnnotationInfoReader9Handler.ElementHandler>(); private Stack<AnnotationInfoReader9Handler.ChildHandler> myChildHandlersStack = new Stack<AnnotationInfoReader9Handler.ChildHandler>(); private Stack<Object> myValues = new Stack<Object>(); private Locator myLocator; private List<LineContent> myResult; private IdInfoReadHelper my_readHelperParam; private LineContentAccumulator my_accumulatorField; public AnnotationInfoReader9Handler(IdInfoReadHelper readHelper) { my_readHelperParam = readHelper; } 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)); AnnotationInfoReader9Handler.ElementHandler current = (myHandlersStack.empty() ? (AnnotationInfoReader9Handler.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 { AnnotationInfoReader9Handler.ElementHandler current = myHandlersStack.pop(); Object childValue = myValues.pop(); current.validate(childValue); if (myChildHandlersStack.empty()) { myResult = (List<LineContent>) childValue; } else { AnnotationInfoReader9Handler.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 { AnnotationInfoReader9Handler.ElementHandler current = (myHandlersStack.empty() ? (AnnotationInfoReader9Handler.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 AnnotationInfoReader9Handler.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 AnnotationInfoReader9Handler.ElementHandler { public ModelElementHandler() { } @Override protected List<LineContent> createObject(Attributes attrs) throws SAXException { my_accumulatorField = new LineContentAccumulator(); return my_accumulatorField.getLineToContentMap(); } @Override protected AnnotationInfoReader9Handler.ElementHandler createChild(Object resultObject, String tagName, Attributes attrs) throws SAXException { if ("registry".equals(tagName)) { myChildHandlersStack.push(null); return registryHandler; } if ("node".equals(tagName)) { myChildHandlersStack.push(new AnnotationInfoReader9Handler.ChildHandler() { @Override public void apply(Object resultObject, Object value) throws SAXException { handleChild_4287403191275410481(resultObject, value); } }); return nodeHandler; } myChildHandlersStack.push(null); return defaultHandler; } private void handleChild_4287403191275410481(Object resultObject, Object value) throws SAXException { Void child = (Void) value; my_accumulatorField.popNode(myLocator); } } public class RegistryElementHandler extends AnnotationInfoReader9Handler.ElementHandler { public RegistryElementHandler() { } @Override protected AnnotationInfoReader9Handler.ElementHandler createChild(Object resultObject, String tagName, Attributes attrs) throws SAXException { if ("language".equals(tagName)) { myChildHandlersStack.push(null); return registry_languageHandler; } return super.createChild(resultObject, tagName, attrs); } } public class Registry_languageElementHandler extends AnnotationInfoReader9Handler.ElementHandler { public Registry_languageElementHandler() { setRequiredAttributes("id", "name"); } @Override protected Object createObject(Attributes attrs) throws SAXException { my_readHelperParam.withLanguage(attrs.getValue("id"), attrs.getValue("name")); return null; } @Override protected AnnotationInfoReader9Handler.ElementHandler createChild(Object resultObject, String tagName, Attributes attrs) throws SAXException { if ("concept".equals(tagName)) { myChildHandlersStack.push(null); return registry_conceptHandler; } return super.createChild(resultObject, tagName, attrs); } } public class Registry_conceptElementHandler extends AnnotationInfoReader9Handler.ElementHandler { public Registry_conceptElementHandler() { setRequiredAttributes("id", "name", "index", "flags"); } @Override protected Object createObject(Attributes attrs) throws SAXException { my_readHelperParam.withConcept(attrs.getValue("id"), attrs.getValue("name"), attrs.getValue("index"), attrs.getValue("flags"), null); return null; } @Override protected AnnotationInfoReader9Handler.ElementHandler createChild(Object resultObject, String tagName, Attributes attrs) throws SAXException { if ("property".equals(tagName)) { myChildHandlersStack.push(null); return registry_propertyHandler; } if ("reference".equals(tagName)) { myChildHandlersStack.push(null); return registry_associationHandler; } myChildHandlersStack.push(null); return defaultHandler; } } public class Registry_propertyElementHandler extends AnnotationInfoReader9Handler.ElementHandler { public Registry_propertyElementHandler() { setRequiredAttributes("id", "name", "index"); } @Override protected Object createObject(Attributes attrs) throws SAXException { my_readHelperParam.property(attrs.getValue("id"), attrs.getValue("name"), attrs.getValue("index")); return null; } } public class Registry_associationElementHandler extends AnnotationInfoReader9Handler.ElementHandler { public Registry_associationElementHandler() { setRequiredAttributes("id", "name", "index"); } @Override protected Object createObject(Attributes attrs) throws SAXException { my_readHelperParam.association(attrs.getValue("id"), attrs.getValue("name"), attrs.getValue("index")); return null; } } public class NodeElementHandler extends AnnotationInfoReader9Handler.ElementHandler { public NodeElementHandler() { setRequiredAttributes("id"); } @Override protected void handleAttribute(Object resultObject, String name, String value) throws SAXException { Void result = (Void) resultObject; if ("id".equals(name)) { try { my_accumulatorField.pushNode(my_readHelperParam.getIdEncoder().parseNodeId(value), myLocator); } catch (IdEncoder.EncodingException e) { throw new IllegalArgumentException(e); } return; } super.handleAttribute(resultObject, name, value); } @Override protected AnnotationInfoReader9Handler.ElementHandler createChild(Object resultObject, String tagName, Attributes attrs) throws SAXException { if ("property".equals(tagName)) { myChildHandlersStack.push(new AnnotationInfoReader9Handler.ChildHandler() { @Override public void apply(Object resultObject, Object value) throws SAXException { handleChild_7167172773708891038(resultObject, value); } }); return propertyHandler; } if ("ref".equals(tagName)) { myChildHandlersStack.push(new AnnotationInfoReader9Handler.ChildHandler() { @Override public void apply(Object resultObject, Object value) throws SAXException { handleChild_7167172773708891052(resultObject, value); } }); return referenceHandler; } if ("node".equals(tagName)) { myChildHandlersStack.push(new AnnotationInfoReader9Handler.ChildHandler() { @Override public void apply(Object resultObject, Object value) throws SAXException { handleChild_7167172773708891066(resultObject, value); } }); return nodeHandler; } return super.createChild(resultObject, tagName, attrs); } private void handleChild_7167172773708891038(Object resultObject, Object value) throws SAXException { String child = (String) value; if (child != null) { my_accumulatorField.saveProperty(child, myLocator); } } private void handleChild_7167172773708891052(Object resultObject, Object value) throws SAXException { String child = (String) value; if (child != null) { my_accumulatorField.saveReference(child, myLocator); } } private void handleChild_7167172773708891066(Object resultObject, Object value) throws SAXException { Void child = (Void) value; my_accumulatorField.popNode(myLocator); } } public class PropertyElementHandler extends AnnotationInfoReader9Handler.ElementHandler { public PropertyElementHandler() { setRequiredAttributes("role"); } @Override protected String createObject(Attributes attrs) throws SAXException { return my_readHelperParam.readProperty(attrs.getValue("role")).getName(); } } public class ReferenceElementHandler extends AnnotationInfoReader9Handler.ElementHandler { public ReferenceElementHandler() { setRequiredAttributes("role"); } @Override protected String createObject(Attributes attrs) throws SAXException { return my_readHelperParam.readAssociation(attrs.getValue("role")).getRoleName(); } } public class DefaultElementHandler extends AnnotationInfoReader9Handler.ElementHandler { @Override protected AnnotationInfoReader9Handler.ElementHandler createChild(Object resultObject, String tagName, Attributes attrs) throws SAXException { return this; } @Override protected void handleText(Object resultObject, String value) throws SAXException { } } }