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 {
}
}
}