From 4078c52f76ce904726f0e127eba1a96c7bae357d Mon Sep 17 00:00:00 2001 From: Gregor Zatko Date: Wed, 15 Apr 2015 12:45:19 +0200 Subject: [PATCH] Bug 2366 - Effective statements impl for new yang parser. - added implementation of effective statements and integration to yang-model-api - added implementation and tests of augment declared statement and AugmentUtils Change-Id: Ifc39ce971cd3efd5bb00f3f4f25dbd791ee65c38 Signed-off-by: Peter Kajsa Signed-off-by: Gregor Zatko --- .../yang/model/api/stmt/InputStatement.java | 4 +- .../yang/model/api/stmt/OutputStatement.java | 4 +- .../yang/parser/spi/meta/StmtContext.java | 7 +- .../parser/stmt/reactor/ModifierImpl.java | 2 +- .../stmt/reactor/RootStatementContext.java | 11 + .../stmt/reactor/StatementContextBase.java | 4 +- .../stmt/reactor/SubstatementContext.java | 12 +- .../stmt/rfc6020/AnyxmlStatementImpl.java | 5 +- .../stmt/rfc6020/ArgumentStatementImpl.java | 5 +- .../stmt/rfc6020/AugmentStatementImpl.java | 47 +++- .../parser/stmt/rfc6020/AugmentUtils.java | 150 ++++++++++++ .../stmt/rfc6020/BaseStatementImpl.java | 4 +- .../stmt/rfc6020/BelongsToStatementImpl.java | 4 +- .../parser/stmt/rfc6020/BitStatementImpl.java | 4 +- .../stmt/rfc6020/CaseStatementImpl.java | 6 +- .../stmt/rfc6020/ChoiceStatementImpl.java | 5 +- .../stmt/rfc6020/ConfigStatementImpl.java | 5 +- .../stmt/rfc6020/ContactStatementImpl.java | 5 +- .../stmt/rfc6020/DefaultStatementImpl.java | 5 +- .../stmt/rfc6020/DeviateStatementImpl.java | 5 +- .../stmt/rfc6020/DeviationStatementImpl.java | 5 +- .../stmt/rfc6020/EnumStatementImpl.java | 5 +- .../rfc6020/ErrorAppTagStatementImpl.java | 4 +- .../rfc6020/ErrorMessageStatementImpl.java | 4 +- .../stmt/rfc6020/ExtensionStatementImpl.java | 5 +- .../stmt/rfc6020/FeatureStatementImpl.java | 5 +- .../stmt/rfc6020/IdentityStatementImpl.java | 4 +- .../stmt/rfc6020/IfFeatureStatementImpl.java | 4 +- .../rfc6020/ImportStatementDefinition.java | 5 +- .../stmt/rfc6020/IncludeStatementImpl.java | 6 +- .../stmt/rfc6020/InputStatementImpl.java | 24 +- .../parser/stmt/rfc6020/KeyStatementImpl.java | 6 +- .../stmt/rfc6020/LeafListStatementImpl.java | 5 +- .../stmt/rfc6020/LeafStatementImpl.java | 5 +- .../stmt/rfc6020/LengthStatementImpl.java | 5 +- .../stmt/rfc6020/ListStatementImpl.java | 5 +- .../stmt/rfc6020/MandatoryStatementImpl.java | 5 +- .../rfc6020/MaxElementsStatementImpl.java | 4 +- .../rfc6020/MinElementsStatementImpl.java | 4 +- .../stmt/rfc6020/ModuleStatementSupport.java | 63 ++---- .../stmt/rfc6020/MustStatementImpl.java | 5 +- .../rfc6020/NotificationStatementImpl.java | 4 +- .../stmt/rfc6020/OrderedByStatementImpl.java | 4 +- .../rfc6020/OrganizationStatementImpl.java | 8 +- .../stmt/rfc6020/OutputStatementImpl.java | 22 +- .../stmt/rfc6020/PatternStatementImpl.java | 5 +- .../stmt/rfc6020/PositionStatementImpl.java | 4 +- .../stmt/rfc6020/RangeStatementImpl.java | 4 +- .../stmt/rfc6020/RefineStatementImpl.java | 5 +- .../rfc6020/RequireInstanceStatementImpl.java | 4 +- .../rfc6020/RevisionDateStatementImpl.java | 4 +- .../stmt/rfc6020/RevisionStatementImpl.java | 5 +- .../parser/stmt/rfc6020/RpcStatementImpl.java | 4 +- .../stmt/rfc6020/StatusStatementImpl.java | 4 +- .../stmt/rfc6020/UnitsStatementImpl.java | 4 +- .../stmt/rfc6020/UsesStatementImpl.java | 41 ++-- .../yang/parser/stmt/rfc6020/Utils.java | 88 +++++-- .../stmt/rfc6020/ValueStatementImpl.java | 4 +- .../stmt/rfc6020/WhenStatementImpl.java | 5 +- .../rfc6020/YangVersionStatementImpl.java | 5 +- .../stmt/rfc6020/YinElementStatementImpl.java | 4 +- ...tEffectiveDocumentedDataNodeContainer.java | 35 +-- .../AbstractEffectiveDocumentedNode.java | 7 + .../AbstractEffectiveSchemaContext.java | 18 +- .../AnyXmlEffectiveStatementImpl.java | 153 +++++++++++++ .../ArgumentEffectiveStatementImpl.java | 22 ++ .../AugmentEffectiveStatementImpl.java | 185 +++++++++++++++ .../effective/BaseEffectiveStatementImpl.java | 21 ++ .../BelongsEffectiveToStatementImpl.java | 21 ++ .../effective/BitEffectiveStatementImpl.java | 20 ++ .../effective/CaseEffectiveStatementImpl.java | 170 ++++++++++++++ .../ChoiceEffectiveStatementImpl.java | 214 ++++++++++++++++++ .../ConfigEffectiveStatementImpl.java | 21 ++ .../ContactEffectiveStatementImpl.java | 21 ++ .../ContainerEffectiveStatementImpl.java | 41 ++-- .../DefaultEffectiveStatementImpl.java | 21 ++ .../DescriptionEffectiveStatementImpl.java | 3 +- .../DeviateEffectiveStatementImpl.java | 19 ++ .../DeviationEffectiveStatementImpl.java | 23 ++ .../effective/EffectiveSchemaContext.java | 56 ++--- .../effective/EnumEffectiveStatementImpl.java | 20 ++ .../ErrorAppTagEffectiveStatementImpl.java | 22 ++ .../ErrorMessageEffectiveStatementImpl.java | 22 ++ .../ExtensionEffectiveStatementImpl.java | 154 +++++++++++++ .../FeatureEffectiveStatementImpl.java | 23 ++ .../FractionDigitsEffectiveStatementImpl.java | 22 ++ .../GroupingEffectiveStatementImpl.java | 4 +- .../IdentityEffectiveStatementImpl.java | 137 +++++++++++ .../IfFeatureEffectiveStatementImpl.java | 23 ++ .../ImportEffectiveStatementImpl.java | 20 ++ .../IncludeEffectiveStatementImpl.java | 21 ++ .../InputEffectiveStatementImpl.java | 168 ++++++++++++++ .../effective/KeyEffectiveStatementImpl.java | 24 ++ .../effective/LeafEffectiveStatementImpl.java | 173 ++++++++++++++ .../LeafListEffectiveStatementImpl.java | 162 +++++++++++++ .../LengthEffectiveStatementImpl.java | 22 ++ .../effective/ListEffectiveStatementImpl.java | 188 +++++++++++++++ .../MandatoryEffectiveStatementImpl.java | 22 ++ .../MaxElementsEffectiveStatementImpl.java | 22 ++ .../MinElementsEffectiveStatementImpl.java | 22 ++ .../ModuleEffectiveStatementImpl.java | 37 +-- .../effective/MustEffectiveStatementImpl.java | 16 ++ .../NotificationEffectiveStatementImpl.java | 133 +++++++++++ .../OrderedByEffectiveStatementImpl.java | 22 ++ .../OrganizationEffectiveStatementImpl.java | 22 ++ .../OutputEffectiveStatementImpl.java | 168 ++++++++++++++ .../PatternEffectiveStatementImpl.java | 22 ++ .../PositionEffectiveStatementImpl.java | 22 ++ .../RangeEffectiveStatementImpl.java | 22 ++ .../RefineEffectiveStatementImpl.java | 23 ++ ...RequireInstanceEffectiveStatementImpl.java | 22 ++ .../RevisionDateEffectiveStatementImpl.java | 21 ++ .../RevisionEffectiveStatementImpl.java | 22 ++ .../effective/RpcEffectiveStatementImpl.java | 178 +++++++++++++++ .../StatusEffectiveStatementImpl.java | 22 ++ .../SubmoduleEffectiveStatementImpl.java | 23 ++ .../UnitsEffectiveStatementImpl.java | 21 ++ .../effective/UsesEffectiveStatementImpl.java | 4 +- .../ValueEffectiveStatementImpl.java | 22 ++ .../effective/WhenEffectiveStatementImpl.java | 23 ++ .../YangVersionEffectiveStatementImpl.java | 22 ++ .../YinElementEffectiveStatementImpl.java | 21 ++ .../build/test/EffectiveBuildTest.java | 50 ++-- .../yang/stmt/test/AugmentProcessTest.java | 87 +++++++ .../yang/stmt/test/AugmentSimplestTest.java | 32 +++ .../yang/stmt/test/YangFileStmtTest.java | 19 +- .../yang/stmt/test/augment/AugmentTest.java | 32 ++- .../stmt/test/augment/TestAugmentSource.java | 2 +- .../src/test/resources/model/subfoo.yang | 2 +- .../semantic-statement-parser/augmented.yang | 11 + .../semantic-statement-parser/root.yang | 14 ++ .../stmt-test/effective-build/aug-root.yang | 21 ++ .../stmt-test/effective-build/augmented.yang | 18 ++ 133 files changed, 3922 insertions(+), 296 deletions(-) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AugmentUtils.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AnyXmlEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ArgumentEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AugmentEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/BaseEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/BelongsEffectiveToStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/BitEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/CaseEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ChoiceEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ConfigEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ContactEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DefaultEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DeviateEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DeviationEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/EnumEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ErrorAppTagEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ErrorMessageEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ExtensionEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/FeatureEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/FractionDigitsEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/IdentityEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/IfFeatureEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ImportEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/IncludeEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/InputEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/KeyEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/LeafEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/LeafListEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/LengthEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ListEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/MandatoryEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/MaxElementsEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/MinElementsEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/MustEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/NotificationEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/OrderedByEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/OrganizationEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/OutputEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/PatternEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/PositionEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RangeEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RefineEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RequireInstanceEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RevisionDateEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RevisionEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RpcEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/StatusEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/SubmoduleEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UnitsEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ValueEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/WhenEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/YangVersionEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/YinElementEffectiveStatementImpl.java create mode 100644 yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/test/AugmentProcessTest.java create mode 100644 yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/test/AugmentSimplestTest.java create mode 100644 yang/yang-parser-impl/src/test/resources/semantic-statement-parser/augmented.yang create mode 100644 yang/yang-parser-impl/src/test/resources/semantic-statement-parser/root.yang create mode 100644 yang/yang-parser-impl/src/test/resources/stmt-test/effective-build/aug-root.yang create mode 100644 yang/yang-parser-impl/src/test/resources/stmt-test/effective-build/augmented.yang diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/InputStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/InputStatement.java index 81122afa81..84426b3551 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/InputStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/InputStatement.java @@ -7,8 +7,10 @@ */ package org.opendaylight.yangtools.yang.model.api.stmt; +import org.opendaylight.yangtools.yang.common.QName; + import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; -public interface InputStatement extends DeclaredStatement, DataDefinitionContainer.WithReusableDefinitions { +public interface InputStatement extends DeclaredStatement, DataDefinitionContainer.WithReusableDefinitions { } diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/OutputStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/OutputStatement.java index b8ff5c7010..efe895103f 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/OutputStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/OutputStatement.java @@ -7,8 +7,10 @@ */ package org.opendaylight.yangtools.yang.model.api.stmt; +import org.opendaylight.yangtools.yang.common.QName; + import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; -public interface OutputStatement extends DeclaredStatement, DataDefinitionContainer.WithReusableDefinitions { +public interface OutputStatement extends DeclaredStatement, DataDefinitionContainer.WithReusableDefinitions { } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java index 514d283e2e..43e2014e32 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java @@ -7,8 +7,9 @@ */ package org.opendaylight.yangtools.yang.parser.spi.meta; -import java.util.Map; +import java.util.List; +import java.util.Map; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase; @@ -37,6 +38,8 @@ public interface StmtContext, E extends Effecti @Nullable A getStatementArgument(); + @Nullable List getArgumentsFromRoot(); + //> // > VT getFromNamespace(Class type, K key) @Nonnull > V getFromNamespace(Class type, K key) throws NamespaceNotAvailableException; @@ -68,7 +71,7 @@ public interface StmtContext, E extends Effecti ModelActionBuilder newInferenceAction(ModelProcessingPhase phase); - > void addContext(Class namepsace, KT key, + > void addContext(Class namespace, KT key, StmtContext stmt); } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ModifierImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ModifierImpl.java index 8c22b734a9..638952cf3d 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ModifierImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ModifierImpl.java @@ -125,7 +125,7 @@ class ModifierImpl implements ModelActionBuilder { try { PhaseFinished phaseFin = new PhaseFinished(); addReq(phaseFin); - contextImpl(context).addPhaseCompletedListener(FULL_DECLARATION,phaseFin); + contextImpl(context).addPhaseCompletedListener(phase,phaseFin); return phaseFin; } catch (SourceException e) { throw shouldNotHappenProbablyBug(e); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java index 18509213a7..f5bf42e66d 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java @@ -7,6 +7,9 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.reactor; +import java.util.List; + +import java.util.LinkedList; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.common.QNameModule; import java.util.Collection; @@ -21,6 +24,7 @@ class RootStatementContext, E extends Effectiv private final SourceSpecificContext sourceContext; private final A argument; + private LinkedList linkedList; RootStatementContext(ContextBuilder builder, SourceSpecificContext sourceContext) throws SourceException { @@ -101,4 +105,11 @@ class RootStatementContext, E extends Effectiv return copy; } + @Override + public List getArgumentsFromRoot() { + LinkedList argumentList = new LinkedList(); + argumentList.add(argument); + return argumentList; + } + } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java index 0f55001b5f..94f29a3cca 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java @@ -350,7 +350,7 @@ public abstract class StatementContextBase, E @Override public > void addContext( - Class namepsace, KT key, StmtContext stmt) { - addContextToNamespace(namepsace,(K) key, stmt); + Class namespace, KT key, StmtContext stmt) { + addContextToNamespace(namespace,(K) key, stmt); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SubstatementContext.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SubstatementContext.java index d0c35df46e..29cac6ead5 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SubstatementContext.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SubstatementContext.java @@ -7,8 +7,9 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.reactor; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.GroupingUtils; +import java.util.List; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.GroupingUtils; import org.opendaylight.yangtools.yang.common.QNameModule; import java.util.Collection; import org.opendaylight.yangtools.yang.common.QName; @@ -109,4 +110,13 @@ class SubstatementContext, E extends EffectiveS StatementContextBase copy = new SubstatementContext(this,newQNameModule, newParent); return copy; } + + @Override + public List getArgumentsFromRoot() { + List argumentsFromRoot = parent.getArgumentsFromRoot(); + argumentsFromRoot.add(argument); + return argumentsFromRoot; + } + + } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AnyxmlStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AnyxmlStatementImpl.java index e069c3f66b..33d753797c 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AnyxmlStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AnyxmlStatementImpl.java @@ -7,8 +7,9 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; -import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.AnyXmlEffectiveStatementImpl; +import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement; import java.util.Collection; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; @@ -49,7 +50,7 @@ public class AnyxmlStatementImpl extends AbstractDeclaredStatement implem @Override public EffectiveStatement createEffective(StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new AnyXmlEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ArgumentStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ArgumentStatementImpl.java index 3d1c0fa160..8930d9c941 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ArgumentStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ArgumentStatementImpl.java @@ -7,8 +7,9 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; -import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ArgumentEffectiveStatementImpl; +import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -47,7 +48,7 @@ public class ArgumentStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new ArgumentEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AugmentStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AugmentStatementImpl.java index 926a39b278..8eabcb68eb 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AugmentStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AugmentStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import static org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase.EFFECTIVE_MODEL; + import java.util.Collection; import javax.annotation.Nonnull; @@ -18,8 +20,13 @@ import org.opendaylight.yangtools.yang.model.api.stmt.DataDefinitionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException; +import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder; +import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; +import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.AugmentEffectiveStatementImpl; public class AugmentStatementImpl extends AbstractDeclaredStatement implements AugmentStatement { @@ -37,7 +44,7 @@ public class AugmentStatementImpl extends AbstractDeclaredStatement ctx, String value) throws SourceException { - return SchemaNodeIdentifier.create(Utils.parseAugmentPath(ctx, value), Utils.isXPathAbsolute(value)); + return SchemaNodeIdentifier.create(AugmentUtils.parseAugmentPath(ctx, value), Utils.isXPathAbsolute(value)); } @Override @@ -48,7 +55,43 @@ public class AugmentStatementImpl extends AbstractDeclaredStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new AugmentEffectiveStatementImpl(ctx); + } + + @Override + public void onFullDefinitionDeclared( + final StmtContext.Mutable> augmentNode) + throws SourceException { + + final ModelActionBuilder augmentAction = augmentNode.newInferenceAction(EFFECTIVE_MODEL); + final ModelActionBuilder.Prerequisite>> sourceCtxPrereq = augmentAction + .requiresCtx(augmentNode, ModelProcessingPhase.FULL_DECLARATION); + + augmentAction.apply(new ModelActionBuilder.InferenceAction() { + + @Override + public void apply() throws InferenceException { + + final StatementContextBase augmentTargetCtx = AugmentUtils + .getAugmentTargetCtx(augmentNode); + StatementContextBase augmentSourceCtx = (StatementContextBase) sourceCtxPrereq + .get(); + + try { + AugmentUtils.copyFromSourceToTarget(augmentSourceCtx, augmentTargetCtx); + } catch (SourceException e) { + e.printStackTrace(); + } + } + + @Override + public void prerequisiteFailed(final Collection> failed) + throws InferenceException { + if (failed.contains(augmentAction)) { + throw new InferenceException("Augment action failed", augmentNode.getStatementSourceReference()); + } + } + }); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AugmentUtils.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AugmentUtils.java new file mode 100644 index 0000000000..66cfd1d51e --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AugmentUtils.java @@ -0,0 +1,150 @@ +/** + * 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.parser.stmt.rfc6020; + +import java.util.Collection; +import java.util.HashSet; + +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.QNameModule; +import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; +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.stmt.AugmentStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; +import org.opendaylight.yangtools.yang.parser.spi.NamespaceToModule; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable; +import org.opendaylight.yangtools.yang.parser.spi.source.ModuleNameToModuleQName; +import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; +import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase; + +public class AugmentUtils { + + private static final String REGEX_PATH_REL1 = "\\.\\.?\\s*/(.+)"; + private static final String REGEX_PATH_REL2 = "//.*"; + + public static Iterable parseAugmentPath(StmtContext ctx, String path) { + + if (path.matches(REGEX_PATH_REL1) || path.matches(REGEX_PATH_REL2)) { + throw new IllegalArgumentException( + "An argument for augment can be only absolute path; or descendant if used in uses"); + } + + return Utils.parseXPath(ctx, path); + } + + public static void copyFromSourceToTarget(StatementContextBase sourceCtx, + StatementContextBase targetCtx) throws SourceException { + + QNameModule newQNameModule = getNewQNameModule(targetCtx, sourceCtx); + copyDeclaredStmts(sourceCtx, targetCtx, newQNameModule); + copyEffectiveStmts(sourceCtx, targetCtx, newQNameModule); + + } + + public static void copyDeclaredStmts(StatementContextBase sourceCtx, + StatementContextBase targetCtx, QNameModule newQNameModule) throws SourceException { + Collection> declaredSubstatements = sourceCtx.declaredSubstatements(); + for (StatementContextBase originalStmtCtx : declaredSubstatements) { + if (needToCopyByAugment(originalStmtCtx)) { + StatementContextBase copy = originalStmtCtx.createCopy(newQNameModule, targetCtx); + targetCtx.addEffectiveSubstatement(copy); + } else if (isReusedByAugment(originalStmtCtx)) { + targetCtx.addEffectiveSubstatement(originalStmtCtx); + } + } + } + + public static void copyEffectiveStmts(StatementContextBase sourceCtx, + StatementContextBase targetCtx, QNameModule newQNameModule) throws SourceException { + Collection> effectiveSubstatements = sourceCtx.effectiveSubstatements(); + for (StatementContextBase originalStmtCtx : effectiveSubstatements) { + if (needToCopyByAugment(originalStmtCtx)) { + StatementContextBase copy = originalStmtCtx.createCopy(newQNameModule, targetCtx); + targetCtx.addEffectiveSubstatement(copy); + } else if (isReusedByAugment(originalStmtCtx)) { + targetCtx.addEffectiveSubstatement(originalStmtCtx); + } + } + } + + public static QNameModule getNewQNameModule(StatementContextBase targetCtx, + StatementContextBase sourceCtx) { + Object targetStmtArgument = targetCtx.getStatementArgument(); + + final StatementContextBase root = sourceCtx.getRoot(); + final String moduleName = (String) root.getStatementArgument(); + final QNameModule sourceQNameModule = root.getFromNamespace(ModuleNameToModuleQName.class, moduleName); + + if (targetStmtArgument instanceof QName) { + QName targetQName = (QName) targetStmtArgument; + QNameModule targetQNameModule = targetQName.getModule(); + + if (targetQNameModule.equals(sourceQNameModule)) + return null; + else + return targetQNameModule; + } else + return null; + } + + public static boolean needToCopyByAugment(StmtContext stmtContext) { + + HashSet noCopyDefSet = new HashSet<>(); + noCopyDefSet.add(Rfc6020Mapping.USES); + + StatementDefinition def = stmtContext.getPublicDefinition(); + if (noCopyDefSet.contains(def)) + return false; + else + return true; + } + + public static boolean isReusedByAugment(StmtContext stmtContext) { + + HashSet reusedDefSet = new HashSet<>(); + reusedDefSet.add(Rfc6020Mapping.TYPEDEF); + + StatementDefinition def = stmtContext.getPublicDefinition(); + if (reusedDefSet.contains(def)) + return true; + else + return false; + } + + public static StatementContextBase getAugmentTargetCtx( + final Mutable> augmentNode) { + + final SchemaNodeIdentifier augmentTargetPath = augmentNode.getStatementArgument(); + + QNameModule module; + if (augmentTargetPath != null) { + module = augmentTargetPath.getPathFromRoot().iterator().next().getModule(); + } else { + throw new IllegalArgumentException( + "Augment argument null, something bad happened in some of previous parsing phases"); + } + + StatementContextBase rootStatementCtx = (StatementContextBase) augmentNode.getFromNamespace( + NamespaceToModule.class, module); + + final StatementContextBase augmentTargetCtx = Utils.findCtxOfNodeInRoot(rootStatementCtx, + augmentTargetPath); + + if (augmentTargetCtx == null) { + + throw new NullPointerException(String.format( + "Augment path %s not found in target model so its resulting context is null", + augmentNode.rawStatementArgument())); + + } + + return augmentTargetCtx; + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BaseStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BaseStatementImpl.java index b2bd11d73e..5460fd238f 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BaseStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BaseStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.BaseEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -44,7 +46,7 @@ public class BaseStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new BaseEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BelongsToStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BelongsToStatementImpl.java index 276da9667d..ea73c8d341 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BelongsToStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BelongsToStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.BelongsEffectiveToStatementImpl; + import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -45,7 +47,7 @@ public class BelongsToStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new BelongsEffectiveToStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BitStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BitStatementImpl.java index 6080528ef4..93e227ac00 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BitStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BitStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.BitEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PositionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; @@ -48,7 +50,7 @@ public class BitStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new BitEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/CaseStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/CaseStatementImpl.java index a6e29b2b3c..3160131603 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/CaseStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/CaseStatementImpl.java @@ -7,6 +7,9 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.CaseEffectiveStatementImpl; + +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.PresenceEffectiveStatementImpl; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -21,7 +24,6 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; - import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.Collection; @@ -51,7 +53,7 @@ public class CaseStatementImpl extends AbstractDeclaredStatement implemen @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new CaseEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ChoiceStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ChoiceStatementImpl.java index 3feee1f195..28c7f52371 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ChoiceStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ChoiceStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ChoiceEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -24,7 +26,6 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; - import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.Collection; @@ -59,7 +60,7 @@ public class ChoiceStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new ChoiceEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ConfigStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ConfigStatementImpl.java index b25f9751e7..d7f1f0a170 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ConfigStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ConfigStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ConfigEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; @@ -14,7 +16,6 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; - import javax.annotation.Nonnull; public class ConfigStatementImpl extends AbstractDeclaredStatement implements ConfigStatement { @@ -40,7 +41,7 @@ public class ConfigStatementImpl extends AbstractDeclaredStatement impl } @Override public EffectiveStatement createEffective(StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new ConfigEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ContactStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ContactStatementImpl.java index e3ef013af4..eca9c5b9ec 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ContactStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ContactStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ContactEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ContactStatement; @@ -14,7 +16,6 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; - import javax.annotation.Nonnull; public class ContactStatementImpl extends AbstractDeclaredStatement implements ContactStatement{ @@ -41,7 +42,7 @@ public class ContactStatementImpl extends AbstractDeclaredStatement impl @Override public EffectiveStatement createEffective(StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new ContactEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/DefaultStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/DefaultStatementImpl.java index 95aadef07d..dbf650af41 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/DefaultStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/DefaultStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.DefaultEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement; @@ -14,7 +16,6 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; - import javax.annotation.Nonnull; public class DefaultStatementImpl extends AbstractDeclaredStatement implements @@ -43,7 +44,7 @@ public class DefaultStatementImpl extends AbstractDeclaredStatement impl @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new DefaultEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/DeviateStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/DeviateStatementImpl.java index b47dc797bb..56755e411c 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/DeviateStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/DeviateStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.DeviateEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DeviateStatement; @@ -14,7 +16,6 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; - import javax.annotation.Nonnull; public class DeviateStatementImpl extends AbstractDeclaredStatement implements DeviateStatement { @@ -42,7 +43,7 @@ public class DeviateStatementImpl extends AbstractDeclaredStatement impl @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new DeviateEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/DeviationStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/DeviationStatementImpl.java index 4d6b4331e3..8dea301b71 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/DeviationStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/DeviationStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.DeviationEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DeviationStatement; @@ -15,7 +17,6 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; - import javax.annotation.Nonnull; public class DeviationStatementImpl extends AbstractDeclaredStatement implements DeviationStatement { @@ -43,7 +44,7 @@ public class DeviationStatementImpl extends AbstractDeclaredStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new DeviationEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/EnumStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/EnumStatementImpl.java index a5558a5aa5..3fa1b1ce7f 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/EnumStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/EnumStatementImpl.java @@ -7,8 +7,9 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; -import org.opendaylight.yangtools.yang.model.api.stmt.ValueStatement; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EnumEffectiveStatementImpl; +import org.opendaylight.yangtools.yang.model.api.stmt.ValueStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; @@ -49,7 +50,7 @@ public class EnumStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new EnumEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ErrorAppTagStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ErrorAppTagStatementImpl.java index 4e1c9ab083..7db9c97909 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ErrorAppTagStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ErrorAppTagStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ErrorAppTagEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ErrorAppTagStatement; @@ -44,7 +46,7 @@ public class ErrorAppTagStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new ErrorAppTagEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ErrorMessageStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ErrorMessageStatementImpl.java index 4ad3f499fe..7769180f09 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ErrorMessageStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ErrorMessageStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ErrorMessageEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageStatement; @@ -44,7 +46,7 @@ public class ErrorMessageStatementImpl extends @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new ErrorMessageEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ExtensionStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ExtensionStatementImpl.java index 65ae9e4d3c..2e9c54ffdd 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ExtensionStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ExtensionStatementImpl.java @@ -7,8 +7,9 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; -import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentStatement; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ExtensionEffectiveStatementImpl; +import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentStatement; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -44,7 +45,7 @@ public class ExtensionStatementImpl extends AbstractDeclaredStatement imp @Override public EffectiveStatement createEffective(StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new ExtensionEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/FeatureStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/FeatureStatementImpl.java index 3034662c01..c59ea619b5 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/FeatureStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/FeatureStatementImpl.java @@ -7,9 +7,10 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.FeatureEffectiveStatementImpl; + import java.util.Collection; import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; - import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -51,7 +52,7 @@ public class FeatureStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new FeatureEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IdentityStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IdentityStatementImpl.java index c5ea40ccaa..092cc411e3 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IdentityStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IdentityStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.IdentityEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.stmt.BaseStatement; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; @@ -49,7 +51,7 @@ public class IdentityStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new IdentityEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IfFeatureStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IfFeatureStatementImpl.java index 42c5e1ee57..4b2e434203 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IfFeatureStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IfFeatureStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.IfFeatureEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -45,7 +47,7 @@ public class IfFeatureStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new IfFeatureEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ImportStatementDefinition.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ImportStatementDefinition.java index 2f9eb15799..01451c92d4 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ImportStatementDefinition.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ImportStatementDefinition.java @@ -9,6 +9,9 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; import static org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase.SOURCE_LINKAGE; import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.firstAttributeOf; + +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ImportEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.parser.spi.source.ImpPrefixToModuleIdentifier; import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; import com.google.common.base.Optional; @@ -53,7 +56,7 @@ public class ImportStatementDefinition extends @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new ImportEffectiveStatementImpl(ctx); } @Override diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IncludeStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IncludeStatementImpl.java index 5305e3ba67..4b425c33e1 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IncludeStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IncludeStatementImpl.java @@ -10,11 +10,12 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; import static org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase.SOURCE_LINKAGE; import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.firstAttributeOf; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.IncludeEffectiveStatementImpl; + import java.net.URI; import java.text.ParseException; import java.util.Collection; import java.util.Date; - import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil; import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier; import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; @@ -33,7 +34,6 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.Prereq import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; - import com.google.common.base.Optional; public class IncludeStatementImpl extends AbstractDeclaredStatement implements IncludeStatement { @@ -62,7 +62,7 @@ public class IncludeStatementImpl extends AbstractDeclaredStatement impl @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new IncludeEffectiveStatementImpl(ctx); } @Override diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/InputStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/InputStatementImpl.java index 14a7391547..e0b7189a3f 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/InputStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/InputStatementImpl.java @@ -7,6 +7,9 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.InputEffectiveStatementImpl; + +import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; import java.util.Collection; import org.opendaylight.yangtools.yang.model.api.stmt.DataDefinitionStatement; @@ -19,38 +22,38 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public class InputStatementImpl extends AbstractDeclaredStatement +public class InputStatementImpl extends AbstractDeclaredStatement implements InputStatement { - protected InputStatementImpl( - StmtContext context) { + protected InputStatementImpl(StmtContext context) { super(context); } public static class Definition extends - AbstractStatementSupport> { + AbstractStatementSupport> { public Definition() { super(Rfc6020Mapping.INPUT); } @Override - public Void parseArgumentValue(StmtContext ctx, String value) + public QName parseArgumentValue(StmtContext ctx, String value) throws SourceException { - return null; + value = "input"; + return Utils.qNameFromArgument(ctx, value); } @Override public InputStatement createDeclared( - StmtContext ctx) { + StmtContext ctx) { return new InputStatementImpl(ctx); } @Override - public EffectiveStatement createEffective( - StmtContext> ctx) { - throw new UnsupportedOperationException(); + public EffectiveStatement createEffective( + StmtContext> ctx) { + return new InputEffectiveStatementImpl(ctx); } } @@ -70,4 +73,3 @@ public class InputStatementImpl extends AbstractDeclaredStatement return allDeclared(DataDefinitionStatement.class); } } - diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/KeyStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/KeyStatementImpl.java index f80e0cd8c3..d0ec799c51 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/KeyStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/KeyStatementImpl.java @@ -7,11 +7,12 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.KeyEffectiveStatementImpl; + import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; - import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement; @@ -20,7 +21,6 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; - import com.google.common.base.Splitter; public class KeyStatementImpl extends AbstractDeclaredStatement> implements @@ -72,7 +72,7 @@ public class KeyStatementImpl extends AbstractDeclaredStatement, KeyStatement> createEffective( StmtContext, KeyStatement, EffectiveStatement, KeyStatement>> ctx) { - throw new UnsupportedOperationException(); + return new KeyEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/LeafListStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/LeafListStatementImpl.java index 032e1b9ade..06de848b2f 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/LeafListStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/LeafListStatementImpl.java @@ -7,9 +7,10 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.LeafListEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UnitsStatement; - import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MinElementsStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement; @@ -63,7 +64,7 @@ public class LeafListStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new LeafListEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/LeafStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/LeafStatementImpl.java index 4e06178ec1..9a9b88297b 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/LeafStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/LeafStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.LeafEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -26,7 +28,6 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; - import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.Collection; @@ -55,7 +56,7 @@ public class LeafStatementImpl extends AbstractDeclaredStatement implemen @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new LeafEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/LengthStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/LengthStatementImpl.java index bf959f8a4c..1c698397c2 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/LengthStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/LengthStatementImpl.java @@ -7,11 +7,12 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.LengthEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; 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.ReferenceStatement; - import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.LengthStatement; @@ -49,7 +50,7 @@ public class LengthStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new LengthEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ListStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ListStatementImpl.java index 3279abc8ff..f724973039 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ListStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ListStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ListEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.stmt.DataDefinitionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement; import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement; @@ -16,7 +18,6 @@ import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement; import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UniqueStatement; - import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -65,7 +66,7 @@ public class ListStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new ListEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MandatoryStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MandatoryStatementImpl.java index fd9331f922..d2b30d071b 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MandatoryStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MandatoryStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.MandatoryEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement; @@ -14,7 +16,6 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; - import javax.annotation.Nonnull; public class MandatoryStatementImpl extends AbstractDeclaredStatement implements @@ -43,7 +44,7 @@ public class MandatoryStatementImpl extends AbstractDeclaredStatement i @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new MandatoryEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MaxElementsStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MaxElementsStatementImpl.java index ed0f27e3b6..d9be753688 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MaxElementsStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MaxElementsStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.MaxElementsEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsStatement; @@ -44,7 +46,7 @@ public class MaxElementsStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new MaxElementsEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MinElementsStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MinElementsStatementImpl.java index b0b1ab033a..bb66ed69e5 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MinElementsStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MinElementsStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.MinElementsEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MinElementsStatement; @@ -44,7 +46,7 @@ public class MinElementsStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new MinElementsEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ModuleStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ModuleStatementSupport.java index fb2eb38924..3324b876e2 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ModuleStatementSupport.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ModuleStatementSupport.java @@ -36,10 +36,11 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -public class ModuleStatementSupport - extends +public class ModuleStatementSupport extends AbstractStatementSupport> { + private QNameModule qNameModule; + public ModuleStatementSupport() { super(Rfc6020Mapping.MODULE); } @@ -50,8 +51,7 @@ public class ModuleStatementSupport } @Override - public ModuleStatement createDeclared( - StmtContext ctx) { + public ModuleStatement createDeclared(StmtContext ctx) { return new ModuleStatementImpl(ctx); } @@ -62,34 +62,29 @@ public class ModuleStatementSupport } @Override - public void onLinkageDeclared( - Mutable> stmt) + public void onLinkageDeclared(Mutable> stmt) throws InferenceException, SourceException { - Optional moduleNs = Optional.fromNullable(firstAttributeOf( - stmt.declaredSubstatements(), NamespaceStatement.class)); + Optional moduleNs = Optional.fromNullable(firstAttributeOf(stmt.declaredSubstatements(), + NamespaceStatement.class)); if (!moduleNs.isPresent()) { - throw new IllegalArgumentException("Namespace of the module [" - + stmt.getStatementArgument() + "] is missing."); + throw new IllegalArgumentException("Namespace of the module [" + stmt.getStatementArgument() + + "] is missing."); } - Optional revisionDate = Optional.fromNullable(firstAttributeOf( - stmt.declaredSubstatements(), RevisionStatement.class)); + Optional revisionDate = Optional.fromNullable(firstAttributeOf(stmt.declaredSubstatements(), + RevisionStatement.class)); - QNameModule qNameModule = QNameModule.create(moduleNs.get(), - revisionDate.orNull()); - ModuleIdentifier moduleIdentifier = new ModuleIdentifierImpl( - stmt.getStatementArgument(), Optional. absent(), - revisionDate); + qNameModule = QNameModule.create(moduleNs.get(), revisionDate.orNull()); + ModuleIdentifier moduleIdentifier = new ModuleIdentifierImpl(stmt.getStatementArgument(), + Optional. absent(), revisionDate); stmt.addContext(ModuleNamespace.class, moduleIdentifier, stmt); stmt.addContext(NamespaceToModule.class, qNameModule, stmt); - String modulePrefix = firstAttributeOf(stmt.declaredSubstatements(), - PrefixStatement.class); + String modulePrefix = firstAttributeOf(stmt.declaredSubstatements(), PrefixStatement.class); if (modulePrefix == null) { - throw new IllegalArgumentException("Prefix of the module [" - + stmt.getStatementArgument() + "] is missing."); + throw new IllegalArgumentException("Prefix of the module [" + stmt.getStatementArgument() + "] is missing."); } stmt.addToNs(PrefixToModule.class, modulePrefix, qNameModule); @@ -98,27 +93,13 @@ public class ModuleStatementSupport stmt.addToNs(ModuleIdentifierToModuleQName.class, moduleIdentifier, qNameModule); stmt.addToNs(ImpPrefixToModuleIdentifier.class, modulePrefix, moduleIdentifier); - } + @Override + public void onFullDefinitionDeclared( + final Mutable> stmt) + throws SourceException { - -// @Override -// public void onFullDefinitionDeclared( -// Mutable> stmt) -// throws InferenceException, SourceException { -// -// Optional revisionDate = Optional.fromNullable(firstAttributeOf( -// stmt.declaredSubstatements(), RevisionStatement.class)); -// -// ModuleIdentifier moduleIdentifier = new ModuleIdentifierImpl( -// stmt.getStatementArgument(), Optional. absent(), -// revisionDate); -// -// String modulePrefix = firstAttributeOf(stmt.declaredSubstatements(), -// PrefixStatement.class); -// -// stmt.addToNs(ImpPrefixToModuleIdentifier.class, modulePrefix, moduleIdentifier); -// } - + stmt.addContext(NamespaceToModule.class, qNameModule, stmt); + } } \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MustStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MustStatementImpl.java index c326f4c4c9..5df5575050 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MustStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MustStatementImpl.java @@ -1,5 +1,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.MustEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -13,7 +15,6 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; - import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -43,7 +44,7 @@ public class MustStatementImpl extends AbstractDeclaredStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new MustEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/NotificationStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/NotificationStatementImpl.java index db4f195602..31aa579d33 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/NotificationStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/NotificationStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.NotificationEffectiveStatementImpl; + import javax.annotation.Nullable; import java.util.Collection; import org.opendaylight.yangtools.yang.model.api.stmt.DataDefinitionStatement; @@ -53,7 +55,7 @@ public class NotificationStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new NotificationEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OrderedByStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OrderedByStatementImpl.java index f47c68a2f2..eb9872e1eb 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OrderedByStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OrderedByStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.OrderedByEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByStatement; @@ -44,7 +46,7 @@ public class OrderedByStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new OrderedByEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OrganizationStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OrganizationStatementImpl.java index 11f38b1da1..afdab511a2 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OrganizationStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OrganizationStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.OrganizationEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.OrganizationStatement; @@ -14,8 +16,8 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public class OrganizationStatementImpl extends AbstractDeclaredStatement - implements OrganizationStatement { +public class OrganizationStatementImpl extends + AbstractDeclaredStatement implements OrganizationStatement { protected OrganizationStatementImpl( StmtContext context) { @@ -44,7 +46,7 @@ public class OrganizationStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new OrganizationEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OutputStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OutputStatementImpl.java index 53044b435d..f362fbf4ab 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OutputStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OutputStatementImpl.java @@ -7,6 +7,9 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.common.QName; + +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.OutputEffectiveStatementImpl; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; import java.util.Collection; import org.opendaylight.yangtools.yang.model.api.stmt.DataDefinitionStatement; @@ -19,38 +22,39 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public class OutputStatementImpl extends AbstractDeclaredStatement +public class OutputStatementImpl extends AbstractDeclaredStatement implements OutputStatement { protected OutputStatementImpl( - StmtContext context) { + StmtContext context) { super(context); } public static class Definition extends - AbstractStatementSupport> { + AbstractStatementSupport> { public Definition() { super(Rfc6020Mapping.OUTPUT); } @Override - public Void parseArgumentValue(StmtContext ctx, String value) + public QName parseArgumentValue(StmtContext ctx, String value) throws SourceException { - return null; + value = "output"; + return Utils.qNameFromArgument(ctx, value); } @Override public OutputStatement createDeclared( - StmtContext ctx) { + StmtContext ctx) { return new OutputStatementImpl(ctx); } @Override - public EffectiveStatement createEffective( - StmtContext> ctx) { - throw new UnsupportedOperationException(); + public EffectiveStatement createEffective( + StmtContext> ctx) { + return new OutputEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PatternStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PatternStatementImpl.java index 714c943adc..41c2875486 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PatternStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PatternStatementImpl.java @@ -7,11 +7,12 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.PatternEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; 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.ReferenceStatement; - import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PatternStatement; @@ -49,7 +50,7 @@ public class PatternStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new PatternEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PositionStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PositionStatementImpl.java index 0d0de1aae4..9496c69b75 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PositionStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PositionStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.PositionEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PositionStatement; @@ -44,7 +46,7 @@ public class PositionStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new PositionEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RangeStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RangeStatementImpl.java index d57c353a34..bd16e1fc94 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RangeStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RangeStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.RangeEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ErrorAppTagStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageStatement; @@ -48,7 +50,7 @@ public class RangeStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new RangeEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RefineStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RefineStatementImpl.java index 73f2163cc1..4ab19956b3 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RefineStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RefineStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.RefineEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; @@ -17,7 +19,6 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; - import javax.annotation.Nullable; public class RefineStatementImpl extends AbstractDeclaredStatement implements RefineStatement { @@ -46,7 +47,7 @@ public class RefineStatementImpl extends AbstractDeclaredStatement createEffective(StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new RefineEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RequireInstanceStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RequireInstanceStatementImpl.java index 2d43039aff..0573fc310d 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RequireInstanceStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RequireInstanceStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.RequireInstanceEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceStatement; @@ -44,7 +46,7 @@ public class RequireInstanceStatementImpl extends @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new RequireInstanceEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RevisionDateStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RevisionDateStatementImpl.java index 7918d7a7ba..301978546c 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RevisionDateStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RevisionDateStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.RevisionDateEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement; @@ -44,7 +46,7 @@ public class RevisionDateStatementImpl extends @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new RevisionDateEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RevisionStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RevisionStatementImpl.java index 640a24f672..8297e15674 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RevisionStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RevisionStatementImpl.java @@ -7,8 +7,9 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; -import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.RevisionEffectiveStatementImpl; +import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil; import java.text.ParseException; import java.util.Date; import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; @@ -61,7 +62,7 @@ public class RevisionStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new RevisionEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RpcStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RpcStatementImpl.java index 5d68f3700f..c5c727dfaf 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RpcStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RpcStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.RpcEffectiveStatementImpl; + import javax.annotation.Nullable; import java.util.Collection; import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; @@ -54,7 +56,7 @@ public class RpcStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new RpcEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/StatusStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/StatusStatementImpl.java index 323722e7fc..b7401e56d2 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/StatusStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/StatusStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.StatusEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; @@ -44,7 +46,7 @@ public class StatusStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new StatusEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UnitsStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UnitsStatementImpl.java index 2778d3f649..f61576b4f5 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UnitsStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UnitsStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.UnitsEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UnitsStatement; @@ -43,7 +45,7 @@ public class UnitsStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new UnitsEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UsesStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UsesStatementImpl.java index e1058c9f98..631fb31795 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UsesStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UsesStatementImpl.java @@ -9,10 +9,8 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; import static org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase.FULL_DECLARATION; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.UsesEffectiveStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase; -import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; import java.util.Collection; + import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; @@ -35,16 +33,17 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder; import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.InferenceAction; import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.Prerequisite; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; +import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.UsesEffectiveStatementImpl; -public class UsesStatementImpl extends AbstractDeclaredStatement - implements UsesStatement { +public class UsesStatementImpl extends AbstractDeclaredStatement implements UsesStatement { protected UsesStatementImpl(StmtContext context) { super(context); } - public static class Definition - extends + public static class Definition extends AbstractStatementSupport> { public Definition() { @@ -57,23 +56,29 @@ public class UsesStatementImpl extends AbstractDeclaredStatement } @Override - public void onFullDefinitionDeclared(final StmtContext.Mutable> usesNode) throws InferenceException ,SourceException { + public void onFullDefinitionDeclared( + final StmtContext.Mutable> usesNode) + throws InferenceException, SourceException { ModelActionBuilder usesAction = usesNode.newInferenceAction(FULL_DECLARATION); final QName groupingName = usesNode.getStatementArgument(); - final Prerequisite> sourceGroupingPre = usesAction.requiresCtx(usesNode, GroupingNamespace.class, groupingName, FULL_DECLARATION); - final Prerequisite< ?extends StmtContext.Mutable> targetNodePre = usesAction.mutatesCtx(usesNode.getParentContext(), FULL_DECLARATION); + final Prerequisite> sourceGroupingPre = usesAction.requiresCtx(usesNode, + GroupingNamespace.class, groupingName, FULL_DECLARATION); + final Prerequisite> targetNodePre = usesAction.mutatesCtx( + usesNode.getParentContext(), FULL_DECLARATION); usesAction.apply(new InferenceAction() { @Override public void apply() throws InferenceException { - StatementContextBase targetNodeStmtCtx = (StatementContextBase) targetNodePre.get(); - StatementContextBase sourceGrpStmtCtx = (StatementContextBase) sourceGroupingPre.get(); + StatementContextBase targetNodeStmtCtx = (StatementContextBase) targetNodePre + .get(); + StatementContextBase sourceGrpStmtCtx = (StatementContextBase) sourceGroupingPre + .get(); try { - GroupingUtils.copyFromSourceToTarget(sourceGrpStmtCtx,targetNodeStmtCtx); + GroupingUtils.copyFromSourceToTarget(sourceGrpStmtCtx, targetNodeStmtCtx); GroupingUtils.resolveUsesNode(usesNode, targetNodeStmtCtx); } catch (SourceException e) { // TODO Auto-generated catch block @@ -83,10 +88,11 @@ public class UsesStatementImpl extends AbstractDeclaredStatement @Override public void prerequisiteFailed(Collection> failed) throws InferenceException { - if(failed.contains(sourceGroupingPre)) { - throw new InferenceException("Grouping " + groupingName + " was not resoled.", usesNode.getStatementSourceReference()); + if (failed.contains(sourceGroupingPre)) { + throw new InferenceException("Grouping " + groupingName + " was not resovled.", usesNode + .getStatementSourceReference()); } - throw new InferenceException("Unknown error occured.", usesNode.getStatementSourceReference()); + throw new InferenceException("Unknown error occurred.", usesNode.getStatementSourceReference()); } }); @@ -94,8 +100,7 @@ public class UsesStatementImpl extends AbstractDeclaredStatement } @Override - public UsesStatement createDeclared( - StmtContext ctx) { + public UsesStatement createDeclared(StmtContext ctx) { return new UsesStatementImpl(ctx); } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java index aa9899850b..456d124a5d 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java @@ -14,19 +14,26 @@ import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; +import java.util.Iterator; +import java.util.LinkedList; import java.util.List; + +import javax.annotation.Nullable; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; + import org.antlr.v4.runtime.tree.TerminalNode; import org.opendaylight.yangtools.antlrv4.code.gen.YangStatementParser; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.meta.StatementSource; import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; @@ -36,6 +43,8 @@ import org.opendaylight.yangtools.yang.parser.spi.source.ModuleIdentifierToModul import org.opendaylight.yangtools.yang.parser.spi.source.ModuleNameToModuleQName; import org.opendaylight.yangtools.yang.parser.spi.source.PrefixToModule; import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference; +import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase; + import com.google.common.base.CharMatcher; import com.google.common.base.Splitter; @@ -44,11 +53,9 @@ public class Utils { private static final CharMatcher DOUBLE_QUOTE_MATCHER = CharMatcher.is('"'); private static final CharMatcher SINGLE_QUOTE_MATCHER = CharMatcher.is('\''); - private static final char SEPARATOR_QNAME = '/'; + private static final char SEPARATOR_NODENAME = '/'; private static final String REGEX_PATH_ABS = "/[^/].+"; - private static final String REGEX_PATH_REL1 = "\\.\\.?\\s*/(.+)"; - private static final String REGEX_PATH_REL2 = "//.*"; public static final StatementSourceReference CONTEXT_REF = new StatementSourceReference() { @@ -58,6 +65,12 @@ public class Utils { } }; + public static List splitPathToNodeNames(String path) { + + Splitter keySplitter = Splitter.on(SEPARATOR_NODENAME).omitEmptyStrings().trimResults(); + return keySplitter.splitToList(path); + } + public static void validateXPath(String path) { final XPath xPath = XPathFactory.newInstance().newXPath(); @@ -80,8 +93,7 @@ public class Utils { validateXPath(path); - Splitter keySplitter = Splitter.on(SEPARATOR_QNAME).omitEmptyStrings().trimResults(); - List nodeNames = keySplitter.splitToList(path); + List nodeNames = splitPathToNodeNames(path); List qNames = new ArrayList<>(); for (String nodeName : nodeNames) { @@ -96,16 +108,6 @@ public class Utils { return qNames; } - public static Iterable parseAugmentPath(StmtContext ctx, String path) { - - if (path.matches(REGEX_PATH_REL1) || path.matches(REGEX_PATH_REL2)) { - throw new IllegalArgumentException( - "An argument for augment can be only absolute path; or descendant if used in uses"); - } - - return parseXPath(ctx, path); - } - public static String stringFromStringContext(final YangStatementParser.ArgumentContext context) { StringBuilder sb = new StringBuilder(); List strings = context.STRING(); @@ -175,4 +177,60 @@ public class Utils { return QName.create(qNameModule, localName); } + + @Nullable + public static StatementContextBase findCtxOfNodeInRoot(StatementContextBase rootStmtCtx, + final SchemaNodeIdentifier node) { + + StatementContextBase parent = rootStmtCtx; + final Iterator pathIter = node.getPathFromRoot().iterator(); + + QName targetNode = pathIter.next(); + + while (pathIter.hasNext()) { + + for (StatementContextBase child : parent.declaredSubstatements()) { + + if (targetNode.equals(child.getStatementArgument())) { + parent = child; + targetNode = pathIter.next(); + } + } + + if (parent.equals(rootStmtCtx)) { + + return null; + } + } + + StatementContextBase targetCtx = null; + + for (StatementContextBase child : parent.declaredSubstatements()) { + + if (targetNode.equals(child.getStatementArgument())) { + targetCtx = child; + } + } + + return targetCtx; + } + + public static SchemaPath getSchemaPath(StmtContext ctx) { + + Iterator argumentsIterator = ctx.getArgumentsFromRoot().iterator(); + argumentsIterator.next(); // skip root argument + + List qNamesFromRoot = new LinkedList<>(); + + while (argumentsIterator.hasNext()) { + Object argument = argumentsIterator.next(); + if (argument instanceof QName) { + QName qname = (QName) argument; + qNamesFromRoot.add(qname); + } else + return SchemaPath.SAME; + } + + return SchemaPath.create(qNamesFromRoot, true); + } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ValueStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ValueStatementImpl.java index 5c4dfb7c97..558f4c0796 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ValueStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ValueStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ValueEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ValueStatement; @@ -43,7 +45,7 @@ public class ValueStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new ValueEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/WhenStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/WhenStatementImpl.java index f6472260fc..7e5fc5646f 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/WhenStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/WhenStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.WhenEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -18,7 +20,6 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; - import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -48,7 +49,7 @@ public class WhenStatementImpl extends AbstractDeclaredStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new WhenEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YangVersionStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YangVersionStatementImpl.java index 4ce7f43992..093c3df202 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YangVersionStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YangVersionStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.YangVersionEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionStatement; @@ -14,7 +16,6 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; - import javax.annotation.Nonnull; public class YangVersionStatementImpl extends AbstractDeclaredStatement implements YangVersionStatement { @@ -41,7 +42,7 @@ public class YangVersionStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective(StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new YangVersionEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YinElementStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YinElementStatementImpl.java index 54115176e5..79f437a55b 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YinElementStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YinElementStatementImpl.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.YinElementEffectiveStatementImpl; + import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement; @@ -44,7 +46,7 @@ public class YinElementStatementImpl extends AbstractDeclaredStatement @Override public EffectiveStatement createEffective( StmtContext> ctx) { - throw new UnsupportedOperationException(); + return new YinElementEffectiveStatementImpl(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveDocumentedDataNodeContainer.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveDocumentedDataNodeContainer.java index 78906ce760..f0b521e21b 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveDocumentedDataNodeContainer.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveDocumentedDataNodeContainer.java @@ -1,5 +1,5 @@ -/* - * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. +/** + * 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, @@ -7,14 +7,15 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective; +import com.google.common.collect.ImmutableSet; + +import com.google.common.collect.ImmutableMap; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; - import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; -import java.util.Map; import java.util.Set; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; @@ -27,11 +28,11 @@ public abstract class AbstractEffectiveDocumentedDataNodeContainer implements DataNodeContainer { - private final Map childNodes; - private final Set groupings; - private final Set uses; - private final Set> typeDefinitions; - private final Set publicChildNodes; + private final ImmutableMap childNodes; + private final ImmutableSet groupings; + private final ImmutableSet uses; + private final ImmutableSet> typeDefinitions; + private final ImmutableSet publicChildNodes; protected AbstractEffectiveDocumentedDataNodeContainer( final StmtContext ctx) { @@ -39,11 +40,11 @@ public abstract class AbstractEffectiveDocumentedDataNodeContainer> effectiveSubstatements = effectiveSubstatements(); - childNodes = new HashMap(); - groupings = new HashSet(); - uses = new HashSet(); - typeDefinitions = new HashSet>(); - publicChildNodes = new HashSet(); + HashMap childNodes = new HashMap(); + HashSet groupings = new HashSet(); + HashSet uses = new HashSet(); + HashSet> typeDefinitions = new HashSet>(); + HashSet publicChildNodes = new HashSet(); for (EffectiveStatement effectiveStatement : effectiveSubstatements) { if (effectiveStatement instanceof DataSchemaNode) { @@ -65,6 +66,12 @@ public abstract class AbstractEffectiveDocumentedDataNodeContainer> MODULE_SET_SUPPLIER = new Supplier>() { @@ -117,11 +123,12 @@ public abstract class AbstractEffectiveSchemaContext implements SchemaContext { @Override public Set findModuleByNamespace(final URI namespace) { final Set ret = getNamespaceToModules().get(namespace); - return ret == null ? Collections.emptySet() : ret; + return ret == null ? Collections. emptySet() : ret; } @Override - public Module findModuleByNamespaceAndRevision(final URI namespace, final Date revision) { + public Module findModuleByNamespaceAndRevision(final URI namespace, + final Date revision) { if (namespace == null) { return null; } @@ -251,14 +258,15 @@ public abstract class AbstractEffectiveSchemaContext implements SchemaContext { return Collections.emptySet(); } - //FIXME: should work for submodules too + // FIXME: should work for submodules too @Override public Set getAllModuleIdentifiers() { return getIdentifiersToSources().keySet(); } @Override - public Optional getModuleSource(final ModuleIdentifier moduleIdentifier) { + public Optional getModuleSource( + final ModuleIdentifier moduleIdentifier) { String maybeSource = getIdentifiersToSources().get(moduleIdentifier); return Optional.fromNullable(maybeSource); } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AnyXmlEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AnyXmlEffectiveStatementImpl.java new file mode 100644 index 0000000000..ff417e0e1d --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AnyXmlEffectiveStatementImpl.java @@ -0,0 +1,153 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import java.util.Collection; +import java.util.LinkedList; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import com.google.common.base.Optional; +import com.google.common.collect.ImmutableList; +import java.util.List; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode; +import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition; +import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; + +public class AnyXmlEffectiveStatementImpl extends + AbstractEffectiveDocumentedNode implements + AnyXmlSchemaNode, DerivableSchemaNode { + private final QName qname; + private final SchemaPath path; + + boolean configuration; + AnyXmlSchemaNode original; + ConstraintDefinition constraintsDef; + boolean augmenting; + boolean addedByUses; + + ImmutableList unknownNodes; + + public AnyXmlEffectiveStatementImpl( + StmtContext> ctx) { + super(ctx); + this.qname = ctx.getStatementArgument(); + this.path = Utils.getSchemaPath(ctx); + + initSubstatementCollections(); + } + + private void initSubstatementCollections() { + Collection> effectiveSubstatements = effectiveSubstatements(); + + LinkedList unknownNodes = new LinkedList(); + + for (EffectiveStatement effectiveStatement : effectiveSubstatements) { + if (effectiveStatement instanceof UnknownSchemaNode) { + UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement; + unknownNodes.add(unknownNode); + } + } + + this.unknownNodes = ImmutableList.copyOf(unknownNodes); + } + + @Override + public QName getQName() { + return qname; + } + + @Override + public SchemaPath getPath() { + return path; + } + + @Override + public boolean isAugmenting() { + return augmenting; + } + + @Override + public boolean isAddedByUses() { + return addedByUses; + } + + @Override + public Optional getOriginal() { + return Optional.fromNullable(original); + } + + @Override + public boolean isConfiguration() { + return configuration; + } + + @Override + public ConstraintDefinition getConstraints() { + return constraintsDef; + } + + @Override + public List getUnknownSchemaNodes() { + return unknownNodes; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((qname == null) ? 0 : qname.hashCode()); + result = prime * result + ((path == null) ? 0 : path.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + AnyXmlEffectiveStatementImpl other = (AnyXmlEffectiveStatementImpl) obj; + if (qname == null) { + if (other.qname != null) { + return false; + } + } else if (!qname.equals(other.qname)) { + return false; + } + if (path == null) { + if (other.path != null) { + return false; + } + } else if (!path.equals(other.path)) { + return false; + } + return true; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder( + AnyXmlEffectiveStatementImpl.class.getSimpleName()); + sb.append("["); + sb.append("qname=").append(qname); + sb.append(", path=").append(path); + sb.append("]"); + return sb.toString(); + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ArgumentEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ArgumentEffectiveStatementImpl.java new file mode 100644 index 0000000000..609bf9ca5b --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ArgumentEffectiveStatementImpl.java @@ -0,0 +1,22 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class ArgumentEffectiveStatementImpl extends + EffectiveStatementBase { + + public ArgumentEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AugmentEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AugmentEffectiveStatementImpl.java new file mode 100644 index 0000000000..0d3f3741f7 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AugmentEffectiveStatementImpl.java @@ -0,0 +1,185 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import static com.google.common.base.Preconditions.checkNotNull; +import java.util.Collection; +import java.util.LinkedList; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.AugmentStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import com.google.common.base.Optional; +import com.google.common.collect.ImmutableList; +import java.net.URI; +import java.util.Date; +import java.util.Iterator; +import java.util.List; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; +import org.opendaylight.yangtools.yang.model.api.NamespaceRevisionAware; +import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; + +public class AugmentEffectiveStatementImpl + extends + AbstractEffectiveDocumentedDataNodeContainer + implements AugmentationSchema, NamespaceRevisionAware, + Comparable { + private final int order; + private final SchemaPath targetPath; + RevisionAwareXPath whenCondition; + + URI namespace; + Date revision; + ImmutableList unknownNodes; + private AugmentationSchema copyOf; + + public AugmentEffectiveStatementImpl( + StmtContext> ctx) { + super(ctx); + + SchemaNodeIdentifier schemaNodeIdentifier = ctx.getStatementArgument(); + this.targetPath = SchemaPath.create( + schemaNodeIdentifier.getPathFromRoot(), + schemaNodeIdentifier.isAbsolute()); + + // :TODO init other fields + this.order = 1; + // firstEffective(WhenEffectiveStatementImpl.class); + + initSubstatementCollections(); + } + + private void initSubstatementCollections() { + Collection> effectiveSubstatements = effectiveSubstatements(); + + LinkedList unknownNodes = new LinkedList(); + + for (EffectiveStatement effectiveStatement : effectiveSubstatements) { + if (effectiveStatement instanceof UnknownSchemaNode) { + UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement; + unknownNodes.add(unknownNode); + } + } + + this.unknownNodes = ImmutableList.copyOf(unknownNodes); + } + + public void setCopyOf(final AugmentationSchema build) { + this.copyOf = build; + } + + @Override + public Optional getOriginalDefinition() { + return Optional.fromNullable(this.copyOf); + } + + @Override + public SchemaPath getTargetPath() { + return targetPath; + } + + @Override + public RevisionAwareXPath getWhenCondition() { + return whenCondition; + } + + @Override + public List getUnknownSchemaNodes() { + return unknownNodes; + } + + @Override + public URI getNamespace() { + return namespace; + } + + @Override + public Date getRevision() { + return revision; + } + + @Override + public int hashCode() { + final int prime = 17; + int result = 1; + result = prime * result + + ((targetPath == null) ? 0 : targetPath.hashCode()); + result = prime * result + + ((whenCondition == null) ? 0 : whenCondition.hashCode()); + result = prime * result + getChildNodes().hashCode(); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + AugmentEffectiveStatementImpl other = (AugmentEffectiveStatementImpl) obj; + if (targetPath == null) { + if (other.targetPath != null) { + return false; + } + } else if (!targetPath.equals(other.targetPath)) { + return false; + } + if (whenCondition == null) { + if (other.whenCondition != null) { + return false; + } + } else if (!whenCondition.equals(other.whenCondition)) { + return false; + } + if (!getChildNodes().equals(other.getChildNodes())) { + return false; + } + return true; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder( + AugmentEffectiveStatementImpl.class.getSimpleName()); + sb.append("["); + sb.append("targetPath=").append(targetPath); + sb.append(", when=").append(whenCondition); + sb.append("]"); + return sb.toString(); + } + + @Override + public int compareTo(final AugmentEffectiveStatementImpl o) { + checkNotNull(o); + Iterator thisIt = this.targetPath.getPathFromRoot().iterator(); + Iterator otherIt = o.getTargetPath().getPathFromRoot() + .iterator(); + while (thisIt.hasNext()) { + if (otherIt.hasNext()) { + int comp = thisIt.next().compareTo(otherIt.next()); + if (comp != 0) { + return comp; + } + } else { + return 1; + } + } + if (otherIt.hasNext()) { + return -1; + } + return this.order - o.order; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/BaseEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/BaseEffectiveStatementImpl.java new file mode 100644 index 0000000000..95e32a6b97 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/BaseEffectiveStatementImpl.java @@ -0,0 +1,21 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.stmt.BaseStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class BaseEffectiveStatementImpl extends + EffectiveStatementBase { + + public BaseEffectiveStatementImpl(StmtContext ctx) { + super(ctx); + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/BelongsEffectiveToStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/BelongsEffectiveToStatementImpl.java new file mode 100644 index 0000000000..7080bb742d --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/BelongsEffectiveToStatementImpl.java @@ -0,0 +1,21 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class BelongsEffectiveToStatementImpl extends + EffectiveStatementBase { + + public BelongsEffectiveToStatementImpl( + StmtContext ctx) { + super(ctx); + } + +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/BitEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/BitEffectiveStatementImpl.java new file mode 100644 index 0000000000..73cb760233 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/BitEffectiveStatementImpl.java @@ -0,0 +1,20 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class BitEffectiveStatementImpl extends + EffectiveStatementBase { + + public BitEffectiveStatementImpl(StmtContext ctx) { + super(ctx); + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/CaseEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/CaseEffectiveStatementImpl.java new file mode 100644 index 0000000000..e406e61097 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/CaseEffectiveStatementImpl.java @@ -0,0 +1,170 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import java.util.Collection; +import java.util.HashSet; +import java.util.LinkedList; + +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import com.google.common.base.Optional; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import java.util.List; +import java.util.Set; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; +import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode; +import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition; +import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; + +public class CaseEffectiveStatementImpl extends + AbstractEffectiveDocumentedDataNodeContainer + implements ChoiceCaseNode, DerivableSchemaNode { + private final QName qname; + private final SchemaPath path; + + boolean augmenting; + boolean addedByUses; + ChoiceCaseNode original; + ConstraintDefinition constraints; + + ImmutableSet augmentations; + ImmutableList unknownNodes; + + public CaseEffectiveStatementImpl( + StmtContext> ctx) { + super(ctx); + this.qname = ctx.getStatementArgument(); + this.path = Utils.getSchemaPath(ctx); + // :TODO init other fields + + initSubstatementCollections(); + } + + private void initSubstatementCollections() { + Collection> effectiveSubstatements = effectiveSubstatements(); + + LinkedList unknownNodes = new LinkedList(); + HashSet augmentations = new HashSet(); + + for (EffectiveStatement effectiveStatement : effectiveSubstatements) { + if (effectiveStatement instanceof UnknownSchemaNode) { + UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement; + unknownNodes.add(unknownNode); + } + if (effectiveStatement instanceof AugmentationSchema) { + AugmentationSchema augmentationSchema = (AugmentationSchema) effectiveStatement; + augmentations.add(augmentationSchema); + } + } + + this.unknownNodes = ImmutableList.copyOf(unknownNodes); + this.augmentations = ImmutableSet.copyOf(augmentations); + } + + @Override + public QName getQName() { + return qname; + } + + @Override + public SchemaPath getPath() { + return path; + } + + @Override + public boolean isConfiguration() { + return false; + } + + @Override + public ConstraintDefinition getConstraints() { + return constraints; + } + + @Override + public boolean isAugmenting() { + return augmenting; + } + + @Override + public boolean isAddedByUses() { + return addedByUses; + } + + @Override + public Optional getOriginal() { + return Optional.fromNullable(original); + } + + @Override + public List getUnknownSchemaNodes() { + return unknownNodes; + } + + @Override + public Set getAvailableAugmentations() { + return augmentations; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((qname == null) ? 0 : qname.hashCode()); + result = prime * result + ((path == null) ? 0 : path.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + CaseEffectiveStatementImpl other = (CaseEffectiveStatementImpl) obj; + if (qname == null) { + if (other.qname != null) { + return false; + } + } else if (!qname.equals(other.qname)) { + return false; + } + if (path == null) { + if (other.path != null) { + return false; + } + } else if (!path.equals(other.path)) { + return false; + } + return true; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder( + CaseEffectiveStatementImpl.class.getSimpleName()); + sb.append("["); + sb.append("qname="); + sb.append(qname); + sb.append("]"); + return sb.toString(); + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ChoiceEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ChoiceEffectiveStatementImpl.java new file mode 100644 index 0000000000..00262b5070 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ChoiceEffectiveStatementImpl.java @@ -0,0 +1,214 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import java.util.Collection; +import java.util.HashSet; +import java.util.LinkedList; + +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import com.google.common.base.Optional; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import java.util.List; +import java.util.Set; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; +import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode; +import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode; +import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition; +import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; + +public class ChoiceEffectiveStatementImpl extends AbstractEffectiveDocumentedNode implements ChoiceSchemaNode, DerivableSchemaNode { + private final QName qname; + private final SchemaPath path; + + boolean augmenting; + boolean addedByUses; + ChoiceSchemaNode original; + boolean configuration; + ConstraintDefinition constraints; + String defaultCase; + + ImmutableSet cases; + ImmutableSet augmentations; + ImmutableList unknownNodes; + + public ChoiceEffectiveStatementImpl(StmtContext> ctx) { + super(ctx); + + this.qname = ctx.getStatementArgument(); + this.path = Utils.getSchemaPath(ctx); + //:TODO init other fields + + initSubstatementCollections(); + + } + + private void initSubstatementCollections() { + Collection> effectiveSubstatements = effectiveSubstatements(); + + LinkedList unknownNodes = new LinkedList(); + HashSet augmentations = new HashSet(); + HashSet cases = new HashSet(); + + for (EffectiveStatement effectiveStatement : effectiveSubstatements) { + if (effectiveStatement instanceof UnknownSchemaNode) { + UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement; + unknownNodes.add(unknownNode); + } + if (effectiveStatement instanceof AugmentationSchema) { + AugmentationSchema augmentationSchema = (AugmentationSchema) effectiveStatement; + augmentations.add(augmentationSchema); + } + if (effectiveStatement instanceof ChoiceCaseNode) { + ChoiceCaseNode choiceCaseNode = (ChoiceCaseNode) effectiveStatement; + cases.add(choiceCaseNode); + } + } + + this.unknownNodes = ImmutableList.copyOf(unknownNodes); + this.augmentations = ImmutableSet.copyOf(augmentations); + this.cases = ImmutableSet.copyOf(cases); + } + + @Override + public QName getQName() { + return qname; + } + + @Override + public SchemaPath getPath() { + return path; + } + + @Override + public boolean isAugmenting() { + return augmenting; + } + + @Override + public boolean isAddedByUses() { + return addedByUses; + } + + @Override + public Optional getOriginal() { + return Optional.fromNullable(original); + } + + @Override + public boolean isConfiguration() { + return configuration; + } + + @Override + public ConstraintDefinition getConstraints() { + return constraints; + } + + @Override + public Set getAvailableAugmentations() { + return augmentations; + } + + @Override + public List getUnknownSchemaNodes() { + return unknownNodes; + } + + @Override + public Set getCases() { + return cases; + } + + @Override + public ChoiceCaseNode getCaseNodeByName(final QName name) { + if (name == null) { + throw new IllegalArgumentException("Choice Case QName cannot be NULL!"); + } + for (final ChoiceCaseNode caseNode : cases) { + if (caseNode != null && name.equals(caseNode.getQName())) { + return caseNode; + } + } + return null; + } + + @Override + public ChoiceCaseNode getCaseNodeByName(final String name) { + if (name == null) { + throw new IllegalArgumentException("Choice Case string Name cannot be NULL!"); + } + for (final ChoiceCaseNode caseNode : cases) { + if (caseNode != null && (caseNode.getQName() != null) + && name.equals(caseNode.getQName().getLocalName())) { + return caseNode; + } + } + return null; + } + + @Override + public String getDefaultCase() { + return defaultCase; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((qname == null) ? 0 : qname.hashCode()); + result = prime * result + ((path == null) ? 0 : path.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + ChoiceEffectiveStatementImpl other = (ChoiceEffectiveStatementImpl) obj; + if (qname == null) { + if (other.qname != null) { + return false; + } + } else if (!qname.equals(other.qname)) { + return false; + } + if (path == null) { + if (other.path != null) { + return false; + } + } else if (!path.equals(other.path)) { + return false; + } + return true; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(ChoiceEffectiveStatementImpl.class.getSimpleName()); + sb.append("["); + sb.append("qname=").append(qname); + sb.append("]"); + return sb.toString(); + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ConfigEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ConfigEffectiveStatementImpl.java new file mode 100644 index 0000000000..57f78017b6 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ConfigEffectiveStatementImpl.java @@ -0,0 +1,21 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class ConfigEffectiveStatementImpl extends + EffectiveStatementBase { + + public ConfigEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ContactEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ContactEffectiveStatementImpl.java new file mode 100644 index 0000000000..6a2ae09ec8 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ContactEffectiveStatementImpl.java @@ -0,0 +1,21 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.ContactStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class ContactEffectiveStatementImpl extends + EffectiveStatementBase { + + public ContactEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ContainerEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ContainerEffectiveStatementImpl.java index 2c5b9c9b85..d7a70c4a66 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ContainerEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ContainerEffectiveStatementImpl.java @@ -1,7 +1,17 @@ +/** + * 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.parser.stmt.rfc6020.effective; -import java.util.HashSet; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableList; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; +import java.util.HashSet; import java.util.LinkedList; import java.util.Collection; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -23,6 +33,7 @@ public class ContainerEffectiveStatementImpl extends implements ContainerSchemaNode, DerivableSchemaNode { private final QName qname; private final SchemaPath path; + private final boolean presence; boolean augmenting; boolean addedByUses; @@ -30,34 +41,27 @@ public class ContainerEffectiveStatementImpl extends ContainerSchemaNode original; ConstraintDefinition constraints; - boolean presence; - - private Set augmentations; - private List unknownNodes; + private ImmutableSet augmentations; + private ImmutableList unknownNodes; public ContainerEffectiveStatementImpl( StmtContext> ctx) { super(ctx); - qname = ctx.getStatementArgument(); - - initSubstatementCollections(); - initPresence(); - - // :TODO init other fields - path = null; - - } - private void initPresence() { + qname = ctx.getStatementArgument(); + path = Utils.getSchemaPath(ctx); presence = (firstEffective(PresenceEffectiveStatementImpl.class) == null) ? false : true; + // :TODO init other fields + + initSubstatementCollections(); } private void initSubstatementCollections() { Collection> effectiveSubstatements = effectiveSubstatements(); - unknownNodes = new LinkedList(); - augmentations = new HashSet(); + LinkedList unknownNodes = new LinkedList(); + HashSet augmentations = new HashSet(); for (EffectiveStatement effectiveStatement : effectiveSubstatements) { if (effectiveStatement instanceof UnknownSchemaNode) { @@ -70,7 +74,8 @@ public class ContainerEffectiveStatementImpl extends } } - // :TODO other substatement collections ... + this.unknownNodes = ImmutableList.copyOf(unknownNodes); + this.augmentations = ImmutableSet.copyOf(augmentations); } @Override diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DefaultEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DefaultEffectiveStatementImpl.java new file mode 100644 index 0000000000..26084a65f1 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DefaultEffectiveStatementImpl.java @@ -0,0 +1,21 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class DefaultEffectiveStatementImpl extends + EffectiveStatementBase { + + public DefaultEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DescriptionEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DescriptionEffectiveStatementImpl.java index 9e74771beb..1d640ac042 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DescriptionEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DescriptionEffectiveStatementImpl.java @@ -11,7 +11,8 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; -public class DescriptionEffectiveStatementImpl extends EffectiveStatementBase { +public class DescriptionEffectiveStatementImpl extends + EffectiveStatementBase { public DescriptionEffectiveStatementImpl( StmtContext ctx) { diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DeviateEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DeviateEffectiveStatementImpl.java new file mode 100644 index 0000000000..2528b6d901 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DeviateEffectiveStatementImpl.java @@ -0,0 +1,19 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.DeviateStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class DeviateEffectiveStatementImpl extends + EffectiveStatementBase { + public DeviateEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DeviationEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DeviationEffectiveStatementImpl.java new file mode 100644 index 0000000000..c424b9e151 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DeviationEffectiveStatementImpl.java @@ -0,0 +1,23 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.DeviationStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class DeviationEffectiveStatementImpl extends + EffectiveStatementBase { + + public DeviationEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/EffectiveSchemaContext.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/EffectiveSchemaContext.java index 9155c0d0c6..cc837626ed 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/EffectiveSchemaContext.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/EffectiveSchemaContext.java @@ -26,44 +26,48 @@ import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier; public class EffectiveSchemaContext extends AbstractEffectiveSchemaContext { - private final Map identifiersToSources; - private final SetMultimap namespaceToModules; - private final SetMultimap nameToModules; - private final Set modules; - + private final Map identifiersToSources; + private final SetMultimap namespaceToModules; + private final SetMultimap nameToModules; + private final Set modules; private final ImmutableList> rootDeclaredStatements; - private final ImmutableList> rootEffectiveStatements; + private final ImmutableList> rootEffectiveStatements; - public EffectiveSchemaContext(List> rootDeclaredStatements, List> rootEffectiveStatements) { - this.rootDeclaredStatements = ImmutableList.copyOf(rootDeclaredStatements); - this.rootEffectiveStatements = ImmutableList.copyOf(rootEffectiveStatements); + public EffectiveSchemaContext( + List> rootDeclaredStatements, + List> rootEffectiveStatements) { + this.rootDeclaredStatements = ImmutableList + .copyOf(rootDeclaredStatements); + this.rootEffectiveStatements = ImmutableList + .copyOf(rootEffectiveStatements); HashSet modules = new HashSet(); for (EffectiveStatement rootEffectiveStatement : rootEffectiveStatements) { - if(rootEffectiveStatement instanceof Module) { + if (rootEffectiveStatement instanceof Module) { Module module = (Module) rootEffectiveStatement; modules.add(module); } } this.modules = ImmutableSet.copyOf(modules); - final SetMultimap nsMap = Multimaps.newSetMultimap( - new TreeMap>(), MODULE_SET_SUPPLIER); - final SetMultimap nameMap = Multimaps.newSetMultimap( - new TreeMap>(), MODULE_SET_SUPPLIER); + final SetMultimap nsMap = Multimaps.newSetMultimap( + new TreeMap>(), MODULE_SET_SUPPLIER); + final SetMultimap nameMap = Multimaps.newSetMultimap( + new TreeMap>(), MODULE_SET_SUPPLIER); - for (Module m : modules) { - nameMap.put(m.getName(), m); - nsMap.put(m.getNamespace(), m); - } + for (Module m : modules) { + nameMap.put(m.getName(), m); + nsMap.put(m.getNamespace(), m); + } - namespaceToModules = ImmutableSetMultimap.copyOf(nsMap); - nameToModules = ImmutableSetMultimap.copyOf(nameMap); + namespaceToModules = ImmutableSetMultimap.copyOf(nsMap); + nameToModules = ImmutableSetMultimap.copyOf(nameMap); - //:TODO - //this.identifiersToSources = ImmutableMap.copyOf(identifiersToSources); - this.identifiersToSources = null; + // :TODO + // this.identifiersToSources = + // ImmutableMap.copyOf(identifiersToSources); + this.identifiersToSources = null; } @@ -71,18 +75,18 @@ public class EffectiveSchemaContext extends AbstractEffectiveSchemaContext { return rootDeclaredStatements; } - public ImmutableList> getRootEffectiveStatements() { + public ImmutableList> getRootEffectiveStatements() { return rootEffectiveStatements; } @Override - protected Map getIdentifiersToSources(){ + protected Map getIdentifiersToSources() { return identifiersToSources; } @Override - public Set getModules(){ + public Set getModules() { return modules; } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/EnumEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/EnumEffectiveStatementImpl.java new file mode 100644 index 0000000000..439b8de0bb --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/EnumEffectiveStatementImpl.java @@ -0,0 +1,20 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.EnumStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class EnumEffectiveStatementImpl extends + EffectiveStatementBase { + + public EnumEffectiveStatementImpl(StmtContext ctx) { + super(ctx); + + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ErrorAppTagEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ErrorAppTagEffectiveStatementImpl.java new file mode 100644 index 0000000000..fbd7efde7b --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ErrorAppTagEffectiveStatementImpl.java @@ -0,0 +1,22 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.ErrorAppTagStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class ErrorAppTagEffectiveStatementImpl extends + EffectiveStatementBase { + + public ErrorAppTagEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ErrorMessageEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ErrorMessageEffectiveStatementImpl.java new file mode 100644 index 0000000000..6f2a749bdb --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ErrorMessageEffectiveStatementImpl.java @@ -0,0 +1,22 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class ErrorMessageEffectiveStatementImpl extends + EffectiveStatementBase { + + public ErrorMessageEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ExtensionEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ExtensionEffectiveStatementImpl.java new file mode 100644 index 0000000000..cdea920633 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ExtensionEffectiveStatementImpl.java @@ -0,0 +1,154 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import java.util.Collection; +import java.util.LinkedList; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import com.google.common.collect.ImmutableList; +import java.util.List; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; + +public class ExtensionEffectiveStatementImpl extends + AbstractEffectiveDocumentedNode implements + ExtensionDefinition { + private final QName qname; + String argument; + private final SchemaPath schemaPath; + + ImmutableList unknownNodes; + boolean yin; + + public ExtensionEffectiveStatementImpl( + StmtContext> ctx) { + super(ctx); + + this.qname = ctx.getStatementArgument(); + this.schemaPath = Utils.getSchemaPath(ctx); + + initSubstatementCollections(); + initFields(); + + } + + private void initFields() { + + ArgumentEffectiveStatementImpl argumentSubstatement = firstEffective(ArgumentEffectiveStatementImpl.class); + + if (argumentSubstatement != null) { + this.argument = argumentSubstatement.argument().getLocalName(); + } + + YinElementEffectiveStatementImpl yinElement = firstEffective(YinElementEffectiveStatementImpl.class); + + if (yinElement != null) { + this.yin = yinElement.argument(); + } else + yin = false; + + } + + private void initSubstatementCollections() { + Collection> effectiveSubstatements = effectiveSubstatements(); + + LinkedList unknownNodes = new LinkedList(); + + for (EffectiveStatement effectiveStatement : effectiveSubstatements) { + if (effectiveStatement instanceof UnknownSchemaNode) { + UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement; + unknownNodes.add(unknownNode); + } + } + + this.unknownNodes = ImmutableList.copyOf(unknownNodes); + } + + @Override + public QName getQName() { + return qname; + } + + @Override + public SchemaPath getPath() { + return schemaPath; + } + + @Override + public List getUnknownSchemaNodes() { + return unknownNodes; + } + + @Override + public String getArgument() { + return argument; + } + + @Override + public boolean isYinElement() { + return yin; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((qname == null) ? 0 : qname.hashCode()); + result = prime * result + + ((schemaPath == null) ? 0 : schemaPath.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + ExtensionEffectiveStatementImpl other = (ExtensionEffectiveStatementImpl) obj; + if (qname == null) { + if (other.qname != null) { + return false; + } + } else if (!qname.equals(other.qname)) { + return false; + } + if (schemaPath == null) { + if (other.schemaPath != null) { + return false; + } + } else if (!schemaPath.equals(other.schemaPath)) { + return false; + } + return true; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder( + ExtensionEffectiveStatementImpl.class.getSimpleName()); + sb.append("["); + sb.append("argument=").append(argument); + sb.append(", qname=").append(qname); + sb.append(", schemaPath=").append(schemaPath); + sb.append(", extensionSchemaNodes=").append(unknownNodes); + sb.append(", yin=").append(yin); + sb.append("]"); + return sb.toString(); + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/FeatureEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/FeatureEffectiveStatementImpl.java new file mode 100644 index 0000000000..a71635b8cb --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/FeatureEffectiveStatementImpl.java @@ -0,0 +1,23 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.stmt.FeatureStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class FeatureEffectiveStatementImpl extends + EffectiveStatementBase { + + public FeatureEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + + } + +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/FractionDigitsEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/FractionDigitsEffectiveStatementImpl.java new file mode 100644 index 0000000000..5f33bef200 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/FractionDigitsEffectiveStatementImpl.java @@ -0,0 +1,22 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.FractionDigitsStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class FractionDigitsEffectiveStatementImpl extends + EffectiveStatementBase { + + public FractionDigitsEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/GroupingEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/GroupingEffectiveStatementImpl.java index e7cbe4ca03..ea01448a56 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/GroupingEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/GroupingEffectiveStatementImpl.java @@ -1,5 +1,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; + import java.util.Collection; import java.util.LinkedList; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -25,8 +27,8 @@ public class GroupingEffectiveStatementImpl extends super(ctx); qname = ctx.getStatementArgument(); + path = Utils.getSchemaPath(ctx); // :TODO init other fields - path = null; initSubstatementCollections(); } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/IdentityEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/IdentityEffectiveStatementImpl.java new file mode 100644 index 0000000000..38c982ff61 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/IdentityEffectiveStatementImpl.java @@ -0,0 +1,137 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import java.util.Collection; +import java.util.LinkedList; + +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.IdentityStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import com.google.common.collect.ImmutableList; +import java.util.Collections; +import java.util.List; +import java.util.Set; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; + +public class IdentityEffectiveStatementImpl extends + AbstractEffectiveDocumentedNode implements + IdentitySchemaNode { + private final QName qname; + private final SchemaPath path; + IdentitySchemaNode baseIdentity; + private final Set derivedIdentities; + + ImmutableList unknownNodes; + + public IdentityEffectiveStatementImpl( + StmtContext> ctx) { + super(ctx); + + this.qname = ctx.getStatementArgument(); + this.path = Utils.getSchemaPath(ctx); + + initSubstatementCollections(); + + // :TODO init other fields + this.derivedIdentities = null; + } + + private void initSubstatementCollections() { + Collection> effectiveSubstatements = effectiveSubstatements(); + + LinkedList unknownNodes = new LinkedList(); + + for (EffectiveStatement effectiveStatement : effectiveSubstatements) { + if (effectiveStatement instanceof UnknownSchemaNode) { + UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement; + unknownNodes.add(unknownNode); + } + } + + this.unknownNodes = ImmutableList.copyOf(unknownNodes); + } + + @Override + public QName getQName() { + return qname; + } + + @Override + public IdentitySchemaNode getBaseIdentity() { + return baseIdentity; + } + + @Override + public Set getDerivedIdentities() { + return Collections.unmodifiableSet(derivedIdentities); + } + + @Override + public SchemaPath getPath() { + return path; + } + + @Override + public List getUnknownSchemaNodes() { + return unknownNodes; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((qname == null) ? 0 : qname.hashCode()); + result = prime * result + ((path == null) ? 0 : path.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + IdentityEffectiveStatementImpl other = (IdentityEffectiveStatementImpl) obj; + if (qname == null) { + if (other.qname != null) { + return false; + } + } else if (!qname.equals(other.qname)) { + return false; + } + if (path == null) { + if (other.path != null) { + return false; + } + } else if (!path.equals(other.path)) { + return false; + } + return true; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder( + IdentityEffectiveStatementImpl.class.getSimpleName()); + sb.append("["); + sb.append("base=").append(baseIdentity); + sb.append(", qname=").append(qname); + sb.append("]"); + return sb.toString(); + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/IfFeatureEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/IfFeatureEffectiveStatementImpl.java new file mode 100644 index 0000000000..70d3e9cdd7 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/IfFeatureEffectiveStatementImpl.java @@ -0,0 +1,23 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class IfFeatureEffectiveStatementImpl extends + EffectiveStatementBase { + + public IfFeatureEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ImportEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ImportEffectiveStatementImpl.java new file mode 100644 index 0000000000..7eaae54024 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ImportEffectiveStatementImpl.java @@ -0,0 +1,20 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.ImportStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class ImportEffectiveStatementImpl extends + EffectiveStatementBase { + + public ImportEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/IncludeEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/IncludeEffectiveStatementImpl.java new file mode 100644 index 0000000000..addb6047c5 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/IncludeEffectiveStatementImpl.java @@ -0,0 +1,21 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.IncludeStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class IncludeEffectiveStatementImpl extends + EffectiveStatementBase { + + public IncludeEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/InputEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/InputEffectiveStatementImpl.java new file mode 100644 index 0000000000..54e2f10b24 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/InputEffectiveStatementImpl.java @@ -0,0 +1,168 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import java.util.HashSet; +import java.util.LinkedList; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import java.util.List; +import java.util.Set; +import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; +import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; +import java.util.Collection; +import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class InputEffectiveStatementImpl extends + AbstractEffectiveDocumentedDataNodeContainer + implements ContainerSchemaNode { + + private final QName qname; + private final SchemaPath path; + private final boolean presence; + + boolean augmenting; + boolean addedByUses; + boolean configuration; + ContainerSchemaNode original; + ConstraintDefinition constraints; + + private ImmutableSet augmentations; + private ImmutableList unknownNodes; + + public InputEffectiveStatementImpl( + StmtContext> ctx) { + super(ctx); + + qname = ctx.getStatementArgument(); + path = Utils.getSchemaPath(ctx); + presence = (firstEffective(PresenceEffectiveStatementImpl.class) == null) ? false + : true; + // :TODO init other fields + + initSubstatementCollections(); + } + + private void initSubstatementCollections() { + Collection> effectiveSubstatements = effectiveSubstatements(); + + LinkedList unknownNodes = new LinkedList(); + HashSet augmentations = new HashSet(); + + for (EffectiveStatement effectiveStatement : effectiveSubstatements) { + if (effectiveStatement instanceof UnknownSchemaNode) { + UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement; + unknownNodes.add(unknownNode); + } + if (effectiveStatement instanceof AugmentationSchema) { + AugmentationSchema augmentationSchema = (AugmentationSchema) effectiveStatement; + augmentations.add(augmentationSchema); + } + } + + this.unknownNodes = ImmutableList.copyOf(unknownNodes); + this.augmentations = ImmutableSet.copyOf(augmentations); + } + + @Override + public QName getQName() { + return qname; + } + + @Override + public SchemaPath getPath() { + return path; + } + + @Override + public boolean isAugmenting() { + return augmenting; + } + + @Override + public boolean isAddedByUses() { + return addedByUses; + } + + @Override + public boolean isConfiguration() { + return configuration; + } + + @Override + public ConstraintDefinition getConstraints() { + return constraints; + } + + @Override + public Set getAvailableAugmentations() { + return augmentations; + } + + @Override + public boolean isPresenceContainer() { + return presence; + } + + @Override + public List getUnknownSchemaNodes() { + return unknownNodes; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((qname == null) ? 0 : qname.hashCode()); + result = prime * result + ((path == null) ? 0 : path.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + InputEffectiveStatementImpl other = (InputEffectiveStatementImpl) obj; + if (qname == null) { + if (other.qname != null) { + return false; + } + } else if (!qname.equals(other.qname)) { + return false; + } + if (path == null) { + if (other.path != null) { + return false; + } + } else if (!path.equals(other.path)) { + return false; + } + return true; + } + + @Override + public String toString() { + return "RPC input " + qname.getLocalName(); + } + +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/KeyEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/KeyEffectiveStatementImpl.java new file mode 100644 index 0000000000..4d61814de7 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/KeyEffectiveStatementImpl.java @@ -0,0 +1,24 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import java.util.Collection; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; + +import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class KeyEffectiveStatementImpl extends + EffectiveStatementBase, KeyStatement> { + + public KeyEffectiveStatementImpl( + StmtContext, KeyStatement, ?> ctx) { + super(ctx); + } + +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/LeafEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/LeafEffectiveStatementImpl.java new file mode 100644 index 0000000000..45ecda59e1 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/LeafEffectiveStatementImpl.java @@ -0,0 +1,173 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import java.util.Collection; +import java.util.LinkedList; + +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.model.api.stmt.LeafStatement; +import com.google.common.base.Optional; +import com.google.common.collect.ImmutableList; +import java.util.List; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition; +import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode; +import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.TypeDefinition; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; + +public class LeafEffectiveStatementImpl extends + AbstractEffectiveDocumentedNode implements + LeafSchemaNode, DerivableSchemaNode { + private final QName qname; + private final SchemaPath path; + + boolean augmenting; + boolean addedByUses; + LeafSchemaNode original; + boolean configuration; + ConstraintDefinition constraintsDef; + TypeDefinition type; + String defaultStr; + String unitsStr; + + private ImmutableList unknownNodes; + + public LeafEffectiveStatementImpl( + StmtContext> ctx) { + super(ctx); + this.qname = ctx.getStatementArgument(); + this.path = Utils.getSchemaPath(ctx); + // :TODO init other fields + + initSubstatementCollections(); + } + + private void initSubstatementCollections() { + Collection> effectiveSubstatements = effectiveSubstatements(); + + LinkedList unknownNodes = new LinkedList(); + + for (EffectiveStatement effectiveStatement : effectiveSubstatements) { + if (effectiveStatement instanceof UnknownSchemaNode) { + UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement; + unknownNodes.add(unknownNode); + } + } + + this.unknownNodes = ImmutableList.copyOf(unknownNodes); + } + + @Override + public QName getQName() { + return qname; + } + + @Override + public SchemaPath getPath() { + return path; + } + + @Override + public boolean isAugmenting() { + return augmenting; + } + + @Override + public boolean isAddedByUses() { + return addedByUses; + } + + @Override + public Optional getOriginal() { + return Optional.fromNullable(original); + } + + @Override + public boolean isConfiguration() { + return configuration; + } + + @Override + public ConstraintDefinition getConstraints() { + return constraintsDef; + } + + @Override + public TypeDefinition getType() { + return type; + } + + @Override + public List getUnknownSchemaNodes() { + return unknownNodes; + } + + @Override + public String getDefault() { + return defaultStr; + } + + @Override + public String getUnits() { + return unitsStr; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((qname == null) ? 0 : qname.hashCode()); + result = prime * result + ((path == null) ? 0 : path.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + LeafEffectiveStatementImpl other = (LeafEffectiveStatementImpl) obj; + if (qname == null) { + if (other.qname != null) { + return false; + } + } else if (!qname.equals(other.qname)) { + return false; + } + if (path == null) { + if (other.path != null) { + return false; + } + } else if (!path.equals(other.path)) { + return false; + } + return true; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder( + LeafEffectiveStatementImpl.class.getSimpleName()); + sb.append("["); + sb.append("qname=").append(qname); + sb.append(", path=").append(path); + sb.append("]"); + return sb.toString(); + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/LeafListEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/LeafListEffectiveStatementImpl.java new file mode 100644 index 0000000000..768a99e084 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/LeafListEffectiveStatementImpl.java @@ -0,0 +1,162 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import java.util.Collection; +import java.util.LinkedList; + +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.model.api.stmt.LeafListStatement; +import com.google.common.base.Optional; +import com.google.common.collect.ImmutableList; +import java.util.List; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition; +import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode; +import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.TypeDefinition; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; + +public class LeafListEffectiveStatementImpl extends AbstractEffectiveDocumentedNode implements LeafListSchemaNode, DerivableSchemaNode { + private final QName qname; + private final SchemaPath path; + + boolean augmenting; + boolean addedByUses; + LeafListSchemaNode original; + boolean configuration; + ConstraintDefinition constraintsDef; + TypeDefinition type; + boolean userOrdered; + + private ImmutableList unknownNodes; + + public LeafListEffectiveStatementImpl(StmtContext> ctx) { + super(ctx); + this.qname = ctx.getStatementArgument(); + this.path = Utils.getSchemaPath(ctx); + //:TODO init other fields + + initSubstatementCollections(); + } + + private void initSubstatementCollections() { + Collection> effectiveSubstatements = effectiveSubstatements(); + + LinkedList unknownNodes = new LinkedList(); + + for (EffectiveStatement effectiveStatement : effectiveSubstatements) { + if (effectiveStatement instanceof UnknownSchemaNode) { + UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement; + unknownNodes.add(unknownNode); + } + } + + this.unknownNodes = ImmutableList.copyOf(unknownNodes); + } + + @Override + public QName getQName() { + return qname; + } + + @Override + public SchemaPath getPath() { + return path; + } + + @Override + public boolean isAugmenting() { + return augmenting; + } + + @Override + public boolean isAddedByUses() { + return addedByUses; + } + + @Override + public Optional getOriginal() { + return Optional.fromNullable(original); + } + + @Override + public boolean isConfiguration() { + return configuration; + } + + @Override + public ConstraintDefinition getConstraints() { + return constraintsDef; + } + + @Override + public TypeDefinition getType() { + return type; + } + + @Override + public boolean isUserOrdered() { + return userOrdered; + } + + @Override + public List getUnknownSchemaNodes() { + return unknownNodes; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((qname == null) ? 0 : qname.hashCode()); + result = prime * result + ((path == null) ? 0 : path.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + LeafListEffectiveStatementImpl other = (LeafListEffectiveStatementImpl) obj; + if (qname == null) { + if (other.qname != null) { + return false; + } + } else if (!qname.equals(other.qname)) { + return false; + } + if (path == null) { + if (other.path != null) { + return false; + } + } else if (!path.equals(other.path)) { + return false; + } + return true; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(LeafListEffectiveStatementImpl.class.getSimpleName()); + sb.append("["); + sb.append(qname); + sb.append("]"); + return sb.toString(); + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/LengthEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/LengthEffectiveStatementImpl.java new file mode 100644 index 0000000000..a2d18ecdd4 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/LengthEffectiveStatementImpl.java @@ -0,0 +1,22 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.LengthStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class LengthEffectiveStatementImpl extends + EffectiveStatementBase { + + public LengthEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ListEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ListEffectiveStatementImpl.java new file mode 100644 index 0000000000..30ba7d425b --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ListEffectiveStatementImpl.java @@ -0,0 +1,188 @@ +package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; + +import java.util.Collection; +import java.util.HashSet; +import java.util.LinkedList; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement; +import com.google.common.base.Optional; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import java.util.List; +import java.util.Set; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; +import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition; +import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode; +import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; + +public class ListEffectiveStatementImpl extends + AbstractEffectiveDocumentedDataNodeContainer + implements ListSchemaNode, DerivableSchemaNode { + private final QName qname; + private final SchemaPath path; + + boolean augmenting; + boolean addedByUses; + ListSchemaNode original; + boolean configuration; + ConstraintDefinition constraints; + boolean userOrdered; + + ImmutableList keyDefinition; + ImmutableSet augmentations; + ImmutableList unknownNodes; + + public ListEffectiveStatementImpl( + StmtContext> ctx) { + super(ctx); + this.qname = ctx.getStatementArgument(); + this.path = Utils.getSchemaPath(ctx); + // :TODO init other fields + + initKeyDefinition(); + initSubstatementCollections(); + } + + /** + * + */ + private void initKeyDefinition() { + List keyDefinition = new LinkedList(); + KeyEffectiveStatementImpl key = firstEffective(KeyEffectiveStatementImpl.class); + + if (key != null) { + Collection keyParts = key.argument(); + for (SchemaNodeIdentifier keyPart : keyParts) { + keyDefinition.add(keyPart.getLastComponent()); + } + } + + this.keyDefinition = ImmutableList.copyOf(keyDefinition); + } + + private void initSubstatementCollections() { + Collection> effectiveSubstatements = effectiveSubstatements(); + + LinkedList unknownNodes = new LinkedList(); + HashSet augmentations = new HashSet(); + + for (EffectiveStatement effectiveStatement : effectiveSubstatements) { + if (effectiveStatement instanceof UnknownSchemaNode) { + UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement; + unknownNodes.add(unknownNode); + } + if (effectiveStatement instanceof AugmentationSchema) { + AugmentationSchema augmentationSchema = (AugmentationSchema) effectiveStatement; + augmentations.add(augmentationSchema); + } + } + + this.unknownNodes = ImmutableList.copyOf(unknownNodes); + this.augmentations = ImmutableSet.copyOf(augmentations); + } + + @Override + public QName getQName() { + return qname; + } + + @Override + public SchemaPath getPath() { + return path; + } + + @Override + public List getKeyDefinition() { + return keyDefinition; + } + + @Override + public boolean isAugmenting() { + return augmenting; + } + + @Override + public boolean isAddedByUses() { + return addedByUses; + } + + @Override + public Optional getOriginal() { + return Optional.fromNullable(original); + } + + @Override + public boolean isConfiguration() { + return configuration; + } + + @Override + public ConstraintDefinition getConstraints() { + return constraints; + } + + @Override + public Set getAvailableAugmentations() { + return augmentations; + } + + @Override + public boolean isUserOrdered() { + return userOrdered; + } + + @Override + public List getUnknownSchemaNodes() { + return unknownNodes; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((qname == null) ? 0 : qname.hashCode()); + result = prime * result + ((path == null) ? 0 : path.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final ListEffectiveStatementImpl other = (ListEffectiveStatementImpl) obj; + if (qname == null) { + if (other.qname != null) { + return false; + } + } else if (!qname.equals(other.qname)) { + return false; + } + if (path == null) { + if (other.path != null) { + return false; + } + } else if (!path.equals(other.path)) { + return false; + } + return true; + } + + @Override + public String toString() { + return "list " + qname.getLocalName(); + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/MandatoryEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/MandatoryEffectiveStatementImpl.java new file mode 100644 index 0000000000..408c97fff4 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/MandatoryEffectiveStatementImpl.java @@ -0,0 +1,22 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class MandatoryEffectiveStatementImpl extends + EffectiveStatementBase { + + public MandatoryEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/MaxElementsEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/MaxElementsEffectiveStatementImpl.java new file mode 100644 index 0000000000..7055f74a7e --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/MaxElementsEffectiveStatementImpl.java @@ -0,0 +1,22 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class MaxElementsEffectiveStatementImpl extends + EffectiveStatementBase { + + public MaxElementsEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/MinElementsEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/MinElementsEffectiveStatementImpl.java new file mode 100644 index 0000000000..e80e26c6db --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/MinElementsEffectiveStatementImpl.java @@ -0,0 +1,22 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.MinElementsStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class MinElementsEffectiveStatementImpl extends + EffectiveStatementBase { + + public MinElementsEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ModuleEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ModuleEffectiveStatementImpl.java index 1e82cf19f2..1e6d51cf8b 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ModuleEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ModuleEffectiveStatementImpl.java @@ -7,8 +7,10 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective; -import org.opendaylight.yangtools.yang.parser.spi.source.ModuleNameToModuleQName; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import org.opendaylight.yangtools.yang.parser.spi.source.ModuleNameToModuleQName; import java.util.Collection; import java.util.HashSet; import java.util.LinkedList; @@ -37,23 +39,23 @@ public class ModuleEffectiveStatementImpl extends AbstractEffectiveDocumentedDataNodeContainer implements Module, Immutable { - private QNameModule qnameModule; - private String name; + private final QNameModule qnameModule; + private final String name; private String sourcePath; private String prefix; private String yangVersion; private String organization; private String contact; - private Set imports; - private Set submodules; - private Set features; - private Set notifications; - private Set augmentations; - private Set rpcs; - private Set deviations; - private List extensionNodes; - private Set identities; - private List unknownNodes; + private ImmutableSet imports; + private ImmutableSet submodules; + private ImmutableSet features; + private ImmutableSet notifications; + private ImmutableSet augmentations; + private ImmutableSet rpcs; + private ImmutableSet deviations; + private ImmutableList extensionNodes; + private ImmutableSet identities; + private ImmutableList unknownNodes; private String source; public ModuleEffectiveStatementImpl( @@ -62,17 +64,17 @@ public class ModuleEffectiveStatementImpl extends name = argument(); qnameModule = ctx.getFromNamespace(ModuleNameToModuleQName.class, name); + // :TODO init other fields initSubstatementCollections(); - // :TODO init other fields } private void initSubstatementCollections() { Collection> effectiveSubstatements = effectiveSubstatements(); - unknownNodes = new LinkedList(); - augmentations = new HashSet(); + LinkedList unknownNodes = new LinkedList(); + HashSet augmentations = new HashSet(); for (EffectiveStatement effectiveStatement : effectiveSubstatements) { if (effectiveStatement instanceof UnknownSchemaNode) { @@ -85,6 +87,9 @@ public class ModuleEffectiveStatementImpl extends } } + this.unknownNodes = ImmutableList.copyOf(unknownNodes); + this.augmentations = ImmutableSet.copyOf(augmentations); + // :TODO other substatement collections ... } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/MustEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/MustEffectiveStatementImpl.java new file mode 100644 index 0000000000..52bbd3718c --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/MustEffectiveStatementImpl.java @@ -0,0 +1,16 @@ +package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; +import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class MustEffectiveStatementImpl extends + EffectiveStatementBase { + + public MustEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/NotificationEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/NotificationEffectiveStatementImpl.java new file mode 100644 index 0000000000..4afe4f4dcf --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/NotificationEffectiveStatementImpl.java @@ -0,0 +1,133 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import java.util.Collection; +import java.util.HashSet; +import java.util.LinkedList; + +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.NotificationStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import java.util.List; +import java.util.Set; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; +import org.opendaylight.yangtools.yang.model.api.NotificationDefinition; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; + +public class NotificationEffectiveStatementImpl + extends + AbstractEffectiveDocumentedDataNodeContainer + implements NotificationDefinition { + private final QName qname; + private final SchemaPath path; + ImmutableSet augmentations; + ImmutableList unknownNodes; + + public NotificationEffectiveStatementImpl( + StmtContext> ctx) { + super(ctx); + this.qname = ctx.getStatementArgument(); + this.path = Utils.getSchemaPath(ctx); + + initSubstatementCollections(); + } + + private void initSubstatementCollections() { + Collection> effectiveSubstatements = effectiveSubstatements(); + + LinkedList unknownNodes = new LinkedList(); + HashSet augmentations = new HashSet(); + + for (EffectiveStatement effectiveStatement : effectiveSubstatements) { + if (effectiveStatement instanceof UnknownSchemaNode) { + UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement; + unknownNodes.add(unknownNode); + } + if (effectiveStatement instanceof AugmentationSchema) { + AugmentationSchema augmentationSchema = (AugmentationSchema) effectiveStatement; + augmentations.add(augmentationSchema); + } + } + + this.unknownNodes = ImmutableList.copyOf(unknownNodes); + this.augmentations = ImmutableSet.copyOf(augmentations); + } + + @Override + public QName getQName() { + return qname; + } + + @Override + public SchemaPath getPath() { + return path; + } + + @Override + public Set getAvailableAugmentations() { + return augmentations; + } + + @Override + public List getUnknownSchemaNodes() { + return unknownNodes; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((qname == null) ? 0 : qname.hashCode()); + result = prime * result + ((path == null) ? 0 : path.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final NotificationEffectiveStatementImpl other = (NotificationEffectiveStatementImpl) obj; + if (qname == null) { + if (other.qname != null) { + return false; + } + } else if (!qname.equals(other.qname)) { + return false; + } + if (path == null) { + if (other.path != null) { + return false; + } + } else if (!path.equals(other.path)) { + return false; + } + return true; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder( + NotificationEffectiveStatementImpl.class.getSimpleName()); + sb.append("[qname=").append(qname).append(", path=").append(path) + .append("]"); + return sb.toString(); + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/OrderedByEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/OrderedByEffectiveStatementImpl.java new file mode 100644 index 0000000000..8189e90d07 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/OrderedByEffectiveStatementImpl.java @@ -0,0 +1,22 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class OrderedByEffectiveStatementImpl extends + EffectiveStatementBase { + + public OrderedByEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/OrganizationEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/OrganizationEffectiveStatementImpl.java new file mode 100644 index 0000000000..2dd08e1131 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/OrganizationEffectiveStatementImpl.java @@ -0,0 +1,22 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.OrganizationStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class OrganizationEffectiveStatementImpl extends +EffectiveStatementBase { + + public OrganizationEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/OutputEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/OutputEffectiveStatementImpl.java new file mode 100644 index 0000000000..e35efd9948 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/OutputEffectiveStatementImpl.java @@ -0,0 +1,168 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import java.util.HashSet; +import java.util.LinkedList; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import java.util.List; +import java.util.Set; +import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; +import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; +import java.util.Collection; +import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class OutputEffectiveStatementImpl extends + AbstractEffectiveDocumentedDataNodeContainer + implements ContainerSchemaNode { + + private final QName qname; + private final SchemaPath path; + private final boolean presence; + + boolean augmenting; + boolean addedByUses; + boolean configuration; + ContainerSchemaNode original; + ConstraintDefinition constraints; + + private ImmutableSet augmentations; + private ImmutableList unknownNodes; + + public OutputEffectiveStatementImpl( + StmtContext> ctx) { + super(ctx); + + qname = ctx.getStatementArgument(); + path = Utils.getSchemaPath(ctx); + presence = (firstEffective(PresenceEffectiveStatementImpl.class) == null) ? false + : true; + // :TODO init other fields + + initSubstatementCollections(); + } + + private void initSubstatementCollections() { + Collection> effectiveSubstatements = effectiveSubstatements(); + + LinkedList unknownNodes = new LinkedList(); + HashSet augmentations = new HashSet(); + + for (EffectiveStatement effectiveStatement : effectiveSubstatements) { + if (effectiveStatement instanceof UnknownSchemaNode) { + UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement; + unknownNodes.add(unknownNode); + } + if (effectiveStatement instanceof AugmentationSchema) { + AugmentationSchema augmentationSchema = (AugmentationSchema) effectiveStatement; + augmentations.add(augmentationSchema); + } + } + + this.unknownNodes = ImmutableList.copyOf(unknownNodes); + this.augmentations = ImmutableSet.copyOf(augmentations); + } + + @Override + public QName getQName() { + return qname; + } + + @Override + public SchemaPath getPath() { + return path; + } + + @Override + public boolean isAugmenting() { + return augmenting; + } + + @Override + public boolean isAddedByUses() { + return addedByUses; + } + + @Override + public boolean isConfiguration() { + return configuration; + } + + @Override + public ConstraintDefinition getConstraints() { + return constraints; + } + + @Override + public Set getAvailableAugmentations() { + return augmentations; + } + + @Override + public boolean isPresenceContainer() { + return presence; + } + + @Override + public List getUnknownSchemaNodes() { + return unknownNodes; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((qname == null) ? 0 : qname.hashCode()); + result = prime * result + ((path == null) ? 0 : path.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + OutputEffectiveStatementImpl other = (OutputEffectiveStatementImpl) obj; + if (qname == null) { + if (other.qname != null) { + return false; + } + } else if (!qname.equals(other.qname)) { + return false; + } + if (path == null) { + if (other.path != null) { + return false; + } + } else if (!path.equals(other.path)) { + return false; + } + return true; + } + + @Override + public String toString() { + return "RPC Output " + qname.getLocalName(); + } + +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/PatternEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/PatternEffectiveStatementImpl.java new file mode 100644 index 0000000000..c3a776ed71 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/PatternEffectiveStatementImpl.java @@ -0,0 +1,22 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.PatternStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class PatternEffectiveStatementImpl extends + EffectiveStatementBase { + + public PatternEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/PositionEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/PositionEffectiveStatementImpl.java new file mode 100644 index 0000000000..41eaba7d59 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/PositionEffectiveStatementImpl.java @@ -0,0 +1,22 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.PositionStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class PositionEffectiveStatementImpl extends + EffectiveStatementBase { + + public PositionEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RangeEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RangeEffectiveStatementImpl.java new file mode 100644 index 0000000000..8b03a38c67 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RangeEffectiveStatementImpl.java @@ -0,0 +1,22 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.RangeStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class RangeEffectiveStatementImpl extends + EffectiveStatementBase { + + public RangeEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RefineEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RefineEffectiveStatementImpl.java new file mode 100644 index 0000000000..b5c222106d --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RefineEffectiveStatementImpl.java @@ -0,0 +1,23 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.RefineStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class RefineEffectiveStatementImpl extends + EffectiveStatementBase { + + public RefineEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RequireInstanceEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RequireInstanceEffectiveStatementImpl.java new file mode 100644 index 0000000000..b89b443710 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RequireInstanceEffectiveStatementImpl.java @@ -0,0 +1,22 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class RequireInstanceEffectiveStatementImpl extends + EffectiveStatementBase { + + public RequireInstanceEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RevisionDateEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RevisionDateEffectiveStatementImpl.java new file mode 100644 index 0000000000..5c9508068c --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RevisionDateEffectiveStatementImpl.java @@ -0,0 +1,21 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class RevisionDateEffectiveStatementImpl extends + EffectiveStatementBase { + + public RevisionDateEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + } + +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RevisionEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RevisionEffectiveStatementImpl.java new file mode 100644 index 0000000000..b255ff9b29 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RevisionEffectiveStatementImpl.java @@ -0,0 +1,22 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import java.util.Date; +import org.opendaylight.yangtools.yang.model.api.stmt.RevisionStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class RevisionEffectiveStatementImpl extends + EffectiveStatementBase { + + public RevisionEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RpcEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RpcEffectiveStatementImpl.java new file mode 100644 index 0000000000..a0d1ad1229 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RpcEffectiveStatementImpl.java @@ -0,0 +1,178 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import java.util.Collection; +import java.util.HashSet; +import java.util.LinkedList; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.model.api.stmt.RpcStatement; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import java.util.List; +import java.util.Set; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; +import org.opendaylight.yangtools.yang.model.api.GroupingDefinition; +import org.opendaylight.yangtools.yang.model.api.RpcDefinition; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.TypeDefinition; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; + +public class RpcEffectiveStatementImpl extends AbstractEffectiveDocumentedNode implements RpcDefinition { + private final QName qname; + private final SchemaPath path; + + private ContainerSchemaNode input; + private ContainerSchemaNode output; + + ImmutableSet> typeDefinitions; + ImmutableSet groupings; + ImmutableList unknownNodes; + + public RpcEffectiveStatementImpl(StmtContext> ctx) { + super(ctx); + this.qname = ctx.getStatementArgument(); + this.path = Utils.getSchemaPath(ctx); + + initSubstatements(); + + } + + private void initSubstatements() { + Collection> effectiveSubstatements = effectiveSubstatements(); + + LinkedList unknownNodes = new LinkedList(); + HashSet groupings = new HashSet(); + HashSet> typeDefinitions = new HashSet>(); + + for (EffectiveStatement effectiveStatement : effectiveSubstatements) { + if (effectiveStatement instanceof UnknownSchemaNode) { + UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement; + unknownNodes.add(unknownNode); + } + if (effectiveStatement instanceof GroupingDefinition) { + GroupingDefinition groupingDefinition = (GroupingDefinition) effectiveStatement; + groupings.add(groupingDefinition); + } + if (effectiveStatement instanceof TypeDefinition) { + TypeDefinition typeDefinition = (TypeDefinition) effectiveStatement; + typeDefinitions.add(typeDefinition); + } + if (this.input == null && effectiveStatement instanceof InputEffectiveStatementImpl) { + this.input = (InputEffectiveStatementImpl) effectiveStatement; + } + if (this.output == null && effectiveStatement instanceof OutputEffectiveStatementImpl) { + this.output = (OutputEffectiveStatementImpl) effectiveStatement; + } + } + + this.unknownNodes = ImmutableList.copyOf(unknownNodes); + this.groupings = ImmutableSet.copyOf(groupings); + this.typeDefinitions = ImmutableSet.copyOf(typeDefinitions); + } + + @Override + public QName getQName() { + return qname; + } + + @Override + public SchemaPath getPath() { + return path; + } + + @Override + public ContainerSchemaNode getInput() { + return input; + } + + void setInput(final ContainerSchemaNode input) { + this.input = input; + } + + @Override + public ContainerSchemaNode getOutput() { + return output; + } + + void setOutput(final ContainerSchemaNode output) { + this.output = output; + } + + @Override + public Set> getTypeDefinitions() { + return typeDefinitions; + } + + @Override + public Set getGroupings() { + return groupings; + } + + @Override + public List getUnknownSchemaNodes() { + return unknownNodes; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((qname == null) ? 0 : qname.hashCode()); + result = prime * result + ((path == null) ? 0 : path.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final RpcEffectiveStatementImpl other = (RpcEffectiveStatementImpl) obj; + if (qname == null) { + if (other.qname != null) { + return false; + } + } else if (!qname.equals(other.qname)) { + return false; + } + if (path == null) { + if (other.path != null) { + return false; + } + } else if (!path.equals(other.path)) { + return false; + } + return true; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(RpcEffectiveStatementImpl.class.getSimpleName()); + sb.append("["); + sb.append("qname="); + sb.append(qname); + sb.append(", path="); + sb.append(path); + sb.append(", input="); + sb.append(input); + sb.append(", output="); + sb.append(output); + sb.append("]"); + return sb.toString(); + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/StatusEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/StatusEffectiveStatementImpl.java new file mode 100644 index 0000000000..eb5274dda0 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/StatusEffectiveStatementImpl.java @@ -0,0 +1,22 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class StatusEffectiveStatementImpl extends + EffectiveStatementBase { + + public StatusEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/SubmoduleEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/SubmoduleEffectiveStatementImpl.java new file mode 100644 index 0000000000..762d408b78 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/SubmoduleEffectiveStatementImpl.java @@ -0,0 +1,23 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement; + +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class SubmoduleEffectiveStatementImpl extends + ModuleEffectiveStatementImpl { + + public SubmoduleEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + + } + +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UnitsEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UnitsEffectiveStatementImpl.java new file mode 100644 index 0000000000..83e4fd2b22 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UnitsEffectiveStatementImpl.java @@ -0,0 +1,21 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.UnitsStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class UnitsEffectiveStatementImpl extends + EffectiveStatementBase { + + public UnitsEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + } + +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UsesEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UsesEffectiveStatementImpl.java index f2c7f508aa..21f6831cdf 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UsesEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UsesEffectiveStatementImpl.java @@ -1,5 +1,5 @@ -/* - * Copyright (c) 2013-2015 Cisco Systems, Inc. and others. All rights reserved. +/** + * 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, diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ValueEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ValueEffectiveStatementImpl.java new file mode 100644 index 0000000000..d21d6fabe8 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ValueEffectiveStatementImpl.java @@ -0,0 +1,22 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.ValueStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class ValueEffectiveStatementImpl extends + EffectiveStatementBase { + + public ValueEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/WhenEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/WhenEffectiveStatementImpl.java new file mode 100644 index 0000000000..c7eeac506f --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/WhenEffectiveStatementImpl.java @@ -0,0 +1,23 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; +import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class WhenEffectiveStatementImpl extends + EffectiveStatementBase { + + public WhenEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/YangVersionEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/YangVersionEffectiveStatementImpl.java new file mode 100644 index 0000000000..32479687a1 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/YangVersionEffectiveStatementImpl.java @@ -0,0 +1,22 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class YangVersionEffectiveStatementImpl extends + EffectiveStatementBase { + + public YangVersionEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + + } + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/YinElementEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/YinElementEffectiveStatementImpl.java new file mode 100644 index 0000000000..600b0c5998 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/YinElementEffectiveStatementImpl.java @@ -0,0 +1,21 @@ +/** + * 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.parser.stmt.rfc6020.effective; + +import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class YinElementEffectiveStatementImpl extends + EffectiveStatementBase { + + public YinElementEffectiveStatementImpl( + StmtContext ctx) { + super(ctx); + } + +} diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/effective/build/test/EffectiveBuildTest.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/effective/build/test/EffectiveBuildTest.java index 83a3abdb7d..166d08b9c6 100644 --- a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/effective/build/test/EffectiveBuildTest.java +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/effective/build/test/EffectiveBuildTest.java @@ -2,22 +2,27 @@ package org.opendaylight.yangtools.yang.stmt.effective.build.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EffectiveSchemaContext; -import org.opendaylight.yangtools.yang.model.api.GroupingDefinition; -import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.Module; + import java.net.URI; + +import org.junit.Test; +import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline; -import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor.BuildAction; +import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; +import org.opendaylight.yangtools.yang.model.api.GroupingDefinition; +import org.opendaylight.yangtools.yang.model.api.Module; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; -import org.junit.Test; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; +import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor.BuildAction; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangStatementSourceImpl; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EffectiveSchemaContext; public class EffectiveBuildTest { - private static final YangFileStatementSource SIMPLE_MODULE = new YangFileStatementSource("/stmt-test/effective-build/simple-module.yang"); + private static final YangStatementSourceImpl SIMPLE_MODULE = new YangStatementSourceImpl( + "/stmt-test/effective-build/simple-module.yang"); private static final QNameModule SIMPLE_MODULE_QNAME = QNameModule.create(URI.create("simple.yang"), null); @Test @@ -28,7 +33,7 @@ public class EffectiveBuildTest { assertNotNull(result); - Module simpleModule = result.findModuleByName("simple-module",null); + Module simpleModule = result.findModuleByName("simple-module", null); assertNotNull(simpleModule); QName q1 = QName.create(SIMPLE_MODULE_QNAME, "root-container"); @@ -39,34 +44,38 @@ public class EffectiveBuildTest { QName q6 = QName.create(SIMPLE_MODULE_QNAME, "sub-sub-container2"); QName q7 = QName.create(SIMPLE_MODULE_QNAME, "grp"); - ContainerSchemaNode rootCon = (ContainerSchemaNode)simpleModule.getDataChildByName(q1); + ContainerSchemaNode rootCon = (ContainerSchemaNode) simpleModule.getDataChildByName(q1); assertNotNull(rootCon); - ContainerSchemaNode subCon = (ContainerSchemaNode)rootCon.getDataChildByName(q2); + ContainerSchemaNode subCon = (ContainerSchemaNode) rootCon.getDataChildByName(q2); assertNotNull(subCon); - ContainerSchemaNode subSubCon = (ContainerSchemaNode)subCon.getDataChildByName(q3); + ContainerSchemaNode subSubCon = (ContainerSchemaNode) subCon.getDataChildByName(q3); assertNotNull(subSubCon); - ContainerSchemaNode rootCon2 = (ContainerSchemaNode)simpleModule.getDataChildByName(q4); + ContainerSchemaNode rootCon2 = (ContainerSchemaNode) simpleModule.getDataChildByName(q4); assertNotNull(rootCon2); - ContainerSchemaNode subCon2 = (ContainerSchemaNode)rootCon2.getDataChildByName(q5); + ContainerSchemaNode subCon2 = (ContainerSchemaNode) rootCon2.getDataChildByName(q5); assertNotNull(subCon2); - ContainerSchemaNode subSubCon2 = (ContainerSchemaNode)subCon2.getDataChildByName(q6); + ContainerSchemaNode subSubCon2 = (ContainerSchemaNode) subCon2.getDataChildByName(q6); assertNotNull(subSubCon2); GroupingDefinition grp = simpleModule.getGroupings().iterator().next(); assertNotNull(grp); - assertEquals(q7,grp.getQName()); + assertEquals(q7, grp.getQName()); ContainerSchemaNode grpSubCon2 = (ContainerSchemaNode) grp.getDataChildByName(q5); assertNotNull(grpSubCon2); - ContainerSchemaNode grpSubSubCon2 = (ContainerSchemaNode)grpSubCon2.getDataChildByName(q6); + ContainerSchemaNode grpSubSubCon2 = (ContainerSchemaNode) grpSubCon2.getDataChildByName(q6); assertNotNull(grpSubSubCon2); + assertEquals(SchemaPath.create(true, q1, q2, q3), subSubCon.getPath()); + assertEquals(SchemaPath.create(true, q4, q5, q6), subSubCon2.getPath()); + assertEquals(SchemaPath.create(true, q7, q5, q6), grpSubSubCon2.getPath()); + } private void log(Throwable e, String indent) { @@ -79,9 +88,8 @@ public class EffectiveBuildTest { } - private void addSources(BuildAction reactor, - YangFileStatementSource... sources) { - for (YangFileStatementSource source : sources) { + private void addSources(BuildAction reactor, YangStatementSourceImpl... sources) { + for (YangStatementSourceImpl source : sources) { reactor.addSource(source); } } diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/test/AugmentProcessTest.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/test/AugmentProcessTest.java new file mode 100644 index 0000000000..d9ecd4eef5 --- /dev/null +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/test/AugmentProcessTest.java @@ -0,0 +1,87 @@ +package org.opendaylight.yangtools.yang.stmt.test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.QNameModule; +import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode; +import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; +import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; +import org.opendaylight.yangtools.yang.model.api.Module; +import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; +import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; +import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource; +import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangStatementSourceImpl; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EffectiveSchemaContext; + +import java.net.URI; + +public class AugmentProcessTest { + + private static final YangStatementSourceImpl AUGMENTED = new YangStatementSourceImpl( + "/stmt-test/effective-build/augmented.yang"); + private static final YangStatementSourceImpl ROOT = new YangStatementSourceImpl( + "/stmt-test/effective-build/aug-root.yang"); + + private static final QNameModule AUGMENTED_QNAME_MODULE = QNameModule.create(URI.create("aug"), null); + + QName augParent1 = QName.create(AUGMENTED_QNAME_MODULE, "aug-parent1"); + QName augParent2 = QName.create(AUGMENTED_QNAME_MODULE, "aug-parent2"); + QName contTarget = QName.create(AUGMENTED_QNAME_MODULE, "cont-target"); + + QName contAdded1 = QName.create(AUGMENTED_QNAME_MODULE, "cont-added1"); + QName contAdded2 = QName.create(AUGMENTED_QNAME_MODULE, "cont-added2"); + + QName list1 = QName.create(AUGMENTED_QNAME_MODULE, "list1"); + QName axml = QName.create(AUGMENTED_QNAME_MODULE, "axml"); + + QName contGrp = QName.create(AUGMENTED_QNAME_MODULE, "cont-grp"); + QName axmlGrp = QName.create(AUGMENTED_QNAME_MODULE, "axml-grp"); + + @Test + public void readAndParseYangFileTest() throws SourceException, ReactorException { + + CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild(); + addSources(reactor, AUGMENTED, ROOT); + + final EffectiveSchemaContext result = reactor.buildEffective(); + + assertNotNull(result); + + Module augmentedModule = result.findModuleByName("augmented", null); + assertNotNull(augmentedModule); + + ContainerSchemaNode augParent1Node = (ContainerSchemaNode) result.getDataChildByName(augParent1); + ContainerSchemaNode augParent2Node = (ContainerSchemaNode) augParent1Node.getDataChildByName(augParent2); + ContainerSchemaNode targetContNode = (ContainerSchemaNode) augParent2Node.getDataChildByName(contTarget); + assertNotNull(targetContNode); + + assertNotNull(targetContNode.getChildNodes()); + assertEquals(3, targetContNode.getChildNodes().size()); + + ContainerSchemaNode contAdded1Node = (ContainerSchemaNode) targetContNode.getDataChildByName(contAdded1); + assertNotNull(contAdded1Node); + ListSchemaNode list1Node = (ListSchemaNode) contAdded1Node.getDataChildByName(list1); + assertNotNull(list1Node); + + ContainerSchemaNode contAdded2Node = (ContainerSchemaNode) targetContNode.getDataChildByName(contAdded2); + assertNotNull(contAdded2Node); + AnyXmlSchemaNode axmlNode = (AnyXmlSchemaNode) contAdded2Node.getDataChildByName(axml); + assertNotNull(axmlNode); + + ContainerSchemaNode contGrpNode = (ContainerSchemaNode) targetContNode.getDataChildByName(contGrp); + assertNotNull(contGrpNode); + AnyXmlSchemaNode axmlGrpNode = (AnyXmlSchemaNode) contGrpNode.getDataChildByName(axmlGrp); + assertNotNull(axmlGrpNode); + } + + private void addSources(CrossSourceStatementReactor.BuildAction reactor, StatementStreamSource... sources) { + for (StatementStreamSource source : sources) { + reactor.addSource(source); + } + } +} diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/test/AugmentSimplestTest.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/test/AugmentSimplestTest.java new file mode 100644 index 0000000000..4c02208ba3 --- /dev/null +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/test/AugmentSimplestTest.java @@ -0,0 +1,32 @@ +package org.opendaylight.yangtools.yang.stmt.test; + +import org.junit.Test; +import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; +import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; +import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource; +import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor; +import org.opendaylight.yangtools.yang.parser.stmt.reactor.EffectiveModelContext; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline; + +import static org.junit.Assert.assertNotNull; + +public class AugmentSimplestTest { + + private static final TestYangFileStatementSource AUGMENTED = new TestYangFileStatementSource("/semantic-statement-parser/augmented.yang"); + private static final TestYangFileStatementSource ROOT = new TestYangFileStatementSource("/semantic-statement-parser/root.yang"); + + @Test + public void readAndParseYangFileTest() throws SourceException, ReactorException { + CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild(); + addSources(reactor, AUGMENTED, ROOT); + + EffectiveModelContext result = reactor.build(); + assertNotNull(result); + } + + private void addSources(CrossSourceStatementReactor.BuildAction reactor, StatementStreamSource... sources) { + for (StatementStreamSource source : sources) { + reactor.addSource(source); + } + } +} diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/test/YangFileStmtTest.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/test/YangFileStmtTest.java index c88ad9c643..ee2b10a222 100644 --- a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/test/YangFileStmtTest.java +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/test/YangFileStmtTest.java @@ -31,10 +31,25 @@ public class YangFileStmtTest { private static final YangStatementSourceImpl EXTUSE = new YangStatementSourceImpl("/semantic-statement-parser/ext-use.yang"); @Test - public void readAndParseYangFileTest() throws SourceException, ReactorException { + public void readAndParseYangFileTest1() throws SourceException, ReactorException { CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild(); addSources(reactor, YANGFILE, SIMPLENODES, IMPORTEDYANGFILE, FOO); - addSources(reactor, FILE1, FILE2, FILE3, FILE4); + EffectiveModelContext result = reactor.build(); + assertNotNull(result); + } + + // TODO uncomment when Augment in Uses implemented +// @Test +// public void readAndParseYangFileTest2() throws SourceException, ReactorException { +// CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild(); +// addSources(reactor, FILE1, FILE2, FILE3, FILE4); +// EffectiveModelContext result = reactor.build(); +// assertNotNull(result); +// } + + @Test + public void readAndParseYangFileTest3() throws SourceException, ReactorException { + CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild(); addSources(reactor, EXTFILE, EXTUSE); EffectiveModelContext result = reactor.build(); assertNotNull(result); diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/test/augment/AugmentTest.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/test/augment/AugmentTest.java index 69b1242458..85308f2841 100644 --- a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/test/augment/AugmentTest.java +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/test/augment/AugmentTest.java @@ -43,8 +43,12 @@ public class AugmentTest { BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild(); addSources(reactor, VALID_ABS); - EffectiveModelContext result = reactor.build(); - assertNotNull(result); + try { + reactor.build(); + } catch (Exception e) { + // if augment argument is correct we only catch an exception that it cannot be found in mock model + assertEquals(NullPointerException.class, e.getClass()); + } } @Test @@ -53,8 +57,12 @@ public class AugmentTest { BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild(); addSources(reactor, IMPORTED, VALID_ABS_PREFIXED); - EffectiveModelContext result = reactor.build(); - assertNotNull(result); + try { + reactor.build(); + } catch (Exception e) { + // if augment argument is correct we only catch an exception that it cannot be found in mock model + assertEquals(NullPointerException.class, e.getClass()); + } } @Test @@ -63,8 +71,12 @@ public class AugmentTest { BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild(); addSources(reactor, VALID_REL); - EffectiveModelContext result = reactor.build(); - assertNotNull(result); + try { + reactor.build(); + } catch (Exception e) { + // if augment argument is correct we only catch an exception that it cannot be found in mock model + assertEquals(NullPointerException.class, e.getClass()); + } } @Test @@ -73,8 +85,12 @@ public class AugmentTest { BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild(); addSources(reactor, IMPORTED, VALID_REL_PREFIXED); - EffectiveModelContext result = reactor.build(); - assertNotNull(result); + try { + reactor.build(); + } catch (Exception e) { + // if augment argument is correct we only catch an exception that it cannot be found in mock model + assertEquals(NullPointerException.class, e.getClass()); + } } @Test diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/test/augment/TestAugmentSource.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/test/augment/TestAugmentSource.java index ba9c745d6b..60190093a5 100644 --- a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/test/augment/TestAugmentSource.java +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/test/augment/TestAugmentSource.java @@ -57,7 +57,7 @@ public class TestAugmentSource implements StatementStreamSource { @Override public void writeLinkageAndStatementDefinitions(StatementWriter writer, QNameToStatementDefinition stmtDef, - PrefixToModule prefixes) throws SourceException { + PrefixToModule prefixes) throws SourceException { this.writer = writer; header(); extensions(); diff --git a/yang/yang-parser-impl/src/test/resources/model/subfoo.yang b/yang/yang-parser-impl/src/test/resources/model/subfoo.yang index c75b62cff4..412f9c15a9 100644 --- a/yang/yang-parser-impl/src/test/resources/model/subfoo.yang +++ b/yang/yang-parser-impl/src/test/resources/model/subfoo.yang @@ -3,7 +3,7 @@ submodule subfoo { belongs-to foo { prefix f; - } + } import bar { prefix "br"; diff --git a/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/augmented.yang b/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/augmented.yang new file mode 100644 index 0000000000..7d432806f8 --- /dev/null +++ b/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/augmented.yang @@ -0,0 +1,11 @@ +module augmented { + prefix augmented_pref; + namespace augmented_ns; + + container cont1 { + container cont2 { + container cont-target { + } + } + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/root.yang b/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/root.yang new file mode 100644 index 0000000000..2e72ad1f66 --- /dev/null +++ b/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/root.yang @@ -0,0 +1,14 @@ +module root { + prefix root_pref; + namespace root_ns; + + import augmented { + prefix imp; + } + + augment /imp:cont1/imp:cont2/imp:cont-target { + leaf added { + type string; + } + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/test/resources/stmt-test/effective-build/aug-root.yang b/yang/yang-parser-impl/src/test/resources/stmt-test/effective-build/aug-root.yang new file mode 100644 index 0000000000..017b10820f --- /dev/null +++ b/yang/yang-parser-impl/src/test/resources/stmt-test/effective-build/aug-root.yang @@ -0,0 +1,21 @@ +module aug-root { + namespace root; + prefix root; + + import augmented { + prefix aug; + } + + augment "aug:aug-parent1/aug:aug-parent2/aug:cont-target" { + container cont-added1 { + list list1 { + } + } + + container cont-added2 { + anyxml axml; + } + + uses aug:grp; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/test/resources/stmt-test/effective-build/augmented.yang b/yang/yang-parser-impl/src/test/resources/stmt-test/effective-build/augmented.yang new file mode 100644 index 0000000000..47ca018cca --- /dev/null +++ b/yang/yang-parser-impl/src/test/resources/stmt-test/effective-build/augmented.yang @@ -0,0 +1,18 @@ +module augmented { + namespace aug; + prefix aug; + + container aug-parent1 { + container aug-parent2 { + container cont-target { + + } + } + } + + grouping grp { + container cont-grp { + anyxml axml-grp; + } + } +} \ No newline at end of file -- 2.36.6