Remove old YIN model exporter 25/79925/3
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 25 Jan 2019 13:03:53 +0000 (14:03 +0100)
committerRobert Varga <nite@hq.sk>
Fri, 25 Jan 2019 15:19:53 +0000 (15:19 +0000)
We have a new implementation for a could of releases, remove
the old one.

JIRA: YANGTOOLS-931
Change-Id: Ie3a6b6cadb803e60f5cef94d625e1c4d3ba67822
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
12 files changed:
yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/ExtensionStatement.java [deleted file]
yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/SchemaContextEmitter.java [deleted file]
yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/SchemaToStatementWriterAdaptor.java [deleted file]
yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/SingleModuleYinStatementWriter.java [deleted file]
yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/StatementTextWriter.java [deleted file]
yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/YangModuleWriter.java [deleted file]
yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/YinExportUtils.java
yang/yang-model-export/src/test/java/org/opendaylight/yangtools/yang/model/export/AbstractYinExportTest.java
yang/yang-model-export/src/test/java/org/opendaylight/yangtools/yang/model/export/Bug5531Test.java
yang/yang-model-export/src/test/java/org/opendaylight/yangtools/yang/model/export/Bug6856Test.java
yang/yang-model-export/src/test/java/org/opendaylight/yangtools/yang/model/export/EffectiveSchemaContextEmitterTest.java [deleted file]
yang/yang-model-export/src/test/java/org/opendaylight/yangtools/yang/model/export/SimpleModuleTest.java

diff --git a/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/ExtensionStatement.java b/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/ExtensionStatement.java
deleted file mode 100644 (file)
index 16b37f4..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.yang.model.export;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition;
-import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
-import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
-
-@Deprecated
-final class ExtensionStatement implements StatementDefinition {
-
-    private final QName argumentName;
-    private final QName statementName;
-    private final boolean yinElement;
-
-    private ExtensionStatement(final ExtensionDefinition def) {
-        statementName = def.getQName();
-        argumentName = def.getArgument() != null ? QName.create(statementName, def.getArgument()) : null;
-        yinElement = def.isYinElement();
-    }
-
-    static StatementDefinition from(final ExtensionDefinition def) {
-        return new ExtensionStatement(def);
-    }
-
-    static Map<QName,StatementDefinition> mapFrom(final Collection<ExtensionDefinition> definitions) {
-        final HashMap<QName,StatementDefinition> ret = new HashMap<>(definitions.size());
-        for (final ExtensionDefinition def : definitions) {
-            final StatementDefinition value = from(def);
-            ret.put(value.getStatementName(), value);
-        }
-        return ret;
-    }
-
-    @Override
-    public QName getArgumentName() {
-        return argumentName;
-    }
-
-    @Override
-    public QName getStatementName() {
-        return statementName;
-    }
-
-    @Override
-    public boolean isArgumentYinElement() {
-        return yinElement;
-    }
-
-    @Override
-    public Class<? extends DeclaredStatement<?>> getDeclaredRepresentationClass() {
-        throw new UnsupportedOperationException("Not defined");
-    }
-
-    @Override
-    public Class<? extends EffectiveStatement<?,?>> getEffectiveRepresentationClass() {
-        throw new UnsupportedOperationException("Not defined");
-    }
-}
diff --git a/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/SchemaContextEmitter.java b/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/SchemaContextEmitter.java
deleted file mode 100644 (file)
index 09d4279..0000000
+++ /dev/null
@@ -1,2223 +0,0 @@
-/*
- * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.yang.model.export;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkState;
-import static java.util.Objects.requireNonNull;
-
-import com.google.common.annotations.Beta;
-import com.google.common.collect.Range;
-import com.google.common.collect.RangeSet;
-import com.google.common.primitives.UnsignedInteger;
-import java.net.URI;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.Set;
-import javax.annotation.concurrent.NotThreadSafe;
-import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.Revision;
-import org.opendaylight.yangtools.yang.common.YangVersion;
-import org.opendaylight.yangtools.yang.model.api.ActionDefinition;
-import org.opendaylight.yangtools.yang.model.api.AnyDataSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
-import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.Deviation;
-import org.opendaylight.yangtools.yang.model.api.DocumentedNode;
-import org.opendaylight.yangtools.yang.model.api.ElementCountConstraint;
-import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition;
-import org.opendaylight.yangtools.yang.model.api.FeatureDefinition;
-import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
-import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
-import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.ModuleImport;
-import org.opendaylight.yangtools.yang.model.api.MustConstraintAware;
-import org.opendaylight.yangtools.yang.model.api.MustDefinition;
-import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
-import org.opendaylight.yangtools.yang.model.api.OperationDefinition;
-import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
-import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.Status;
-import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.UniqueConstraint;
-import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.UsesNode;
-import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
-import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
-import org.opendaylight.yangtools.yang.model.api.meta.StatementSource;
-import org.opendaylight.yangtools.yang.model.api.stmt.ActionStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.AnydataStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.AugmentStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.BaseStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.BodyGroup;
-import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.ContactStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.DataDefinitionContainer;
-import org.opendaylight.yangtools.yang.model.api.stmt.DataDefinitionStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.DeviateStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.DeviationStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.DocumentationGroup;
-import org.opendaylight.yangtools.yang.model.api.stmt.DocumentedConstraintGroup;
-import org.opendaylight.yangtools.yang.model.api.stmt.EnumStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.ErrorAppTagStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.FeatureStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.FractionDigitsStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.IdentityStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.ImportStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.IncludeStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.LeafListStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.LeafStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.LengthStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.LinkageGroup;
-import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.MetaGroup;
-import org.opendaylight.yangtools.yang.model.api.stmt.MinElementsStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.ModifierStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.NotificationStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.OperationGroup;
-import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.OrganizationStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.PathStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.PatternStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.PositionStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.PresenceStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.RangeStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.RefineStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.RevisionGroup;
-import org.opendaylight.yangtools.yang.model.api.stmt.RevisionStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.RpcStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.UniqueStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.UnitsStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.ValueStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement;
-import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition.Bit;
-import org.opendaylight.yangtools.yang.model.api.type.BooleanTypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.type.EmptyTypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair;
-import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
-import org.opendaylight.yangtools.yang.model.api.type.ModifierKind;
-import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
-import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
-import org.opendaylight.yangtools.yang.model.api.type.RangeRestrictedTypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition;
-import org.opendaylight.yangtools.yang.model.util.SchemaNodeUtils;
-
-@Deprecated
-@Beta
-@NotThreadSafe
-abstract class SchemaContextEmitter {
-
-    final YangModuleWriter writer;
-    final boolean emitInstantiated;
-    final boolean emitUses;
-    final Map<QName, StatementDefinition> extensions;
-    final YangVersion yangVersion;
-
-    SchemaContextEmitter(final YangModuleWriter writer, final Map<QName, StatementDefinition> extensions,
-            final YangVersion yangVersion) {
-        this(writer, extensions, yangVersion, false, true);
-    }
-
-    SchemaContextEmitter(final YangModuleWriter writer, final Map<QName, StatementDefinition> extensions,
-            final YangVersion yangVersion, final boolean emitInstantiated, final boolean emitUses) {
-        this.writer = requireNonNull(writer);
-        this.emitInstantiated = emitInstantiated;
-        this.emitUses = emitUses;
-        this.extensions = requireNonNull(extensions);
-        this.yangVersion = yangVersion;
-    }
-
-    static void writeToStatementWriter(final Module module, final SchemaContext ctx,
-            final StatementTextWriter statementWriter, final boolean emitInstantiated) {
-        final YangModuleWriter yangSchemaWriter = SchemaToStatementWriterAdaptor.from(statementWriter);
-        final Map<QName, StatementDefinition> extensions = ExtensionStatement.mapFrom(ctx.getExtensions());
-        if (module instanceof EffectiveStatement && !emitInstantiated) {
-            /*
-             * if module is an effective statement and we don't want to export
-             * instantiated statements (e.g. statements added by uses or
-             * augment) we can get declared form i.e. ModuleStatement and then
-             * use DeclaredSchemaContextEmitter
-             */
-            new DeclaredSchemaContextEmitter(yangSchemaWriter, extensions, module.getYangVersion())
-                .emitModule(((EffectiveStatement<?, ?>) module).getDeclared());
-        } else {
-            /*
-             * if we don't have access to declared form of supplied module or we
-             * want to emit also instantiated statements (e.g. statements added
-             * by uses or augment), we use EffectiveSchemaContextEmitter.
-             */
-            new EffectiveSchemaContextEmitter(yangSchemaWriter, extensions, module.getYangVersion(), emitInstantiated)
-                .emitModule(module);
-        }
-    }
-
-    // FIXME: Probably should be moved to utils bundle.
-    static <T> boolean isPrefix(final Iterable<T> prefix, final Iterable<T> other) {
-        final Iterator<T> prefixIt = prefix.iterator();
-        final Iterator<T> otherIt = other.iterator();
-        while (prefixIt.hasNext()) {
-            if (!otherIt.hasNext()) {
-                return false;
-            }
-            if (!Objects.deepEquals(prefixIt.next(), otherIt.next())) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    static class DeclaredSchemaContextEmitter extends SchemaContextEmitter {
-
-        DeclaredSchemaContextEmitter(final YangModuleWriter writer, final Map<QName, StatementDefinition> extensions,
-                final YangVersion yangVersion) {
-            super(writer, extensions, yangVersion);
-        }
-
-        void emitModule(final DeclaredStatement<?> declaredRootStmt) {
-            if (declaredRootStmt instanceof ModuleStatement) {
-                emitModule((ModuleStatement) declaredRootStmt);
-            } else if (declaredRootStmt instanceof SubmoduleStatement) {
-                emitSubmodule((SubmoduleStatement) declaredRootStmt);
-            } else {
-                throw new UnsupportedOperationException(
-                        String.format("Yin export: unsupported declared statement %s", declaredRootStmt));
-            }
-        }
-
-        private void emitModule(final ModuleStatement module) {
-            super.writer.startModuleNode(module.rawArgument());
-            emitModuleHeader(module);
-            emitLinkageNodes(module);
-            emitMetaNodes(module);
-            emitRevisionNodes(module);
-            emitBodyNodes(module);
-            emitUnknownStatementNodes(module);
-            super.writer.endNode();
-        }
-
-        private void emitModuleHeader(final ModuleStatement input) {
-            emitYangVersionNode(input.getYangVersion());
-            emitNamespace(input.getNamespace());
-            emitPrefixNode(input.getPrefix());
-        }
-
-        private void emitSubmodule(final SubmoduleStatement submodule) {
-            super.writer.startSubmoduleNode(submodule.rawArgument());
-            emitSubmoduleHeaderNodes(submodule);
-            emitLinkageNodes(submodule);
-            emitMetaNodes(submodule);
-            emitRevisionNodes(submodule);
-            emitBodyNodes(submodule);
-            emitUnknownStatementNodes(submodule);
-            super.writer.endNode();
-        }
-
-        private void emitSubmoduleHeaderNodes(final SubmoduleStatement input) {
-            emitYangVersionNode(input.getYangVersion());
-            emitBelongsTo(input.getBelongsTo());
-        }
-
-        private void emitBelongsTo(final BelongsToStatement belongsTo) {
-            super.writer.startBelongsToNode(belongsTo.rawArgument());
-            emitPrefixNode(belongsTo.getPrefix());
-            super.writer.endNode();
-        }
-
-        private void emitMetaNodes(final MetaGroup input) {
-            emitOrganizationNode(input.getOrganization());
-            emitContact(input.getContact());
-            emitDescriptionNode(input.getDescription());
-            emitReferenceNode(input.getReference());
-        }
-
-        private void emitLinkageNodes(final LinkageGroup input) {
-            for (final ImportStatement importNode : input.getImports()) {
-                emitImport(importNode);
-            }
-            for (final IncludeStatement importNode : input.getIncludes()) {
-                emitInclude(importNode);
-            }
-        }
-
-        private void emitRevisionNodes(final RevisionGroup input) {
-            emitRevisions(input.getRevisions());
-        }
-
-        private void emitBodyNodes(final BodyGroup input) {
-
-            for (final org.opendaylight.yangtools.yang.model.api.stmt.ExtensionStatement extension : input
-                    .getExtensions()) {
-                emitExtension(extension);
-            }
-            for (final FeatureStatement definition : input.getFeatures()) {
-                emitFeature(definition);
-            }
-            for (final IdentityStatement identity : input.getIdentities()) {
-                emitIdentity(identity);
-            }
-            for (final DeviationStatement deviation : input.getDeviations()) {
-                emitDeviation(deviation);
-            }
-
-            emitDataNodeContainer(input);
-
-            for (final AugmentStatement augmentation : input.getAugments()) {
-                emitAugment(augmentation);
-            }
-            for (final RpcStatement rpc : input.getRpcs()) {
-                emitRpc(rpc);
-            }
-
-            emitNotifications(input.getNotifications());
-        }
-
-        private void emitDataNodeContainer(final DataDefinitionContainer input) {
-            for (final DataDefinitionStatement child : input.getDataDefinitions()) {
-                emitDataSchemaNode(child);
-            }
-        }
-
-        private void emitDataNodeContainer(final DataDefinitionContainer.WithReusableDefinitions input) {
-            for (final TypedefStatement typedef : input.getTypedefs()) {
-                emitTypedefNode(typedef);
-            }
-            for (final GroupingStatement grouping : input.getGroupings()) {
-                emitGrouping(grouping);
-            }
-            for (final DataDefinitionStatement child : input.getDataDefinitions()) {
-                emitDataSchemaNode(child);
-            }
-        }
-
-        private void emitDataSchemaNode(final DataDefinitionStatement child) {
-            if (child instanceof ContainerStatement) {
-                emitContainer((ContainerStatement) child);
-            } else if (child instanceof LeafStatement) {
-                emitLeaf((LeafStatement) child);
-            } else if (child instanceof LeafListStatement) {
-                emitLeafList((LeafListStatement) child);
-            } else if (child instanceof ListStatement) {
-                emitList((ListStatement) child);
-            } else if (child instanceof ChoiceStatement) {
-                emitChoice((ChoiceStatement) child);
-            } else if (child instanceof AnyxmlStatement) {
-                emitAnyxml((AnyxmlStatement) child);
-            } else if (child instanceof AnydataStatement) {
-                emitAnydata((AnydataStatement) child);
-            } else if (child instanceof UsesStatement) {
-                emitUsesNode((UsesStatement) child);
-            } else {
-                throw new UnsupportedOperationException("Not supported DataStatement type " + child.getClass());
-            }
-        }
-
-        private void emitYangVersionNode(final @Nullable YangVersionStatement yangVersionStatement) {
-            if (yangVersionStatement != null) {
-                super.writer.startYangVersionNode(yangVersionStatement.rawArgument());
-                super.writer.endNode();
-            }
-        }
-
-        private void emitImport(final ImportStatement importNode) {
-            super.writer.startImportNode(importNode.rawArgument());
-            emitDocumentedNode(importNode);
-            emitPrefixNode(importNode.getPrefix());
-            emitRevisionDateNode(importNode.getRevisionDate());
-            super.writer.endNode();
-        }
-
-        private void emitInclude(final IncludeStatement include) {
-            super.writer.startIncludeNode(include.rawArgument());
-            emitDocumentedNode(include);
-            emitRevisionDateNode(include.getRevisionDate());
-            super.writer.endNode();
-        }
-
-        private void emitNamespace(final NamespaceStatement namespaceStatement) {
-            super.writer.startNamespaceNode(requireNonNull(namespaceStatement, "Namespace must not be null").getUri());
-            super.writer.endNode();
-        }
-
-        private void emitPrefixNode(final PrefixStatement prefixStatement) {
-            super.writer.startPrefixNode(requireNonNull(prefixStatement, "Prefix must not be null").rawArgument());
-            super.writer.endNode();
-        }
-
-        private void emitOrganizationNode(final @Nullable OrganizationStatement organizationStatement) {
-            if (organizationStatement != null) {
-                super.writer.startOrganizationNode(organizationStatement.rawArgument());
-                super.writer.endNode();
-            }
-        }
-
-        private void emitContact(final @Nullable ContactStatement contactStatement) {
-            if (contactStatement != null) {
-                super.writer.startContactNode(contactStatement.rawArgument());
-                super.writer.endNode();
-            }
-        }
-
-        private void emitDescriptionNode(final @Nullable DescriptionStatement descriptionStatement) {
-            if (descriptionStatement != null) {
-                super.writer.startDescriptionNode(descriptionStatement.rawArgument());
-                super.writer.endNode();
-            }
-        }
-
-        private void emitReferenceNode(final @Nullable ReferenceStatement referenceStatement) {
-            if (referenceStatement != null) {
-                super.writer.startReferenceNode(referenceStatement.rawArgument());
-                super.writer.endNode();
-            }
-        }
-
-        private void emitUnitsNode(final @Nullable UnitsStatement unitsStatement) {
-            if (unitsStatement != null) {
-                super.writer.startUnitsNode(unitsStatement.rawArgument());
-                super.writer.endNode();
-            }
-        }
-
-        private void emitRevisions(final Collection<? extends RevisionStatement> revisions) {
-            for (final RevisionStatement revisionStatement : revisions) {
-                emitRevision(revisionStatement);
-            }
-        }
-
-        private void emitRevision(final RevisionStatement revision) {
-            super.writer.startRevisionNode(revision.rawArgument());
-            emitDocumentedNode(revision);
-            super.writer.endNode();
-        }
-
-        private void emitRevisionDateNode(final @Nullable RevisionDateStatement revisionDateStatement) {
-            if (revisionDateStatement != null) {
-                super.writer.startRevisionDateNode(revisionDateStatement.rawArgument());
-                super.writer.endNode();
-            }
-        }
-
-        private void emitExtension(final org.opendaylight.yangtools.yang.model.api.stmt.ExtensionStatement extension) {
-            super.writer.startExtensionNode(extension.rawArgument());
-            emitArgument(extension.getArgument());
-            emitDocumentedNodeWithStatus(extension);
-            emitUnknownStatementNodes(extension);
-            super.writer.endNode();
-        }
-
-        private void emitArgument(final @Nullable ArgumentStatement input) {
-            if (input != null) {
-                super.writer.startArgumentNode(input.rawArgument());
-                emitYinElement(input.getYinElement());
-                super.writer.endNode();
-            }
-        }
-
-        private void emitYinElement(final @Nullable YinElementStatement yinElementStatement) {
-            if (yinElementStatement != null) {
-                super.writer.startYinElementNode(yinElementStatement.rawArgument());
-                super.writer.endNode();
-            }
-        }
-
-        private void emitIdentity(final IdentityStatement identity) {
-            super.writer.startIdentityNode(identity.rawArgument());
-            emitBaseIdentities(identity.getBases());
-            emitStatusNode(identity.getStatus());
-            emitDescriptionNode(identity.getDescription());
-            emitReferenceNode(identity.getReference());
-            super.writer.endNode();
-        }
-
-        private void emitBaseIdentities(final Collection<? extends BaseStatement> collection) {
-            for (final BaseStatement baseStmt : collection) {
-                emitBase(baseStmt);
-            }
-        }
-
-        private void emitBase(final BaseStatement baseStmt) {
-            super.writer.startBaseNode(baseStmt.rawArgument());
-            super.writer.endNode();
-        }
-
-        private void emitFeature(final FeatureStatement feature) {
-            super.writer.startFeatureNode(feature.rawArgument());
-            emitIfFeatures(feature.getIfFeatures());
-            emitDocumentedNodeWithStatus(feature);
-            super.writer.endNode();
-        }
-
-        private void emitIfFeatures(final Collection<? extends IfFeatureStatement> ifFeatures) {
-            for (final IfFeatureStatement ifFeatureStatement : ifFeatures) {
-                emitIfFeature(ifFeatureStatement);
-            }
-        }
-
-        private void emitIfFeature(final IfFeatureStatement ifFeature) {
-            super.writer.startIfFeatureNode(ifFeature.rawArgument());
-            super.writer.endNode();
-        }
-
-        private void emitTypedefNode(final TypedefStatement typedef) {
-            super.writer.startTypedefNode(typedef.rawArgument());
-            emitType(typedef.getType());
-            emitUnitsNode(typedef.getUnits());
-            emitDefaultNode(typedef.getDefault());
-            emitStatusNode(typedef.getStatus());
-            emitDescriptionNode(typedef.getDescription());
-            emitReferenceNode(typedef.getReference());
-            emitUnknownStatementNodes(typedef);
-            super.writer.endNode();
-        }
-
-        private void emitType(final TypeStatement typeStatement) {
-            super.writer.startTypeNode(typeStatement.rawArgument());
-            for (final DeclaredStatement<?> typeSubstmt : typeStatement.declaredSubstatements()) {
-                if (typeSubstmt instanceof RangeStatement) {
-                    emitRange((RangeStatement) typeSubstmt);
-                } else if (typeSubstmt instanceof LengthStatement) {
-                    emitLength((LengthStatement) typeSubstmt);
-                } else if (typeSubstmt instanceof PatternStatement) {
-                    emitPattern((PatternStatement) typeSubstmt);
-                } else if (typeSubstmt instanceof FractionDigitsStatement) {
-                    emitFractionDigits((FractionDigitsStatement) typeSubstmt);
-                } else if (typeSubstmt instanceof EnumStatement) {
-                    emitEnum((EnumStatement) typeSubstmt);
-                } else if (typeSubstmt instanceof PathStatement) {
-                    emitPath((PathStatement) typeSubstmt);
-                } else if (typeSubstmt instanceof RequireInstanceStatement) {
-                    emitRequireInstance((RequireInstanceStatement) typeSubstmt);
-                } else if (typeSubstmt instanceof BaseStatement) {
-                    emitBase((BaseStatement) typeSubstmt);
-                } else if (typeSubstmt instanceof BitStatement) {
-                    emitBit((BitStatement) typeSubstmt);
-                } else if (typeSubstmt instanceof TypeStatement) {
-                    emitType((TypeStatement) typeSubstmt);
-                }
-            }
-            super.writer.endNode();
-        }
-
-        private void emitRange(final RangeStatement range) {
-            super.writer.startRangeNode(range.rawArgument());
-            emitDocumentedConstraint(range);
-            super.writer.endNode();
-        }
-
-        private void emitFractionDigits(final FractionDigitsStatement fractionDigits) {
-            super.writer.startFractionDigitsNode(fractionDigits.rawArgument());
-            super.writer.endNode();
-        }
-
-        private void emitLength(final LengthStatement lengthStatement) {
-            super.writer.startLengthNode(lengthStatement.rawArgument());
-            emitDocumentedConstraint(lengthStatement);
-            super.writer.endNode();
-        }
-
-        private void emitPattern(final PatternStatement pattern) {
-            super.writer.startPatternNode(pattern.rawArgument());
-            emitModifier(pattern.getModifierStatement());
-            emitDocumentedConstraint(pattern);
-            super.writer.endNode();
-        }
-
-        private void emitModifier(final ModifierStatement modifierStatement) {
-            if (modifierStatement != null) {
-                super.writer.startModifierNode(modifierStatement.rawArgument());
-                super.writer.endNode();
-            }
-        }
-
-        private void emitDefaultNodes(final Collection<? extends DefaultStatement> collection) {
-            for (final DefaultStatement defaultValue : collection) {
-                emitDefaultNode(defaultValue);
-            }
-        }
-
-        private void emitDefaultNode(final @Nullable DefaultStatement defaultStmt) {
-            if (defaultStmt != null) {
-                super.writer.startDefaultNode(defaultStmt.rawArgument());
-                super.writer.endNode();
-            }
-        }
-
-        private void emitEnum(final EnumStatement enumStmt) {
-            super.writer.startEnumNode(enumStmt.rawArgument());
-            emitDocumentedNodeWithStatus(enumStmt);
-            emitValueNode(enumStmt.getValue());
-            super.writer.endNode();
-        }
-
-        private void emitPath(final PathStatement path) {
-            super.writer.startPathNode(path.rawArgument());
-            super.writer.endNode();
-        }
-
-        private void emitRequireInstance(final RequireInstanceStatement require) {
-            super.writer.startRequireInstanceNode(require.rawArgument());
-            super.writer.endNode();
-        }
-
-        private void emitBit(final BitStatement bit) {
-            super.writer.startBitNode(bit.rawArgument());
-            emitPositionNode(bit.getPosition());
-            emitDocumentedNodeWithStatus(bit);
-            super.writer.endNode();
-        }
-
-        private void emitPositionNode(final @Nullable PositionStatement positionStatement) {
-            if (positionStatement != null) {
-                super.writer.startPositionNode(positionStatement.rawArgument());
-                super.writer.endNode();
-            }
-        }
-
-        private void emitStatusNode(final @Nullable StatusStatement statusStatement) {
-            if (statusStatement != null) {
-                super.writer.startStatusNode(statusStatement.rawArgument());
-                super.writer.endNode();
-            }
-        }
-
-        private void emitConfigNode(final @Nullable ConfigStatement configStatement) {
-            if (configStatement != null) {
-                super.writer.startConfigNode(configStatement.rawArgument());
-                super.writer.endNode();
-            }
-        }
-
-        private void emitMandatoryNode(final @Nullable MandatoryStatement mandatoryStatement) {
-            if (mandatoryStatement != null) {
-                super.writer.startMandatoryNode(mandatoryStatement.rawArgument());
-                super.writer.endNode();
-            }
-        }
-
-        private void emitPresenceNode(final @Nullable PresenceStatement presenceStatement) {
-            if (presenceStatement != null) {
-                super.writer.startPresenceNode(presenceStatement.rawArgument());
-                super.writer.endNode();
-            }
-        }
-
-        private void emitOrderedBy(final @Nullable OrderedByStatement orderedByStatement) {
-            if (orderedByStatement != null) {
-                super.writer.startOrderedByNode(orderedByStatement.rawArgument());
-                super.writer.endNode();
-            }
-        }
-
-        private void emitMust(final @Nullable MustStatement must) {
-            if (must != null) {
-                super.writer.startMustNode(must.rawArgument());
-                emitErrorMessageNode(must.getErrorMessageStatement());
-                emitErrorAppTagNode(must.getErrorAppTagStatement());
-                emitDescriptionNode(must.getDescription());
-                emitReferenceNode(must.getReference());
-                super.writer.endNode();
-            }
-        }
-
-        private void emitErrorMessageNode(final @Nullable ErrorMessageStatement errorMessageStatement) {
-            if (errorMessageStatement != null) {
-                super.writer.startErrorMessageNode(errorMessageStatement.rawArgument());
-                super.writer.endNode();
-            }
-        }
-
-        private void emitErrorAppTagNode(final @Nullable ErrorAppTagStatement errorAppTagStatement) {
-            if (errorAppTagStatement != null) {
-                super.writer.startErrorAppTagNode(errorAppTagStatement.rawArgument());
-                super.writer.endNode();
-            }
-        }
-
-        private void emitMinElementsNode(final @Nullable MinElementsStatement minElementsStatement) {
-            if (minElementsStatement != null) {
-                super.writer.startMinElementsNode(minElementsStatement.rawArgument());
-                super.writer.endNode();
-            }
-        }
-
-        private void emitMaxElementsNode(final @Nullable MaxElementsStatement maxElementsStatement) {
-            if (maxElementsStatement != null) {
-                super.writer.startMaxElementsNode(maxElementsStatement.rawArgument());
-                super.writer.endNode();
-            }
-        }
-
-        private void emitValueNode(final @Nullable ValueStatement valueStatement) {
-            if (valueStatement != null) {
-                super.writer.startValueNode(valueStatement.rawArgument());
-                super.writer.endNode();
-            }
-        }
-
-        private void emitDocumentedNodeWithStatus(final DocumentationGroup.WithStatus input) {
-            emitStatusNode(input.getStatus());
-            emitDocumentedNode(input);
-        }
-
-        private void emitDocumentedNode(final DocumentationGroup input) {
-            emitDescriptionNode(input.getDescription());
-            emitReferenceNode(input.getReference());
-        }
-
-        private void emitDocumentedConstraint(final DocumentedConstraintGroup input) {
-            emitDescriptionNode(input.getDescription());
-            emitReferenceNode(input.getReference());
-            emitErrorMessageNode(input.getErrorMessageStatement());
-            emitErrorAppTagNode(input.getErrorAppTagStatement());
-        }
-
-        private void emitGrouping(final GroupingStatement grouping) {
-            super.writer.startGroupingNode(grouping.rawArgument());
-            emitDocumentedNodeWithStatus(grouping);
-            emitDataNodeContainer(grouping);
-            emitUnknownStatementNodes(grouping);
-            emitNotifications(grouping.getNotifications());
-            emitActions(grouping.getActions());
-            super.writer.endNode();
-
-        }
-
-        private void emitContainer(final ContainerStatement container) {
-            super.writer.startContainerNode(container.rawArgument());
-            emitWhen(container.getWhenStatement());
-            emitMustNodes(container.getMusts());
-            emitIfFeatures(container.getIfFeatures());
-            emitPresenceNode(container.getPresence());
-            emitConfigNode(container.getConfig());
-            emitDocumentedNodeWithStatus(container);
-            emitDataNodeContainer(container);
-            emitUnknownStatementNodes(container);
-            emitNotifications(container.getNotifications());
-            emitActions(container.getActions());
-            super.writer.endNode();
-
-        }
-
-        private void emitLeaf(final LeafStatement leaf) {
-            super.writer.startLeafNode(leaf.rawArgument());
-            emitWhen(leaf.getWhenStatement());
-            emitIfFeatures(leaf.getIfFeatures());
-            emitType(leaf.getType());
-            emitUnitsNode(leaf.getUnits());
-            emitMustNodes(leaf.getMusts());
-            emitDefaultNode(leaf.getDefault());
-            emitConfigNode(leaf.getConfig());
-            emitMandatoryNode(leaf.getMandatory());
-            emitDocumentedNodeWithStatus(leaf);
-            emitUnknownStatementNodes(leaf);
-            super.writer.endNode();
-        }
-
-        private void emitLeafList(final LeafListStatement leafList) {
-            super.writer.startLeafListNode(leafList.rawArgument());
-            emitWhen(leafList.getWhenStatement());
-            emitIfFeatures(leafList.getIfFeatures());
-            emitType(leafList.getType());
-            emitUnitsNode(leafList.getUnits());
-            emitMustNodes(leafList.getMusts());
-            emitConfigNode(leafList.getConfig());
-            emitDefaultNodes(leafList.getDefaults());
-            emitMinElementsNode(leafList.getMinElements());
-            emitMaxElementsNode(leafList.getMaxElements());
-            emitOrderedBy(leafList.getOrderedBy());
-            emitDocumentedNodeWithStatus(leafList);
-            emitUnknownStatementNodes(leafList);
-            super.writer.endNode();
-        }
-
-        private void emitList(final ListStatement list) {
-            super.writer.startListNode(list.rawArgument());
-            emitWhen(list.getWhenStatement());
-            emitIfFeatures(list.getIfFeatures());
-            emitMustNodes(list.getMusts());
-            emitKey(list.getKey());
-            emitUniqueConstraints(list.getUnique());
-            emitConfigNode(list.getConfig());
-            emitMinElementsNode(list.getMinElements());
-            emitMaxElementsNode(list.getMaxElements());
-            emitOrderedBy(list.getOrderedBy());
-            emitDocumentedNodeWithStatus(list);
-            emitDataNodeContainer(list);
-            emitUnknownStatementNodes(list);
-            emitNotifications(list.getNotifications());
-            emitActions(list.getActions());
-            super.writer.endNode();
-        }
-
-        private void emitMustNodes(final Collection<? extends MustStatement> collection) {
-            for (final MustStatement must : collection) {
-                emitMust(must);
-            }
-        }
-
-        private void emitKey(final KeyStatement keyStatement) {
-            if (keyStatement != null) {
-                super.writer.startKeyNode(keyStatement.rawArgument());
-                super.writer.endNode();
-            }
-        }
-
-        private void emitUniqueConstraints(final Collection<? extends UniqueStatement> collection) {
-            for (final UniqueStatement uniqueConstraint : collection) {
-                emitUnique(uniqueConstraint);
-            }
-        }
-
-        private void emitUnique(final UniqueStatement uniqueConstraint) {
-            if (uniqueConstraint != null) {
-                super.writer.startUniqueNode(uniqueConstraint.rawArgument());
-                super.writer.endNode();
-            }
-        }
-
-        private void emitChoice(final ChoiceStatement choice) {
-            super.writer.startChoiceNode(choice.rawArgument());
-            emitWhen(choice.getWhenStatement());
-            emitIfFeatures(choice.getIfFeatures());
-            emitDefaultNode(choice.getDefault());
-            emitConfigNode(choice.getConfig());
-            emitMandatoryNode(choice.getMandatory());
-            emitDocumentedNodeWithStatus(choice);
-            emitCases(choice.getCases());
-            emitUnknownStatementNodes(choice);
-            super.writer.endNode();
-        }
-
-        private void emitShortCases(final Collection<? extends DeclaredStatement<?>> declaredSubstatements) {
-            for (final DeclaredStatement<?> child : declaredSubstatements) {
-                if (child instanceof ContainerStatement) {
-                    emitContainer((ContainerStatement) child);
-                } else if (child instanceof LeafStatement) {
-                    emitLeaf((LeafStatement) child);
-                } else if (child instanceof LeafListStatement) {
-                    emitLeafList((LeafListStatement) child);
-                } else if (child instanceof ListStatement) {
-                    emitList((ListStatement) child);
-                } else if (child instanceof ChoiceStatement) {
-                    emitChoice((ChoiceStatement) child);
-                } else if (child instanceof AnyxmlStatement) {
-                    emitAnyxml((AnyxmlStatement) child);
-                } else if (child instanceof AnydataStatement) {
-                    emitAnydata((AnydataStatement) child);
-                }
-            }
-        }
-
-        private void emitCases(final Collection<? extends CaseStatement> cases) {
-            for (final CaseStatement caze : cases) {
-                if (isExplicitStatement(caze)) {
-                    emitCaseNode(caze);
-                } else {
-                    final Collection<? extends DeclaredStatement<?>> shortCaseChilds = caze.declaredSubstatements();
-                    checkState(shortCaseChilds.size() == 1, "Only one child is allowed for each short case node");
-                    emitShortCases(shortCaseChilds);
-                }
-            }
-        }
-
-        private void emitCaseNode(final CaseStatement caze) {
-            super.writer.startCaseNode(caze.rawArgument());
-            emitWhen(caze.getWhenStatement());
-            emitIfFeatures(caze.getIfFeatures());
-            emitDocumentedNodeWithStatus(caze);
-            emitDataNodeContainer(caze);
-            emitUnknownStatementNodes(caze);
-            super.writer.endNode();
-        }
-
-        private void emitAnyxml(final AnyxmlStatement anyxml) {
-            super.writer.startAnyxmlNode(anyxml.rawArgument());
-            emitDocumentedNodeWithStatus(anyxml);
-            emitWhen(anyxml.getWhenStatement());
-            emitIfFeatures(anyxml.getIfFeatures());
-            emitMustNodes(anyxml.getMusts());
-            emitConfigNode(anyxml.getConfig());
-            emitMandatoryNode(anyxml.getMandatory());
-            emitDocumentedNodeWithStatus(anyxml);
-            emitUnknownStatementNodes(anyxml);
-            super.writer.endNode();
-        }
-
-        private void emitAnydata(final AnydataStatement anydata) {
-            super.writer.startAnydataNode(anydata.rawArgument());
-            emitWhen(anydata.getWhenStatement());
-            emitIfFeatures(anydata.getIfFeatures());
-            emitMustNodes(anydata.getMusts());
-            emitConfigNode(anydata.getConfig());
-            emitMandatoryNode(anydata.getMandatory());
-            emitDocumentedNodeWithStatus(anydata);
-            emitUnknownStatementNodes(anydata);
-            super.writer.endNode();
-        }
-
-        private void emitUsesNode(final UsesStatement uses) {
-            super.writer.startUsesNode(uses.rawArgument());
-            emitWhen(uses.getWhenStatement());
-            emitIfFeatures(uses.getIfFeatures());
-            emitDocumentedNodeWithStatus(uses);
-            for (final RefineStatement refine : uses.getRefines()) {
-                emitRefine(refine);
-            }
-            for (final AugmentStatement aug : uses.getAugments()) {
-                emitUsesAugmentNode(aug);
-            }
-            super.writer.endNode();
-        }
-
-        private void emitRefine(final RefineStatement refine) {
-            super.writer.startRefineNode(refine.rawArgument());
-            emitDocumentedNode(refine);
-            emitIfFeatures(refine.getIfFeatures());
-            emitMustNodes(refine.getMusts());
-            emitPresenceNode(refine.getPresence());
-            emitDefaultNodes(refine.getDefaults());
-            emitConfigNode(refine.getConfig());
-            emitMandatoryNode(refine.getMandatory());
-            emitMinElementsNode(refine.getMinElements());
-            emitMaxElementsNode(refine.getMaxElements());
-            super.writer.endNode();
-        }
-
-        private void emitUsesAugmentNode(final AugmentStatement aug) {
-            /**
-             * differs only in location in schema, otherwise currently (as of
-             * RFC6020) it is same, so we could freely reuse path.
-             */
-            emitAugment(aug);
-        }
-
-        private void emitAugment(final AugmentStatement augmentation) {
-            super.writer.startAugmentNode(augmentation.rawArgument());
-            emitIfFeatures(augmentation.getIfFeatures());
-            emitWhen(augmentation.getWhenStatement());
-            emitDocumentedNodeWithStatus(augmentation);
-            emitDataNodeContainer(augmentation);
-            emitCases(augmentation.getCases());
-            emitUnknownStatementNodes(augmentation);
-            emitNotifications(augmentation.getNotifications());
-            emitActions(augmentation.getActions());
-            super.writer.endNode();
-        }
-
-        private void emitUnknownStatementNodes(final DeclaredStatement<?> declaredStmt) {
-            declaredStmt.streamDeclaredSubstatements(UnknownStatement.class).forEach(this::emitUnknownStatementNode);
-        }
-
-        private void emitUnknownStatementNode(final UnknownStatement<?> unknonwnStmt) {
-            final StatementDefinition def = unknonwnStmt.statementDefinition();
-            if (def.getArgumentName() == null) {
-                super.writer.startUnknownNode(def);
-            } else {
-                super.writer.startUnknownNode(def, unknonwnStmt.rawArgument());
-            }
-            emitUnknownStatementNodes(unknonwnStmt);
-            super.writer.endNode();
-        }
-
-        private void emitWhen(final WhenStatement whenStatement) {
-            if (whenStatement != null) {
-                super.writer.startWhenNode(whenStatement.rawArgument());
-                emitDocumentedNode(whenStatement);
-                super.writer.endNode();
-            }
-        }
-
-        private void emitRpc(final RpcStatement rpc) {
-            super.writer.startRpcNode(rpc.rawArgument());
-            emitOperationBody(rpc);
-            emitUnknownStatementNodes(rpc);
-            super.writer.endNode();
-        }
-
-        private void emitOperationBody(final OperationGroup operationStmt) {
-            emitIfFeatures(operationStmt.getIfFeatures());
-            emitStatusNode(operationStmt.getStatus());
-            emitDescriptionNode(operationStmt.getDescription());
-            emitReferenceNode(operationStmt.getReference());
-
-            for (final TypedefStatement typedef : operationStmt.getTypedefs()) {
-                emitTypedefNode(typedef);
-            }
-            for (final GroupingStatement grouping : operationStmt.getGroupings()) {
-                emitGrouping(grouping);
-            }
-            emitInput(operationStmt.getInput());
-            emitOutput(operationStmt.getOutput());
-        }
-
-        private void emitActions(final Collection<? extends ActionStatement> collection) {
-            for (final ActionStatement actionDefinition : collection) {
-                emitAction(actionDefinition);
-            }
-        }
-
-        private void emitAction(final ActionStatement actionDefinition) {
-            super.writer.startActionNode(actionDefinition.rawArgument());
-            emitOperationBody(actionDefinition);
-            emitUnknownStatementNodes(actionDefinition);
-            super.writer.endNode();
-        }
-
-        private void emitInput(final InputStatement inputStatement) {
-            if (isExplicitStatement(inputStatement)) {
-                super.writer.startInputNode();
-                emitMustNodes(inputStatement.getMusts());
-                emitDataNodeContainer(inputStatement);
-                emitUnknownStatementNodes(inputStatement);
-                super.writer.endNode();
-            }
-        }
-
-        private void emitOutput(final OutputStatement output) {
-            if (isExplicitStatement(output)) {
-                super.writer.startOutputNode();
-                emitMustNodes(output.getMusts());
-                emitDataNodeContainer(output);
-                emitUnknownStatementNodes(output);
-                super.writer.endNode();
-            }
-        }
-
-        private static boolean isExplicitStatement(final DeclaredStatement<?> stmt) {
-            return stmt != null && stmt.getStatementSource() == StatementSource.DECLARATION;
-        }
-
-        private void emitNotifications(final Collection<? extends NotificationStatement> collection) {
-            for (final NotificationStatement notification : collection) {
-                emitNotificationNode(notification);
-            }
-        }
-
-        private void emitNotificationNode(final NotificationStatement notification) {
-            super.writer.startNotificationNode(notification.rawArgument());
-            emitIfFeatures(notification.getIfFeatures());
-            emitMustNodes(notification.getMusts());
-            emitDocumentedNodeWithStatus(notification);
-            emitDataNodeContainer(notification);
-            emitUnknownStatementNodes(notification);
-            super.writer.endNode();
-        }
-
-        private void emitDeviation(final DeviationStatement deviation) {
-            super.writer.startDeviationNode(deviation.rawArgument());
-            emitDeviateStatements(deviation.getDeviateStatements());
-            emitUnknownStatementNodes(deviation);
-            super.writer.endNode();
-        }
-
-        private void emitDeviateStatements(final Collection<? extends DeviateStatement> deviateStatements) {
-            for (final DeviateStatement deviateStatement : deviateStatements) {
-                emitDeviate(deviateStatement);
-            }
-        }
-
-        private void emitDeviate(final DeviateStatement deviateStatement) {
-            super.writer.startDeviateNode(deviateStatement.rawArgument());
-            /*
-             * :FIXME Currently, DeviateStatementImpl contains implementation
-             * for all deviate types (i.e. add, replace, delete). However it
-             * would be better to create subinterfaces of DeviateStatement for
-             * each deviate type (i.e. AddDeviateStatement,
-             * ReplaceDeviateStatement,..) and create argument specific supports
-             * (i.e. definitions) for each deviate type (very similarly like by
-             * TypeStatement).
-             */
-            for (final DeclaredStatement<?> child : deviateStatement.declaredSubstatements()) {
-                if (child instanceof MustStatement) {
-                    emitMust((MustStatement) child);
-                } else if (child instanceof DefaultStatement) {
-                    emitDefaultNode((DefaultStatement) child);
-                } else if (child instanceof UniqueStatement) {
-                    emitUnique((UniqueStatement) child);
-                } else if (child instanceof UnitsStatement) {
-                    emitUnitsNode((UnitsStatement) child);
-                } else if (child instanceof TypeStatement) {
-                    emitType((TypeStatement) child);
-                } else if (child instanceof MinElementsStatement) {
-                    emitMinElementsNode((MinElementsStatement) child);
-                } else if (child instanceof MaxElementsStatement) {
-                    emitMaxElementsNode((MaxElementsStatement) child);
-                } else if (child instanceof MandatoryStatement) {
-                    emitMandatoryNode((MandatoryStatement) child);
-                } else if (child instanceof ConfigStatement) {
-                    emitConfigNode((ConfigStatement) child);
-                } else if (child instanceof UnknownStatement) {
-                    emitUnknownStatementNode((UnknownStatement<?>) child);
-                }
-            }
-            super.writer.endNode();
-        }
-    }
-
-    static class EffectiveSchemaContextEmitter extends SchemaContextEmitter {
-
-        EffectiveSchemaContextEmitter(final YangModuleWriter writer, final Map<QName, StatementDefinition> extensions,
-                final YangVersion yangVersion, final boolean emitInstantiated) {
-            super(writer, extensions, yangVersion, emitInstantiated, true);
-        }
-
-        void emitModule(final Module input) {
-            super.writer.startModuleNode(input.getName());
-            emitModuleHeader(input);
-            emitLinkageNodes(input);
-            emitMetaNodes(input);
-            emitRevisionNodes(input);
-            emitBodyNodes(input);
-            super.writer.endNode();
-        }
-
-        private void emitModuleHeader(final Module input) {
-            emitYangVersionNode(input.getYangVersion());
-            emitNamespace(input.getNamespace());
-            emitPrefixNode(input.getPrefix());
-        }
-
-        @SuppressWarnings("unused")
-        private void emitSubmodule(final String input) {
-            /*
-             * FIXME: BUG-2444: Implement submodule export
-             *
-             * submoduleHeaderNodes linkageNodes metaNodes revisionNodes
-             * bodyNodes super.writer.endNode();
-             */
-        }
-
-        @SuppressWarnings("unused")
-        private void emitSubmoduleHeaderNodes(final Module input) {
-            /*
-             * FIXME: BUG-2444: Implement submodule headers properly
-             *
-             * :yangVersionNode //Optional
-             *
-             * :belongsToNode
-             */
-        }
-
-        private void emitMetaNodes(final Module input) {
-            input.getOrganization().ifPresent(this::emitOrganizationNode);
-            input.getContact().ifPresent(this::emitContact);
-            emitDocumentedNode(input);
-        }
-
-        private void emitLinkageNodes(final Module input) {
-            for (final ModuleImport importNode : input.getImports()) {
-                emitImport(importNode);
-            }
-            /*
-             * FIXME: BUG-2444: Emit include statements
-             */
-        }
-
-        private void emitRevisionNodes(final Module input) {
-            /*
-             * FIXME: BUG-2444: emit revisions properly, when parsed model will
-             * provide enough information
-             */
-            input.getRevision().ifPresent(this::emitRevision);
-        }
-
-        private void emitBodyNodes(final Module input) {
-
-            for (final ExtensionDefinition extension : input.getExtensionSchemaNodes()) {
-                emitExtension(extension);
-            }
-            for (final FeatureDefinition definition : input.getFeatures()) {
-                emitFeature(definition);
-            }
-            for (final IdentitySchemaNode identity : input.getIdentities()) {
-                emitIdentity(identity);
-            }
-            for (final Deviation deviation : input.getDeviations()) {
-                emitDeviation(deviation);
-            }
-
-            emitDataNodeContainer(input);
-
-            for (final AugmentationSchemaNode augmentation : input.getAugmentations()) {
-                emitAugment(augmentation);
-            }
-            for (final RpcDefinition rpc : input.getRpcs()) {
-                emitRpc(rpc);
-            }
-
-            emitNotifications(input.getNotifications());
-        }
-
-        private void emitDataNodeContainer(final DataNodeContainer input) {
-            for (final TypeDefinition<?> typedef : input.getTypeDefinitions()) {
-                emitTypedefNode(typedef);
-            }
-            for (final GroupingDefinition grouping : input.getGroupings()) {
-                emitGrouping(grouping);
-            }
-            for (final DataSchemaNode child : input.getChildNodes()) {
-                emitDataSchemaNode(child);
-            }
-            for (final UsesNode usesNode : input.getUses()) {
-                emitUsesNode(usesNode);
-            }
-        }
-
-        private void emitDataSchemaNode(final DataSchemaNode child) {
-            if (!super.emitInstantiated && (child.isAddedByUses() || child.isAugmenting())) {
-                // We skip instantiated nodes.
-                return;
-            }
-
-            if (child instanceof ContainerSchemaNode) {
-                emitContainer((ContainerSchemaNode) child);
-            } else if (child instanceof LeafSchemaNode) {
-                emitLeaf((LeafSchemaNode) child);
-            } else if (child instanceof LeafListSchemaNode) {
-                emitLeafList((LeafListSchemaNode) child);
-            } else if (child instanceof ListSchemaNode) {
-                emitList((ListSchemaNode) child);
-            } else if (child instanceof ChoiceSchemaNode) {
-                emitChoice((ChoiceSchemaNode) child);
-            } else if (child instanceof AnyXmlSchemaNode) {
-                emitAnyxml((AnyXmlSchemaNode) child);
-            } else if (child instanceof AnyDataSchemaNode) {
-                emitAnydata((AnyDataSchemaNode) child);
-            } else {
-                throw new UnsupportedOperationException("Not supported DataSchemaNode type " + child.getClass());
-            }
-        }
-
-        private void emitYangVersionNode(final YangVersion input) {
-            super.writer.startYangVersionNode(input.toString());
-            super.writer.endNode();
-        }
-
-        private void emitImport(final ModuleImport importNode) {
-            super.writer.startImportNode(importNode.getModuleName());
-            emitDocumentedNode(importNode);
-            emitPrefixNode(importNode.getPrefix());
-            importNode.getRevision().ifPresent(this::emitRevisionDateNode);
-            super.writer.endNode();
-        }
-
-        @SuppressWarnings("unused")
-        private void emitInclude(final String input) {
-            /*
-             * FIXME: BUG-2444: Implement proper export of include statements
-             * startIncludeNode(IdentifierHelper.getIdentifier(String :input));
-             *
-             *
-             * :revisionDateNode :super.writer.endNode();)
-             */
-        }
-
-        private void emitNamespace(final URI uri) {
-            super.writer.startNamespaceNode(uri);
-            super.writer.endNode();
-
-        }
-
-        private void emitPrefixNode(final String input) {
-            super.writer.startPrefixNode(input);
-            super.writer.endNode();
-
-        }
-
-        @SuppressWarnings("unused")
-        private void emitBelongsTo(final String input) {
-            /*
-             * FIXME: BUG-2444: Implement proper export of belongs-to statements
-             * startIncludeNode(IdentifierHelper.getIdentifier(String :input));
-             *
-             *
-             * :super.writer.startBelongsToNode(IdentifierHelper.getIdentifier(
-             * String :input));
-             *
-             *
-             * :prefixNode :super.writer.endNode();
-             *
-             */
-
-        }
-
-        private void emitOrganizationNode(final String input) {
-            super.writer.startOrganizationNode(input);
-            super.writer.endNode();
-        }
-
-        private void emitContact(final String input) {
-            super.writer.startContactNode(input);
-            super.writer.endNode();
-        }
-
-        private void emitDescriptionNode(final String input) {
-            super.writer.startDescriptionNode(input);
-            super.writer.endNode();
-        }
-
-        private void emitReferenceNode(final String input) {
-            super.writer.startReferenceNode(input);
-            super.writer.endNode();
-        }
-
-        private void emitUnitsNode(final @Nullable String input) {
-            super.writer.startUnitsNode(input);
-            super.writer.endNode();
-        }
-
-        private void emitRevision(final Revision date) {
-            if (date != null) {
-                super.writer.startRevisionNode(date);
-
-                // FIXME: BUG-2444: FIXME: BUG-2444: BUG-2417: descriptionNode
-                // //FIXME: BUG-2444: Optional
-                // FIXME: BUG-2444: FIXME: BUG-2444: BUG-2417: referenceNode
-                // //FIXME: BUG-2444: Optional
-                super.writer.endNode();
-            }
-        }
-
-        private void emitRevisionDateNode(final Revision date) {
-            super.writer.startRevisionDateNode(date);
-            super.writer.endNode();
-        }
-
-        private void emitExtension(final ExtensionDefinition extension) {
-            super.writer.startExtensionNode(extension.getQName());
-            emitArgument(extension.getArgument(), extension.isYinElement());
-            emitDocumentedNode(extension);
-            emitUnknownStatementNodes(extension.getUnknownSchemaNodes());
-            super.writer.endNode();
-
-        }
-
-        private void emitArgument(final @Nullable String input, final boolean yinElement) {
-            if (input != null) {
-                super.writer.startArgumentNode(input);
-                emitYinElement(yinElement);
-                super.writer.endNode();
-            }
-
-        }
-
-        private void emitYinElement(final boolean yinElement) {
-            super.writer.startYinElementNode(yinElement);
-            super.writer.endNode();
-
-        }
-
-        private void emitIdentity(final IdentitySchemaNode identity) {
-            super.writer.startIdentityNode(identity.getQName());
-            emitBaseIdentities(identity.getBaseIdentities());
-            emitDocumentedNode(identity);
-            super.writer.endNode();
-        }
-
-        private void emitBaseIdentities(final Set<IdentitySchemaNode> identities) {
-            for (final IdentitySchemaNode identitySchemaNode : identities) {
-                emitBase(identitySchemaNode.getQName());
-            }
-        }
-
-        private void emitBase(final QName qname) {
-            super.writer.startBaseNode(qname);
-            super.writer.endNode();
-        }
-
-        private void emitFeature(final FeatureDefinition definition) {
-            super.writer.startFeatureNode(definition.getQName());
-
-            // FIXME: BUG-2444: FIXME: BUG-2444: Expose ifFeature
-            // *(ifFeatureNode )
-            emitDocumentedNode(definition);
-            super.writer.endNode();
-        }
-
-        @SuppressWarnings("unused")
-        private void emitIfFeature(final String input) {
-            /*
-             * FIXME: BUG-2444: Implement proper export of include statements
-             * startIncludeNode(IdentifierHelper.getIdentifier(String :input));
-             *
-             */
-        }
-
-        private void emitTypedefNode(final TypeDefinition<?> typedef) {
-            super.writer.startTypedefNode(typedef.getQName());
-            // Differentiate between derived type and existing type
-            // name.
-            emitTypeNodeDerived(typedef);
-            typedef.getUnits().ifPresent(this::emitUnitsNode);
-            typedef.getDefaultValue().ifPresent(this::emitDefaultNode);
-            emitDocumentedNode(typedef);
-            emitUnknownStatementNodes(typedef.getUnknownSchemaNodes());
-            super.writer.endNode();
-        }
-
-        private void emitTypeNode(final SchemaPath parentPath, final TypeDefinition<?> subtype) {
-            final SchemaPath path = subtype.getPath();
-            if (isPrefix(parentPath.getPathFromRoot(), path.getPathFromRoot())) {
-                emitTypeNodeDerived(subtype);
-            } else {
-                emitTypeNodeReferenced(subtype);
-            }
-        }
-
-        private void emitTypeNodeReferenced(final TypeDefinition<?> typeDefinition) {
-            super.writer.startTypeNode(typeDefinition.getQName());
-            super.writer.endNode();
-
-        }
-
-        private void emitTypeNodeDerived(final TypeDefinition<?> typeDefinition) {
-            final TypeDefinition<?> b = typeDefinition.getBaseType();
-            final TypeDefinition<?> baseType = b == null ? typeDefinition : b;
-            super.writer.startTypeNode(baseType.getQName());
-            emitTypeBodyNodes(typeDefinition);
-            super.writer.endNode();
-
-        }
-
-        private void emitTypeBodyNodes(final TypeDefinition<?> typeDef) {
-            if (typeDef instanceof DecimalTypeDefinition) {
-                emitDecimal64Specification((DecimalTypeDefinition) typeDef);
-            } else if (typeDef instanceof RangeRestrictedTypeDefinition) {
-                emitRangeRestrictedSpecification((RangeRestrictedTypeDefinition<?, ?>) typeDef);
-            } else if (typeDef instanceof StringTypeDefinition) {
-                emitStringRestrictions((StringTypeDefinition) typeDef);
-            } else if (typeDef instanceof EnumTypeDefinition) {
-                emitEnumSpecification((EnumTypeDefinition) typeDef);
-            } else if (typeDef instanceof LeafrefTypeDefinition) {
-                emitLeafrefSpecification((LeafrefTypeDefinition) typeDef);
-            } else if (typeDef instanceof IdentityrefTypeDefinition) {
-                emitIdentityrefSpecification((IdentityrefTypeDefinition) typeDef);
-            } else if (typeDef instanceof InstanceIdentifierTypeDefinition) {
-                emitInstanceIdentifierSpecification((InstanceIdentifierTypeDefinition) typeDef);
-            } else if (typeDef instanceof BitsTypeDefinition) {
-                emitBitsSpecification((BitsTypeDefinition) typeDef);
-            } else if (typeDef instanceof UnionTypeDefinition) {
-                emitUnionSpecification((UnionTypeDefinition) typeDef);
-            } else if (typeDef instanceof BinaryTypeDefinition) {
-                ((BinaryTypeDefinition) typeDef).getLengthConstraint().ifPresent(this::emitLength);
-            } else if (typeDef instanceof BooleanTypeDefinition || typeDef instanceof EmptyTypeDefinition) {
-                // NOOP
-            } else {
-                throw new IllegalArgumentException("Not supported type " + typeDef.getClass());
-            }
-        }
-
-        private void emitRangeRestrictedSpecification(final RangeRestrictedTypeDefinition<?, ?> typeDef) {
-            typeDef.getRangeConstraint().ifPresent(this::emitRangeNode);
-        }
-
-        private void emitRangeNode(final RangeConstraint<?> constraint) {
-            super.writer.startRangeNode(toRangeString(constraint.getAllowedRanges()));
-            constraint.getErrorMessage().ifPresent(this::emitErrorMessageNode);
-            constraint.getErrorAppTag().ifPresent(this::emitErrorAppTagNode);
-            emitDocumentedNode(constraint);
-            super.writer.endNode();
-        }
-
-        private void emitDecimal64Specification(final DecimalTypeDefinition typeDefinition) {
-            emitFranctionDigitsNode(typeDefinition.getFractionDigits());
-            emitRangeRestrictedSpecification(typeDefinition);
-        }
-
-        private void emitFranctionDigitsNode(final Integer fractionDigits) {
-            super.writer.startFractionDigitsNode(fractionDigits);
-            super.writer.endNode();
-        }
-
-        private void emitStringRestrictions(final StringTypeDefinition typeDef) {
-            typeDef.getLengthConstraint().ifPresent(this::emitLength);
-
-            for (final PatternConstraint pattern : typeDef.getPatternConstraints()) {
-                emitPatternNode(pattern);
-            }
-        }
-
-        private void emitLength(final LengthConstraint constraint) {
-            super.writer.startLengthNode(toLengthString(constraint.getAllowedRanges()));
-            constraint.getErrorMessage().ifPresent(this::emitErrorMessageNode);
-            constraint.getErrorAppTag().ifPresent(this::emitErrorAppTagNode);
-            emitDocumentedNode(constraint);
-            super.writer.endNode();
-        }
-
-        private static String toLengthString(final RangeSet<Integer> ranges) {
-            final Iterator<Range<Integer>> it = ranges.asRanges().iterator();
-            if (!it.hasNext()) {
-                return "";
-            }
-
-            final StringBuilder sb = new StringBuilder();
-            boolean haveNext;
-            do {
-                final Range<Integer> current = it.next();
-                haveNext = it.hasNext();
-                appendRange(sb, current.lowerEndpoint(), current.upperEndpoint(), haveNext);
-            } while (haveNext);
-
-            return sb.toString();
-        }
-
-        private static String toRangeString(final RangeSet<?> ranges) {
-            final Iterator<? extends Range<?>> it = ranges.asRanges().iterator();
-            if (!it.hasNext()) {
-                return "";
-            }
-
-            final StringBuilder sb = new StringBuilder();
-            boolean haveNext;
-            do {
-                final Range<?> current = it.next();
-                haveNext = it.hasNext();
-                appendRange(sb, current.lowerEndpoint(), current.upperEndpoint(), haveNext);
-            } while (haveNext);
-
-            return sb.toString();
-        }
-
-        private static void appendRange(final StringBuilder sb, final Object min, final Object max,
-                final boolean haveNext) {
-            sb.append(min);
-            if (!min.equals(max)) {
-                sb.append("..");
-                sb.append(max);
-            }
-            if (haveNext) {
-                sb.append('|');
-            }
-        }
-
-        private void emitPatternNode(final PatternConstraint pattern) {
-            super.writer.startPatternNode(pattern.getRegularExpressionString());
-            pattern.getErrorMessage().ifPresent(this::emitErrorMessageNode);
-            pattern.getErrorAppTag().ifPresent(this::emitErrorAppTagNode);
-            emitDocumentedNode(pattern);
-            pattern.getModifier().ifPresent(this::emitModifier);
-            super.writer.endNode();
-        }
-
-        private void emitModifier(final ModifierKind modifier) {
-            super.writer.startModifierNode(modifier);
-            super.writer.endNode();
-        }
-
-        private void emitDefaultNodes(final Collection<? extends Object> defaults) {
-            for (final Object defaultValue : defaults) {
-                emitDefaultNode(defaultValue);
-            }
-        }
-
-        private void emitDefaultNode(final @Nullable Object object) {
-            super.writer.startDefaultNode(object.toString());
-            super.writer.endNode();
-        }
-
-        private void emitEnumSpecification(final EnumTypeDefinition typeDefinition) {
-            for (final EnumPair enumValue : typeDefinition.getValues()) {
-                emitEnumNode(enumValue);
-            }
-        }
-
-        private void emitEnumNode(final EnumPair enumValue) {
-            super.writer.startEnumNode(enumValue.getName());
-            emitValueNode(enumValue.getValue());
-            emitDocumentedNode(enumValue);
-            super.writer.endNode();
-        }
-
-        private void emitLeafrefSpecification(final LeafrefTypeDefinition typeDefinition) {
-            emitPathNode(typeDefinition.getPathStatement());
-            if (YangVersion.VERSION_1_1 == super.yangVersion) {
-                emitRequireInstanceNode(typeDefinition.requireInstance());
-            }
-        }
-
-        private void emitPathNode(final RevisionAwareXPath revisionAwareXPath) {
-            super.writer.startPathNode(revisionAwareXPath);
-            super.writer.endNode();
-        }
-
-        private void emitRequireInstanceNode(final boolean require) {
-            super.writer.startRequireInstanceNode(require);
-            super.writer.endNode();
-        }
-
-        private void emitInstanceIdentifierSpecification(final InstanceIdentifierTypeDefinition typeDefinition) {
-            emitRequireInstanceNode(typeDefinition.requireInstance());
-        }
-
-        private void emitIdentityrefSpecification(final IdentityrefTypeDefinition typeDefinition) {
-            emitBaseIdentities(typeDefinition.getIdentities());
-        }
-
-        private void emitUnionSpecification(final UnionTypeDefinition typeDefinition) {
-            for (final TypeDefinition<?> subtype : typeDefinition.getTypes()) {
-                // FIXME: BUG-2444: What if we have locally modified types here?
-                // is solution to look-up in schema path?
-                emitTypeNode(typeDefinition.getPath(), subtype);
-            }
-        }
-
-        private void emitBitsSpecification(final BitsTypeDefinition typeDefinition) {
-            for (final Bit bit : typeDefinition.getBits()) {
-                emitBit(bit);
-            }
-        }
-
-        private void emitBit(final Bit bit) {
-            super.writer.startBitNode(bit.getName());
-            emitPositionNode(bit.getPosition());
-            emitDocumentedNode(bit);
-            super.writer.endNode();
-        }
-
-        private void emitPositionNode(final @Nullable Long position) {
-            if (position != null) {
-                super.writer.startPositionNode(UnsignedInteger.valueOf(position));
-                super.writer.endNode();
-            }
-        }
-
-        private void emitStatusNode(final @Nullable Status status) {
-            if (status != null) {
-                super.writer.startStatusNode(status);
-                super.writer.endNode();
-            }
-        }
-
-        private void emitConfigNode(final boolean config) {
-            super.writer.startConfigNode(config);
-            super.writer.endNode();
-        }
-
-        private void emitMandatoryNode(final boolean mandatory) {
-            super.writer.startMandatoryNode(mandatory);
-            super.writer.endNode();
-        }
-
-        private void emitPresenceNode(final boolean presence) {
-            super.writer.startPresenceNode(presence);
-            super.writer.endNode();
-        }
-
-        private void emitOrderedBy(final boolean userOrdered) {
-            if (userOrdered) {
-                super.writer.startOrderedByNode("user");
-            } else {
-                super.writer.startOrderedByNode("system");
-            }
-            super.writer.endNode();
-        }
-
-        private void emitMust(final @Nullable MustDefinition mustCondition) {
-            if (mustCondition != null && mustCondition.getXpath() != null) {
-                super.writer.startMustNode(mustCondition.getXpath());
-                mustCondition.getErrorMessage().ifPresent(this::emitErrorMessageNode);
-                mustCondition.getErrorAppTag().ifPresent(this::emitErrorAppTagNode);
-                emitDocumentedNode(mustCondition);
-                super.writer.endNode();
-            }
-        }
-
-        private void emitErrorMessageNode(final @Nullable String input) {
-            super.writer.startErrorMessageNode(input);
-            super.writer.endNode();
-        }
-
-        private void emitErrorAppTagNode(final String input) {
-            super.writer.startErrorAppTagNode(input);
-            super.writer.endNode();
-        }
-
-        private void emitMinElementsNode(final Integer min) {
-            if (min != null) {
-                super.writer.startMinElementsNode(min);
-                super.writer.endNode();
-            }
-        }
-
-        private void emitMaxElementsNode(final @Nullable Integer max) {
-            if (max != null) {
-                super.writer.startMaxElementsNode(max);
-                super.writer.endNode();
-            }
-        }
-
-        private void emitValueNode(final @Nullable Integer value) {
-            if (value != null) {
-                super.writer.startValueNode(value);
-                super.writer.endNode();
-            }
-        }
-
-        private void emitDocumentedNode(final DocumentedNode input) {
-            input.getDescription().ifPresent(this::emitDescriptionNode);
-            input.getReference().ifPresent(this::emitReferenceNode);
-        }
-
-        private void emitDocumentedNode(final DocumentedNode.WithStatus input) {
-            emitStatusNode(input.getStatus());
-            emitDocumentedNode((DocumentedNode) input);
-        }
-
-        private void emitGrouping(final GroupingDefinition grouping) {
-            super.writer.startGroupingNode(grouping.getQName());
-            emitDocumentedNode(grouping);
-            emitDataNodeContainer(grouping);
-            emitUnknownStatementNodes(grouping.getUnknownSchemaNodes());
-            emitNotifications(grouping.getNotifications());
-            emitActions(grouping.getActions());
-            super.writer.endNode();
-
-        }
-
-        private void emitContainer(final ContainerSchemaNode child) {
-            super.writer.startContainerNode(child.getQName());
-            child.getMustConstraints().forEach(this::emitMust);
-            child.getWhenCondition().ifPresent(this::emitWhen);
-            // FIXME: BUG-2444: whenNode //:Optional
-            // FIXME: BUG-2444: *(ifFeatureNode )
-            emitPresenceNode(child.isPresenceContainer());
-            emitConfigNode(child.isConfiguration());
-            emitDocumentedNode(child);
-            emitDataNodeContainer(child);
-            emitUnknownStatementNodes(child.getUnknownSchemaNodes());
-            emitNotifications(child.getNotifications());
-            emitActions(child.getActions());
-            super.writer.endNode();
-
-        }
-
-        private void emitLeaf(final LeafSchemaNode child) {
-            super.writer.startLeafNode(child.getQName());
-            child.getWhenCondition().ifPresent(this::emitWhen);
-            // FIXME: BUG-2444: *(ifFeatureNode )
-            emitTypeNode(child.getPath(), child.getType());
-            child.getType().getUnits().ifPresent(this::emitUnitsNode);
-            child.getMustConstraints().forEach(this::emitMust);
-            child.getType().getDefaultValue().ifPresent(this::emitDefaultNode);
-            emitConfigNode(child.isConfiguration());
-            emitMandatoryNode(child.isMandatory());
-            emitDocumentedNode(child);
-            emitUnknownStatementNodes(child.getUnknownSchemaNodes());
-            super.writer.endNode();
-
-        }
-
-        private void emitCountConstraint(final ElementCountConstraint constraint) {
-            emitMinElementsNode(constraint.getMinElements());
-            emitMaxElementsNode(constraint.getMaxElements());
-        }
-
-        private void emitLeafList(final LeafListSchemaNode child) {
-            super.writer.startLeafListNode(child.getQName());
-
-            child.getWhenCondition().ifPresent(this::emitWhen);
-            // FIXME: BUG-2444: *(ifFeatureNode )
-            emitTypeNode(child.getPath(), child.getType());
-            child.getType().getUnits().ifPresent(this::emitUnitsNode);
-            // FIXME: BUG-2444: unitsNode /Optional
-            child.getMustConstraints().forEach(this::emitMust);
-            emitConfigNode(child.isConfiguration());
-            emitDefaultNodes(child.getDefaults());
-            child.getElementCountConstraint().ifPresent(this::emitCountConstraint);
-            emitOrderedBy(child.isUserOrdered());
-            emitDocumentedNode(child);
-            emitUnknownStatementNodes(child.getUnknownSchemaNodes());
-            super.writer.endNode();
-        }
-
-        private void emitList(final ListSchemaNode child) {
-            super.writer.startListNode(child.getQName());
-            child.getWhenCondition().ifPresent(this::emitWhen);
-
-            // FIXME: BUG-2444: *(ifFeatureNode )
-            child.getMustConstraints().forEach(this::emitMust);
-            emitKey(child.getKeyDefinition());
-            emitUniqueConstraints(child.getUniqueConstraints());
-            emitConfigNode(child.isConfiguration());
-            child.getElementCountConstraint().ifPresent(this::emitCountConstraint);
-            emitOrderedBy(child.isUserOrdered());
-            emitDocumentedNode(child);
-            emitDataNodeContainer(child);
-            emitUnknownStatementNodes(child.getUnknownSchemaNodes());
-            emitNotifications(child.getNotifications());
-            emitActions(child.getActions());
-            super.writer.endNode();
-
-        }
-
-        private void emitKey(final List<QName> keyList) {
-            if (keyList != null && !keyList.isEmpty()) {
-                super.writer.startKeyNode(keyList);
-                super.writer.endNode();
-            }
-        }
-
-        private void emitUniqueConstraints(final Collection<UniqueConstraint> uniqueConstraints) {
-            for (final UniqueConstraint uniqueConstraint : uniqueConstraints) {
-                emitUnique(uniqueConstraint);
-            }
-        }
-
-        private void emitUnique(final UniqueConstraint uniqueConstraint) {
-            super.writer.startUniqueNode(uniqueConstraint);
-            super.writer.endNode();
-        }
-
-        private void emitChoice(final ChoiceSchemaNode choice) {
-            super.writer.startChoiceNode(choice.getQName());
-            choice.getWhenCondition().ifPresent(this::emitWhen);
-            // FIXME: BUG-2444: *(ifFeatureNode )
-            // FIXME: BUG-2444: defaultNode //Optional
-            emitConfigNode(choice.isConfiguration());
-            emitMandatoryNode(choice.isMandatory());
-            emitDocumentedNode(choice);
-            for (final CaseSchemaNode caze : choice.getCases().values()) {
-                // TODO: emit short case?
-                emitCaseNode(caze);
-            }
-            emitUnknownStatementNodes(choice.getUnknownSchemaNodes());
-            super.writer.endNode();
-        }
-
-        private void emitCaseNode(final CaseSchemaNode caze) {
-            if (!super.emitInstantiated && caze.isAugmenting()) {
-                return;
-            }
-            super.writer.startCaseNode(caze.getQName());
-            caze.getWhenCondition().ifPresent(this::emitWhen);
-            // FIXME: BUG-2444: *(ifFeatureNode )
-            emitDocumentedNode(caze);
-            emitDataNodeContainer(caze);
-            emitUnknownStatementNodes(caze.getUnknownSchemaNodes());
-            super.writer.endNode();
-
-        }
-
-        private void emitAnyxml(final AnyXmlSchemaNode anyxml) {
-            super.writer.startAnyxmlNode(anyxml.getQName());
-            emitBodyOfDataSchemaNode(anyxml);
-            super.writer.endNode();
-        }
-
-        private void emitAnydata(final AnyDataSchemaNode anydata) {
-            super.writer.startAnydataNode(anydata.getQName());
-            emitBodyOfDataSchemaNode(anydata);
-            super.writer.endNode();
-        }
-
-        private void emitBodyOfDataSchemaNode(final DataSchemaNode dataSchemaNode) {
-            dataSchemaNode.getWhenCondition().ifPresent(this::emitWhen);
-            // FIXME: BUG-2444: *(ifFeatureNode )
-            if (dataSchemaNode instanceof MustConstraintAware) {
-                ((MustConstraintAware) dataSchemaNode).getMustConstraints().forEach(this::emitMust);
-            }
-            emitConfigNode(dataSchemaNode.isConfiguration());
-            emitDocumentedNode(dataSchemaNode);
-            emitUnknownStatementNodes(dataSchemaNode.getUnknownSchemaNodes());
-        }
-
-        private void emitUsesNode(final UsesNode usesNode) {
-            if (super.emitUses && !usesNode.isAddedByUses() && !usesNode.isAugmenting()) {
-                super.writer.startUsesNode(usesNode.getGroupingPath().getLastComponent());
-                /*
-                 * FIXME: BUG-2444: whenNode / *(ifFeatureNode ) statusNode //
-                 * Optional F : descriptionNode // Optional referenceNode //
-                 * Optional
-                 */
-                for (final Entry<SchemaPath, SchemaNode> refine : usesNode.getRefines().entrySet()) {
-                    emitRefine(refine);
-                }
-                for (final AugmentationSchemaNode aug : usesNode.getAugmentations()) {
-                    emitUsesAugmentNode(aug);
-                }
-                super.writer.endNode();
-            }
-        }
-
-        private void emitRefine(final Entry<SchemaPath, SchemaNode> refine) {
-            final SchemaPath path = refine.getKey();
-            final SchemaNode value = refine.getValue();
-            super.writer.startRefineNode(path);
-
-            if (value instanceof LeafSchemaNode) {
-                emitRefineLeafNodes((LeafSchemaNode) value);
-            } else if (value instanceof LeafListSchemaNode) {
-                emitRefineLeafListNodes((LeafListSchemaNode) value);
-            } else if (value instanceof ListSchemaNode) {
-                emitRefineListNodes((ListSchemaNode) value);
-            } else if (value instanceof ChoiceSchemaNode) {
-                emitRefineChoiceNodes((ChoiceSchemaNode) value);
-            } else if (value instanceof CaseSchemaNode) {
-                emitRefineCaseNodes((CaseSchemaNode) value);
-            } else if (value instanceof ContainerSchemaNode) {
-                emitRefineContainerNodes((ContainerSchemaNode) value);
-            } else if (value instanceof AnyXmlSchemaNode) {
-                emitRefineAnyxmlNodes((AnyXmlSchemaNode) value);
-            }
-            super.writer.endNode();
-
-        }
-
-        private static <T extends SchemaNode> T getOriginalChecked(final T value) {
-            final Optional<SchemaNode> original = SchemaNodeUtils.getOriginalIfPossible(value);
-            checkArgument(original.isPresent(), "Original unmodified version of node is not present.");
-            @SuppressWarnings("unchecked")
-            final T ret = (T) original.get();
-            return ret;
-        }
-
-        private void emitDocumentedNodeRefine(final DocumentedNode original, final DocumentedNode value) {
-            if (Objects.deepEquals(original.getDescription(), value.getDescription())) {
-                value.getDescription().ifPresent(this::emitDescriptionNode);
-            }
-            if (Objects.deepEquals(original.getReference(), value.getReference())) {
-                value.getReference().ifPresent(this::emitReferenceNode);
-            }
-        }
-
-        private void emitRefineContainerNodes(final ContainerSchemaNode value) {
-            final ContainerSchemaNode original = getOriginalChecked(value);
-
-            // emitMustNodes(child.getConstraints().getMustConstraints());
-            if (Objects.deepEquals(original.isPresenceContainer(), value.isPresenceContainer())) {
-                emitPresenceNode(value.isPresenceContainer());
-            }
-            if (Objects.deepEquals(original.isConfiguration(), value.isConfiguration())) {
-                emitConfigNode(value.isConfiguration());
-            }
-            emitDocumentedNodeRefine(original, value);
-
-        }
-
-        private void emitRefineLeafNodes(final LeafSchemaNode value) {
-            final LeafSchemaNode original = getOriginalChecked(value);
-
-            // emitMustNodes(child.getConstraints().getMustConstraints());
-            if (Objects.deepEquals(original.getType().getDefaultValue(), value.getType().getDefaultValue())) {
-                emitDefaultNode(value.getType().getDefaultValue());
-            }
-            if (Objects.deepEquals(original.isConfiguration(), value.isConfiguration())) {
-                emitConfigNode(value.isConfiguration());
-            }
-            emitDocumentedNodeRefine(original, value);
-            if (Objects.deepEquals(original.isMandatory(), value.isMandatory())) {
-                emitMandatoryNode(value.isMandatory());
-            }
-        }
-
-        private void emitRefinedMinMaxNodes(final Optional<ElementCountConstraint> value,
-                final Optional<ElementCountConstraint> original) {
-            Integer val = value.map(ElementCountConstraint::getMinElements).orElse(null);
-            Integer orig = original.map(ElementCountConstraint::getMinElements).orElse(null);
-            if (Objects.equals(val, orig)) {
-                emitMinElementsNode(val);
-            }
-
-            val = value.map(ElementCountConstraint::getMinElements).orElse(null);
-            orig = original.map(ElementCountConstraint::getMinElements).orElse(null);
-            if (Objects.equals(val, orig)) {
-                emitMaxElementsNode(val);
-            }
-        }
-
-        private void emitRefineLeafListNodes(final LeafListSchemaNode value) {
-            final LeafListSchemaNode original = getOriginalChecked(value);
-
-            // emitMustNodes(child.getConstraints().getMustConstraints());
-            if (Objects.deepEquals(original.isConfiguration(), value.isConfiguration())) {
-                emitConfigNode(value.isConfiguration());
-            }
-
-            emitRefinedMinMaxNodes(value.getElementCountConstraint(), original.getElementCountConstraint());
-            emitDocumentedNodeRefine(original, value);
-
-        }
-
-        private void emitRefineListNodes(final ListSchemaNode value) {
-            final ListSchemaNode original = getOriginalChecked(value);
-
-            // emitMustNodes(child.getConstraints().getMustConstraints());
-            if (Objects.deepEquals(original.isConfiguration(), value.isConfiguration())) {
-                emitConfigNode(value.isConfiguration());
-            }
-            emitRefinedMinMaxNodes(value.getElementCountConstraint(), original.getElementCountConstraint());
-            emitDocumentedNodeRefine(original, value);
-
-        }
-
-        private void emitRefineChoiceNodes(final ChoiceSchemaNode value) {
-            final ChoiceSchemaNode original = getOriginalChecked(value);
-
-            // FIXME: BUG-2444: defaultNode //FIXME: BUG-2444: Optional
-            if (Objects.deepEquals(original.isConfiguration(), value.isConfiguration())) {
-                emitConfigNode(value.isConfiguration());
-            }
-            if (Objects.deepEquals(original.isMandatory(), value.isMandatory())) {
-                emitMandatoryNode(value.isMandatory());
-            }
-            emitDocumentedNodeRefine(original, value);
-
-        }
-
-        private void emitRefineCaseNodes(final CaseSchemaNode value) {
-            final CaseSchemaNode original = getOriginalChecked(value);
-            emitDocumentedNodeRefine(original, value);
-
-        }
-
-        private void emitRefineAnyxmlNodes(final AnyXmlSchemaNode value) {
-            final AnyXmlSchemaNode original = getOriginalChecked(value);
-
-            // FIXME: BUG-2444:
-            // emitMustNodes(child.getConstraints().getMustConstraints());
-            if (Objects.deepEquals(original.isConfiguration(), value.isConfiguration())) {
-                emitConfigNode(value.isConfiguration());
-            }
-            if (Objects.deepEquals(original.isMandatory(), value.isMandatory())) {
-                emitMandatoryNode(value.isMandatory());
-            }
-            emitDocumentedNodeRefine(original, value);
-
-        }
-
-        private void emitUsesAugmentNode(final AugmentationSchemaNode aug) {
-            /**
-             * differs only in location in schema, otherwise currently (as of
-             * RFC6020) it is same, so we could freely reuse path.
-             */
-            emitAugment(aug);
-        }
-
-        private void emitAugment(final AugmentationSchemaNode augmentation) {
-            super.writer.startAugmentNode(augmentation.getTargetPath());
-            // FIXME: BUG-2444: whenNode //Optional
-            // FIXME: BUG-2444: *(ifFeatureNode )
-
-            emitDocumentedNode(augmentation);
-            for (final UsesNode uses : augmentation.getUses()) {
-                emitUsesNode(uses);
-            }
-
-            for (final DataSchemaNode childNode : augmentation.getChildNodes()) {
-                if (childNode instanceof CaseSchemaNode) {
-                    emitCaseNode((CaseSchemaNode) childNode);
-                } else {
-                    emitDataSchemaNode(childNode);
-                }
-            }
-            emitUnknownStatementNodes(augmentation.getUnknownSchemaNodes());
-            emitNotifications(augmentation.getNotifications());
-            emitActions(augmentation.getActions());
-            super.writer.endNode();
-        }
-
-        private void emitUnknownStatementNodes(final List<UnknownSchemaNode> unknownNodes) {
-            for (final UnknownSchemaNode unknonwnNode : unknownNodes) {
-                if (!unknonwnNode.isAddedByAugmentation() && !unknonwnNode.isAddedByUses()) {
-                    emitUnknownStatementNode(unknonwnNode);
-                }
-            }
-        }
-
-        private void emitUnknownStatementNode(final UnknownSchemaNode node) {
-            final StatementDefinition def = getStatementChecked(node.getNodeType());
-            if (def.getArgumentName() == null) {
-                super.writer.startUnknownNode(def);
-            } else {
-                super.writer.startUnknownNode(def, node.getNodeParameter());
-            }
-            emitUnknownStatementNodes(node.getUnknownSchemaNodes());
-            super.writer.endNode();
-        }
-
-        private StatementDefinition getStatementChecked(final QName nodeType) {
-            final StatementDefinition ret = super.extensions.get(nodeType);
-            checkArgument(ret != null, "Unknown extension %s used during export.", nodeType);
-            return ret;
-        }
-
-        private void emitWhen(final RevisionAwareXPath revisionAwareXPath) {
-            if (revisionAwareXPath != null) {
-                super.writer.startWhenNode(revisionAwareXPath);
-                super.writer.endNode();
-            }
-            // FIXME: BUG-2444: descriptionNode //FIXME: BUG-2444: Optional
-            // FIXME: BUG-2444: referenceNode //FIXME: BUG-2444: Optional
-            // FIXME: BUG-2444: super.writer.endNode();)
-
-        }
-
-        private void emitRpc(final RpcDefinition rpc) {
-            super.writer.startRpcNode(rpc.getQName());
-            emitOperationBody(rpc);
-            super.writer.endNode();
-        }
-
-        private void emitOperationBody(final OperationDefinition rpc) {
-            // FIXME: BUG-2444: *(ifFeatureNode )
-            emitDocumentedNode(rpc);
-
-            for (final TypeDefinition<?> typedef : rpc.getTypeDefinitions()) {
-                emitTypedefNode(typedef);
-            }
-            for (final GroupingDefinition grouping : rpc.getGroupings()) {
-                emitGrouping(grouping);
-            }
-            emitInput(rpc.getInput());
-            emitOutput(rpc.getOutput());
-            emitUnknownStatementNodes(rpc.getUnknownSchemaNodes());
-        }
-
-        private void emitActions(final Set<ActionDefinition> actions) {
-            for (final ActionDefinition actionDefinition : actions) {
-                emitAction(actionDefinition);
-            }
-        }
-
-        private void emitAction(final ActionDefinition action) {
-            if (!super.emitInstantiated && (action.isAddedByUses() || action.isAugmenting())) {
-                // We skip instantiated nodes.
-                return;
-            }
-            super.writer.startActionNode(action.getQName());
-            emitOperationBody(action);
-            super.writer.endNode();
-        }
-
-        private void emitInput(final @NonNull ContainerSchemaNode input) {
-            if (isExplicitStatement(input)) {
-                super.writer.startInputNode();
-                input.getMustConstraints().forEach(this::emitMust);
-                emitDataNodeContainer(input);
-                emitUnknownStatementNodes(input.getUnknownSchemaNodes());
-                super.writer.endNode();
-            }
-
-        }
-
-        private void emitOutput(final @NonNull ContainerSchemaNode output) {
-            if (isExplicitStatement(output)) {
-                super.writer.startOutputNode();
-                output.getMustConstraints().forEach(this::emitMust);
-                emitDataNodeContainer(output);
-                emitUnknownStatementNodes(output.getUnknownSchemaNodes());
-                super.writer.endNode();
-            }
-        }
-
-        private static boolean isExplicitStatement(final ContainerSchemaNode node) {
-            return node instanceof EffectiveStatement && ((EffectiveStatement<?, ?>) node).getDeclared()
-                    .getStatementSource() == StatementSource.DECLARATION;
-        }
-
-        private void emitNotifications(final Set<NotificationDefinition> notifications) {
-            for (final NotificationDefinition notification : notifications) {
-                emitNotificationNode(notification);
-            }
-        }
-
-        private void emitNotificationNode(final NotificationDefinition notification) {
-            if (!super.emitInstantiated && (notification.isAddedByUses() || notification.isAugmenting())) {
-                // We skip instantiated nodes.
-                return;
-            }
-
-            super.writer.startNotificationNode(notification.getQName());
-            // FIXME: BUG-2444: *(ifFeatureNode )
-            for (final MustDefinition mustCondition : notification.getMustConstraints()) {
-                emitMust(mustCondition);
-            }
-            emitDocumentedNode(notification);
-            emitDataNodeContainer(notification);
-            emitUnknownStatementNodes(notification.getUnknownSchemaNodes());
-            super.writer.endNode();
-
-        }
-
-        private void emitDeviation(final Deviation deviation) {
-            /*
-             * FIXME: BUG-2444: Deviation is not modeled properly and we are
-             * loosing lot of information in order to export it properly
-             *
-             * super.writer.startDeviationNode(deviation.getTargetPath());
-             *
-             * :descriptionNode //:Optional
-             *
-             *
-             * emitReferenceNode(deviation.getReference());
-             * :(deviateNotSupportedNode :1*(deviateAddNode :deviateReplaceNode
-             * :deviateDeleteNode)) :super.writer.endNode();
-             */
-        }
-    }
-}
diff --git a/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/SchemaToStatementWriterAdaptor.java b/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/SchemaToStatementWriterAdaptor.java
deleted file mode 100644 (file)
index c4f8f54..0000000
+++ /dev/null
@@ -1,726 +0,0 @@
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.yang.model.export;
-
-import static java.util.Objects.requireNonNull;
-
-import com.google.common.annotations.Beta;
-import com.google.common.collect.Iterables;
-import com.google.common.primitives.UnsignedInteger;
-import java.net.URI;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import javax.annotation.concurrent.NotThreadSafe;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.Revision;
-import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.Status;
-import org.opendaylight.yangtools.yang.model.api.UniqueConstraint;
-import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
-import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Relative;
-import org.opendaylight.yangtools.yang.model.api.type.ModifierKind;
-
-@Deprecated
-@Beta
-@NotThreadSafe
-final class SchemaToStatementWriterAdaptor implements YangModuleWriter {
-
-    private final StatementTextWriter writer;
-
-    private SchemaToStatementWriterAdaptor(final StatementTextWriter writer) {
-        this.writer = requireNonNull(writer);
-    }
-
-    public static YangModuleWriter from(final StatementTextWriter writer) {
-        return new SchemaToStatementWriterAdaptor(writer);
-    }
-
-    @Override
-    public void endNode() {
-        writer.endStatement();
-    }
-
-    @Override
-    public void startActionNode(final QName qname) {
-        writer.startStatement(YangStmtMapping.ACTION);
-        writer.writeArgument(qname);
-    }
-
-    @Override
-    public void startActionNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.ACTION);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startAnydataNode(final QName qname) {
-        writer.startStatement(YangStmtMapping.ANYDATA);
-        writer.writeArgument(qname);
-    }
-
-    @Override
-    public void startAnydataNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.ANYDATA);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startAnyxmlNode(final QName qname) {
-        writer.startStatement(YangStmtMapping.ANYXML);
-        writer.writeArgument(qname);
-    }
-
-    @Override
-    public void startAnyxmlNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.ANYXML);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startArgumentNode(final String input) {
-        writer.startStatement(YangStmtMapping.ARGUMENT);
-        writer.writeArgument(input);
-    }
-
-    @Override
-    public void startAugmentNode(final SchemaPath targetPath) {
-        writer.startStatement(YangStmtMapping.AUGMENT);
-        writer.writeArgument(targetPath);
-    }
-
-    @Override
-    public void startAugmentNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.AUGMENT);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startBaseNode(final QName qname) {
-        writer.startStatement(YangStmtMapping.BASE);
-        writer.writeArgument(qname);
-    }
-
-    @Override
-    public void startBaseNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.BASE);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startBelongsToNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.BELONGS_TO);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startBitNode(final String name) {
-        writer.startStatement(YangStmtMapping.BIT);
-        writer.writeArgument(name);
-    }
-
-    @Override
-    public void startCaseNode(final QName qname) {
-        writer.startStatement(YangStmtMapping.CASE);
-        writer.writeArgument(qname);
-    }
-
-    @Override
-    public void startCaseNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.CASE);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startChoiceNode(final QName qname) {
-        writer.startStatement(YangStmtMapping.CHOICE);
-        writer.writeArgument(qname);
-    }
-
-    @Override
-    public void startChoiceNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.CHOICE);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startConfigNode(final boolean config) {
-        writer.startStatement(YangStmtMapping.CONFIG);
-        writer.writeArgument(Boolean.toString(config));
-    }
-
-    @Override
-    public void startConfigNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.CONFIG);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startContactNode(final String input) {
-        writer.startStatement(YangStmtMapping.CONTACT);
-        writer.writeArgument(input);
-    }
-
-    @Override
-    public void startContainerNode(final QName qname) {
-        writer.startStatement(YangStmtMapping.CONTAINER);
-        writer.writeArgument(qname);
-    }
-
-    @Override
-    public void startContainerNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.CONTAINER);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startDefaultNode(final String string) {
-        writer.startStatement(YangStmtMapping.DEFAULT);
-        writer.writeArgument(string);
-    }
-
-    @Override
-    public void startDescriptionNode(final String input) {
-        writer.startStatement(YangStmtMapping.DESCRIPTION);
-        writer.writeArgument(input);
-    }
-
-    @Override
-    public void startDeviateNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.DEVIATE);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startDeviationNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.DEVIATION);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startEnumNode(final String name) {
-        writer.startStatement(YangStmtMapping.ENUM);
-        writer.writeArgument(name);
-    }
-
-    @Override
-    public void startErrorAppTagNode(final String input) {
-        writer.startStatement(YangStmtMapping.ERROR_APP_TAG);
-        writer.writeArgument(input);
-    }
-
-    @Override
-    public void startErrorMessageNode(final String input) {
-        writer.startStatement(YangStmtMapping.ERROR_MESSAGE);
-        writer.writeArgument(input);
-    }
-
-    @Override
-    public void startExtensionNode(final QName qname) {
-        writer.startStatement(YangStmtMapping.EXTENSION);
-        writer.writeArgument(qname);
-    }
-
-    @Override
-    public void startExtensionNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.EXTENSION);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startFeatureNode(final QName qname) {
-        writer.startStatement(YangStmtMapping.FEATURE);
-        writer.writeArgument(qname);
-    }
-
-    @Override
-    public void startFeatureNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.FEATURE);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startFractionDigitsNode(final Integer fractionDigits) {
-        writer.startStatement(YangStmtMapping.FRACTION_DIGITS);
-        writer.writeArgument(fractionDigits.toString());
-    }
-
-    @Override
-    public void startFractionDigitsNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.FRACTION_DIGITS);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startGroupingNode(final QName qname) {
-        writer.startStatement(YangStmtMapping.GROUPING);
-        writer.writeArgument(qname);
-    }
-
-    @Override
-    public void startGroupingNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.GROUPING);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startIdentityNode(final QName qname) {
-        writer.startStatement(YangStmtMapping.IDENTITY);
-        writer.writeArgument(qname);
-    }
-
-    @Override
-    public void startIdentityNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.IDENTITY);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startIfFeatureNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.IF_FEATURE);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startImportNode(final String moduleName) {
-        writer.startStatement(YangStmtMapping.IMPORT);
-        writer.writeArgument(moduleName);
-    }
-
-    @Override
-    public void startIncludeNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.INCLUDE);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startInputNode() {
-        writer.startStatement(YangStmtMapping.INPUT);
-    }
-
-    @Override
-    public void startKeyNode(final List<QName> keyList) {
-        writer.startStatement(YangStmtMapping.KEY);
-        final StringBuilder keyStr = new StringBuilder();
-        final Iterator<QName> iter = keyList.iterator();
-        while (iter.hasNext()) {
-            keyStr.append(iter.next().getLocalName());
-            if (iter.hasNext()) {
-                keyStr.append(' ');
-            }
-        }
-        writer.writeArgument(keyStr.toString());
-    }
-
-    @Override
-    public void startKeyNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.KEY);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startLeafListNode(final QName qname) {
-        writer.startStatement(YangStmtMapping.LEAF_LIST);
-        writer.writeArgument(qname);
-    }
-
-    @Override
-    public void startLeafListNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.LEAF_LIST);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startLeafNode(final QName qname) {
-        writer.startStatement(YangStmtMapping.LEAF);
-        writer.writeArgument(qname);
-    }
-
-    @Override
-    public void startLeafNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.LEAF);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startLengthNode(final String lengthString) {
-        writer.startStatement(YangStmtMapping.LENGTH);
-        writer.writeArgument(lengthString);
-    }
-
-    @Override
-    public void startListNode(final QName qname) {
-        writer.startStatement(YangStmtMapping.LIST);
-        writer.writeArgument(qname);
-    }
-
-    @Override
-    public void startListNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.LIST);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startMandatoryNode(final boolean mandatory) {
-        writer.startStatement(YangStmtMapping.MANDATORY);
-        writer.writeArgument(Boolean.toString(mandatory));
-    }
-
-    @Override
-    public void startMandatoryNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.MANDATORY);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startMaxElementsNode(final Integer max) {
-        writer.startStatement(YangStmtMapping.MAX_ELEMENTS);
-        writer.writeArgument(max.toString());
-    }
-
-    @Override
-    public void startMaxElementsNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.MAX_ELEMENTS);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startMinElementsNode(final Integer min) {
-        writer.startStatement(YangStmtMapping.MIN_ELEMENTS);
-        writer.writeArgument(min.toString());
-    }
-
-    @Override
-    public void startMinElementsNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.MIN_ELEMENTS);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startModifierNode(final ModifierKind modifier) {
-        writer.startStatement(YangStmtMapping.MODIFIER);
-        writer.writeArgument(modifier.getKeyword());
-    }
-
-    @Override
-    public void startModifierNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.MODIFIER);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startModuleNode(final String identifier) {
-        writer.startStatement(YangStmtMapping.MODULE);
-        writer.writeArgument(identifier);
-    }
-
-    @Override
-    public void startMustNode(final RevisionAwareXPath xpath) {
-        writer.startStatement(YangStmtMapping.MUST);
-        writer.writeArgument(xpath);
-    }
-
-    @Override
-    public void startMustNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.MUST);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startNamespaceNode(final URI uri) {
-        writer.startStatement(YangStmtMapping.NAMESPACE);
-        writer.writeArgument(uri.toString());
-    }
-
-    @Override
-    public void startNotificationNode(final QName qname) {
-        writer.startStatement(YangStmtMapping.NOTIFICATION);
-        writer.writeArgument(qname);
-    }
-
-    @Override
-    public void startNotificationNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.NOTIFICATION);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startOrderedByNode(final String ordering) {
-        writer.startStatement(YangStmtMapping.ORDERED_BY);
-        writer.writeArgument(ordering);
-    }
-
-    @Override
-    public void startOrganizationNode(final String input) {
-        writer.startStatement(YangStmtMapping.ORGANIZATION);
-        writer.writeArgument(input);
-    }
-
-    @Override
-    public void startOutputNode() {
-        writer.startStatement(YangStmtMapping.OUTPUT);
-    }
-
-    @Override
-    public void startPathNode(final RevisionAwareXPath revisionAwareXPath) {
-        writer.startStatement(YangStmtMapping.PATH);
-        writer.writeArgument(revisionAwareXPath);
-    }
-
-    @Override
-    public void startPathNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.PATH);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startPatternNode(final String regularExpression) {
-        writer.startStatement(YangStmtMapping.PATTERN);
-        writer.writeArgument(regularExpression);
-    }
-
-    @Override
-    public void startPositionNode(final UnsignedInteger position) {
-        writer.startStatement(YangStmtMapping.POSITION);
-        writer.writeArgument(position.toString());
-    }
-
-    @Override
-    public void startPositionNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.POSITION);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startPrefixNode(final String input) {
-        writer.startStatement(YangStmtMapping.PREFIX);
-        writer.writeArgument(input);
-    }
-
-    @Override
-    public void startPresenceNode(final boolean presence) {
-        writer.startStatement(YangStmtMapping.PRESENCE);
-        writer.writeArgument(Boolean.toString(presence));
-    }
-
-    @Override
-    public void startPresenceNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.PRESENCE);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startRangeNode(final String rangeString) {
-        writer.startStatement(YangStmtMapping.RANGE);
-        writer.writeArgument(rangeString);
-    }
-
-    @Override
-    public void startReferenceNode(final String input) {
-        writer.startStatement(YangStmtMapping.REFERENCE);
-        writer.writeArgument(input);
-    }
-
-    @Override
-    public void startRefineNode(final SchemaPath path) {
-        writer.startStatement(YangStmtMapping.REFINE);
-        writer.writeArgument(path);
-    }
-
-    @Override
-    public void startRefineNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.REFINE);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startRequireInstanceNode(final boolean require) {
-        writer.startStatement(YangStmtMapping.REQUIRE_INSTANCE);
-        writer.writeArgument(Boolean.toString(require));
-    }
-
-    @Override
-    public void startRequireInstanceNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.REQUIRE_INSTANCE);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startRevisionDateNode(final Revision date) {
-        writer.startStatement(YangStmtMapping.REVISION_DATE);
-        writer.writeArgument(date.toString());
-    }
-
-    @Override
-    public void startRevisionDateNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.REVISION_DATE);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startRevisionNode(final Revision date) {
-        writer.startStatement(YangStmtMapping.REVISION);
-        writer.writeArgument(date.toString());
-    }
-
-    @Override
-    public void startRevisionNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.REVISION);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startRpcNode(final QName qname) {
-        writer.startStatement(YangStmtMapping.RPC);
-        writer.writeArgument(qname);
-    }
-
-    @Override
-    public void startRpcNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.RPC);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startStatusNode(final Status status) {
-        writer.startStatement(YangStmtMapping.STATUS);
-        writer.writeArgument(status.toString().toLowerCase());
-    }
-
-    @Override
-    public void startStatusNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.STATUS);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startSubmoduleNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.SUBMODULE);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startTypeNode(final QName qname) {
-        writer.startStatement(YangStmtMapping.TYPE);
-        writer.writeArgument(qname);
-    }
-
-    @Override
-    public void startTypeNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.TYPE);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startTypedefNode(final QName qname) {
-        writer.startStatement(YangStmtMapping.TYPEDEF);
-        writer.writeArgument(qname);
-    }
-
-    @Override
-    public void startTypedefNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.TYPEDEF);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startUniqueNode(final UniqueConstraint uniqueConstraint) {
-        writer.startStatement(YangStmtMapping.UNIQUE);
-        final StringBuilder uniqueStr = new StringBuilder();
-        final Collection<Relative> tag = uniqueConstraint.getTag();
-
-        final Iterator<Relative> iter = tag.iterator();
-        while (iter.hasNext()) {
-            uniqueStr.append(
-                    String.join("/", Iterables.transform(iter.next().getPathFromRoot(), qn -> qn.getLocalName())));
-            if (iter.hasNext()) {
-                uniqueStr.append(' ');
-            }
-        }
-        writer.writeArgument(uniqueStr.toString());
-    }
-
-    @Override
-    public void startUniqueNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.UNIQUE);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startUnitsNode(final String input) {
-        writer.startStatement(YangStmtMapping.UNITS);
-        writer.writeArgument(input);
-    }
-
-    @Override
-    public void startUnknownNode(final StatementDefinition def) {
-        writer.startStatement(def);
-    }
-
-    @Override
-    public void startUnknownNode(final StatementDefinition def, final String nodeParameter) {
-        writer.startStatement(def);
-        writer.writeArgument(nodeParameter);
-    }
-
-    @Override
-    public void startUsesNode(final QName groupingName) {
-        writer.startStatement(YangStmtMapping.USES);
-        writer.writeArgument(groupingName);
-    }
-
-    @Override
-    public void startUsesNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.USES);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startValueNode(final Integer integer) {
-        writer.startStatement(YangStmtMapping.VALUE);
-        writer.writeArgument(integer.toString());
-    }
-
-    @Override
-    public void startValueNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.VALUE);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startWhenNode(final RevisionAwareXPath revisionAwareXPath) {
-        writer.startStatement(YangStmtMapping.WHEN);
-        writer.writeArgument(revisionAwareXPath);
-    }
-
-    @Override
-    public void startWhenNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.WHEN);
-        writer.writeArgument(rawArgument);
-    }
-
-    @Override
-    public void startYangVersionNode(final String input) {
-        writer.startStatement(YangStmtMapping.YANG_VERSION);
-        writer.writeArgument(input);
-    }
-
-    @Override
-    public void startYinElementNode(final boolean yinElement) {
-        writer.startStatement(YangStmtMapping.YIN_ELEMENT);
-        writer.writeArgument(Boolean.toString(yinElement));
-    }
-
-    @Override
-    public void startYinElementNode(final String rawArgument) {
-        writer.startStatement(YangStmtMapping.YIN_ELEMENT);
-        writer.writeArgument(rawArgument);
-    }
-}
diff --git a/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/SingleModuleYinStatementWriter.java b/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/SingleModuleYinStatementWriter.java
deleted file mode 100644 (file)
index d887331..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.yang.model.export;
-
-import static com.google.common.base.Preconditions.checkState;
-import static java.util.Objects.requireNonNull;
-
-import com.google.common.annotations.Beta;
-import com.google.common.collect.BiMap;
-import com.google.common.collect.HashBiMap;
-import java.net.URI;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Map.Entry;
-import javax.annotation.concurrent.NotThreadSafe;
-import javax.xml.XMLConstants;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamWriter;
-import org.eclipse.jdt.annotation.Nullable;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.YangConstants;
-import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
-import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
-
-@Deprecated
-@Beta
-@NotThreadSafe
-final class SingleModuleYinStatementWriter implements StatementTextWriter {
-
-    private final XMLStreamWriter writer;
-    private final URI currentModuleNs;
-    private final BiMap<String, URI> prefixToNamespace;
-    private StatementDefinition currentStatement;
-
-    private SingleModuleYinStatementWriter(final XMLStreamWriter writer, final URI moduleNamespace,
-            final Map<String, URI> prefixToNs) {
-        this.writer = writer;
-        this.currentModuleNs = moduleNamespace;
-        this.prefixToNamespace = HashBiMap.create(prefixToNs);
-        initializeYinNamespaceInXml();
-    }
-
-    private void initializeYinNamespaceInXml() {
-        try {
-            final String defaultNs = writer.getNamespaceContext().getNamespaceURI(XMLConstants.NULL_NS_URI);
-            if (defaultNs == null) {
-                writer.setDefaultNamespace(YangConstants.RFC6020_YIN_NAMESPACE_STRING);
-            } else if (!YangConstants.RFC6020_YIN_NAMESPACE_STRING.equals(defaultNs)) {
-                // FIXME: Implement support for exporting YIN as part of other XML document.
-                throw new UnsupportedOperationException(
-                        "Not implemented support for nesting YIN in different XML element.");
-            }
-        } catch (final XMLStreamException e) {
-            throw new IllegalStateException(e);
-        }
-    }
-
-    static StatementTextWriter create(final XMLStreamWriter writer, final URI moduleNs,
-            final Map<String, URI> prefixToNs) {
-        return new SingleModuleYinStatementWriter(writer, moduleNs, prefixToNs);
-    }
-
-    @Override
-    public void startStatement(final StatementDefinition statement) {
-        currentStatement = requireNonNull(statement);
-        try {
-            writeStartXmlElement(statement.getStatementName());
-            if (YangStmtMapping.MODULE.equals(statement) || YangStmtMapping.SUBMODULE.equals(statement)) {
-                declareXmlNamespaces();
-            }
-        } catch (final XMLStreamException e) {
-            // FIXME: Introduce proper expression
-            throw new IllegalStateException(e);
-        }
-    }
-
-    @Override
-    public void endStatement() {
-        currentStatement = null;
-        try {
-            writeXmlEndElement();
-        } catch (final XMLStreamException e) {
-            // FIXME: Introduce proper expression
-            throw new IllegalStateException(e);
-        }
-    }
-
-    @Override
-    public void writeArgument(final String strRep) {
-        checkArgumentApplicable();
-        writeArgument0(strRep);
-    }
-
-    @Override
-    public void writeArgument(final QName value) {
-        checkArgumentApplicable();
-        final String valueStr = toPrefixedString(value);
-        writeArgument0(valueStr);
-    }
-
-    @Override
-    public void writeArgument(final SchemaPath targetPath) {
-        checkArgumentApplicable();
-        final StringBuilder valueStr = new StringBuilder();
-        if (targetPath.isAbsolute()) {
-            valueStr.append("/");
-        }
-        final Iterator<QName> argIt = targetPath.getPathFromRoot().iterator();
-        while (argIt.hasNext()) {
-            valueStr.append(toPrefixedString(argIt.next()));
-            if (argIt.hasNext()) {
-                valueStr.append("/");
-            }
-        }
-        writeArgument0(valueStr.toString());
-    }
-
-    @Override
-    public void writeArgument(final RevisionAwareXPath xpath) {
-        checkArgumentApplicable();
-        // FIXME: This implementation assumes prefixes are unchanged
-        // and were not changed in schema context.
-        writeArgument0(xpath.toString());
-    }
-
-    private void writeArgument0(final String strRep) {
-        try {
-            if (isArgumentYinElement(currentStatement)) {
-                writeStartXmlElement(currentStatement.getArgumentName());
-                writeXmlText(strRep);
-                writeXmlEndElement();
-            } else {
-                writeXmlArgument(currentStatement.getArgumentName(), strRep);
-            }
-        } catch (final XMLStreamException e) {
-            // FIXME: throw proper exception
-            throw new IllegalStateException(e);
-        }
-    }
-
-    private static boolean isArgumentYinElement(final StatementDefinition currentStatement) {
-        if (currentStatement instanceof YangStmtMapping || currentStatement instanceof ExtensionStatement) {
-            return currentStatement.isArgumentYinElement();
-        }
-        return false;
-    }
-
-    private void checkArgumentApplicable() {
-        checkState(currentStatement != null, "No statement is opened.");
-        checkState(currentStatement.getArgumentName() != null, "Statement %s does not take argument.",
-                currentStatement.getArgumentName());
-    }
-
-    private static String toPrefixedString(final @Nullable String prefix, final String localName) {
-        if (prefix == null || prefix.isEmpty()) {
-            return localName;
-        }
-        return prefix + ":" + localName;
-    }
-
-    private String toPrefixedString(final QName value) {
-        final URI valueNs = value.getNamespace();
-        final String valueLocal = value.getLocalName();
-        if (currentModuleNs.equals(valueNs)) {
-            return valueLocal;
-        }
-        final String prefix = ensureAndGetXmlNamespacePrefix(valueNs);
-        return toPrefixedString(prefix, valueLocal);
-    }
-
-    private @Nullable String ensureAndGetXmlNamespacePrefix(final URI namespace) {
-        if (YangConstants.RFC6020_YANG_NAMESPACE.equals(namespace)) {
-         // YANG namespace does not have prefix if used in arguments.
-            return null;
-
-        }
-        String prefix = writer.getNamespaceContext().getPrefix(namespace.toString());
-        if (prefix == null) {
-            // FIXME: declare prefix
-            prefix = prefixToNamespace.inverse().get(namespace);
-        }
-        if (prefix == null) {
-            throw new IllegalArgumentException("Namespace " + namespace + " is not bound to imported prefixes.");
-        }
-        return prefix;
-    }
-
-    private void writeXmlText(final String strRep) throws XMLStreamException {
-        writer.writeCharacters(strRep);
-    }
-
-    private void declareXmlNamespaces() {
-        try {
-            writer.writeDefaultNamespace(YangConstants.RFC6020_YIN_NAMESPACE_STRING);
-            for (final Entry<String, URI> nsDeclaration : prefixToNamespace.entrySet()) {
-                writer.writeNamespace(nsDeclaration.getKey(), nsDeclaration.getValue().toString());
-            }
-        } catch (final XMLStreamException e) {
-            throw new IllegalStateException(e);
-        }
-    }
-
-    private void writeXmlEndElement() throws XMLStreamException {
-        writer.writeEndElement();
-    }
-
-    private void writeXmlArgument(final QName qname, final String value) throws XMLStreamException {
-        writer.writeAttribute(qname.getNamespace().toString(), qname.getLocalName(), value);
-    }
-
-    private void writeStartXmlElement(final QName name) throws XMLStreamException {
-        writer.writeStartElement(name.getNamespace().toString(), name.getLocalName());
-    }
-}
diff --git a/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/StatementTextWriter.java b/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/StatementTextWriter.java
deleted file mode 100644 (file)
index 8bcf0e7..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.yangtools.yang.model.export;
-
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
-
-@Deprecated
-interface StatementTextWriter {
-
-
-    void startStatement(StatementDefinition statement);
-
-    void writeArgument(RevisionAwareXPath xpath);
-
-    void writeArgument(QName name);
-
-    void writeArgument(String argStr);
-
-    void writeArgument(SchemaPath targetPath);
-
-    void endStatement();
-
-}
diff --git a/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/YangModuleWriter.java b/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/YangModuleWriter.java
deleted file mode 100644 (file)
index e19ab35..0000000
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.yang.model.export;
-
-import com.google.common.primitives.UnsignedInteger;
-import java.net.URI;
-import java.util.List;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.Revision;
-import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.Status;
-import org.opendaylight.yangtools.yang.model.api.UniqueConstraint;
-import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
-import org.opendaylight.yangtools.yang.model.api.type.ModifierKind;
-
-@Deprecated
-interface YangModuleWriter {
-    void endNode();
-
-    void startActionNode(QName qname);
-
-    void startActionNode(String rawArgument);
-
-    void startAnydataNode(QName qname);
-
-    void startAnydataNode(String rawArgument);
-
-    void startAnyxmlNode(QName qname);
-
-    void startAnyxmlNode(String rawArgument);
-
-    void startArgumentNode(String input);
-
-    void startAugmentNode(SchemaPath targetPath);
-
-    void startAugmentNode(String rawArgument);
-
-    void startBaseNode(QName qname);
-
-    void startBaseNode(String rawArgument);
-
-    void startBelongsToNode(String rawArgument);
-
-    void startBitNode(String name);
-
-    void startCaseNode(QName qname);
-
-    void startCaseNode(String rawArgument);
-
-    void startChoiceNode(QName qname);
-
-    void startChoiceNode(String rawArgument);
-
-    void startConfigNode(boolean config);
-
-    void startConfigNode(String rawArgument);
-
-    void startContactNode(String input);
-
-    void startContainerNode(QName qname);
-
-    void startContainerNode(String rawArgument);
-
-    void startDefaultNode(String string);
-
-    void startDescriptionNode(String input);
-
-    void startDeviateNode(String rawArgument);
-
-    void startDeviationNode(String rawArgument);
-
-    void startEnumNode(String name);
-
-    void startErrorAppTagNode(String input);
-
-    void startErrorMessageNode(String input);
-
-    void startExtensionNode(QName qname);
-
-    void startExtensionNode(String rawArgument);
-
-    void startFeatureNode(QName qname);
-
-    void startFeatureNode(String rawArgument);
-
-    void startFractionDigitsNode(Integer fractionDigits);
-
-    void startFractionDigitsNode(String rawArgument);
-
-    void startGroupingNode(QName qname);
-
-    void startGroupingNode(String rawArgument);
-
-    void startIdentityNode(QName qname);
-
-    void startIdentityNode(String rawArgument);
-
-    void startIfFeatureNode(String rawArgument);
-
-    void startImportNode(String moduleName);
-
-    void startIncludeNode(String rawArgument);
-
-    void startInputNode();
-
-    void startKeyNode(List<QName> keyList);
-
-    void startKeyNode(String rawArgument);
-
-    void startLeafListNode(QName qname);
-
-    void startLeafListNode(String rawArgument);
-
-    void startLeafNode(QName qname);
-
-    void startLeafNode(String rawArgument);
-
-    void startLengthNode(String lengthString);
-
-    void startListNode(QName qname);
-
-    void startListNode(String rawArgument);
-
-    void startMandatoryNode(boolean mandatory);
-
-    void startMandatoryNode(String rawArgument);
-
-    void startMaxElementsNode(Integer max);
-
-    void startMaxElementsNode(String rawArgument);
-
-    void startMinElementsNode(Integer min);
-
-    void startMinElementsNode(String rawArgument);
-
-    void startModifierNode(ModifierKind modifier);
-
-    void startModifierNode(String rawArgument);
-
-    void startModuleNode(String identifier);
-
-    void startMustNode(RevisionAwareXPath xpath);
-
-    void startMustNode(String rawArgument);
-
-    void startNamespaceNode(URI uri);
-
-    void startNotificationNode(QName qname);
-
-    void startNotificationNode(String rawArgument);
-
-    void startOrderedByNode(String ordering);
-
-    void startOrganizationNode(String input);
-
-    void startOutputNode();
-
-    void startPathNode(RevisionAwareXPath revisionAwareXPath);
-
-    void startPathNode(String rawArgument);
-
-    void startPatternNode(String regularExpression);
-
-    void startPositionNode(String rawArgument);
-
-    void startPositionNode(UnsignedInteger position);
-
-    void startPrefixNode(String input);
-
-    void startPresenceNode(boolean presence);
-
-    void startPresenceNode(String rawArgument);
-
-    void startRangeNode(String rangeString);
-
-    void startReferenceNode(String input);
-
-    void startRefineNode(SchemaPath path);
-
-    void startRefineNode(String rawArgument);
-
-    void startRequireInstanceNode(boolean require);
-
-    void startRequireInstanceNode(String rawArgument);
-
-    void startRevisionDateNode(Revision date);
-
-    void startRevisionDateNode(String rawArgument);
-
-    void startRevisionNode(Revision date);
-
-    void startRevisionNode(String rawArgument);
-
-    void startRpcNode(QName qname);
-
-    void startRpcNode(String rawArgument);
-
-    void startStatusNode(Status status);
-
-    void startStatusNode(String rawArgument);
-
-    void startSubmoduleNode(String rawArgument);
-
-    void startTypedefNode(QName qname);
-
-    void startTypedefNode(String rawArgument);
-
-    void startTypeNode(QName qname);
-
-    void startTypeNode(String rawArgument);
-
-    void startUniqueNode(String rawArgument);
-
-    void startUniqueNode(UniqueConstraint uniqueConstraint);
-
-    void startUnitsNode(String input);
-
-    void startUnknownNode(StatementDefinition def);
-
-    void startUnknownNode(StatementDefinition def, String nodeParameter);
-
-    void startUsesNode(QName groupingName);
-
-    void startUsesNode(String rawArgument);
-
-    void startValueNode(Integer integer);
-
-    void startValueNode(String rawArgument);
-
-    void startWhenNode(RevisionAwareXPath revisionAwareXPath);
-
-    void startWhenNode(String rawArgument);
-
-    void startYangVersionNode(String input);
-
-    void startYinElementNode(boolean yinElement);
-
-    void startYinElementNode(String rawArgument);
-}
index 9eaffe6dfc5a4f0f6b182abfafa4fdb10c11a4f5..6865bff8ad8affc5f90b5cae671b868f961cee13 100644 (file)
@@ -18,9 +18,7 @@ import java.net.URI;
 import java.util.Map;
 import java.util.Optional;
 import javax.xml.stream.XMLEventReader;
-import javax.xml.stream.XMLOutputFactory;
 import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamWriter;
 import javax.xml.transform.OutputKeys;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerException;
@@ -37,7 +35,6 @@ import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleEffectiveStatemen
 
 public final class YinExportUtils {
     private static final TransformerFactory TRANSFORMER_FACTORY = TransformerFactory.newInstance();
-    private static final XMLOutputFactory OUTPUT_FACTORY = XMLOutputFactory.newFactory();
 
     private YinExportUtils() {
         throw new UnsupportedOperationException("Utility class");
@@ -111,50 +108,6 @@ public final class YinExportUtils {
             (ModuleEffectiveStatement) parentModule, (SubmoduleEffectiveStatement)submodule), output);
     }
 
-    /**
-     * Writes YIN representation of supplied module to specified output stream.
-     *
-     * @param ctx Schema Context which contains module and extension definitions to be used during export of model.
-     * @param module Module to be exported.
-     * @param str Output stream to which YIN representation of model will be written.
-     * @throws XMLStreamException when a streaming problem occurs
-     * @deprecated Use {@link #writeModuleAsYinText(Module, OutputStream)}
-     *             or {@link #writeSubmoduleAsYinText(Module, Module, OutputStream)} instead.
-     */
-    @Deprecated
-    public static void writeModuleToOutputStream(final SchemaContext ctx, final Module module, final OutputStream str)
-            throws XMLStreamException {
-        writeModuleToOutputStream(ctx, module, str, false);
-    }
-
-    /**
-     * Writes YIN representation of supplied module to specified output stream.
-     *
-     * @param ctx Schema Context which contains module and extension definitions to be used during export of model.
-     * @param module Module to be exported.
-     * @param str Output stream to which YIN representation of model will be written.
-     * @param emitInstantiated Option to emit also instantiated statements (e.g. statements added by uses or augment)
-     * @throws XMLStreamException when a streaming problem occurs
-     * @deprecated Use {@link #writeModuleAsYinText(Module, OutputStream)}
-     *             or {@link #writeSubmoduleAsYinText(Module, Module, OutputStream)} instead.
-     */
-    @Deprecated
-    public static void writeModuleToOutputStream(final SchemaContext ctx, final Module module, final OutputStream str,
-            final boolean emitInstantiated) throws XMLStreamException {
-        final XMLStreamWriter xmlStreamWriter = OUTPUT_FACTORY.createXMLStreamWriter(str);
-        writeModuleToOutputStream(ctx, module, xmlStreamWriter, emitInstantiated);
-        xmlStreamWriter.flush();
-    }
-
-    private static void writeModuleToOutputStream(final SchemaContext ctx, final Module module,
-            final XMLStreamWriter xmlStreamWriter, final boolean emitInstantiated) {
-        final URI moduleNs = module.getNamespace();
-        final Map<String, URI> prefixToNs = prefixToNamespace(ctx, module);
-        final StatementTextWriter yinWriter = SingleModuleYinStatementWriter.create(xmlStreamWriter, moduleNs,
-                prefixToNs);
-        SchemaContextEmitter.writeToStatementWriter(module, ctx, yinWriter, emitInstantiated);
-    }
-
     private static Map<String, URI> prefixToNamespace(final SchemaContext ctx, final Module module) {
         final BiMap<String, URI> prefixMap = HashBiMap.create(module.getImports().size() + 1);
         prefixMap.put(module.getPrefix(), module.getNamespace());
index 07c08ee2389320dc8c05494666e5a885748ee6b9..7cc317c9fe73f0d788415fb3e6cdfddc62367b50 100644 (file)
@@ -52,14 +52,12 @@ abstract class AbstractYinExportTest {
     private void readAndValidateModule(final SchemaContext schemaContext, final Module module, final String yinDir)
             throws XMLStreamException, IOException, SAXException {
         final String fileName = YinExportUtils.wellFormedYinName(module.getName(), module.getRevision());
-        validateOutput(yinDir, fileName, exportLegacy(schemaContext, module));
         validateOutput(yinDir, fileName, export(module));
     }
 
     private void readAndValidateSubmodule(final SchemaContext schemaContext, final Module module,
             final Module submodule, final String yinDir) throws XMLStreamException, IOException, SAXException {
         final String fileName = YinExportUtils.wellFormedYinName(submodule.getName(), submodule.getRevision());
-        validateOutput(yinDir, fileName, exportLegacy(schemaContext, submodule));
         validateOutput(yinDir, fileName, export(module, submodule));
     }
 
@@ -75,13 +73,6 @@ abstract class AbstractYinExportTest {
         return new String(bos.toByteArray(), StandardCharsets.UTF_8);
     }
 
-    private static String exportLegacy(final SchemaContext schemaContext, final Module module)
-            throws XMLStreamException {
-        final ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        YinExportUtils.writeModuleToOutputStream(schemaContext, module, bos);
-        return new String(bos.toByteArray(), StandardCharsets.UTF_8);
-    }
-
     private static void assertXMLEquals(final String fileName, final Document expectedXMLDoc, final String output)
             throws SAXException, IOException {
         final String expected = YinExportTestUtils.toString(expectedXMLDoc.getDocumentElement());
index 133ba33743464c7e5f25d3c80bdd2c0427f9b54d..c2320367f5e3280eecb448e1e66179271661a70f 100644 (file)
@@ -33,7 +33,7 @@ public class Bug5531Test {
 
         // write small module of size less than 8kB
         for (Module module : schema.getModules()) {
-            YinExportUtils.writeModuleToOutputStream(schema, module, bufferedOutputStream);
+            YinExportUtils.writeModuleAsYinText(module, bufferedOutputStream);
         }
 
         String output = byteArrayOutputStream.toString();
index 18561536dff34b9eaeabe185a4bb29c962c36bce..8241ec316b9ebd6f48e9d94f89da3c5bb9ec3a39 100644 (file)
@@ -33,7 +33,7 @@ public class Bug6856Test {
         final BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(byteArrayOutputStream);
 
         final Module fooModule = schemaContext.findModule("foo", Revision.of("2017-02-28")).get();
-        YinExportUtils.writeModuleToOutputStream(schemaContext, fooModule, bufferedOutputStream);
+        YinExportUtils.writeModuleAsYinText(fooModule, bufferedOutputStream);
 
         final String output = byteArrayOutputStream.toString();
         assertNotNull(output);
@@ -53,7 +53,7 @@ public class Bug6856Test {
         final BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(byteArrayOutputStream);
 
         final Module barModule = schemaContext.findModule("bar", Revision.of("2017-02-28")).get();
-        YinExportUtils.writeModuleToOutputStream(schemaContext, barModule, bufferedOutputStream);
+        YinExportUtils.writeModuleAsYinText(barModule, bufferedOutputStream);
 
         final String output = byteArrayOutputStream.toString();
         assertNotNull(output);
diff --git a/yang/yang-model-export/src/test/java/org/opendaylight/yangtools/yang/model/export/EffectiveSchemaContextEmitterTest.java b/yang/yang-model-export/src/test/java/org/opendaylight/yangtools/yang/model/export/EffectiveSchemaContextEmitterTest.java
deleted file mode 100644 (file)
index 0379eb7..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (c) 2017 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.yang.model.export;
-
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotNull;
-
-import com.google.common.collect.BiMap;
-import com.google.common.collect.HashBiMap;
-import java.io.BufferedOutputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.net.URI;
-import java.util.Map;
-import javax.xml.stream.XMLOutputFactory;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamWriter;
-import org.custommonkey.xmlunit.Diff;
-import org.custommonkey.xmlunit.ElementNameAndAttributeQualifier;
-import org.custommonkey.xmlunit.XMLAssert;
-import org.custommonkey.xmlunit.XMLUnit;
-import org.junit.Test;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.ModuleImport;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
-import org.opendaylight.yangtools.yang.model.export.SchemaContextEmitter.EffectiveSchemaContextEmitter;
-import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
-import org.w3c.dom.Document;
-import org.xml.sax.SAXException;
-
-public class EffectiveSchemaContextEmitterTest {
-    @Test
-    public void test() throws Exception {
-        final SchemaContext schema = YangParserTestUtils.parseYangResource("/bugs/bug2444/yang/notification.yang");
-        assertNotNull(schema);
-
-        final File outDir = new File("target/bug2444-export");
-        outDir.mkdirs();
-
-        for (final Module module : schema.getModules()) {
-            exportModule(schema, module, outDir);
-
-            try (OutputStream byteArrayOutputStream = new ByteArrayOutputStream()) {
-                try (BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(byteArrayOutputStream)) {
-                    writeModuleToOutputStream(schema, module, bufferedOutputStream, false);
-                    final String output = byteArrayOutputStream.toString();
-                    assertNotNull(output);
-                    assertNotEquals(0, output.length());
-
-                    final Document doc = YinExportTestUtils.loadDocument("/bugs/bug2444/yin-effective-emitter", module);
-                    assertXMLEquals(module.getName(), doc, output);
-                }
-            }
-        }
-    }
-
-    private static void writeModuleToOutputStream(final SchemaContext ctx, final Module module, final OutputStream str,
-            final boolean emitInstantiated) throws XMLStreamException {
-        final XMLOutputFactory factory = XMLOutputFactory.newFactory();
-        final XMLStreamWriter xmlStreamWriter = factory.createXMLStreamWriter(str);
-        writeModuleToOutputStream(ctx, module, xmlStreamWriter, emitInstantiated);
-        xmlStreamWriter.flush();
-    }
-
-    private static void writeModuleToOutputStream(final SchemaContext ctx, final Module module,
-            final XMLStreamWriter xmlStreamWriter, final boolean emitInstantiated) {
-        final URI moduleNs = module.getNamespace();
-        final Map<String, URI> prefixToNs = prefixToNamespace(ctx, module);
-        final StatementTextWriter statementWriter = SingleModuleYinStatementWriter.create(xmlStreamWriter, moduleNs,
-                prefixToNs);
-        final YangModuleWriter yangSchemaWriter = SchemaToStatementWriterAdaptor.from(statementWriter);
-        final Map<QName, StatementDefinition> extensions = ExtensionStatement.mapFrom(ctx.getExtensions());
-        new EffectiveSchemaContextEmitter(yangSchemaWriter, extensions, module.getYangVersion(), emitInstantiated)
-            .emitModule(module);
-    }
-
-    private static Map<String, URI> prefixToNamespace(final SchemaContext ctx, final Module module) {
-        final BiMap<String, URI> prefixMap = HashBiMap.create(module.getImports().size() + 1);
-        prefixMap.put(module.getPrefix(), module.getNamespace());
-        for (final ModuleImport imp : module.getImports()) {
-            final String prefix = imp.getPrefix();
-            final URI namespace = getModuleNamespace(ctx, imp.getModuleName());
-            prefixMap.put(prefix, namespace);
-        }
-        return prefixMap;
-    }
-
-    private static URI getModuleNamespace(final SchemaContext ctx, final String moduleName) {
-        for (final Module module : ctx.getModules()) {
-            if (moduleName.equals(module.getName())) {
-                return module.getNamespace();
-            }
-        }
-        throw new IllegalArgumentException("Module " + moduleName + "does not exists in provided schema context");
-    }
-
-    private static File exportModule(final SchemaContext schemaContext, final Module module, final File outDir)
-            throws Exception {
-        final File outFile = new File(outDir, YinExportUtils.wellFormedYinName(module.getName(), module.getRevision()));
-        try (OutputStream output = new FileOutputStream(outFile)) {
-            writeModuleToOutputStream(schemaContext, module, output, false);
-        }
-        return outFile;
-    }
-
-    private static void assertXMLEquals(final String name, final Document expectedXMLDoc, final String output)
-            throws SAXException, IOException {
-        final String expected = YinExportTestUtils.toString(expectedXMLDoc.getDocumentElement());
-
-        XMLUnit.setIgnoreWhitespace(true);
-        XMLUnit.setNormalize(true);
-        XMLUnit.setNormalizeWhitespace(true);
-
-        final Diff diff = new Diff(expected, output);
-        diff.overrideElementQualifier(new ElementNameAndAttributeQualifier());
-        XMLAssert.assertXMLEqual(name, diff, true);
-    }
-}
index 1897e3446f64153ed86c04117b0a6a8237253d82..c0571174a327e97e25036a2e02046dfe4bbe9f55 100644 (file)
@@ -10,7 +10,6 @@ package org.opendaylight.yangtools.yang.model.export;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.OutputStream;
-import java.net.URISyntaxException;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
@@ -22,36 +21,20 @@ import org.opendaylight.yangtools.yang.model.repo.api.SchemaContextFactory;
 import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceFilter;
 import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation;
 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
-import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
 import org.opendaylight.yangtools.yang.model.repo.spi.PotentialSchemaSource;
 import org.opendaylight.yangtools.yang.model.repo.spi.SchemaListenerRegistration;
 import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceListener;
-import org.opendaylight.yangtools.yang.model.repo.util.FilesystemSchemaSourceCache;
 import org.opendaylight.yangtools.yang.parser.repo.SharedSchemaRepository;
 import org.opendaylight.yangtools.yang.parser.rfc7950.repo.TextToASTTransformer;
 
 public class SimpleModuleTest {
-
-    private static final File TEST_MODELS_FOLDER;
-
-    static {
-        try {
-            TEST_MODELS_FOLDER = new File(SimpleModuleTest.class.getResource("/yang/").toURI());
-        } catch (final URISyntaxException e) {
-            throw new IllegalStateException(e);
-        }
-    }
-
     private SharedSchemaRepository schemaRegistry;
-    private FilesystemSchemaSourceCache<YangTextSchemaSource> fileSourceProvider;
     private SchemaContextFactory schemaContextFactory;
     private Set<SourceIdentifier> allTestSources;
 
     @Before
     public void init() {
         schemaRegistry = new SharedSchemaRepository("test");
-        fileSourceProvider = new FilesystemSchemaSourceCache<>(schemaRegistry,
-                YangTextSchemaSource.class, TEST_MODELS_FOLDER);
         final TextToASTTransformer astTransformer = TextToASTTransformer.create(schemaRegistry, schemaRegistry);
         schemaRegistry.registerSchemaSourceListener(astTransformer);
 
@@ -89,15 +72,15 @@ public class SimpleModuleTest {
         final File outDir = new File("target/collection");
         outDir.mkdirs();
         for (final Module module : schemaContext.getModules()) {
-            exportModule(schemaContext, module, outDir);
+            exportModule(module, outDir);
         }
     }
 
-    private static File exportModule(final SchemaContext schemaContext, final Module module, final File outDir)
+    private static File exportModule(final Module module, final File outDir)
             throws Exception {
         final File outFile = new File(outDir, YinExportUtils.wellFormedYinName(module.getName(), module.getRevision()));
         try (OutputStream output = new FileOutputStream(outFile)) {
-            YinExportUtils.writeModuleToOutputStream(schemaContext, module, output);
+            YinExportUtils.writeModuleAsYinText(module, output);
         }
         return outFile;
     }