import java.util.Arrays;
import java.util.Deque;
import java.util.Iterator;
-import java.util.Map.Entry;
import java.util.NoSuchElementException;
-import java.util.Optional;
import java.util.Queue;
import javax.xml.XMLConstants;
import javax.xml.stream.XMLEventFactory;
import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
final class YinXMLEventReader implements XMLEventReader {
- private static final class OpenElement {
- final Iterator<? extends DeclaredStatement<?>> children;
- final QName name;
-
- OpenElement(final Iterator<? extends DeclaredStatement<?>> children) {
- this.children = requireNonNull(children);
- this.name = null;
- }
-
- OpenElement(final QName name, final Iterator<? extends DeclaredStatement<?>> children) {
- this.children = requireNonNull(children);
- this.name = requireNonNull(name);
+ private record OpenElement(QName name, Iterator<? extends DeclaredStatement<?>> children) {
+ OpenElement {
+ requireNonNull(name);
+ requireNonNull(children);
}
}
final ArgumentDefinition arg = def.getArgumentDefinition().get();
events.add(eventFactory.createStartElement(XMLConstants.DEFAULT_NS_PREFIX, name.getNamespace().toString(),
- name.getLocalName(), singletonIterator(attribute(arg.getArgumentName(), root.rawArgument())),
- transform(namespaceContext.prefixesAndNamespaces().entrySet().iterator(),
- e -> eventFactory.createNamespace(e.getKey(), e.getValue())),
+ name.getLocalName(), singletonIterator(attribute(arg.argumentName(), root.rawArgument())),
+ transform(namespaceContext.importedModules().iterator(),
+ e -> eventFactory.createNamespace(e.getKey(),
+ e.getValue().localQNameModule().getNamespace().toString())),
namespaceContext));
stack.push(new OpenElement(name, root.declaredSubstatements().iterator()));
@Override
public String getElementText() throws XMLStreamException {
- XMLEvent current = peek();
+ var current = peek();
if (current == null) {
throw new XMLStreamException("End of event stream");
}
}
current = next();
- if (!(current instanceof Characters)) {
+ if (!(current instanceof Characters chars)) {
throw new XMLStreamException("Encountered non-text event " + current);
}
- final String ret = ((Characters)current).getData();
+ final String ret = chars.getData();
current = next();
if (!(current instanceof EndElement)) {
@Override
public XMLEvent nextTag() throws XMLStreamException {
- final XMLEvent next = next();
+ final var next = next();
if (next instanceof Characters) {
throw new XMLStreamException("Significant characters encountered: " + next);
}
}
private Attribute attribute(final QName qname, final String value) {
- final Entry<String, String> ns = namespaceContext.prefixAndNamespaceFor(qname.getModule());
+ final var ns = namespaceContext.prefixAndNamespaceFor(qname.getModule());
return eventFactory.createAttribute(ns.getKey(), ns.getValue(), qname.getLocalName(), value);
}
private StartElement startElement(final QName qname) {
- final Entry<String, String> ns = namespaceContext.prefixAndNamespaceFor(qname.getModule());
+ final var ns = namespaceContext.prefixAndNamespaceFor(qname.getModule());
return eventFactory.createStartElement(ns.getKey(), ns.getValue(), qname.getLocalName(), emptyIterator(),
emptyIterator(), namespaceContext);
}
private EndElement endElement(final QName qname) {
- final Entry<String, String> ns = namespaceContext.prefixAndNamespaceFor(qname.getModule());
+ final var ns = namespaceContext.prefixAndNamespaceFor(qname.getModule());
return eventFactory.createEndElement(ns.getKey(), ns.getValue(), qname.getLocalName());
}
private void nextStatement() {
- OpenElement current = stack.peek();
+ final var current = stack.peek();
if (current == null) {
return;
}
do {
- while (current.children.hasNext()) {
- // We have to mind child statement origin and not emit empty implicit children
- final DeclaredStatement<?> child = current.children.next();
- switch (child.statementOrigin()) {
- case CONTEXT:
- final Iterator<? extends DeclaredStatement<?>> it = child.declaredSubstatements().iterator();
- if (it.hasNext()) {
- current = new OpenElement(it);
- }
- break;
- case DECLARATION:
- addStatement(child);
- return;
- default:
- throw new IllegalStateException("Unhandled statement origin " + child.statementOrigin());
- }
+ if (current.children.hasNext()) {
+ addStatement(current.children.next());
+ return;
}
if (current.name != null) {
}
private void addStatement(final DeclaredStatement<?> statement) {
- final StatementDefinition def = statement.statementDefinition();
- final QName name = def.getStatementName();
- final Optional<ArgumentDefinition> optArgDef = def.getArgumentDefinition();
+ final var def = statement.statementDefinition();
+ final var name = def.getStatementName();
+ final var optArgDef = def.getArgumentDefinition();
if (optArgDef.isPresent()) {
- final ArgumentDefinition argDef = optArgDef.get();
- final QName argName = argDef.getArgumentName();
+ final var argDef = optArgDef.orElseThrow();
+ final var argName = argDef.argumentName();
if (argDef.isYinElement()) {
events.addAll(Arrays.asList(startElement(name), startElement(argName),
eventFactory.createCharacters(statement.rawArgument()), endElement(argName)));
} else {
- final Entry<String, String> ns = namespaceContext.prefixAndNamespaceFor(name.getModule());
+ final var ns = namespaceContext.prefixAndNamespaceFor(name.getModule());
events.add(eventFactory.createStartElement(ns.getKey(), ns.getValue(), name.getLocalName(),
singletonIterator(attribute(argName, statement.rawArgument())), emptyIterator(), namespaceContext));
}