From f5fd415fe89f7ebda43350517f7ea691a0a7ba94 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 9 Nov 2017 02:50:47 +0100 Subject: [PATCH] YANGTOOLS-706: reorganize statement definitions Declared/Effective implementation classes should be hidden behind their respective statement support. To provide this design safety measure we need to assign a package to each statement, so that its implementation details can be properly hidden. Since we are implementing a combined RFC6020/RFC7950 parser, which is difficult to split without leaking implementation classes between RFC6020 and RFC7950, use RFC7960 base package name. This leaves a few statements behind, as their interactions need to be cleaned up before they get moved and will be part of a follow-up patch. Change-Id: I1a21412773beffd6e3ac81eaecf13073d787526d Signed-off-by: Robert Varga --- .../yangtools/rfc7952/parser/Annotation.java | 2 +- ...tractImmutableNormalizedValueAttrNode.java | 2 +- .../AbstractConstraintEffectiveStatement.java | 13 +- ...tEffectiveDocumentedDataNodeContainer.java | 13 +- .../AbstractEffectiveDocumentedNode.java | 2 +- .../stmt}/AbstractEffectiveModule.java | 14 +- .../stmt}/AbstractEffectiveSchemaNode.java | 10 +- ...tractListConstraintEffectiveStatement.java | 12 +- .../stmt}/AbstractRootStatement.java | 2 +- .../stmt}/DeclaredEffectiveStatementBase.java | 2 +- .../stmt}/EffectiveStatementBase.java | 4 +- .../stmt}/EffectiveStmtUtils.java | 2 +- .../UndeclaredEffectiveStatementBase.java | 2 +- .../stmt}/UnknownEffectiveStatementBase.java | 2 +- .../action}/ActionEffectiveStatementImpl.java | 11 +- .../stmt/action/ActionStatementImpl.java | 81 ++++ .../stmt/action/ActionStatementSupport.java | 116 +++++ .../AnydataEffectiveStatementImpl.java | 6 +- .../stmt/anydata/AnydataStatementImpl.java | 78 +++ .../stmt/anydata/AnydataStatementSupport.java | 65 +++ .../stmt/anyxml/AnyxmlStatementImpl.java | 77 +++ .../stmt/anyxml/AnyxmlStatementSupport.java | 101 ++++ .../ArgumentEffectiveStatementImpl.java | 7 +- .../stmt/argument/ArgumentStatementImpl.java | 32 ++ .../argument/ArgumentStatementSupport.java | 51 ++ .../AbstractAugmentStatementSupport.java | 351 ++++++++++++++ .../AugmentEffectiveStatementImpl.java | 7 +- .../stmt/augment/AugmentStatementImpl.java | 91 ++++ .../AugmentStatementRFC6020Support.java | 35 ++ .../AugmentStatementRFC7950Support.java} | 5 +- .../base}/BaseEffectiveStatementImpl.java | 10 +- .../rfc7950/stmt/base/BaseStatementImpl.java | 26 + .../stmt/base/BaseStatementSupport.java | 97 ++++ .../BelongsToEffectiveStatementImpl.java | 7 +- .../belongs_to/BelongsToStatementImpl.java | 33 ++ .../belongs_to/BelongsToStatementSupport.java | 106 +++++ .../stmt/bit/AbstractBitStatementSupport.java | 39 ++ .../stmt/bit}/BitEffectiveStatementImpl.java | 9 +- .../rfc7950/stmt/bit/BitStatementImpl.java | 58 +++ .../stmt/bit/BitStatementRFC6020Support.java | 26 + .../stmt/bit/BitStatementRFC7950Support.java} | 5 +- .../case_/AbstractCaseStatementSupport.java | 49 ++ .../rfc7950/stmt/case_/CaseStatementImpl.java | 69 +++ .../case_/CaseStatementRFC6020Support.java | 34 ++ .../case_/CaseStatementRFC7950Support.java} | 5 +- .../AbstractChoiceStatementSupport.java | 62 +++ .../stmt/choice/ChoiceStatementImpl.java | 91 ++++ .../choice/ChoiceStatementRFC6020Support.java | 45 ++ .../ChoiceStatementRFC7950Support.java} | 11 +- .../config}/ConfigEffectiveStatementImpl.java | 4 +- .../stmt/config/ConfigStatementImpl.java | 23 + .../stmt/config/ConfigStatementSupport.java | 65 +++ .../EmptyConfigEffectiveStatement.java | 2 +- .../stmt/config}/EmptyConfigStatement.java | 2 +- .../ContactEffectiveStatementImpl.java | 8 +- .../stmt/contact/ContactStatementImpl.java | 25 + .../stmt/contact/ContactStatementSupport.java | 46 ++ .../AbstractContainerStatementSupport.java | 49 ++ .../container}/ContainerStatementImpl.java | 73 +-- .../ContainerStatementRFC6020Support.java | 39 ++ .../ContainerStatementRFC7950Support.java} | 8 +- .../DefaultEffectiveStatementImpl.java | 8 +- .../stmt/default_/DefaultStatementImpl.java | 26 + .../default_/DefaultStatementSupport.java | 46 ++ .../DescriptionEffectiveStatementImpl.java | 8 +- .../description/DescriptionStatementImpl.java | 25 + .../DescriptionStatementSupport.java | 46 ++ .../AbstractDeviateStatementSupport.java | 374 +++++++++++++++ .../DeviateEffectiveStatementImpl.java | 8 +- .../stmt/deviate/DeviateStatementImpl.java | 26 + .../DeviateStatementRFC6020Support.java | 12 + .../DeviateStatementRFC7950Support.java} | 6 +- .../DeviationEffectiveStatementImpl.java | 10 +- .../deviation/DeviationStatementImpl.java | 50 ++ .../deviation/DeviationStatementSupport.java | 69 +++ .../enum_/AbstractEnumStatementSupport.java | 39 ++ .../enum_}/EnumEffectiveStatementImpl.java | 11 +- .../rfc7950/stmt/enum_/EnumStatementImpl.java | 57 +++ .../enum_/EnumStatementRFC6020Support.java | 26 + .../enum_/EnumStatementRFC7950Support.java} | 9 +- .../ErrorAppTagEffectiveStatementImpl.java | 10 +- .../ErrorAppTagStatementImpl.java | 25 + .../ErrorAppTagStatementSupport.java | 47 ++ .../ErrorMessageEffectiveStatementImpl.java | 9 +- .../ErrorMessageStatementImpl.java | 25 + .../ErrorMessageStatementSupport.java | 48 ++ .../ExtensionEffectiveStatementImpl.java | 12 +- .../extension/ExtensionStatementImpl.java | 43 ++ .../extension/ExtensionStatementSupport.java | 82 ++++ .../ModelDefinedStatementDefinition.java | 7 +- .../ModelDefinedStatementSupport.java | 10 +- .../UnrecognizedEffectiveStatementImpl.java | 10 +- .../extension/UnrecognizedStatementImpl.java | 25 + .../UnrecognizedStatementSupport.java | 58 +++ .../FeatureEffectiveStatementImpl.java | 10 +- .../stmt/feature/FeatureStatementImpl.java | 53 +++ .../stmt/feature/FeatureStatementSupport.java | 54 +++ .../FractionDigitsEffectiveStatementImpl.java | 8 +- .../FractionDigitsStatementImpl.java | 23 + .../FractionDigitsStatementSupport.java | 61 +++ .../AbstractGroupingStatementSupport.java | 52 ++ .../GroupingEffectiveStatementImpl.java | 7 +- .../stmt/grouping/GroupingStatementImpl.java | 79 +++ .../GroupingStatementRFC6020Support.java | 34 ++ .../GroupingStatementRFC7950Support.java} | 5 +- .../AbstractIdentityStatementSupport.java | 47 ++ .../IdentityEffectiveStatementImpl.java | 8 +- .../stmt/identity/IdentityStatementImpl.java | 59 +++ .../IdentityStatementRFC6020Support.java | 26 + .../IdentityStatementRFC7950Support.java} | 9 +- .../IfFeatureEffectiveStatementImpl.java | 8 +- .../if_feature/IfFeaturePredicateVisitor.java | 80 ++++ .../if_feature/IfFeatureStatementImpl.java | 27 ++ .../if_feature/IfFeatureStatementSupport.java | 58 +++ .../AbstractImportStatementSupport.java | 104 ++++ .../ImportEffectiveStatementImpl.java | 8 +- .../stmt/import_}/ImportStatementImpl.java | 6 +- .../ImportStatementRFC6020Support.java | 26 + .../ImportStatementRFC7950Support.java} | 6 +- .../rfc7950/stmt/import_/RevisionImport.java | 92 ++++ .../stmt/import_/SemanticVersionImport.java | 179 +++++++ .../AbstractIncludeStatementSupport.java | 104 ++++ .../IncludeEffectiveStatementImpl.java | 8 +- .../stmt/include/IncludeStatementImpl.java | 43 ++ .../IncludeStatementRFC6020Support.java | 21 + .../IncludeStatementRFC7950Support.java} | 6 +- .../input/AbstractInputStatementSupport.java | 48 ++ .../stmt/input/InputStatementImpl.java | 49 ++ .../input/InputStatementRFC6020Support.java | 31 ++ .../input/InputStatementRFC7950Support.java} | 5 +- .../stmt/key}/KeyEffectiveStatementImpl.java | 8 +- .../rfc7950/stmt/key/KeyStatementImpl.java | 21 + .../rfc7950/stmt/key/KeyStatementSupport.java | 93 ++++ .../stmt/leaf}/LeafStatementImpl.java | 69 +-- .../stmt/leaf/LeafStatementSupport.java | 75 +++ .../AbstractLeafListStatementSupport.java | 49 ++ .../leaf_list}/LeafListStatementImpl.java | 68 +-- .../LeafListStatementRFC6020Support.java | 34 ++ .../LeafListStatementRFC7950Support.java} | 7 +- .../length}/LengthEffectiveStatementImpl.java | 10 +- .../stmt/length/LengthStatementImpl.java | 44 ++ .../stmt/length/LengthStatementSupport.java | 55 +++ .../list/AbstractListStatementSupport.java | 49 ++ .../stmt/list}/ListStatementImpl.java | 78 +-- .../list/ListStatementRFC6020Support.java | 44 ++ .../list/ListStatementRFC7950Support.java} | 5 +- .../EmptyMandatoryEffectiveStatement.java | 2 +- .../mandatory}/EmptyMandatoryStatement.java | 2 +- .../MandatoryEffectiveStatementImpl.java | 8 +- .../mandatory/MandatoryStatementImpl.java | 24 + .../mandatory/MandatoryStatementSupport.java | 64 +++ .../MaxElementsEffectiveStatementImpl.java | 9 +- .../MaxElementsStatementImpl.java | 25 + .../MaxElementsStatementSupport.java | 48 ++ .../MinElementsEffectiveStatementImpl.java | 9 +- .../MinElementsStatementImpl.java | 25 + .../MinElementsStatementSupport.java | 49 ++ .../ModifierEffectiveStatementImpl.java | 9 +- .../stmt/modifier/ModifierStatementImpl.java | 31 ++ .../modifier/ModifierStatementSupport.java | 50 ++ .../AbstractModuleStatementSupport.java} | 54 +-- .../module}/ModuleEffectiveStatementImpl.java | 8 +- .../stmt/module}/ModuleStatementImpl.java | 8 +- .../module/ModuleStatementRFC6020Support.java | 50 ++ .../ModuleStatementRFC7950Support.java} | 5 +- .../must}/MustEffectiveStatementImpl.java | 8 +- .../rfc7950/stmt/must/MustStatementImpl.java | 55 +++ .../stmt/must/MustStatementSupport.java | 54 +++ .../NamespaceEffectiveStatementImpl.java | 8 +- .../namespace/NamespaceStatementImpl.java | 26 + .../namespace/NamespaceStatementSupport.java | 48 ++ .../AbstractNotificationStatementSupport.java | 41 ++ .../NotificationEffectiveStatementImpl.java | 9 +- .../NotificationStatementImpl.java | 84 ++++ .../NotificationStatementRFC6020Support.java | 45 ++ .../NotificationStatementRFC7950Support.java} | 6 +- .../OrderedByEffectiveStatementImpl.java | 8 +- .../ordered_by/OrderedByStatementImpl.java | 25 + .../ordered_by/OrderedByStatementSupport.java | 58 +++ .../OrganizationEffectiveStatementImpl.java | 9 +- .../OrganizationStatementImpl.java | 25 + .../OrganizationStatementSupport.java | 49 ++ .../AbstractOutputStatementSupport.java | 48 ++ .../stmt/output/OutputStatementImpl.java | 49 ++ .../output/OutputStatementRFC6020Support.java | 31 ++ .../OutputStatementRFC7950Support.java} | 5 +- .../parser/rfc7950/stmt/package-info.java | 22 + .../path}/PathEffectiveStatementImpl.java | 9 +- .../rfc7950/stmt/path/PathStatementImpl.java | 26 + .../stmt/path/PathStatementSupport.java | 50 ++ .../AbstractPatternStatementSupport.java | 56 +++ .../stmt/pattern/PatternConstraintImpl.java} | 12 +- .../PatternEffectiveStatementImpl.java | 11 +- .../stmt/pattern/PatternStatementImpl.java | 57 +++ .../PatternStatementRFC6020Support.java | 26 + .../PatternStatementRFC7950Support.java} | 5 +- .../PositionEffectiveStatementImpl.java | 8 +- .../stmt/position/PositionStatementImpl.java | 23 + .../position/PositionStatementSupport.java | 52 ++ .../prefix}/PrefixEffectiveStatementImpl.java | 8 +- .../stmt/prefix/PrefixStatementImpl.java | 25 + .../stmt/prefix/PrefixStatementSupport.java | 47 ++ .../PresenceEffectiveStatementImpl.java | 8 +- .../stmt/presence/PresenceStatementImpl.java | 25 + .../presence/PresenceStatementSupport.java | 47 ++ .../range}/RangeEffectiveStatementImpl.java | 11 +- .../stmt/range/RangeStatementImpl.java | 44 ++ .../stmt/range/RangeStatementSupport.java | 55 +++ .../ReferenceEffectiveStatementImpl.java | 8 +- .../reference/ReferenceStatementImpl.java | 25 + .../reference/ReferenceStatementSupport.java | 47 ++ .../AbstractRefineStatementSupport.java | 41 ++ .../refine}/RefineEffectiveStatementImpl.java | 7 +- .../stmt/refine}/RefineStatementImpl.java | 55 +-- .../refine/RefineStatementRFC6020Support.java | 31 ++ .../RefineStatementRFC7950Support.java} | 5 +- ...RequireInstanceEffectiveStatementImpl.java | 8 +- .../RequireInstanceStatementImpl.java | 24 + .../RequireInstanceStatementSupport.java | 53 +++ .../RevisionEffectiveStatementImpl.java | 8 +- .../stmt/revision/RevisionStatementImpl.java | 41 ++ .../revision/RevisionStatementSupport.java | 57 +++ .../RevisionDateEffectiveStatementImpl.java | 9 +- .../RevisionDateStatementImpl.java | 24 + .../RevisionDateStatementSupport.java | 54 +++ .../stmt/rpc/AbstractRpcStatementSupport.java | 98 ++++ .../stmt/rpc}/RpcEffectiveStatementImpl.java | 12 +- .../rfc7950/stmt/rpc/RpcStatementImpl.java | 81 ++++ .../stmt/rpc/RpcStatementRFC6020Support.java | 28 ++ .../stmt/rpc/RpcStatementRFC7950Support.java} | 15 +- .../status}/StatusEffectiveStatementImpl.java | 8 +- .../stmt/status/StatusStatementImpl.java | 26 + .../stmt/status/StatusStatementSupport.java | 73 +++ .../AbstractSubmoduleStatementSupport.java | 82 ++++ .../SubmoduleEffectiveStatementImpl.java | 6 +- .../submodule/SubmoduleStatementImpl.java | 38 ++ .../SubmoduleStatementRFC6020Support.java | 47 ++ .../SubmoduleStatementRFC7950Support.java} | 5 +- ...stractIdentityRefSpecificationSupport.java | 62 +++ .../AbstractLeafrefSpecificationSupport.java | 38 ++ .../type/AbstractTypeEffectiveStatement.java | 7 +- .../type/AbstractTypeStatementSupport.java | 277 +++++++++++ .../BinaryTypeEffectiveStatementImpl.java | 10 +- .../BitsSpecificationEffectiveStatement.java} | 12 +- .../stmt/type/BitsSpecificationImpl.java | 33 ++ .../stmt/type/BitsSpecificationSupport.java | 48 ++ .../type/BitsTypeEffectiveStatementImpl.java | 9 +- .../BooleanTypeEffectiveStatementImpl.java | 7 +- .../stmt}/type/BuiltinEffectiveStatement.java | 4 +- .../stmt/type}/BuiltinTypeStatement.java | 3 +- ...mal64SpecificationEffectiveStatement.java} | 15 +- .../stmt/type/Decimal64SpecificationImpl.java | 38 ++ .../type/Decimal64SpecificationSupport.java | 49 ++ .../DecimalTypeEffectiveStatementImpl.java | 10 +- .../stmt}/type/EffectiveTypeUtil.java | 6 +- .../type/EmptyTypeEffectiveStatementImpl.java | 7 +- .../EnumSpecificationEffectiveStatement.java} | 12 +- .../stmt/type/EnumSpecificationImpl.java | 33 ++ .../stmt/type/EnumSpecificationSupport.java | 48 ++ .../type/EnumTypeEffectiveStatementImpl.java | 9 +- ...tyRefSpecificationEffectiveStatement.java} | 9 +- .../type/IdentityRefSpecificationImpl.java | 33 ++ ...dentityRefSpecificationRFC6020Support.java | 23 + ...entityrefSpecificationRFC7950Support.java} | 8 +- ...IdentityrefTypeEffectiveStatementImpl.java | 9 +- ...ifierSpecificationEffectiveStatement.java} | 8 +- .../InstanceIdentifierSpecificationImpl.java | 32 ++ ...nstanceIdentifierSpecificationSupport.java | 50 ++ ...eIdentifierTypeEffectiveStatementImpl.java | 9 +- .../IntegralTypeEffectiveStatementImpl.java | 57 +++ ...afrefSpecificationEffectiveStatement.java} | 11 +- .../stmt/type/LeafrefSpecificationImpl.java | 41 ++ .../LeafrefSpecificationRFC6020Support.java | 23 + .../LeafrefSpecificationRFC7950Support.java} | 8 +- .../LeafrefTypeEffectiveStatementImpl.java | 9 +- .../StringTypeEffectiveStatementImpl.java | 10 +- .../rfc7950/stmt/type/TypeStatementImpl.java | 25 + .../type/TypeStatementRFC6020Support.java | 12 + .../type/TypeStatementRFC7950Support.java} | 12 +- ...UnionSpecificationEffectiveStatement.java} | 11 +- .../stmt/type/UnionSpecificationImpl.java | 34 ++ .../stmt/type/UnionSpecificationSupport.java | 48 ++ .../type/UnionTypeEffectiveStatementImpl.java | 7 +- .../TypedefEffectiveStatementImpl.java} | 19 +- .../stmt/typedef/TypedefStatementImpl.java | 68 +++ .../stmt/typedef/TypedefStatementSupport.java | 73 +++ .../unique}/UniqueEffectiveStatementImpl.java | 10 +- .../stmt/unique/UniqueStatementImpl.java | 29 ++ .../stmt/unique/UniqueStatementSupport.java | 77 +++ .../units}/UnitsEffectiveStatementImpl.java | 8 +- .../stmt/units/UnitsStatementImpl.java | 25 + .../stmt/units/UnitsStatementSupport.java | 48 ++ .../stmt/uses}/UsesStatementImpl.java | 102 +--- .../stmt/uses/UsesStatementSupport.java | 115 +++++ .../value}/ValueEffectiveStatementImpl.java | 8 +- .../stmt/value/ValueStatementImpl.java | 23 + .../stmt/value/ValueStatementSupport.java | 52 ++ .../when}/WhenEffectiveStatementImpl.java | 10 +- .../rfc7950/stmt/when/WhenStatementImpl.java | 41 ++ .../stmt/when/WhenStatementSupport.java | 52 ++ .../YangVersionEffectiveStatementImpl.java | 9 +- .../YangVersionStatementImpl.java | 26 + .../YangVersionStatementSupport.java | 57 +++ .../YinElementEffectiveStatementImpl.java | 9 +- .../yin_element/YinElementStatementImpl.java | 23 + .../YinElementStatementSupport.java | 52 ++ ...lSchemaLocationEffectiveStatementImpl.java | 2 +- ...enconfigVersionEffectiveStatementImpl.java | 2 +- .../stmt/rfc6020/AnyxmlStatementImpl.java | 164 ------- .../stmt/rfc6020/ArgumentStatementImpl.java | 77 --- .../stmt/rfc6020/AugmentStatementImpl.java | 450 ------------------ .../stmt/rfc6020/BaseStatementImpl.java | 113 ----- .../stmt/rfc6020/BelongsToStatementImpl.java | 129 ----- .../parser/stmt/rfc6020/BitStatementImpl.java | 102 ---- .../stmt/rfc6020/BitsSpecificationImpl.java | 72 --- .../stmt/rfc6020/CaseStatementImpl.java | 125 ----- .../stmt/rfc6020/ChoiceStatementImpl.java | 167 ------- .../stmt/rfc6020/ConfigStatementImpl.java | 79 --- .../stmt/rfc6020/ContactStatementImpl.java | 63 --- .../rfc6020/Decimal64SpecificationImpl.java | 78 --- .../stmt/rfc6020/DefaultStatementImpl.java | 65 --- .../rfc6020/DescriptionStatementImpl.java | 63 --- .../stmt/rfc6020/DeviateStatementImpl.java | 387 --------------- .../stmt/rfc6020/DeviationStatementImpl.java | 108 ----- .../stmt/rfc6020/EnumSpecificationImpl.java | 72 --- .../stmt/rfc6020/EnumStatementImpl.java | 100 ---- .../rfc6020/ErrorAppTagStatementImpl.java | 66 --- .../rfc6020/ErrorMessageStatementImpl.java | 65 --- .../stmt/rfc6020/ExtensionStatementImpl.java | 112 ----- .../stmt/rfc6020/FeatureStatementImpl.java | 99 ---- .../rfc6020/FractionDigitsStatementImpl.java | 76 --- .../stmt/rfc6020/GroupingStatementImpl.java | 144 ------ .../rfc6020/IdentityRefSpecificationImpl.java | 95 ---- .../stmt/rfc6020/IdentityStatementImpl.java | 109 ----- .../stmt/rfc6020/IfFeatureStatementImpl.java | 141 ------ .../rfc6020/ImportStatementDefinition.java | 332 ------------- .../stmt/rfc6020/IncludeStatementImpl.java | 146 ------ .../stmt/rfc6020/InputStatementImpl.java | 106 ----- .../InstanceIdentifierSpecificationImpl.java | 73 --- .../parser/stmt/rfc6020/KeyStatementImpl.java | 104 ---- .../rfc6020/LeafrefSpecificationImpl.java | 83 ---- .../stmt/rfc6020/LengthStatementImpl.java | 88 ---- .../stmt/rfc6020/MandatoryStatementImpl.java | 79 --- .../rfc6020/MaxElementsStatementImpl.java | 68 --- .../rfc6020/MinElementsStatementImpl.java | 68 --- .../stmt/rfc6020/MustStatementImpl.java | 98 ---- .../stmt/rfc6020/NamespaceStatementImpl.java | 64 --- .../rfc6020/NotificationStatementImpl.java | 147 ------ .../stmt/rfc6020/OrderedByStatementImpl.java | 77 --- .../rfc6020/OrganizationStatementImpl.java | 67 --- .../stmt/rfc6020/OutputStatementImpl.java | 104 ---- .../stmt/rfc6020/PathStatementImpl.java | 65 --- .../stmt/rfc6020/PatternStatementImpl.java | 116 ----- .../stmt/rfc6020/PositionStatementImpl.java | 66 --- .../stmt/rfc6020/PrefixStatementImpl.java | 63 --- .../stmt/rfc6020/PresenceStatementImpl.java | 65 --- .../stmt/rfc6020/RangeStatementImpl.java | 93 ---- .../stmt/rfc6020/ReferenceStatementImpl.java | 63 --- .../rfc6020/RequireInstanceStatementImpl.java | 67 --- .../rfc6020/RevisionDateStatementImpl.java | 68 --- .../stmt/rfc6020/RevisionStatementImpl.java | 89 ---- .../parser/stmt/rfc6020/RpcStatementImpl.java | 172 ------- .../stmt/rfc6020/StatusStatementImpl.java | 93 ---- .../stmt/rfc6020/SubmoduleStatementImpl.java | 145 ------ .../stmt/rfc6020/TypeStatementImpl.java | 288 ----------- .../yang/parser/stmt/rfc6020/TypeUtils.java | 13 +- .../stmt/rfc6020/TypedefStatementImpl.java | 131 ----- .../stmt/rfc6020/UnionSpecificationImpl.java | 75 --- .../stmt/rfc6020/UniqueStatementImpl.java | 77 --- .../stmt/rfc6020/UnitsStatementImpl.java | 67 --- .../rfc6020/UnrecognizedStatementImpl.java | 76 --- .../yang/parser/stmt/rfc6020/Utils.java | 20 +- .../stmt/rfc6020/ValueStatementImpl.java | 66 --- .../stmt/rfc6020/WhenStatementImpl.java | 82 ---- .../stmt/rfc6020/YangInferencePipeline.java | 295 +++++++----- .../rfc6020/YangVersionStatementImpl.java | 73 --- .../stmt/rfc6020/YinElementStatementImpl.java | 66 --- .../AbstractEffectiveDataSchemaNode.java | 2 +- ...tractEffectiveSimpleDataNodeContainer.java | 1 + .../rfc6020/effective/CaseShorthandImpl.java | 5 +- .../EffectiveConstraintDefinitionImpl.java | 2 +- .../effective/UsesEffectiveStatementImpl.java | 3 +- .../IntegralTypeEffectiveStatementImpl.java | 124 ----- ...calRestrictionsEffectiveStatementImpl.java | 2 +- ...ingRestrictionsEffectiveStatementImpl.java | 2 +- .../stmt/rfc7950/ActionStatementImpl.java | 184 ------- .../stmt/rfc7950/AnydataStatementImpl.java | 133 ------ .../stmt/rfc7950/ModifierStatementImpl.java | 71 --- .../stmt/rfc7950/effective/package-info.java | 12 - .../parser/stmt/rfc7950/package-info.java | 13 - .../YangDataEffectiveStatementImpl.java | 2 +- .../yangtools/yang/stmt/Bug6972Test.java | 15 +- .../yang/stmt/DeclaredStatementsTest.java | 26 +- .../yang/stmt/EffectiveStatementTypeTest.java | 78 +-- ...dPartyExtensionEffectiveStatementImpl.java | 2 +- 395 files changed, 10012 insertions(+), 8906 deletions(-) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective/type => rfc7950/stmt}/AbstractConstraintEffectiveStatement.java (90%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt}/AbstractEffectiveDocumentedDataNodeContainer.java (92%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{rfc6020/util => rfc7950/stmt}/AbstractEffectiveDocumentedNode.java (97%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt}/AbstractEffectiveModule.java (96%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{rfc6020/util => rfc7950/stmt}/AbstractEffectiveSchemaNode.java (86%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective/type => rfc7950/stmt}/AbstractListConstraintEffectiveStatement.java (64%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020 => rfc7950/stmt}/AbstractRootStatement.java (98%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{rfc6020/util => rfc7950/stmt}/DeclaredEffectiveStatementBase.java (97%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{rfc6020/util => rfc7950/stmt}/EffectiveStatementBase.java (96%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{rfc6020/util => rfc7950/stmt}/EffectiveStmtUtils.java (94%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{rfc6020/util => rfc7950/stmt}/UndeclaredEffectiveStatementBase.java (96%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{rfc6020/util => rfc7950/stmt}/UnknownEffectiveStatementBase.java (98%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc7950/effective => rfc7950/stmt/action}/ActionEffectiveStatementImpl.java (93%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc7950/effective => rfc7950/stmt/anydata}/AnydataEffectiveStatementImpl.java (93%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/AnydataStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/AnydataStatementSupport.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/AnyxmlStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/AnyxmlStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/argument}/ArgumentEffectiveStatementImpl.java (76%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/argument/ArgumentStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/argument/ArgumentStatementSupport.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/augment}/AugmentEffectiveStatementImpl.java (95%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementRFC6020Support.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc7950/AugmentStatementRfc7950Support.java => rfc7950/stmt/augment/AugmentStatementRFC7950Support.java} (87%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/base}/BaseEffectiveStatementImpl.java (67%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/base/BaseStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/base/BaseStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/belongs_to}/BelongsToEffectiveStatementImpl.java (74%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/belongs_to/BelongsToStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/belongs_to/BelongsToStatementSupport.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/AbstractBitStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective/type => rfc7950/stmt/bit}/BitEffectiveStatementImpl.java (91%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitStatementRFC6020Support.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc7950/BitStatementRfc7950Support.java => rfc7950/stmt/bit/BitStatementRFC7950Support.java} (83%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/AbstractCaseStatementSupport.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/CaseStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/CaseStatementRFC6020Support.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc7950/CaseStatementRfc7950Support.java => rfc7950/stmt/case_/CaseStatementRFC7950Support.java} (86%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/AbstractChoiceStatementSupport.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/ChoiceStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/ChoiceStatementRFC6020Support.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc7950/ChoiceStatementRfc7950Support.java => rfc7950/stmt/choice/ChoiceStatementRFC7950Support.java} (82%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/config}/ConfigEffectiveStatementImpl.java (86%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/ConfigStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/ConfigStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020 => rfc7950/stmt/config}/EmptyConfigEffectiveStatement.java (97%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020 => rfc7950/stmt/config}/EmptyConfigStatement.java (97%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/contact}/ContactEffectiveStatementImpl.java (64%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/contact/ContactStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/contact/ContactStatementSupport.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/AbstractContainerStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020 => rfc7950/stmt/container}/ContainerStatementImpl.java (51%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementRFC6020Support.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc7950/ContainerStatementRfc7950Support.java => rfc7950/stmt/container/ContainerStatementRFC7950Support.java} (87%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/default_}/DefaultEffectiveStatementImpl.java (64%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/default_/DefaultStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/default_/DefaultStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/description}/DescriptionEffectiveStatementImpl.java (71%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/description/DescriptionStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/description/DescriptionStatementSupport.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/AbstractDeviateStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/deviate}/DeviateEffectiveStatementImpl.java (94%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/DeviateStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/DeviateStatementRFC6020Support.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc7950/DeviateStatementRfc7950Support.java => rfc7950/stmt/deviate/DeviateStatementRFC7950Support.java} (91%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/deviation}/DeviationEffectiveStatementImpl.java (94%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviation/DeviationStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviation/DeviationStatementSupport.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/AbstractEnumStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective/type => rfc7950/stmt/enum_}/EnumEffectiveStatementImpl.java (85%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EnumStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EnumStatementRFC6020Support.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc7950/EnumStatementRfc7950Support.java => rfc7950/stmt/enum_/EnumStatementRFC7950Support.java} (77%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/error_app_tag}/ErrorAppTagEffectiveStatementImpl.java (58%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/error_app_tag/ErrorAppTagStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/error_app_tag/ErrorAppTagStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/error_message}/ErrorMessageEffectiveStatementImpl.java (63%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/error_message/ErrorMessageStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/error_message/ErrorMessageStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/extension}/ExtensionEffectiveStatementImpl.java (94%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020 => rfc7950/stmt/extension}/ModelDefinedStatementDefinition.java (91%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020 => rfc7950/stmt/extension}/ModelDefinedStatementSupport.java (85%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/extension}/UnrecognizedEffectiveStatementImpl.java (88%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/feature}/FeatureEffectiveStatementImpl.java (80%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/feature/FeatureStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/feature/FeatureStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/fraction_digits}/FractionDigitsEffectiveStatementImpl.java (70%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/fraction_digits/FractionDigitsStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/fraction_digits/FractionDigitsStatementSupport.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/AbstractGroupingStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/grouping}/GroupingEffectiveStatementImpl.java (94%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingStatementRFC6020Support.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc7950/GroupingStatementRfc7950Support.java => rfc7950/stmt/grouping/GroupingStatementRFC7950Support.java} (86%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/AbstractIdentityStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/identity}/IdentityEffectiveStatementImpl.java (93%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/IdentityStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/IdentityStatementRFC6020Support.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc7950/IdentityStatementRfc7950Support.java => rfc7950/stmt/identity/IdentityStatementRFC7950Support.java} (76%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/if_feature}/IfFeatureEffectiveStatementImpl.java (73%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/IfFeaturePredicateVisitor.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/IfFeatureStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/IfFeatureStatementSupport.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/AbstractImportStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/import_}/ImportEffectiveStatementImpl.java (94%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020 => rfc7950/stmt/import_}/ImportStatementImpl.java (85%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportStatementRFC6020Support.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc7950/ImportStatementRfc7950Support.java => rfc7950/stmt/import_/ImportStatementRFC7950Support.java} (85%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/RevisionImport.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/SemanticVersionImport.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/include/AbstractIncludeStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/include}/IncludeEffectiveStatementImpl.java (64%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/include/IncludeStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/include/IncludeStatementRFC6020Support.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc7950/IncludeStatementRfc7950Support.java => rfc7950/stmt/include/IncludeStatementRFC7950Support.java} (82%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/AbstractInputStatementSupport.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/InputStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/InputStatementRFC6020Support.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc7950/InputStatementRfc7950Support.java => rfc7950/stmt/input/InputStatementRFC7950Support.java} (85%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/key}/KeyEffectiveStatementImpl.java (73%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/key/KeyStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/key/KeyStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020 => rfc7950/stmt/leaf}/LeafStatementImpl.java (50%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/LeafStatementSupport.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractLeafListStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020 => rfc7950/stmt/leaf_list}/LeafListStatementImpl.java (53%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementRFC6020Support.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc7950/LeafListStatementRfc7950Support.java => rfc7950/stmt/leaf_list/LeafListStatementRFC7950Support.java} (84%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective/type => rfc7950/stmt/length}/LengthEffectiveStatementImpl.java (69%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/LengthStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/LengthStatementSupport.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020 => rfc7950/stmt/list}/ListStatementImpl.java (56%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementRFC6020Support.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc7950/ListStatementRfc7950Support.java => rfc7950/stmt/list/ListStatementRFC7950Support.java} (89%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020 => rfc7950/stmt/mandatory}/EmptyMandatoryEffectiveStatement.java (97%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020 => rfc7950/stmt/mandatory}/EmptyMandatoryStatement.java (97%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/mandatory}/MandatoryEffectiveStatementImpl.java (64%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/mandatory/MandatoryStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/mandatory/MandatoryStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/max_elements}/MaxElementsEffectiveStatementImpl.java (63%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/MaxElementsStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/MaxElementsStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/min_elements}/MinElementsEffectiveStatementImpl.java (63%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/min_elements/MinElementsStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/min_elements/MinElementsStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc7950/effective => rfc7950/stmt/modifier}/ModifierEffectiveStatementImpl.java (73%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/ModifierStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/ModifierStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/ModuleStatementSupport.java => rfc7950/stmt/module/AbstractModuleStatementSupport.java} (76%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/module}/ModuleEffectiveStatementImpl.java (88%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020 => rfc7950/stmt/module}/ModuleStatementImpl.java (78%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementRFC6020Support.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc7950/ModuleStatementRfc7950Support.java => rfc7950/stmt/module/ModuleStatementRFC7950Support.java} (90%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/must}/MustEffectiveStatementImpl.java (91%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/must/MustStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/must/MustStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/namespace}/NamespaceEffectiveStatementImpl.java (65%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/namespace/NamespaceStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/namespace/NamespaceStatementSupport.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/AbstractNotificationStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/notification}/NotificationEffectiveStatementImpl.java (95%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationStatementRFC6020Support.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc7950/NotificationStatementRfc7950Support.java => rfc7950/stmt/notification/NotificationStatementRFC7950Support.java} (90%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/ordered_by}/OrderedByEffectiveStatementImpl.java (64%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/ordered_by/OrderedByStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/ordered_by/OrderedByStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/organization}/OrganizationEffectiveStatementImpl.java (63%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/organization/OrganizationStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/organization/OrganizationStatementSupport.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/AbstractOutputStatementSupport.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/OutputStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/OutputStatementRFC6020Support.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc7950/OutputStatementRfc7950Support.java => rfc7950/stmt/output/OutputStatementRFC7950Support.java} (85%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/package-info.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/path}/PathEffectiveStatementImpl.java (65%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/path/PathStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/path/PathStatementSupport.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/AbstractPatternStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective/type/PatternConstraintEffectiveImpl.java => rfc7950/stmt/pattern/PatternConstraintImpl.java} (88%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective/type => rfc7950/stmt/pattern}/PatternEffectiveStatementImpl.java (75%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/PatternStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/PatternStatementRFC6020Support.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc7950/PatternStatementRfc7950Support.java => rfc7950/stmt/pattern/PatternStatementRFC7950Support.java} (83%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/position}/PositionEffectiveStatementImpl.java (64%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/PositionStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/PositionStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/prefix}/PrefixEffectiveStatementImpl.java (64%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/prefix/PrefixStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/prefix/PrefixStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/presence}/PresenceEffectiveStatementImpl.java (64%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/presence/PresenceStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/presence/PresenceStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective/type => rfc7950/stmt/range}/RangeEffectiveStatementImpl.java (61%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RangeStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RangeStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/reference}/ReferenceEffectiveStatementImpl.java (64%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/reference/ReferenceStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/reference/ReferenceStatementSupport.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/AbstractRefineStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/refine}/RefineEffectiveStatementImpl.java (89%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020 => rfc7950/stmt/refine}/RefineStatementImpl.java (55%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/RefineStatementRFC6020Support.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc7950/RefineStatementRfc7950Support.java => rfc7950/stmt/refine/RefineStatementRFC7950Support.java} (85%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/require_instance}/RequireInstanceEffectiveStatementImpl.java (70%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/require_instance/RequireInstanceStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/require_instance/RequireInstanceStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/revision}/RevisionEffectiveStatementImpl.java (83%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/revision/RevisionStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/revision/RevisionStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/revision_date}/RevisionDateEffectiveStatementImpl.java (65%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/revision_date/RevisionDateStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/revision_date/RevisionDateStatementSupport.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/AbstractRpcStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/rpc}/RpcEffectiveStatementImpl.java (88%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/RpcStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/RpcStatementRFC6020Support.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc7950/RpcStatementRfc7950Support.java => rfc7950/stmt/rpc/RpcStatementRFC7950Support.java} (61%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/status}/StatusEffectiveStatementImpl.java (66%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/status/StatusStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/status/StatusStatementSupport.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/AbstractSubmoduleStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/submodule}/SubmoduleEffectiveStatementImpl.java (93%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementRFC6020Support.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc7950/SubmoduleStatementRfc7950Support.java => rfc7950/stmt/submodule/SubmoduleStatementRFC7950Support.java} (89%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractIdentityRefSpecificationSupport.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractLeafrefSpecificationSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt}/type/AbstractTypeEffectiveStatement.java (89%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt}/type/BinaryTypeEffectiveStatementImpl.java (88%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective/type/BitsSpecificationEffectiveStatementImpl.java => rfc7950/stmt/type/BitsSpecificationEffectiveStatement.java} (88%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BitsSpecificationImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BitsSpecificationSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt}/type/BitsTypeEffectiveStatementImpl.java (90%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt}/type/BooleanTypeEffectiveStatementImpl.java (80%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt}/type/BuiltinEffectiveStatement.java (94%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020 => rfc7950/stmt/type}/BuiltinTypeStatement.java (96%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective/type/Decimal64SpecificationEffectiveStatementImpl.java => rfc7950/stmt/type/Decimal64SpecificationEffectiveStatement.java} (81%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/Decimal64SpecificationImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/Decimal64SpecificationSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt}/type/DecimalTypeEffectiveStatementImpl.java (87%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt}/type/EffectiveTypeUtil.java (84%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt}/type/EmptyTypeEffectiveStatementImpl.java (81%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective/type/EnumSpecificationEffectiveStatementImpl.java => rfc7950/stmt/type/EnumSpecificationEffectiveStatement.java} (87%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EnumSpecificationImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EnumSpecificationSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt}/type/EnumTypeEffectiveStatementImpl.java (90%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective/type/IdentityRefSpecificationEffectiveStatementImpl.java => rfc7950/stmt/type/IdentityRefSpecificationEffectiveStatement.java} (88%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/IdentityRefSpecificationImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/IdentityRefSpecificationRFC6020Support.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc7950/IdentityrefSpecificationRfc7950Support.java => rfc7950/stmt/type/IdentityrefSpecificationRFC7950Support.java} (74%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt}/type/IdentityrefTypeEffectiveStatementImpl.java (79%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective/type/InstanceIdentifierSpecificationEffectiveStatementImpl.java => rfc7950/stmt/type/InstanceIdentifierSpecificationEffectiveStatement.java} (88%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/InstanceIdentifierSpecificationImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/InstanceIdentifierSpecificationSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt}/type/InstanceIdentifierTypeEffectiveStatementImpl.java (89%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/IntegralTypeEffectiveStatementImpl.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective/type/LeafrefSpecificationEffectiveStatementImpl.java => rfc7950/stmt/type/LeafrefSpecificationEffectiveStatement.java} (85%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/LeafrefSpecificationImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/LeafrefSpecificationRFC6020Support.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc7950/LeafrefSpecificationRfc7950Support.java => rfc7950/stmt/type/LeafrefSpecificationRFC7950Support.java} (76%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt}/type/LeafrefTypeEffectiveStatementImpl.java (87%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt}/type/StringTypeEffectiveStatementImpl.java (90%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/TypeStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/TypeStatementRFC6020Support.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc7950/TypeStatementRfc7950Support.java => rfc7950/stmt/type/TypeStatementRFC7950Support.java} (71%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective/type/UnionSpecificationEffectiveStatementImpl.java => rfc7950/stmt/type/UnionSpecificationEffectiveStatement.java} (85%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/UnionSpecificationImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/UnionSpecificationSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt}/type/UnionTypeEffectiveStatementImpl.java (81%) rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective/TypeDefEffectiveStatementImpl.java => rfc7950/stmt/typedef/TypedefEffectiveStatementImpl.java} (91%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/typedef/TypedefStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/typedef/TypedefStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/unique}/UniqueEffectiveStatementImpl.java (71%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/unique/UniqueStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/unique/UniqueStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/units}/UnitsEffectiveStatementImpl.java (65%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/units/UnitsStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/units/UnitsStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020 => rfc7950/stmt/uses}/UsesStatementImpl.java (73%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/value}/ValueEffectiveStatementImpl.java (64%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/value/ValueStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/value/ValueStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/when}/WhenEffectiveStatementImpl.java (61%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/when/WhenStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/when/WhenStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/yang_version}/YangVersionEffectiveStatementImpl.java (64%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/yang_version/YangVersionStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/yang_version/YangVersionStatementSupport.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/{stmt/rfc6020/effective => rfc7950/stmt/yin_element}/YinElementEffectiveStatementImpl.java (63%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/yin_element/YinElementStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/yin_element/YinElementStatementSupport.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AnyxmlStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ArgumentStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AugmentStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BaseStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BelongsToStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BitStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BitsSpecificationImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/CaseStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ChoiceStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ConfigStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ContactStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Decimal64SpecificationImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/DefaultStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/DescriptionStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/DeviateStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/DeviationStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/EnumSpecificationImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/EnumStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ErrorAppTagStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ErrorMessageStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ExtensionStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/FeatureStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/FractionDigitsStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/GroupingStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IdentityRefSpecificationImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IdentityStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IfFeatureStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ImportStatementDefinition.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IncludeStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/InputStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/InstanceIdentifierSpecificationImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/KeyStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/LeafrefSpecificationImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/LengthStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MandatoryStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MaxElementsStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MinElementsStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MustStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/NamespaceStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/NotificationStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OrderedByStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OrganizationStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OutputStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PathStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PatternStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PositionStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PrefixStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PresenceStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RangeStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ReferenceStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RequireInstanceStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RevisionDateStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RevisionStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RpcStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/StatusStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/SubmoduleStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypeStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypedefStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UnionSpecificationImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UniqueStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UnitsStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UnrecognizedStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ValueStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/WhenStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YangVersionStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YinElementStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/IntegralTypeEffectiveStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/ActionStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/AnydataStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/ModifierStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/effective/package-info.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/package-info.java diff --git a/yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/Annotation.java b/yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/Annotation.java index ced71a3429..75f317d02c 100644 --- a/yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/Annotation.java +++ b/yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/Annotation.java @@ -20,7 +20,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UnitsStatement; import org.opendaylight.yangtools.yang.model.util.type.ConcreteTypeBuilder; import org.opendaylight.yangtools.yang.model.util.type.ConcreteTypes; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.UnknownEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase; 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; diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedValueAttrNode.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedValueAttrNode.java index 61d9b8fabb..cef9a03ada 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedValueAttrNode.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/nodes/AbstractImmutableNormalizedValueAttrNode.java @@ -53,7 +53,7 @@ public abstract class AbstractImmutableNormalizedValueAttrNode other) { // We can not call directly getValue.equals because of Empty Type - // Definition leaves which allways have NULL value + // RequireInstanceStatementSupport leaves which allways have NULL value if (!Objects.deepEquals(value(), other.getValue())) { return false; diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/AbstractConstraintEffectiveStatement.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractConstraintEffectiveStatement.java similarity index 90% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/AbstractConstraintEffectiveStatement.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractConstraintEffectiveStatement.java index 5ce748e8b4..72069a5c52 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/AbstractConstraintEffectiveStatement.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractConstraintEffectiveStatement.java @@ -1,12 +1,13 @@ -/** +/* * Copyright (c) 2016 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.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt; +import com.google.common.annotations.Beta; import java.util.Optional; import org.opendaylight.yangtools.yang.model.api.ConstraintMetaDefinition; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; @@ -17,10 +18,10 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageEffectiveState import org.opendaylight.yangtools.yang.model.api.stmt.ModifierEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.type.ModifierKind; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -abstract class AbstractConstraintEffectiveStatement> extends +@Beta +public abstract class AbstractConstraintEffectiveStatement> extends DeclaredEffectiveStatementBase implements ConstraintMetaDefinition { private final String description; private final String reference; @@ -29,7 +30,7 @@ abstract class AbstractConstraintEffectiveStatement ctx) { + protected AbstractConstraintEffectiveStatement(final StmtContext ctx) { super(ctx); String descriptionInit = null; String referenceInit = null; @@ -97,6 +98,6 @@ abstract class AbstractConstraintEffectiveStatement> - extends AbstractEffectiveDocumentedNode implements - DataNodeContainer { +public abstract class AbstractEffectiveDocumentedDataNodeContainer> + extends AbstractEffectiveDocumentedNode implements DataNodeContainer { private final Map childNodes; private final Set groupings; @@ -45,8 +43,7 @@ abstract class AbstractEffectiveDocumentedDataNodeContainer> typeDefinitions; private final Set publicChildNodes; - protected AbstractEffectiveDocumentedDataNodeContainer( - final StmtContext ctx) { + protected AbstractEffectiveDocumentedDataNodeContainer(final StmtContext ctx) { super(ctx); Map mutableChildNodes = new LinkedHashMap<>(); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc6020/util/AbstractEffectiveDocumentedNode.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveDocumentedNode.java similarity index 97% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc6020/util/AbstractEffectiveDocumentedNode.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveDocumentedNode.java index 5e180cf6a8..e5892a03bf 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc6020/util/AbstractEffectiveDocumentedNode.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveDocumentedNode.java @@ -5,7 +5,7 @@ * 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.rfc6020.util; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt; import java.util.Optional; import javax.annotation.Nonnull; diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveModule.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java similarity index 96% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveModule.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java index daaacc2b10..e372ccec89 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveModule.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java @@ -5,11 +5,12 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt; import static com.google.common.base.Preconditions.checkState; import static java.util.Objects.requireNonNull; +import com.google.common.annotations.Beta; import com.google.common.base.MoreObjects; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; @@ -56,9 +57,9 @@ import org.opendaylight.yangtools.yang.model.api.stmt.PrefixEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionEffectiveStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.AbstractEffectiveDocumentedNode; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.EffectiveStatementBase; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.EffectiveStmtUtils; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.belongs_to.BelongsToEffectiveStatementImpl; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.extension.ExtensionEffectiveStatementImpl; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.submodule.SubmoduleEffectiveStatementImpl; import org.opendaylight.yangtools.yang.parser.spi.meta.MutableStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable; @@ -66,7 +67,8 @@ import org.opendaylight.yangtools.yang.parser.spi.source.IncludedSubmoduleNameTo import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; import org.opendaylight.yangtools.yang.parser.stmt.openconfig.OpenconfigVersionEffectiveStatement; -abstract class AbstractEffectiveModule> extends +@Beta +public abstract class AbstractEffectiveModule> extends AbstractEffectiveDocumentedNode implements Module, MutableStatement { private final String name; private final String prefix; @@ -94,7 +96,7 @@ abstract class AbstractEffectiveModule> exte private Set submodules; private boolean sealed; - AbstractEffectiveModule(final StmtContext> ctx) { + protected AbstractEffectiveModule(final StmtContext> ctx) { super(ctx); this.name = argument(); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc6020/util/AbstractEffectiveSchemaNode.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveSchemaNode.java similarity index 86% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc6020/util/AbstractEffectiveSchemaNode.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveSchemaNode.java index b76b4f8ba5..18f9c91fb9 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc6020/util/AbstractEffectiveSchemaNode.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveSchemaNode.java @@ -5,7 +5,7 @@ * 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.rfc6020.util; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt; import com.google.common.collect.ImmutableList; import java.util.List; @@ -24,7 +24,7 @@ public abstract class AbstractEffectiveSchemaNode unknownNodes; - public AbstractEffectiveSchemaNode(final StmtContext ctx) { + protected AbstractEffectiveSchemaNode(final StmtContext ctx) { super(ctx); this.path = ctx.getSchemaPath().get(); @@ -39,19 +39,19 @@ public abstract class AbstractEffectiveSchemaNode getUnknownSchemaNodes() { + public final List getUnknownSchemaNodes() { return unknownNodes; } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/AbstractListConstraintEffectiveStatement.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractListConstraintEffectiveStatement.java similarity index 64% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/AbstractListConstraintEffectiveStatement.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractListConstraintEffectiveStatement.java index 0a273dbf3b..1700c1d175 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/AbstractListConstraintEffectiveStatement.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractListConstraintEffectiveStatement.java @@ -1,26 +1,28 @@ -/** +/* * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt; +import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableList; import java.util.List; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -abstract class AbstractListConstraintEffectiveStatement>> +@Beta +public abstract class AbstractListConstraintEffectiveStatement>> extends AbstractConstraintEffectiveStatement, D> { - AbstractListConstraintEffectiveStatement(final StmtContext, D, ?> ctx) { + protected AbstractListConstraintEffectiveStatement(final StmtContext, D, ?> ctx) { super(ctx); } @Override - final List createConstraints(final List argument) { + protected final List createConstraints(final List argument) { return ImmutableList.copyOf(argument); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AbstractRootStatement.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractRootStatement.java similarity index 98% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AbstractRootStatement.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractRootStatement.java index 33ca92fad9..629f1043f3 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AbstractRootStatement.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractRootStatement.java @@ -5,7 +5,7 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt; import java.util.Collection; import javax.annotation.Nonnull; diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc6020/util/DeclaredEffectiveStatementBase.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/DeclaredEffectiveStatementBase.java similarity index 97% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc6020/util/DeclaredEffectiveStatementBase.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/DeclaredEffectiveStatementBase.java index 55d75746ff..862e042668 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc6020/util/DeclaredEffectiveStatementBase.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/DeclaredEffectiveStatementBase.java @@ -5,7 +5,7 @@ * 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.rfc6020.util; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt; import com.google.common.base.Verify; import javax.annotation.Nonnull; diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc6020/util/EffectiveStatementBase.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/EffectiveStatementBase.java similarity index 96% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc6020/util/EffectiveStatementBase.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/EffectiveStatementBase.java index 40c434f722..36cbabfb4b 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc6020/util/EffectiveStatementBase.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/EffectiveStatementBase.java @@ -5,7 +5,7 @@ * 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.rfc6020.util; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt; import com.google.common.collect.Collections2; import com.google.common.collect.ImmutableList; @@ -55,7 +55,7 @@ public abstract class EffectiveStatementBase> /** * Create a set of substatements. This method is split out so it can be overridden in - * {@link org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ExtensionEffectiveStatementImpl} to leak + * {@link org.opendaylight.yangtools.yang.parser.rfc7950.stmt.extension.ExtensionEffectiveStatementImpl} to leak * a not-fully-initialized instance. * * @param substatementsInit proposed substatements diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc6020/util/EffectiveStmtUtils.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/EffectiveStmtUtils.java similarity index 94% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc6020/util/EffectiveStmtUtils.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/EffectiveStmtUtils.java index dd7277d9c6..6c5c2fdc2b 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc6020/util/EffectiveStmtUtils.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/EffectiveStmtUtils.java @@ -6,7 +6,7 @@ * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.rfc6020.util; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc6020/util/UndeclaredEffectiveStatementBase.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/UndeclaredEffectiveStatementBase.java similarity index 96% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc6020/util/UndeclaredEffectiveStatementBase.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/UndeclaredEffectiveStatementBase.java index 5ebe39b12f..333aa6421e 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc6020/util/UndeclaredEffectiveStatementBase.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/UndeclaredEffectiveStatementBase.java @@ -5,7 +5,7 @@ * 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.rfc6020.util; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt; import com.google.common.base.Verify; import javax.annotation.Nonnull; diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc6020/util/UnknownEffectiveStatementBase.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/UnknownEffectiveStatementBase.java similarity index 98% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc6020/util/UnknownEffectiveStatementBase.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/UnknownEffectiveStatementBase.java index 4cb330160c..16d6e49a95 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc6020/util/UnknownEffectiveStatementBase.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/UnknownEffectiveStatementBase.java @@ -6,7 +6,7 @@ * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.rfc6020.util; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/effective/ActionEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionEffectiveStatementImpl.java similarity index 93% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/effective/ActionEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionEffectiveStatementImpl.java index f9ddc34660..20d8cd9cc0 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/effective/ActionEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionEffectiveStatementImpl.java @@ -5,8 +5,7 @@ * 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.rfc7950.effective; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.action; import com.google.common.base.MoreObjects; import com.google.common.collect.ImmutableSet; @@ -23,15 +22,15 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ActionEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ActionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.AbstractEffectiveSchemaNode; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.EffectiveStmtUtils; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveSchemaNode; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStmtUtils; import org.opendaylight.yangtools.yang.parser.spi.meta.CopyHistory; import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.InputEffectiveStatementImpl; import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.OutputEffectiveStatementImpl; -public class ActionEffectiveStatementImpl extends AbstractEffectiveSchemaNode +final class ActionEffectiveStatementImpl extends AbstractEffectiveSchemaNode implements ActionDefinition, ActionEffectiveStatement { private final ContainerSchemaNode input; private final ContainerSchemaNode output; @@ -40,7 +39,7 @@ public class ActionEffectiveStatementImpl extends AbstractEffectiveSchemaNode> ctx) { super(ctx); this.input = firstEffective(InputEffectiveStatementImpl.class); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementImpl.java new file mode 100644 index 0000000000..bd75192d08 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementImpl.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2016 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.rfc7950.stmt.action; + +import java.util.Collection; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.stmt.ActionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class ActionStatementImpl extends AbstractDeclaredStatement implements ActionStatement { + ActionStatementImpl(final StmtContext context) { + super(context); + } + + @Override + public QName getName() { + return argument(); + } + + @Nonnull + @Override + public Collection getTypedefs() { + return allDeclared(TypedefStatement.class); + } + + @Nonnull + @Override + public Collection getGroupings() { + return allDeclared(GroupingStatement.class); + } + + @Nullable + @Override + public StatusStatement getStatus() { + return firstDeclared(StatusStatement.class); + } + + @Nullable + @Override + public DescriptionStatement getDescription() { + return firstDeclared(DescriptionStatement.class); + } + + @Nullable + @Override + public ReferenceStatement getReference() { + return firstDeclared(ReferenceStatement.class); + } + + @Override + public InputStatement getInput() { + return firstDeclared(InputStatement.class); + } + + @Override + public OutputStatement getOutput() { + return firstDeclared(OutputStatement.class); + } + + @Nonnull + @Override + public Collection getIfFeatures() { + return allDeclared(IfFeatureStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java new file mode 100644 index 0000000000..36857954ea --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.action; + +import com.google.common.collect.ImmutableSet; +import java.util.Set; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +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.ActionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.input.InputStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.output.OutputStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.spi.source.ImplicitSubstatement; +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.reactor.StatementDefinitionContext; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ChildSchemaNodes; + +public final class ActionStatementSupport + extends AbstractQNameStatementSupport> { + private static final Set ILLEGAL_PARENTS = ImmutableSet.of(YangStmtMapping.NOTIFICATION, + YangStmtMapping.RPC, YangStmtMapping.ACTION); + private static final StatementSupport IMPLICIT_INPUT = new InputStatementRFC7950Support(); + private static final StatementSupport IMPLICIT_OUTPUT = new OutputStatementRFC7950Support(); + + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.ACTION) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.IF_FEATURE) + .addOptional(YangStmtMapping.INPUT) + .addOptional(YangStmtMapping.OUTPUT) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addAny(YangStmtMapping.TYPEDEF) + .build(); + + public ActionStatementSupport() { + super(YangStmtMapping.ACTION); + } + + @Override + public QName parseArgumentValue(final StmtContext ctx, final String value) { + return StmtContextUtils.qnameFromArgument(ctx, value); + } + + @Override + public void onStatementAdded( + final StmtContext.Mutable> stmt) { + stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); + } + + @Override + public ActionStatement createDeclared( + final StmtContext ctx) { + return new ActionStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + SourceException.throwIf(StmtContextUtils.hasAncestorOfType(ctx, ILLEGAL_PARENTS), + ctx.getStatementSourceReference(), + "Action %s is defined within a notification, rpc or another action", ctx.getStatementArgument()); + SourceException.throwIf(!StmtContextUtils.hasAncestorOfTypeWithChildOfType(ctx, YangStmtMapping.LIST, + YangStmtMapping.KEY), ctx.getStatementSourceReference(), + "Action %s is defined within a list that has no key statement", ctx.getStatementArgument()); + SourceException.throwIf(StmtContextUtils.hasParentOfType(ctx, YangStmtMapping.CASE), + ctx.getStatementSourceReference(), "Action %s is defined within a case statement", + ctx.getStatementArgument()); + SourceException.throwIf(StmtContextUtils.hasParentOfType(ctx, YangStmtMapping.MODULE), + ctx.getStatementSourceReference(), "Action %s is defined at the top level of a module", + ctx.getStatementArgument()); + return new ActionEffectiveStatementImpl(ctx); + } + + @Override + public void onFullDefinitionDeclared(final StmtContext.Mutable> stmt) { + super.onFullDefinitionDeclared(stmt); + + if (StmtContextUtils.findFirstDeclaredSubstatement(stmt, InputStatement.class) == null) { + addImplicitStatement((StatementContextBase) stmt, IMPLICIT_INPUT); + } + + if (StmtContextUtils.findFirstDeclaredSubstatement(stmt, OutputStatement.class) == null) { + addImplicitStatement((StatementContextBase) stmt, IMPLICIT_OUTPUT); + } + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } + + private static void addImplicitStatement(final StatementContextBase parent, + final StatementSupport statementToAdd) { + final StatementDefinitionContext stmtDefCtx = new StatementDefinitionContext<>(statementToAdd); + + parent.createSubstatement(parent.declaredSubstatements().size(), stmtDefCtx, + ImplicitSubstatement.of(parent.getStatementSourceReference()), null); + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/effective/AnydataEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/AnydataEffectiveStatementImpl.java similarity index 93% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/effective/AnydataEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/AnydataEffectiveStatementImpl.java index 27d40d1173..e0fe76f782 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/effective/AnydataEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/AnydataEffectiveStatementImpl.java @@ -5,7 +5,7 @@ * 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.rfc7950.effective; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.anydata; import com.google.common.annotations.Beta; import com.google.common.base.MoreObjects; @@ -26,14 +26,14 @@ import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.AbstractEff * YANG 1.1 AnyData effective statement implementation. */ @Beta -public final class AnydataEffectiveStatementImpl extends AbstractEffectiveDataSchemaNode +final class AnydataEffectiveStatementImpl extends AbstractEffectiveDataSchemaNode implements AnydataEffectiveStatement, AnyDataSchemaNode, DerivableSchemaNode { private final AnyDataSchemaNode original; private final ContainerSchemaNode schema; private final boolean mandatory; - public AnydataEffectiveStatementImpl( + AnydataEffectiveStatementImpl( final StmtContext> ctx) { super(ctx); this.original = (AnyDataSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/AnydataStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/AnydataStatementImpl.java new file mode 100644 index 0000000000..5f81a2fb3f --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/AnydataStatementImpl.java @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2016 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.rfc7950.stmt.anydata; + +import com.google.common.annotations.Beta; +import java.util.Collection; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.stmt.AnydataStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +/** + * YANG 1.1 AnyData declared statement implementation. + */ +@Beta +final class AnydataStatementImpl extends AbstractDeclaredStatement implements AnydataStatement { + AnydataStatementImpl(final StmtContext context) { + super(context); + } + + @Override + public QName getName() { + return argument(); + } + + @Override + public WhenStatement getWhenStatement() { + return firstDeclared(WhenStatement.class); + } + + @Override + public Collection getIfFeatures() { + return allDeclared(IfFeatureStatement.class); + } + + @Override + public Collection getMusts() { + return allDeclared(MustStatement.class); + } + + @Override + public ConfigStatement getConfig() { + return firstDeclared(ConfigStatement.class); + } + + @Override + public StatusStatement getStatus() { + return firstDeclared(StatusStatement.class); + } + + @Override + public DescriptionStatement getDescription() { + return firstDeclared(DescriptionStatement.class); + } + + @Override + public ReferenceStatement getReference() { + return firstDeclared(ReferenceStatement.class); + } + + @Override + public MandatoryStatement getMandatory() { + return firstDeclared(MandatoryStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/AnydataStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/AnydataStatementSupport.java new file mode 100644 index 0000000000..3f01c18b93 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/AnydataStatementSupport.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.anydata; + +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.AnydataStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; +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.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ChildSchemaNodes; + +public final class AnydataStatementSupport extends + AbstractQNameStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.ANYDATA) + .addOptional(YangStmtMapping.CONFIG) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.IF_FEATURE) + .addOptional(YangStmtMapping.MANDATORY) + .addAny(YangStmtMapping.MUST) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addOptional(YangStmtMapping.WHEN) + .build(); + + public AnydataStatementSupport() { + super(YangStmtMapping.ANYDATA); + } + + @Override + public QName parseArgumentValue(final StmtContext ctx, final String value) { + return StmtContextUtils.qnameFromArgument(ctx, value); + } + + @Override + public void onStatementAdded(final Mutable> stmt) { + stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); + } + + @Override + public AnydataStatement createDeclared(final StmtContext ctx) { + return new AnydataStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new AnydataEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/AnyxmlStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/AnyxmlStatementImpl.java new file mode 100644 index 0000000000..ff7c98b1c4 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/AnyxmlStatementImpl.java @@ -0,0 +1,77 @@ +/* + * 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.rfc7950.stmt.anyxml; + +import java.util.Collection; +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class AnyxmlStatementImpl extends AbstractDeclaredStatement implements AnyxmlStatement { + AnyxmlStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public QName getName() { + return argument(); + } + + @Override + public WhenStatement getWhenStatement() { + return firstDeclared(WhenStatement.class); + } + + @Nonnull + @Override + public Collection getIfFeatures() { + return allDeclared(IfFeatureStatement.class); + } + + @Nonnull + @Override + public Collection getMusts() { + return allDeclared(MustStatement.class); + } + + @Override + public ConfigStatement getConfig() { + return firstDeclared(ConfigStatement.class); + } + + @Override + public StatusStatement getStatus() { + return firstDeclared(StatusStatement.class); + } + + @Override + public DescriptionStatement getDescription() { + return firstDeclared(DescriptionStatement.class); + } + + @Override + public ReferenceStatement getReference() { + return firstDeclared(ReferenceStatement.class); + } + + @Override + public MandatoryStatement getMandatory() { + return firstDeclared(MandatoryStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/AnyxmlStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/AnyxmlStatementSupport.java new file mode 100644 index 0000000000..fb6fd42295 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/AnyxmlStatementSupport.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.anyxml; + +import java.util.Map; +import java.util.Optional; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +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.AnyxmlStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; +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.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.stmt.anyxmlschema.AnyxmlSchemaLocationNamespace; +import org.opendaylight.yangtools.yang.parser.stmt.anyxmlschema.AnyxmlSchemaLocationStatement; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ChildSchemaNodes; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.SupportedExtensionsMapping; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.AnyxmlEffectiveStatementImpl; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.YangModeledAnyXmlEffectiveStatementImpl; + +public final class AnyxmlStatementSupport extends + AbstractQNameStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .ANYXML) + .addOptional(YangStmtMapping.CONFIG) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.IF_FEATURE) + .addOptional(YangStmtMapping.MANDATORY) + .addAny(YangStmtMapping.MUST) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addOptional(YangStmtMapping.WHEN) + .addOptional(SupportedExtensionsMapping.ANYXML_SCHEMA_LOCATION) + .build(); + + public AnyxmlStatementSupport() { + super(YangStmtMapping.ANYXML); + } + + @Override + public QName parseArgumentValue(final StmtContext ctx, final String value) { + return StmtContextUtils.qnameFromArgument(ctx, value); + } + + @Override + public void onStatementAdded(final Mutable> stmt) { + stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); + } + + @Override + public AnyxmlStatement createDeclared(final StmtContext ctx) { + return new AnyxmlStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + final Map>> schemaLocations = + ctx.getAllFromCurrentStmtCtxNamespace(AnyxmlSchemaLocationNamespace.class); + if (schemaLocations != null && !schemaLocations.isEmpty()) { + final SchemaNodeIdentifier anyXmlSchemaNodeIdentifier = schemaLocations.values().iterator().next() + .getStatementArgument(); + final Optional anyXmlSchema = getAnyXmlSchema(ctx, anyXmlSchemaNodeIdentifier); + if (anyXmlSchema.isPresent()) { + return new YangModeledAnyXmlEffectiveStatementImpl(ctx, anyXmlSchema.get()); + } + } + return new AnyxmlEffectiveStatementImpl(ctx); + } + + private static Optional getAnyXmlSchema( + final StmtContext> ctx, + final SchemaNodeIdentifier contentSchemaPath) { + final StmtContext findNode = Utils.findNode(ctx.getRoot(), contentSchemaPath); + if (findNode != null) { + final EffectiveStatement anyXmlSchemaNode = findNode.buildEffective(); + if (anyXmlSchemaNode instanceof ContainerSchemaNode) { + return Optional.of((ContainerSchemaNode) anyXmlSchemaNode); + } + } + return Optional.empty(); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ 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/rfc7950/stmt/argument/ArgumentEffectiveStatementImpl.java similarity index 76% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ArgumentEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/argument/ArgumentEffectiveStatementImpl.java index eb2a87b0c7..f8cf50212d 100644 --- 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/rfc7950/stmt/argument/ArgumentEffectiveStatementImpl.java @@ -5,17 +5,18 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.argument; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +// FIXME: hide this class public final class ArgumentEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements ArgumentEffectiveStatement { - public ArgumentEffectiveStatementImpl(final StmtContext ctx) { + ArgumentEffectiveStatementImpl(final 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/rfc7950/stmt/argument/ArgumentStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/argument/ArgumentStatementImpl.java new file mode 100644 index 0000000000..09eb130a44 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/argument/ArgumentStatementImpl.java @@ -0,0 +1,32 @@ +/* + * 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.rfc7950.stmt.argument; + +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class ArgumentStatementImpl extends AbstractDeclaredStatement implements ArgumentStatement { + ArgumentStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public QName getName() { + return argument(); + } + + @Override + public YinElementStatement getYinElement() { + return firstDeclared(YinElementStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/argument/ArgumentStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/argument/ArgumentStatementSupport.java new file mode 100644 index 0000000000..f8e08d3914 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/argument/ArgumentStatementSupport.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.argument; + +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; + +public final class ArgumentStatementSupport + extends AbstractQNameStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .ARGUMENT) + .addOptional(YangStmtMapping.YIN_ELEMENT) + .build(); + + public ArgumentStatementSupport() { + super(YangStmtMapping.ARGUMENT); + } + + @Override + public QName parseArgumentValue(final StmtContext ctx, final String value) { + return StmtContextUtils.qnameFromArgument(ctx, value); + } + + @Override + public ArgumentStatement createDeclared( + final StmtContext ctx) { + return new ArgumentStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new ArgumentEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java new file mode 100644 index 0000000000..d7a11c77c9 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java @@ -0,0 +1,351 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.augment; + +import com.google.common.base.Verify; +import com.google.common.collect.ImmutableSet; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Objects; +import java.util.Set; +import java.util.regex.Pattern; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.YangVersion; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +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.DataDefinitionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; +import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType; +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.ModelActionBuilder.Prerequisite; +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.meta.StmtContext.Mutable; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.spi.source.AugmentToChoiceNamespace; +import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; +import org.opendaylight.yangtools.yang.parser.spi.source.StmtOrderingNamespace; +import org.opendaylight.yangtools.yang.parser.spi.validation.ValidationBundlesNamespace; +import org.opendaylight.yangtools.yang.parser.spi.validation.ValidationBundlesNamespace.ValidationBundleType; +import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.SchemaNodeIdentifierBuildNamespace; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +abstract class AbstractAugmentStatementSupport extends AbstractStatementSupport> { + private static final Logger LOG = LoggerFactory.getLogger(AugmentStatementImpl.class); + private static final Pattern PATH_REL_PATTERN1 = Pattern.compile("\\.\\.?\\s*/(.+)"); + private static final Pattern PATH_REL_PATTERN2 = Pattern.compile("//.*"); + + AbstractAugmentStatementSupport() { + super(YangStmtMapping.AUGMENT); + } + + @Override + public final SchemaNodeIdentifier parseArgumentValue(final StmtContext ctx, final String value) { + SourceException.throwIf(PATH_REL_PATTERN1.matcher(value).matches() + || PATH_REL_PATTERN2.matcher(value).matches(), ctx.getStatementSourceReference(), + "Augment argument \'%s\' is not valid, it can be only absolute path; or descendant if used in uses", + value); + + return Utils.nodeIdentifierFromPath(ctx, value); + } + + @Override + public final AugmentStatement createDeclared(final StmtContext ctx) { + return new AugmentStatementImpl(ctx); + } + + @Override + public final EffectiveStatement createEffective( + final StmtContext> ctx) { + return new AugmentEffectiveStatementImpl(ctx); + } + + @Override + public final void onFullDefinitionDeclared(final Mutable> augmentNode) { + if (!augmentNode.isSupportedByFeatures()) { + return; + } + + super.onFullDefinitionDeclared(augmentNode); + + if (StmtContextUtils.isInExtensionBody(augmentNode)) { + return; + } + + final ModelActionBuilder augmentAction = augmentNode.newInferenceAction( + ModelProcessingPhase.EFFECTIVE_MODEL); + final Prerequisite>> sourceCtxPrereq = + augmentAction.requiresCtx(augmentNode, ModelProcessingPhase.EFFECTIVE_MODEL); + final Prerequisite>> target = + augmentAction.mutatesEffectiveCtx(getSearchRoot(augmentNode), + SchemaNodeIdentifierBuildNamespace.class, augmentNode.getStatementArgument()); + + augmentAction.apply(new ModelActionBuilder.InferenceAction() { + @Override + public void apply(final ModelActionBuilder.InferenceContext ctx) { + final StatementContextBase augmentTargetCtx = + (StatementContextBase) target.resolve(ctx); + if (!isSupportedAugmentTarget(augmentTargetCtx) + || StmtContextUtils.isInExtensionBody(augmentTargetCtx)) { + augmentNode.setIsSupportedToBuildEffective(false); + return; + } + /** + * Marks case short hand in augment + */ + if (augmentTargetCtx.getPublicDefinition() == YangStmtMapping.CHOICE) { + augmentNode.addToNs(AugmentToChoiceNamespace.class, augmentNode, Boolean.TRUE); + } + + // FIXME: this is a workaround for models which augment a node which is added via an extension + // which we do not handle. This needs to be reworked in terms of unknown schema nodes. + final StatementContextBase augmentSourceCtx = (StatementContextBase) augmentNode; + try { + copyFromSourceToTarget(augmentSourceCtx, augmentTargetCtx); + augmentTargetCtx.addEffectiveSubstatement(augmentSourceCtx); + updateAugmentOrder(augmentSourceCtx); + } catch (final SourceException e) { + LOG.warn("Failed to add augmentation {} defined at {}", + augmentTargetCtx.getStatementSourceReference(), + augmentSourceCtx.getStatementSourceReference(), e); + } + } + + private void updateAugmentOrder(final StatementContextBase augmentSourceCtx) { + Integer currentOrder = augmentSourceCtx.getFromNamespace(StmtOrderingNamespace.class, + YangStmtMapping.AUGMENT); + if (currentOrder == null) { + currentOrder = 1; + } else { + currentOrder++; + } + + augmentSourceCtx.addToNs(StmtOrderingNamespace.class, YangStmtMapping.AUGMENT, currentOrder); + } + + @Override + public void prerequisiteFailed(final Collection> failed) { + /* + * Do not fail, if it is an uses-augment to an unknown node. + */ + if (YangStmtMapping.USES == augmentNode.getParentContext().getPublicDefinition()) { + final StatementContextBase targetNode = Utils.findNode(getSearchRoot(augmentNode), + augmentNode.getStatementArgument()); + if (targetNode != null && StmtContextUtils.isUnknownStatement(targetNode)) { + augmentNode.setIsSupportedToBuildEffective(false); + LOG.warn( + "Uses-augment to unknown node {}. Augmentation has not been performed. At line: {}", + augmentNode.getStatementArgument(), augmentNode.getStatementSourceReference()); + return; + } + } + + throw new InferenceException(augmentNode.getStatementSourceReference(), + "Augment target '%s' not found", augmentNode.getStatementArgument()); + } + }); + } + + private static Mutable getSearchRoot(final Mutable augmentContext) { + final Mutable parent = augmentContext.getParentContext(); + // Augment is in uses - we need to augment instantiated nodes in parent. + if (YangStmtMapping.USES == parent.getPublicDefinition()) { + return parent.getParentContext(); + } + return parent; + } + + static void copyFromSourceToTarget(final StatementContextBase sourceCtx, + final StatementContextBase targetCtx) { + final CopyType typeOfCopy = UsesStatement.class.equals(sourceCtx.getParentContext().getPublicDefinition() + .getDeclaredRepresentationClass()) ? CopyType.ADDED_BY_USES_AUGMENTATION + : CopyType.ADDED_BY_AUGMENTATION; + /* + * Since Yang 1.1, if an augmentation is made conditional with a + * "when" statement, it is allowed to add mandatory nodes. + */ + final boolean skipCheckOfMandatoryNodes = YangVersion.VERSION_1_1.equals(sourceCtx.getRootVersion()) + && isConditionalAugmentStmt(sourceCtx); + + final Collection> declared = sourceCtx.mutableDeclaredSubstatements(); + final Collection> effective = sourceCtx.mutableEffectiveSubstatements(); + final Collection> buffer = new ArrayList<>(declared.size() + effective.size()); + + for (final Mutable originalStmtCtx : declared) { + if (originalStmtCtx.isSupportedByFeatures()) { + copyStatement(originalStmtCtx, targetCtx, typeOfCopy, buffer, skipCheckOfMandatoryNodes); + } + } + for (final Mutable originalStmtCtx : effective) { + copyStatement(originalStmtCtx, targetCtx, typeOfCopy, buffer, skipCheckOfMandatoryNodes); + } + + targetCtx.addEffectiveSubstatements(buffer); + } + + /** + * Checks whether supplied statement context is conditional augment + * statement. + * + * @param ctx + * statement context to be checked + * + * @return true if supplied statement context is conditional augment + * statement, otherwise false + */ + private static boolean isConditionalAugmentStmt(final StmtContext ctx) { + return ctx.getPublicDefinition() == YangStmtMapping.AUGMENT + && StmtContextUtils.findFirstSubstatement(ctx, WhenStatement.class) != null; + } + + private static void copyStatement(final Mutable original, final StatementContextBase target, + final CopyType typeOfCopy, final Collection> buffer, + final boolean skipCheckOfMandatoryNodes) { + if (needToCopyByAugment(original)) { + validateNodeCanBeCopiedByAugment(original, target, typeOfCopy, skipCheckOfMandatoryNodes); + + buffer.add(target.childCopyOf(original, typeOfCopy)); + } else if (isReusedByAugment(original)) { + buffer.add(original); + } + } + + private static void validateNodeCanBeCopiedByAugment(final StmtContext sourceCtx, + final StatementContextBase targetCtx, final CopyType typeOfCopy, + final boolean skipCheckOfMandatoryNodes) { + + if (WhenStatement.class.equals(sourceCtx.getPublicDefinition().getDeclaredRepresentationClass())) { + return; + } + + if (!skipCheckOfMandatoryNodes && typeOfCopy == CopyType.ADDED_BY_AUGMENTATION + && reguiredCheckOfMandatoryNodes(sourceCtx, targetCtx)) { + checkForMandatoryNodes(sourceCtx); + } + + for (final StmtContext subStatement : targetCtx.allSubstatements()) { + final boolean sourceIsDataNode = DataDefinitionStatement.class.isAssignableFrom(sourceCtx + .getPublicDefinition().getDeclaredRepresentationClass()); + final boolean targetIsDataNode = DataDefinitionStatement.class.isAssignableFrom(subStatement + .getPublicDefinition().getDeclaredRepresentationClass()); + final boolean qNamesEqual = sourceIsDataNode && targetIsDataNode + && Objects.equals(sourceCtx.getStatementArgument(), subStatement.getStatementArgument()); + + InferenceException.throwIf(qNamesEqual, sourceCtx.getStatementSourceReference(), + "An augment cannot add node named '%s' because this name is already used in target", + sourceCtx.rawStatementArgument()); + } + } + + private static void checkForMandatoryNodes(final StmtContext sourceCtx) { + if (StmtContextUtils.isNonPresenceContainer(sourceCtx)) { + /* + * We need to iterate over both declared and effective sub-statements, + * because a mandatory node can be: + * a) declared in augment body + * b) added to augment body also via uses of a grouping and + * such sub-statements are stored in effective sub-statements collection. + */ + sourceCtx.allSubstatementsStream().forEach(AbstractAugmentStatementSupport::checkForMandatoryNodes); + } + + InferenceException.throwIf(StmtContextUtils.isMandatoryNode(sourceCtx), + sourceCtx.getStatementSourceReference(), + "An augment cannot add node '%s' because it is mandatory and in module different than target", + sourceCtx.rawStatementArgument()); + } + + private static boolean reguiredCheckOfMandatoryNodes(final StmtContext sourceCtx, + Mutable targetCtx) { + /* + * If the statement argument is not QName, it cannot be mandatory + * statement, therefore return false and skip mandatory nodes validation + */ + if (!(sourceCtx.getStatementArgument() instanceof QName)) { + return false; + } + final QName sourceStmtQName = (QName) sourceCtx.getStatementArgument(); + + // RootStatementContext, for example + final Mutable root = targetCtx.getRoot(); + do { + Verify.verify(targetCtx.getStatementArgument() instanceof QName, + "Argument of augment target statement must be QName."); + final QName targetStmtQName = (QName) targetCtx.getStatementArgument(); + /* + * If target is from another module, return true and perform + * mandatory nodes validation + */ + if (!Utils.belongsToTheSameModule(targetStmtQName, sourceStmtQName)) { + return true; + } + + /* + * If target or one of the target's ancestors from the same namespace + * is a presence container + * or is non-mandatory choice + * or is non-mandatory list + * return false and skip mandatory nodes validation, because these nodes + * are not mandatory node containers according to RFC 6020 section 3.1. + */ + if (StmtContextUtils.isPresenceContainer(targetCtx) + || StmtContextUtils.isNotMandatoryNodeOfType(targetCtx, YangStmtMapping.CHOICE) + || StmtContextUtils.isNotMandatoryNodeOfType(targetCtx, YangStmtMapping.LIST)) { + return false; + } + } while ((targetCtx = targetCtx.getParentContext()) != root); + + /* + * All target node's parents belong to the same module as source node, + * therefore return false and skip mandatory nodes validation. + */ + return false; + } + + private static final Set NOCOPY_DEF_SET = ImmutableSet.of(YangStmtMapping.USES, + YangStmtMapping.WHEN, YangStmtMapping.DESCRIPTION, YangStmtMapping.REFERENCE, YangStmtMapping.STATUS); + + private static boolean needToCopyByAugment(final StmtContext stmtContext) { + return !NOCOPY_DEF_SET.contains(stmtContext.getPublicDefinition()); + } + + private static final Set REUSED_DEF_SET = ImmutableSet.of(YangStmtMapping.TYPEDEF); + + private static boolean isReusedByAugment(final StmtContext stmtContext) { + return REUSED_DEF_SET.contains(stmtContext.getPublicDefinition()); + } + + static boolean isSupportedAugmentTarget(final StmtContext substatementCtx) { + /* + * :TODO Substatement must be allowed augment target type e.g. + * Container, etc... and must not be for example grouping, identity etc. + * It is problem in case when more than one substatements have the same + * QName, for example Grouping and Container are siblings and they have + * the same QName. We must find the Container and the Grouping must be + * ignored as disallowed augment target. + */ + final Collection allowedAugmentTargets = substatementCtx.getFromNamespace( + ValidationBundlesNamespace.class, ValidationBundleType.SUPPORTED_AUGMENT_TARGETS); + + // if no allowed target is returned we consider all targets allowed + return allowedAugmentTargets == null || allowedAugmentTargets.isEmpty() + || allowedAugmentTargets.contains(substatementCtx.getPublicDefinition()); + } +} \ 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/rfc7950/stmt/augment/AugmentEffectiveStatementImpl.java similarity index 95% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AugmentEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentEffectiveStatementImpl.java index acb6492654..5080133937 100644 --- 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/rfc7950/stmt/augment/AugmentEffectiveStatementImpl.java @@ -5,7 +5,7 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.augment; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; @@ -29,10 +29,11 @@ import org.opendaylight.yangtools.yang.model.api.stmt.AugmentEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.AugmentStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; import org.opendaylight.yangtools.yang.model.api.stmt.WhenEffectiveStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveDocumentedDataNodeContainer; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; -public final class AugmentEffectiveStatementImpl +final class AugmentEffectiveStatementImpl extends AbstractEffectiveDocumentedDataNodeContainer implements AugmentEffectiveStatement, AugmentationSchemaNode, NamespaceRevisionAware { private final SchemaPath targetPath; @@ -44,7 +45,7 @@ public final class AugmentEffectiveStatementImpl private final RevisionAwareXPath whenCondition; private final AugmentationSchemaNode copyOf; - public AugmentEffectiveStatementImpl(final StmtContext> ctx) { super(ctx); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementImpl.java new file mode 100644 index 0000000000..ae0b80a126 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementImpl.java @@ -0,0 +1,91 @@ +/* + * 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.rfc7950.stmt.augment; + +import java.util.Collection; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import org.opendaylight.yangtools.yang.model.api.stmt.ActionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.AugmentStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DataDefinitionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.NotificationStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; +import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class AugmentStatementImpl extends AbstractDeclaredStatement implements AugmentStatement { + AugmentStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public SchemaNodeIdentifier getTargetNode() { + return argument(); + } + + @Nonnull + @Override + public Collection getDataDefinitions() { + return allDeclared(DataDefinitionStatement.class); + } + + @Nonnull + @Override + public Collection getActions() { + return allDeclared(ActionStatement.class); + } + + @Nonnull + @Override + public Collection getNotifications() { + return allDeclared(NotificationStatement.class); + } + + @Nullable + @Override + public ReferenceStatement getReference() { + return firstDeclared(ReferenceStatement.class); + } + + @Nullable + @Override + public DescriptionStatement getDescription() { + return firstDeclared(DescriptionStatement.class); + } + + @Nullable + @Override + public StatusStatement getStatus() { + return firstDeclared(StatusStatement.class); + } + + @Nullable + @Override + public WhenStatement getWhenStatement() { + return firstDeclared(WhenStatement.class); + } + + @Nonnull + @Override + public Collection getCases() { + return allDeclared(CaseStatement.class); + } + + @Nonnull + @Override + public Collection getIfFeatures() { + return allDeclared(IfFeatureStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementRFC6020Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementRFC6020Support.java new file mode 100644 index 0000000000..c254324a28 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementRFC6020Support.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.augment; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; + +public final class AugmentStatementRFC6020Support extends AbstractAugmentStatementSupport { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator + .builder(YangStmtMapping.AUGMENT) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.CASE) + .addAny(YangStmtMapping.CHOICE) + .addAny(YangStmtMapping.CONTAINER) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.IF_FEATURE) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addAny(YangStmtMapping.USES) + .addOptional(YangStmtMapping.WHEN) + .build(); + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/AugmentStatementRfc7950Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementRFC7950Support.java similarity index 87% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/AugmentStatementRfc7950Support.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementRFC7950Support.java index e29147f7a4..44ee8598ef 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/AugmentStatementRfc7950Support.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementRFC7950Support.java @@ -5,18 +5,17 @@ * 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.rfc7950; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.augment; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.AugmentStatementImpl; /** * Class providing necessary support for processing YANG 1.1 Augment statement. */ @Beta -public final class AugmentStatementRfc7950Support extends AugmentStatementImpl.Definition { +public final class AugmentStatementRFC7950Support extends AbstractAugmentStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator .builder(YangStmtMapping.AUGMENT) .addAny(YangStmtMapping.ACTION) 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/rfc7950/stmt/base/BaseEffectiveStatementImpl.java similarity index 67% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/BaseEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/base/BaseEffectiveStatementImpl.java index d2eff145c9..1bf6a704ca 100644 --- 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/rfc7950/stmt/base/BaseEffectiveStatementImpl.java @@ -1,21 +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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.base; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.stmt.BaseEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.BaseStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public class BaseEffectiveStatementImpl extends DeclaredEffectiveStatementBase +final class BaseEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements BaseEffectiveStatement { - public BaseEffectiveStatementImpl(final StmtContext ctx) { + BaseEffectiveStatementImpl(final 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/rfc7950/stmt/base/BaseStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/base/BaseStatementImpl.java new file mode 100644 index 0000000000..85ef21fa95 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/base/BaseStatementImpl.java @@ -0,0 +1,26 @@ +/* + * 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.rfc7950.stmt.base; + +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.stmt.BaseStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class BaseStatementImpl extends AbstractDeclaredStatement implements BaseStatement { + BaseStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public QName getName() { + return argument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/base/BaseStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/base/BaseStatementSupport.java new file mode 100644 index 0000000000..bb0113a111 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/base/BaseStatementSupport.java @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.base; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.BaseStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.IdentityStatement; +import org.opendaylight.yangtools.yang.parser.spi.IdentityNamespace; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.DerivedIdentitiesNamespace; +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.ModelActionBuilder.InferenceAction; +import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.InferenceContext; +import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.Prerequisite; +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.meta.StmtContext.Mutable; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; + +public final class BaseStatementSupport + extends AbstractQNameStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.BASE).build(); + + public BaseStatementSupport() { + super(YangStmtMapping.BASE); + } + + @Override + public QName parseArgumentValue(final StmtContext ctx, final String value) { + return StmtContextUtils.qnameFromArgument(ctx, value); + } + + @Override + public BaseStatement createDeclared(final StmtContext ctx) { + return new BaseStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new BaseEffectiveStatementImpl(ctx); + } + + @Override + public void onStatementDefinitionDeclared( + final Mutable> baseStmtCtx) { + final Mutable baseParentCtx = baseStmtCtx.getParentContext(); + if (StmtContextUtils.producesDeclared(baseParentCtx, IdentityStatement.class)) { + + final QName baseIdentityQName = baseStmtCtx.getStatementArgument(); + final ModelActionBuilder baseIdentityAction = baseStmtCtx.newInferenceAction( + ModelProcessingPhase.STATEMENT_DEFINITION); + final Prerequisite> requiresPrereq = baseIdentityAction.requiresCtx(baseStmtCtx, + IdentityNamespace.class, baseIdentityQName, ModelProcessingPhase.STATEMENT_DEFINITION); + final Prerequisite> mutatesPrereq = baseIdentityAction.mutatesCtx( + baseParentCtx, ModelProcessingPhase.STATEMENT_DEFINITION); + + baseIdentityAction.apply(new InferenceAction() { + @Override + public void apply(final InferenceContext ctx) { + List> derivedIdentities = baseStmtCtx.getFromNamespace( + DerivedIdentitiesNamespace.class, baseStmtCtx.getStatementArgument()); + if (derivedIdentities == null) { + derivedIdentities = new ArrayList<>(1); + baseStmtCtx.addToNs(DerivedIdentitiesNamespace.class, baseIdentityQName, derivedIdentities); + } + derivedIdentities.add(baseParentCtx); + } + + @Override + public void prerequisiteFailed(final Collection> failed) { + throw new InferenceException(baseStmtCtx.getStatementSourceReference(), + "Unable to resolve identity %s and base identity %s", + baseParentCtx.getStatementArgument(), baseStmtCtx.getStatementArgument()); + } + }); + } + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/BelongsToEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/belongs_to/BelongsToEffectiveStatementImpl.java similarity index 74% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/BelongsToEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/belongs_to/BelongsToEffectiveStatementImpl.java index fde455a53d..54e1d7f95f 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/BelongsToEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/belongs_to/BelongsToEffectiveStatementImpl.java @@ -5,16 +5,17 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.belongs_to; import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +// FIXME: hide this class public final class BelongsToEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements BelongsToEffectiveStatement { - public BelongsToEffectiveStatementImpl(final StmtContext ctx) { + BelongsToEffectiveStatementImpl(final StmtContext ctx) { super(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/belongs_to/BelongsToStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/belongs_to/BelongsToStatementImpl.java new file mode 100644 index 0000000000..cd14861df3 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/belongs_to/BelongsToStatementImpl.java @@ -0,0 +1,33 @@ +/* + * 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.rfc7950.stmt.belongs_to; + +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class BelongsToStatementImpl extends AbstractDeclaredStatement + implements BelongsToStatement { + BelongsToStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public String getModule() { + return argument(); + } + + @Nonnull + @Override + public PrefixStatement getPrefix() { + return firstDeclared(PrefixStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/belongs_to/BelongsToStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/belongs_to/BelongsToStatementSupport.java new file mode 100644 index 0000000000..93e2d0b46a --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/belongs_to/BelongsToStatementSupport.java @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.belongs_to; + +import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.findFirstDeclaredSubstatement; + +import java.util.Collection; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; +import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; +import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +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.ModelActionBuilder.InferenceAction; +import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.InferenceContext; +import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.Prerequisite; +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.meta.StmtContext.Mutable; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.spi.source.BelongsToModuleContext; +import org.opendaylight.yangtools.yang.parser.spi.source.BelongsToPrefixToModuleCtx; +import org.opendaylight.yangtools.yang.parser.spi.source.ModuleNamespaceForBelongsTo; + +public class BelongsToStatementSupport + extends + AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.BELONGS_TO).addMandatory(YangStmtMapping.PREFIX).build(); + + public BelongsToStatementSupport() { + super(YangStmtMapping.BELONGS_TO); + } + + @Override + public String parseArgumentValue(final StmtContext ctx, final String value) { + return value; + } + + @Override + public BelongsToStatement createDeclared( + final StmtContext ctx) { + return new BelongsToStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new BelongsToEffectiveStatementImpl(ctx); + } + + @Override + public void onPreLinkageDeclared(final StmtContext.Mutable> belongsToCtx) { + belongsToCtx.addRequiredSource(getSourceIdentifier(belongsToCtx)); + } + + @Override + public void onLinkageDeclared(final Mutable> belongsToCtx) { + ModelActionBuilder belongsToAction = belongsToCtx.newInferenceAction(ModelProcessingPhase.SOURCE_LINKAGE); + + final SourceIdentifier belongsToSourceIdentifier = getSourceIdentifier(belongsToCtx); + final Prerequisite> belongsToPrereq = belongsToAction.requiresCtx(belongsToCtx, + ModuleNamespaceForBelongsTo.class, belongsToCtx.getStatementArgument(), + ModelProcessingPhase.SOURCE_LINKAGE); + + belongsToAction.apply(new InferenceAction() { + @Override + public void apply(final InferenceContext ctx) { + StmtContext belongsToModuleCtx = belongsToPrereq.resolve(ctx); + + belongsToCtx.addToNs(BelongsToModuleContext.class, belongsToSourceIdentifier, belongsToModuleCtx); + belongsToCtx.addToNs(BelongsToPrefixToModuleCtx.class, + findFirstDeclaredSubstatement(belongsToCtx, PrefixStatement.class).getStatementArgument(), + belongsToModuleCtx); + } + + @Override + public void prerequisiteFailed(final Collection> failed) { + if (failed.contains(belongsToPrereq)) { + throw new InferenceException(belongsToCtx.getStatementSourceReference(), + "Module '%s' from belongs-to was not found", belongsToCtx.getStatementArgument()); + } + } + }); + } + + private static SourceIdentifier getSourceIdentifier(final StmtContext> belongsToCtx) { + return RevisionSourceIdentifier.create(belongsToCtx.getStatementArgument()); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/AbstractBitStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/AbstractBitStatementSupport.java new file mode 100644 index 0000000000..3dcb97ee1a --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/AbstractBitStatementSupport.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.bit; + +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; + +abstract class AbstractBitStatementSupport extends + AbstractQNameStatementSupport> { + AbstractBitStatementSupport() { + super(YangStmtMapping.BIT); + } + + @Override + public final QName parseArgumentValue(final StmtContext ctx, final String value) { + return StmtContextUtils.qnameFromArgument(ctx, value); + } + + @Override + public final BitStatement createDeclared(final StmtContext ctx) { + return new BitStatementImpl(ctx); + } + + @Override + public final EffectiveStatement createEffective( + final StmtContext> ctx) { + return new BitEffectiveStatementImpl(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/type/BitEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitEffectiveStatementImpl.java similarity index 91% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/BitEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitEffectiveStatementImpl.java index d90c621d7a..943dfefd92 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/BitEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitEffectiveStatementImpl.java @@ -5,7 +5,7 @@ * 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.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.bit; import com.google.common.collect.ImmutableList; import java.util.ArrayList; @@ -20,10 +20,11 @@ import org.opendaylight.yangtools.yang.model.api.stmt.BitEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PositionEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.AbstractEffectiveDocumentedNode; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveDocumentedNode; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public class BitEffectiveStatementImpl extends AbstractEffectiveDocumentedNode +// FIXME: hide this class +public final class BitEffectiveStatementImpl extends AbstractEffectiveDocumentedNode implements BitEffectiveStatement { private final QName qname; @@ -31,7 +32,7 @@ public class BitEffectiveStatementImpl extends AbstractEffectiveDocumentedNode unknownSchemaNodes; - public BitEffectiveStatementImpl(final StmtContext ctx) { + BitEffectiveStatementImpl(final StmtContext ctx) { super(ctx); qname = ctx.getStatementArgument(); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitStatementImpl.java new file mode 100644 index 0000000000..db86f01644 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitStatementImpl.java @@ -0,0 +1,58 @@ +/* + * 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.rfc7950.stmt.bit; + +import java.util.Collection; +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.PositionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class BitStatementImpl extends AbstractDeclaredStatement implements BitStatement { + BitStatementImpl(final StmtContext context) { + super(context); + } + + @Override + public StatusStatement getStatus() { + return firstDeclared(StatusStatement.class); + } + + @Override + public DescriptionStatement getDescription() { + return firstDeclared(DescriptionStatement.class); + } + + @Nonnull + @Override + public Collection getIfFeatures() { + return allDeclared(IfFeatureStatement.class); + } + + @Override + public ReferenceStatement getReference() { + return firstDeclared(ReferenceStatement.class); + } + + @Nonnull + @Override + public String getName() { + return argument().getLocalName(); + } + + @Override + public PositionStatement getPosition() { + return firstDeclared(PositionStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitStatementRFC6020Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitStatementRFC6020Support.java new file mode 100644 index 0000000000..b4f90db63f --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitStatementRFC6020Support.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.bit; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; + +public class BitStatementRFC6020Support extends AbstractBitStatementSupport { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.BIT) + .addOptional(YangStmtMapping.DESCRIPTION) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addOptional(YangStmtMapping.POSITION) + .build(); + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/BitStatementRfc7950Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitStatementRFC7950Support.java similarity index 83% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/BitStatementRfc7950Support.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitStatementRFC7950Support.java index bc6d7ec4a9..314aaa0b7a 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/BitStatementRfc7950Support.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitStatementRFC7950Support.java @@ -5,18 +5,17 @@ * 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.rfc7950; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.bit; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.BitStatementImpl; /** * Class providing necessary support for processing YANG 1.1 Bit statement. */ @Beta -public final class BitStatementRfc7950Support extends BitStatementImpl.Definition { +public final class BitStatementRFC7950Support extends AbstractBitStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping .BIT) .addOptional(YangStmtMapping.DESCRIPTION) diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/AbstractCaseStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/AbstractCaseStatementSupport.java new file mode 100644 index 0000000000..89ee3679cb --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/AbstractCaseStatementSupport.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.case_; + +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +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.AbstractQNameStatementSupport; +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.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ChildSchemaNodes; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.CaseEffectiveStatementImpl; + +abstract class AbstractCaseStatementSupport + extends AbstractQNameStatementSupport> { + + AbstractCaseStatementSupport() { + super(YangStmtMapping.CASE); + } + + @Override + public final QName parseArgumentValue(final StmtContext ctx, final String value) { + return StmtContextUtils.qnameFromArgument(ctx, value); + } + + @Override + public final void onStatementAdded( + final Mutable> stmt) { + stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); + } + + @Override + public final CaseStatement createDeclared(final StmtContext ctx) { + return new CaseStatementImpl(ctx); + } + + @Override + public final EffectiveStatement createEffective( + final StmtContext> ctx) { + return new CaseEffectiveStatementImpl(ctx); + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/CaseStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/CaseStatementImpl.java new file mode 100644 index 0000000000..5020493b5e --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/CaseStatementImpl.java @@ -0,0 +1,69 @@ +/* + * 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.rfc7950.stmt.case_; + +import java.util.Collection; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DataDefinitionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class CaseStatementImpl extends AbstractDeclaredStatement implements CaseStatement { + CaseStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public QName getName() { + return argument(); + } + + @Override + public WhenStatement getWhenStatement() { + return firstDeclared(WhenStatement.class); + } + + @Nonnull + @Override + public Collection getIfFeatures() { + return allDeclared(IfFeatureStatement.class); + } + + @Nonnull + @Override + public Collection getDataDefinitions() { + return allDeclared(DataDefinitionStatement.class); + } + + @Nullable + @Override + public StatusStatement getStatus() { + return firstDeclared(StatusStatement.class); + } + + @Nullable + @Override + public DescriptionStatement getDescription() { + return firstDeclared(DescriptionStatement.class); + } + + @Nullable + @Override + public ReferenceStatement getReference() { + return firstDeclared(ReferenceStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/CaseStatementRFC6020Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/CaseStatementRFC6020Support.java new file mode 100644 index 0000000000..ae25b2fbed --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/CaseStatementRFC6020Support.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.case_; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; + +public final class CaseStatementRFC6020Support extends AbstractCaseStatementSupport { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.CASE) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.CHOICE) + .addAny(YangStmtMapping.CONTAINER) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.IF_FEATURE) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addAny(YangStmtMapping.USES) + .addOptional(YangStmtMapping.WHEN) + .build(); + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/CaseStatementRfc7950Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/CaseStatementRFC7950Support.java similarity index 86% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/CaseStatementRfc7950Support.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/CaseStatementRFC7950Support.java index b28ebce21c..362eb3a152 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/CaseStatementRfc7950Support.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/CaseStatementRFC7950Support.java @@ -5,18 +5,17 @@ * 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.rfc7950; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.case_; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.CaseStatementImpl; /** * Class providing necessary support for processing YANG 1.1 Case statement. */ @Beta -public final class CaseStatementRfc7950Support extends CaseStatementImpl.Definition { +public final class CaseStatementRFC7950Support extends AbstractCaseStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping .CASE) .addAny(YangStmtMapping.ANYDATA) diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/AbstractChoiceStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/AbstractChoiceStatementSupport.java new file mode 100644 index 0000000000..0f0fbbf753 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/AbstractChoiceStatementSupport.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.choice; + +import java.util.Optional; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +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.ChoiceStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport; +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.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ChildSchemaNodes; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangValidationBundles; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ChoiceEffectiveStatementImpl; + +abstract class AbstractChoiceStatementSupport extends + AbstractQNameStatementSupport> { + AbstractChoiceStatementSupport() { + super(YangStmtMapping.CHOICE); + } + + @Override + public final QName parseArgumentValue(final StmtContext ctx, final String value) { + return StmtContextUtils.qnameFromArgument(ctx, value); + } + + @Override + public final Optional> getImplicitParentFor(final StatementDefinition stmtDef) { + if (YangValidationBundles.SUPPORTED_CASE_SHORTHANDS.contains(stmtDef)) { + return Optional.of(implictCase()); + } + return Optional.empty(); + } + + @Override + public final void onStatementAdded( + final Mutable> stmt) { + stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); + } + + @Override + public final ChoiceStatement createDeclared(final StmtContext ctx) { + return new ChoiceStatementImpl(ctx); + } + + @Override + public final EffectiveStatement createEffective( + final StmtContext> ctx) { + return new ChoiceEffectiveStatementImpl(ctx); + } + + abstract StatementSupport implictCase(); +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/ChoiceStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/ChoiceStatementImpl.java new file mode 100644 index 0000000000..132ea7d84f --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/ChoiceStatementImpl.java @@ -0,0 +1,91 @@ +/* + * 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.rfc7950.stmt.choice; + +import java.util.Collection; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class ChoiceStatementImpl extends AbstractDeclaredStatement + implements ChoiceStatement { + ChoiceStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public QName getName() { + return argument(); + } + + @Nullable + @Override + public DefaultStatement getDefault() { + return firstDeclared(DefaultStatement.class); + } + + @Nullable + @Override + public ConfigStatement getConfig() { + return firstDeclared(ConfigStatement.class); + } + + @Nullable + @Override + public MandatoryStatement getMandatory() { + return firstDeclared(MandatoryStatement.class); + } + + @Nonnull + @Override + public Collection getCases() { + return allDeclared(CaseStatement.class); + } + + @Override + public WhenStatement getWhenStatement() { + return firstDeclared(WhenStatement.class); + } + + @Nonnull + @Override + public Collection getIfFeatures() { + return allDeclared(IfFeatureStatement.class); + } + + @Nullable + @Override + public StatusStatement getStatus() { + return firstDeclared(StatusStatement.class); + } + + @Nullable + @Override + public DescriptionStatement getDescription() { + return firstDeclared(DescriptionStatement.class); + } + + @Nullable + @Override + public ReferenceStatement getReference() { + return firstDeclared(ReferenceStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/ChoiceStatementRFC6020Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/ChoiceStatementRFC6020Support.java new file mode 100644 index 0000000000..87bf34216f --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/ChoiceStatementRFC6020Support.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.choice; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.case_.CaseStatementRFC6020Support; +import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; + +public final class ChoiceStatementRFC6020Support extends AbstractChoiceStatementSupport { + // FIXME: share instance + private static final StatementSupport IMPLICIT_CASE = new CaseStatementRFC6020Support(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .CHOICE) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.CASE) + .addOptional(YangStmtMapping.CONFIG) + .addAny(YangStmtMapping.CONTAINER) + .addOptional(YangStmtMapping.DEFAULT) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.IF_FEATURE) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addOptional(YangStmtMapping.MANDATORY) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addOptional(YangStmtMapping.WHEN) + .build(); + + @Override + StatementSupport implictCase() { + return IMPLICIT_CASE; + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/ChoiceStatementRfc7950Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/ChoiceStatementRFC7950Support.java similarity index 82% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/ChoiceStatementRfc7950Support.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/ChoiceStatementRFC7950Support.java index bce705823c..6fd3f13855 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/ChoiceStatementRfc7950Support.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/ChoiceStatementRFC7950Support.java @@ -5,19 +5,19 @@ * 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.rfc7950; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.choice; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.case_.CaseStatementRFC7950Support; import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ChoiceStatementImpl; /** * Class providing necessary support for processing YANG 1.1 Choice statement. */ @Beta -public final class ChoiceStatementRfc7950Support extends ChoiceStatementImpl.Definition { +public final class ChoiceStatementRFC7950Support extends AbstractChoiceStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping .CHOICE) .addAny(YangStmtMapping.ANYDATA) @@ -37,10 +37,11 @@ public final class ChoiceStatementRfc7950Support extends ChoiceStatementImpl.Def .addOptional(YangStmtMapping.WHEN) .build(); - private static final StatementSupport IMPLICIT_CASE = new CaseStatementRfc7950Support(); + // FIXME: share instance + private static final StatementSupport IMPLICIT_CASE = new CaseStatementRFC7950Support(); @Override - protected StatementSupport implictCase() { + StatementSupport implictCase() { return IMPLICIT_CASE; } 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/rfc7950/stmt/config/ConfigEffectiveStatementImpl.java similarity index 86% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ConfigEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/ConfigEffectiveStatementImpl.java index 87f3ae9ab6..ef31f93beb 100644 --- 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/rfc7950/stmt/config/ConfigEffectiveStatementImpl.java @@ -5,11 +5,11 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.config; import org.opendaylight.yangtools.yang.model.api.stmt.ConfigEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; public final class ConfigEffectiveStatementImpl extends DeclaredEffectiveStatementBase diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/ConfigStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/ConfigStatementImpl.java new file mode 100644 index 0000000000..82be7d7b3f --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/ConfigStatementImpl.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.rfc7950.stmt.config; + +import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class ConfigStatementImpl extends AbstractDeclaredStatement implements ConfigStatement { + ConfigStatementImpl(final StmtContext context) { + super(context); + } + + @Override + public boolean getValue() { + return argument().booleanValue(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/ConfigStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/ConfigStatementSupport.java new file mode 100644 index 0000000000..cb4ce4f178 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/ConfigStatementSupport.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.config; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; +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.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; + +public class ConfigStatementSupport extends + AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.CONFIG).build(); + + public ConfigStatementSupport() { + super(YangStmtMapping.CONFIG); + } + + @Override + public Boolean parseArgumentValue(final StmtContext ctx, final String value) { + return Utils.parseBoolean(ctx, value); + } + + @Override + public ConfigStatement createDeclared(final StmtContext ctx) { + final ConfigStatement ret = new ConfigStatementImpl(ctx); + + if (EmptyConfigStatement.FALSE.equals(ret)) { + return EmptyConfigStatement.FALSE; + } else if (EmptyConfigStatement.TRUE.equals(ret)) { + return EmptyConfigStatement.TRUE; + } else { + return ret; + } + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + final EffectiveStatement ret = new ConfigEffectiveStatementImpl(ctx); + final ConfigStatement declared = ret.getDeclared(); + if (declared instanceof EmptyConfigStatement && ret.effectiveSubstatements().isEmpty()) { + return ((EmptyConfigStatement)declared).toEffective(); + } + return ret; + } + + @Override + public String internArgument(final String rawArgument) { + return Utils.internBoolean(rawArgument); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/EmptyConfigEffectiveStatement.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/EmptyConfigEffectiveStatement.java similarity index 97% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/EmptyConfigEffectiveStatement.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/EmptyConfigEffectiveStatement.java index c3e4f20da1..fd912a455b 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/EmptyConfigEffectiveStatement.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/EmptyConfigEffectiveStatement.java @@ -5,7 +5,7 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.config; import com.google.common.collect.ImmutableList; import java.util.Collection; diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/EmptyConfigStatement.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/EmptyConfigStatement.java similarity index 97% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/EmptyConfigStatement.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/EmptyConfigStatement.java index 811a839423..2d227afa77 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/EmptyConfigStatement.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/EmptyConfigStatement.java @@ -5,7 +5,7 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.config; import com.google.common.collect.ImmutableList; import java.util.Collection; 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/rfc7950/stmt/contact/ContactEffectiveStatementImpl.java similarity index 64% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ContactEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/contact/ContactEffectiveStatementImpl.java index a07214be2c..bbcbf8994a 100644 --- 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/rfc7950/stmt/contact/ContactEffectiveStatementImpl.java @@ -5,16 +5,16 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.contact; import org.opendaylight.yangtools.yang.model.api.stmt.ContactEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ContactStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class ContactEffectiveStatementImpl extends DeclaredEffectiveStatementBase +final class ContactEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements ContactEffectiveStatement { - public ContactEffectiveStatementImpl(final StmtContext ctx) { + ContactEffectiveStatementImpl(final StmtContext ctx) { super(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/contact/ContactStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/contact/ContactStatementImpl.java new file mode 100644 index 0000000000..5f087b9c58 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/contact/ContactStatementImpl.java @@ -0,0 +1,25 @@ +/* + * 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.rfc7950.stmt.contact; + +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.ContactStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class ContactStatementImpl extends AbstractDeclaredStatement implements ContactStatement { + ContactStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public String getText() { + return rawArgument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/contact/ContactStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/contact/ContactStatementSupport.java new file mode 100644 index 0000000000..56410bc6e0 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/contact/ContactStatementSupport.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.contact; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ContactStatement; +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.meta.SubstatementValidator; + +public final class ContactStatementSupport + extends AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.CONTACT).build(); + + public ContactStatementSupport() { + super(YangStmtMapping.CONTACT); + } + + @Override + public String parseArgumentValue(final StmtContext ctx, final String value) { + return value; + } + + @Override + public ContactStatement createDeclared(final StmtContext ctx) { + return new ContactStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new ContactEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/AbstractContainerStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/AbstractContainerStatementSupport.java new file mode 100644 index 0000000000..7314fcaf06 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/AbstractContainerStatementSupport.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.container; + +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; +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.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ChildSchemaNodes; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ContainerEffectiveStatementImpl; + +abstract class AbstractContainerStatementSupport + extends AbstractQNameStatementSupport> { + + AbstractContainerStatementSupport() { + super(YangStmtMapping.CONTAINER); + } + + @Override + public final QName parseArgumentValue(final StmtContext ctx, final String value) { + return StmtContextUtils.qnameFromArgument(ctx,value); + } + + @Override + public final void onStatementAdded( + final Mutable> stmt) { + stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); + } + + @Override + public final ContainerStatement createDeclared(final StmtContext ctx) { + return new ContainerStatementImpl(ctx); + } + + @Override + public final EffectiveStatement createEffective( + final StmtContext> ctx) { + return new ContainerEffectiveStatementImpl(ctx); + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ContainerStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementImpl.java similarity index 51% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ContainerStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementImpl.java index 7077abf811..ecdca9761a 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ContainerStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementImpl.java @@ -5,13 +5,11 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.container; import java.util.Collection; import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ActionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement; @@ -27,72 +25,11 @@ import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement; import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; 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.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ContainerEffectiveStatementImpl; - -public class ContainerStatementImpl extends AbstractDeclaredStatement implements ContainerStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .CONTAINER) - .addAny(YangStmtMapping.ANYXML) - .addAny(YangStmtMapping.CHOICE) - .addOptional(YangStmtMapping.CONFIG) - .addAny(YangStmtMapping.CONTAINER) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.GROUPING) - .addAny(YangStmtMapping.IF_FEATURE) - .addAny(YangStmtMapping.LEAF) - .addAny(YangStmtMapping.LEAF_LIST) - .addAny(YangStmtMapping.LIST) - .addAny(YangStmtMapping.MUST) - .addOptional(YangStmtMapping.PRESENCE) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addAny(YangStmtMapping.TYPEDEF) - .addAny(YangStmtMapping.USES) - .addOptional(YangStmtMapping.WHEN) - .build(); - - protected ContainerStatementImpl(final StmtContext context) { - super(context); - } - public static class Definition - extends AbstractQNameStatementSupport> { - - public Definition() { - super(YangStmtMapping.CONTAINER); - } - - @Override - public QName parseArgumentValue(final StmtContext ctx, final String value) { - return StmtContextUtils.qnameFromArgument(ctx,value); - } - - @Override - public void onStatementAdded( - final Mutable> stmt) { - stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); - } - - @Override - public ContainerStatement createDeclared(final StmtContext ctx) { - return new ContainerStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective(final StmtContext> ctx) { - return new ContainerEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } +final class ContainerStatementImpl extends AbstractDeclaredStatement implements ContainerStatement { + ContainerStatementImpl(final StmtContext context) { + super(context); } @Nonnull @@ -167,7 +104,7 @@ public class ContainerStatementImpl extends AbstractDeclaredStatement imp } @Override - public final Collection getNotifications() { + public Collection getNotifications() { return allDeclared(NotificationStatement.class); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementRFC6020Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementRFC6020Support.java new file mode 100644 index 0000000000..e9b299a1f2 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementRFC6020Support.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.container; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; + +public final class ContainerStatementRFC6020Support extends AbstractContainerStatementSupport { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.CONTAINER) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.CHOICE) + .addOptional(YangStmtMapping.CONFIG) + .addAny(YangStmtMapping.CONTAINER) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.IF_FEATURE) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addAny(YangStmtMapping.MUST) + .addOptional(YangStmtMapping.PRESENCE) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addAny(YangStmtMapping.TYPEDEF) + .addAny(YangStmtMapping.USES) + .addOptional(YangStmtMapping.WHEN) + .build(); + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/ContainerStatementRfc7950Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementRFC7950Support.java similarity index 87% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/ContainerStatementRfc7950Support.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementRFC7950Support.java index fd6e2997b2..d4b2d2691a 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/ContainerStatementRfc7950Support.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementRFC7950Support.java @@ -5,19 +5,17 @@ * 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.rfc7950; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.container; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ContainerStatementImpl; /** - * Class providing necessary support for processing YANG 1.1 Container - * statement. + * Class providing necessary support for processing YANG 1.1 Container statement. */ @Beta -public final class ContainerStatementRfc7950Support extends ContainerStatementImpl.Definition { +public final class ContainerStatementRFC7950Support extends AbstractContainerStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping .CONTAINER) .addAny(YangStmtMapping.ACTION) 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/rfc7950/stmt/default_/DefaultEffectiveStatementImpl.java similarity index 64% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DefaultEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/default_/DefaultEffectiveStatementImpl.java index 57775e05f4..3430cb843b 100644 --- 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/rfc7950/stmt/default_/DefaultEffectiveStatementImpl.java @@ -5,16 +5,16 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.default_; import org.opendaylight.yangtools.yang.model.api.stmt.DefaultEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class DefaultEffectiveStatementImpl extends DeclaredEffectiveStatementBase +final class DefaultEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements DefaultEffectiveStatement { - public DefaultEffectiveStatementImpl(final StmtContext ctx) { + DefaultEffectiveStatementImpl(final 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/rfc7950/stmt/default_/DefaultStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/default_/DefaultStatementImpl.java new file mode 100644 index 0000000000..f2d04ba8cd --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/default_/DefaultStatementImpl.java @@ -0,0 +1,26 @@ +/* + * 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.rfc7950.stmt.default_; + +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class DefaultStatementImpl extends AbstractDeclaredStatement implements + DefaultStatement { + DefaultStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public String getValue() { + return rawArgument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/default_/DefaultStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/default_/DefaultStatementSupport.java new file mode 100644 index 0000000000..9f1976b920 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/default_/DefaultStatementSupport.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.default_; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement; +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.meta.SubstatementValidator; + +public final class DefaultStatementSupport + extends AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.DEFAULT).build(); + + public DefaultStatementSupport() { + super(YangStmtMapping.DEFAULT); + } + + @Override + public String parseArgumentValue(final StmtContext ctx, final String value) { + return value; + } + + @Override + public DefaultStatement createDeclared(final StmtContext ctx) { + return new DefaultStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new DefaultEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ 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/rfc7950/stmt/description/DescriptionEffectiveStatementImpl.java similarity index 71% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DescriptionEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/description/DescriptionEffectiveStatementImpl.java index 98d9868342..102fa81688 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/rfc7950/stmt/description/DescriptionEffectiveStatementImpl.java @@ -5,16 +5,16 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.description; import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class DescriptionEffectiveStatementImpl +final class DescriptionEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements DescriptionEffectiveStatement { - public DescriptionEffectiveStatementImpl(final StmtContext ctx) { + DescriptionEffectiveStatementImpl(final StmtContext ctx) { super(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/description/DescriptionStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/description/DescriptionStatementImpl.java new file mode 100644 index 0000000000..29a137161f --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/description/DescriptionStatementImpl.java @@ -0,0 +1,25 @@ +/* + * 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.rfc7950.stmt.description; + +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class DescriptionStatementImpl extends AbstractDeclaredStatement implements DescriptionStatement { + DescriptionStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public String getText() { + return rawArgument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/description/DescriptionStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/description/DescriptionStatementSupport.java new file mode 100644 index 0000000000..6f19f0ceaa --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/description/DescriptionStatementSupport.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.description; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; +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.meta.SubstatementValidator; + +public final class DescriptionStatementSupport extends AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.DESCRIPTION).build(); + + public DescriptionStatementSupport() { + super(YangStmtMapping.DESCRIPTION); + } + + @Override + public String parseArgumentValue(final StmtContext ctx, final String value) { + return value; + } + + @Override + public DescriptionStatement createDeclared(final StmtContext ctx) { + return new DescriptionStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new DescriptionEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/AbstractDeviateStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/AbstractDeviateStatementSupport.java new file mode 100644 index 0000000000..32187261d0 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/AbstractDeviateStatementSupport.java @@ -0,0 +1,374 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.deviate; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMap.Builder; +import com.google.common.collect.ImmutableSet; +import java.util.Collection; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import org.opendaylight.yangtools.yang.common.QNameModule; +import org.opendaylight.yangtools.yang.common.YangVersion; +import org.opendaylight.yangtools.yang.model.api.DeviateKind; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +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.DeviateStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType; +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.ModelActionBuilder.InferenceAction; +import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.InferenceContext; +import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.Prerequisite; +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.meta.StmtContext.Mutable; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.spi.source.ModuleCtxToModuleQName; +import org.opendaylight.yangtools.yang.parser.spi.source.ModulesDeviatedByModules; +import org.opendaylight.yangtools.yang.parser.spi.source.ModulesDeviatedByModules.SupportedModules; +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.SchemaNodeIdentifierBuildNamespace; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangValidationBundles; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +abstract class AbstractDeviateStatementSupport extends AbstractStatementSupport> { + private static final Logger LOG = LoggerFactory.getLogger(DeviateStatementImpl.class); + + private static final SubstatementValidator DEVIATE_NOT_SUPPORTED_SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.DEVIATE).build(); + + private static final SubstatementValidator DEVIATE_ADD_SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.DEVIATE) + .addOptional(YangStmtMapping.CONFIG) + .addOptional(YangStmtMapping.DEFAULT) + .addOptional(YangStmtMapping.MANDATORY) + .addOptional(YangStmtMapping.MAX_ELEMENTS) + .addOptional(YangStmtMapping.MIN_ELEMENTS) + .addAny(YangStmtMapping.MUST) + .addAny(YangStmtMapping.UNIQUE) + .addOptional(YangStmtMapping.UNITS) + .build(); + + private static final SubstatementValidator DEVIATE_REPLACE_SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.DEVIATE) + .addOptional(YangStmtMapping.CONFIG) + .addOptional(YangStmtMapping.DEFAULT) + .addOptional(YangStmtMapping.MANDATORY) + .addOptional(YangStmtMapping.MAX_ELEMENTS) + .addOptional(YangStmtMapping.MIN_ELEMENTS) + .addOptional(YangStmtMapping.TYPE) + .addOptional(YangStmtMapping.UNITS) + .build(); + + private static final SubstatementValidator DEVIATE_DELETE_SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.DEVIATE) + .addOptional(YangStmtMapping.DEFAULT) + .addAny(YangStmtMapping.MUST) + .addAny(YangStmtMapping.UNIQUE) + .addOptional(YangStmtMapping.UNITS) + .build(); + + private static final Map KEYWORD_TO_DEVIATE_MAP; + + static { + final Builder keywordToDeviateMapBuilder = ImmutableMap.builder(); + for (final DeviateKind deviate : DeviateKind.values()) { + keywordToDeviateMapBuilder.put(deviate.getKeyword(), deviate); + } + KEYWORD_TO_DEVIATE_MAP = keywordToDeviateMapBuilder.build(); + } + + private static final Set SINGLETON_STATEMENTS = ImmutableSet.of( + YangStmtMapping.UNITS, YangStmtMapping.CONFIG, YangStmtMapping.MANDATORY, + YangStmtMapping.MIN_ELEMENTS, YangStmtMapping.MAX_ELEMENTS); + + private static final Set IMPLICIT_STATEMENTS = ImmutableSet.of(YangStmtMapping.CONFIG, + YangStmtMapping.MANDATORY, YangStmtMapping.MAX_ELEMENTS, YangStmtMapping.MIN_ELEMENTS); + + AbstractDeviateStatementSupport() { + super(YangStmtMapping.DEVIATE); + } + + @Override + public final DeviateKind parseArgumentValue(final StmtContext ctx, final String value) { + return SourceException.throwIfNull(KEYWORD_TO_DEVIATE_MAP.get(value), + ctx.getStatementSourceReference(), "String '%s' is not valid deviate argument", value); + } + + @Override + public final DeviateStatement createDeclared(final StmtContext ctx) { + return new DeviateStatementImpl(ctx); + } + + @Override + public final EffectiveStatement createEffective( + final StmtContext> ctx) { + return new DeviateEffectiveStatementImpl(ctx); + } + + @Override + public final void onFullDefinitionDeclared(final Mutable> deviateStmtCtx) { + final DeviateKind deviateKind = deviateStmtCtx.getStatementArgument(); + getSubstatementValidatorForDeviate(deviateKind).validate(deviateStmtCtx); + + final SchemaNodeIdentifier deviationTarget = + (SchemaNodeIdentifier) deviateStmtCtx.getParentContext().getStatementArgument(); + + if (!isDeviationSupported(deviateStmtCtx, deviationTarget)) { + return; + } + + final ModelActionBuilder deviateAction = deviateStmtCtx.newInferenceAction( + ModelProcessingPhase.EFFECTIVE_MODEL); + + final Prerequisite>> sourceCtxPrerequisite = + deviateAction.requiresCtx(deviateStmtCtx, ModelProcessingPhase.EFFECTIVE_MODEL); + + final Prerequisite>> targetCtxPrerequisite = + deviateAction.mutatesEffectiveCtx(deviateStmtCtx.getRoot(), + SchemaNodeIdentifierBuildNamespace.class, deviationTarget); + + deviateAction.apply(new InferenceAction() { + @Override + public void apply(final InferenceContext ctx) throws InferenceException { + // FIXME once BUG-7760 gets fixed, there will be no need for these dirty casts + final StatementContextBase sourceNodeStmtCtx = + (StatementContextBase) sourceCtxPrerequisite.resolve(ctx); + final StatementContextBase targetNodeStmtCtx = + (StatementContextBase) targetCtxPrerequisite.resolve(ctx); + + switch (deviateKind) { + case NOT_SUPPORTED: + targetNodeStmtCtx.setIsSupportedToBuildEffective(false); + break; + case ADD: + performDeviateAdd(sourceNodeStmtCtx, targetNodeStmtCtx); + break; + case REPLACE: + performDeviateReplace(sourceNodeStmtCtx, targetNodeStmtCtx); + break; + case DELETE: + performDeviateDelete(sourceNodeStmtCtx, targetNodeStmtCtx); + break; + default: + throw new IllegalStateException("Unsupported deviate " + deviateKind); + } + } + + @Override + public void prerequisiteFailed(final Collection> failed) { + throw new InferenceException(deviateStmtCtx.getParentContext().getStatementSourceReference(), + "Deviation target '%s' not found.", deviationTarget); + } + }); + } + + @Override + protected final SubstatementValidator getSubstatementValidator() { + return null; + } + + protected SubstatementValidator getSubstatementValidatorForDeviate(final DeviateKind deviateKind) { + switch (deviateKind) { + case NOT_SUPPORTED: + return DEVIATE_NOT_SUPPORTED_SUBSTATEMENT_VALIDATOR; + case ADD: + return DEVIATE_ADD_SUBSTATEMENT_VALIDATOR; + case REPLACE: + return DEVIATE_REPLACE_SUBSTATEMENT_VALIDATOR; + case DELETE: + return DEVIATE_DELETE_SUBSTATEMENT_VALIDATOR; + default: + throw new IllegalStateException(String.format( + "Substatement validator for deviate %s has not been defined.", deviateKind)); + } + } + + private static boolean isDeviationSupported(final Mutable> deviateStmtCtx, + final SchemaNodeIdentifier deviationTarget) { + final Map> modulesDeviatedByModules = deviateStmtCtx.getFromNamespace( + ModulesDeviatedByModules.class, SupportedModules.SUPPORTED_MODULES); + if (modulesDeviatedByModules == null) { + return true; + } + + final QNameModule currentModule = deviateStmtCtx.getFromNamespace(ModuleCtxToModuleQName.class, + deviateStmtCtx.getRoot()); + final QNameModule targetModule = deviationTarget.getLastComponent().getModule(); + + final Set deviationModulesSupportedByTargetModule = modulesDeviatedByModules.get(targetModule); + if (deviationModulesSupportedByTargetModule != null) { + return deviationModulesSupportedByTargetModule.contains(currentModule); + } + + return false; + } + + private static void performDeviateAdd(final StatementContextBase deviateStmtCtx, + final StatementContextBase targetCtx) { + for (Mutable originalStmtCtx : deviateStmtCtx.mutableDeclaredSubstatements()) { + validateDeviationTarget(originalStmtCtx, targetCtx); + addStatement(originalStmtCtx, targetCtx); + } + } + + private static void addStatement(final Mutable stmtCtxToBeAdded, + final StatementContextBase targetCtx) { + if (!StmtContextUtils.isUnknownStatement(stmtCtxToBeAdded)) { + final StatementDefinition stmtToBeAdded = stmtCtxToBeAdded.getPublicDefinition(); + if (SINGLETON_STATEMENTS.contains(stmtToBeAdded) || YangStmtMapping.DEFAULT.equals(stmtToBeAdded) + && YangStmtMapping.LEAF.equals(targetCtx.getPublicDefinition())) { + for (final StmtContext targetCtxSubstatement : targetCtx.allSubstatements()) { + InferenceException.throwIf(stmtToBeAdded.equals(targetCtxSubstatement.getPublicDefinition()), + stmtCtxToBeAdded.getStatementSourceReference(), + "Deviation cannot add substatement %s to target node %s because it is already defined " + + "in target and can appear only once.", + stmtToBeAdded.getStatementName(), targetCtx.getStatementArgument()); + } + } + } + + copyStatement(stmtCtxToBeAdded, targetCtx); + } + + private static void performDeviateReplace(final StatementContextBase deviateStmtCtx, + final StatementContextBase targetCtx) { + for (Mutable originalStmtCtx : deviateStmtCtx.mutableDeclaredSubstatements()) { + validateDeviationTarget(originalStmtCtx, targetCtx); + replaceStatement(originalStmtCtx, targetCtx); + } + } + + private static void replaceStatement(final Mutable stmtCtxToBeReplaced, + final StatementContextBase targetCtx) { + final StatementDefinition stmtToBeReplaced = stmtCtxToBeReplaced.getPublicDefinition(); + + if (YangStmtMapping.DEFAULT.equals(stmtToBeReplaced) + && YangStmtMapping.LEAF_LIST.equals(targetCtx.getPublicDefinition())) { + LOG.error("Deviation cannot replace substatement {} in target leaf-list {} because a leaf-list can " + + "have multiple default statements. At line: {}", stmtToBeReplaced.getStatementName(), + targetCtx.getStatementArgument(), stmtCtxToBeReplaced.getStatementSourceReference()); + return; + } + + for (final StmtContext targetCtxSubstatement : targetCtx.effectiveSubstatements()) { + if (stmtToBeReplaced.equals(targetCtxSubstatement.getPublicDefinition())) { + targetCtx.removeStatementFromEffectiveSubstatements(stmtToBeReplaced); + copyStatement(stmtCtxToBeReplaced, targetCtx); + return; + } + } + + for (final Mutable targetCtxSubstatement : targetCtx.mutableDeclaredSubstatements()) { + if (stmtToBeReplaced.equals(targetCtxSubstatement.getPublicDefinition())) { + targetCtxSubstatement.setIsSupportedToBuildEffective(false); + copyStatement(stmtCtxToBeReplaced, targetCtx); + return; + } + } + + // This is a special case when deviate replace of a config/mandatory/max/min-elements substatement targets + // a node which does not contain an explicitly declared config/mandatory/max/min-elements. + // However, according to RFC6020/RFC7950, these properties are always implicitly present. + if (IMPLICIT_STATEMENTS.contains(stmtToBeReplaced)) { + addStatement(stmtCtxToBeReplaced, targetCtx); + return; + } + + throw new InferenceException(stmtCtxToBeReplaced.getStatementSourceReference(), "Deviation cannot replace " + + "substatement %s in target node %s because it does not exist in target node.", + stmtToBeReplaced.getStatementName(), targetCtx.getStatementArgument()); + } + + private static void performDeviateDelete(final StatementContextBase deviateStmtCtx, + final StatementContextBase targetCtx) { + for (Mutable originalStmtCtx : deviateStmtCtx.mutableDeclaredSubstatements()) { + validateDeviationTarget(originalStmtCtx, targetCtx); + deleteStatement(originalStmtCtx, targetCtx); + } + } + + private static void deleteStatement(final StmtContext stmtCtxToBeDeleted, + final StatementContextBase targetCtx) { + final StatementDefinition stmtToBeDeleted = stmtCtxToBeDeleted.getPublicDefinition(); + final String stmtArgument = stmtCtxToBeDeleted.rawStatementArgument(); + + for (final Mutable targetCtxSubstatement : targetCtx.mutableEffectiveSubstatements()) { + if (statementsAreEqual(stmtToBeDeleted, stmtArgument, targetCtxSubstatement.getPublicDefinition(), + targetCtxSubstatement.rawStatementArgument())) { + targetCtx.removeStatementFromEffectiveSubstatements(stmtToBeDeleted, stmtArgument); + return; + } + } + + for (final Mutable targetCtxSubstatement : targetCtx.mutableDeclaredSubstatements()) { + if (statementsAreEqual(stmtToBeDeleted, stmtArgument, targetCtxSubstatement.getPublicDefinition(), + targetCtxSubstatement.rawStatementArgument())) { + targetCtxSubstatement.setIsSupportedToBuildEffective(false); + return; + } + } + + LOG.error("Deviation cannot delete substatement {} with argument '{}' in target node {} because it does " + + "not exist in the target node. At line: {}", stmtToBeDeleted.getStatementName(), stmtArgument, + targetCtx.getStatementArgument(), stmtCtxToBeDeleted.getStatementSourceReference()); + } + + private static void copyStatement(final Mutable stmtCtxToBeCopied, + final StatementContextBase targetCtx) { + // we need to make a copy of the statement context only if it is an unknown statement, otherwise + // we can reuse the original statement context + if (!StmtContextUtils.isUnknownStatement(stmtCtxToBeCopied)) { + targetCtx.addEffectiveSubstatement(stmtCtxToBeCopied); + } else { + targetCtx.addEffectiveSubstatement(targetCtx.childCopyOf(stmtCtxToBeCopied, CopyType.ORIGINAL)); + } + } + + private static boolean statementsAreEqual(final StatementDefinition firstStmtDef, final String firstStmtArg, + final StatementDefinition secondStmtDef, final String secondStmtArg) { + return firstStmtDef.equals(secondStmtDef) && Objects.equals(firstStmtArg, secondStmtArg); + } + + private static void validateDeviationTarget(final StmtContext deviateSubStmtCtx, + final StmtContext targetCtx) { + InferenceException.throwIf(!isSupportedDeviationTarget(deviateSubStmtCtx, targetCtx, + targetCtx.getRootVersion()), deviateSubStmtCtx.getStatementSourceReference(), + "%s is not a valid deviation target for substatement %s.", + targetCtx.getStatementArgument(), deviateSubStmtCtx.getPublicDefinition().getStatementName()); + } + + private static boolean isSupportedDeviationTarget(final StmtContext deviateSubstatementCtx, + final StmtContext deviateTargetCtx, final YangVersion yangVersion) { + Set supportedDeviationTargets = + YangValidationBundles.SUPPORTED_DEVIATION_TARGETS.get(deviateTargetCtx.getRootVersion(), + deviateSubstatementCtx.getPublicDefinition()); + + if (supportedDeviationTargets == null) { + supportedDeviationTargets = YangValidationBundles.SUPPORTED_DEVIATION_TARGETS.get(YangVersion.VERSION_1, + deviateSubstatementCtx.getPublicDefinition()); + } + + // if supportedDeviationTargets is null, it means that the deviate substatement is an unknown statement + return supportedDeviationTargets == null || supportedDeviationTargets.contains( + deviateTargetCtx.getPublicDefinition()); + } +} \ No newline at end of file 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/rfc7950/stmt/deviate/DeviateEffectiveStatementImpl.java similarity index 94% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DeviateEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/DeviateEffectiveStatementImpl.java index 033a7b511b..c23d1963e3 100644 --- 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/rfc7950/stmt/deviate/DeviateEffectiveStatementImpl.java @@ -5,7 +5,7 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.deviate; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; @@ -28,10 +28,10 @@ import org.opendaylight.yangtools.yang.model.api.stmt.MinElementsEffectiveStatem import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UnitsEffectiveStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class DeviateEffectiveStatementImpl extends DeclaredEffectiveStatementBase +final class DeviateEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements DeviateDefinition, DeviateEffectiveStatement { private final DeviateKind deviateType; @@ -46,7 +46,7 @@ public final class DeviateEffectiveStatementImpl extends DeclaredEffectiveStatem private final byte deviatedConfig; private final byte deviatedMandatory; - public DeviateEffectiveStatementImpl(final StmtContext ctx) { + DeviateEffectiveStatementImpl(final StmtContext ctx) { super(ctx); this.deviateType = argument(); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/DeviateStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/DeviateStatementImpl.java new file mode 100644 index 0000000000..3a0274748f --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/DeviateStatementImpl.java @@ -0,0 +1,26 @@ +/* + * 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.rfc7950.stmt.deviate; + +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.DeviateKind; +import org.opendaylight.yangtools.yang.model.api.stmt.DeviateStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class DeviateStatementImpl extends AbstractDeclaredStatement implements DeviateStatement { + DeviateStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public DeviateKind getValue() { + return argument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/DeviateStatementRFC6020Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/DeviateStatementRFC6020Support.java new file mode 100644 index 0000000000..f607f44af5 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/DeviateStatementRFC6020Support.java @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.deviate; + +public final class DeviateStatementRFC6020Support extends AbstractDeviateStatementSupport { + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/DeviateStatementRfc7950Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/DeviateStatementRFC7950Support.java similarity index 91% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/DeviateStatementRfc7950Support.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/DeviateStatementRFC7950Support.java index 8bcd3b9b39..627776fd1c 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/DeviateStatementRfc7950Support.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/DeviateStatementRFC7950Support.java @@ -5,20 +5,18 @@ * 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.rfc7950; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.deviate; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.DeviateKind; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.DeviateStatementImpl; /** * Class providing necessary support for processing YANG 1.1 deviate statement. */ @Beta -public class DeviateStatementRfc7950Support extends DeviateStatementImpl.Definition { +public final class DeviateStatementRFC7950Support extends AbstractDeviateStatementSupport { private static final SubstatementValidator DEVIATE_ADD_SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.DEVIATE) 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/rfc7950/stmt/deviation/DeviationEffectiveStatementImpl.java similarity index 94% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/DeviationEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviation/DeviationEffectiveStatementImpl.java index 226fb30113..3d80dfd297 100644 --- 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/rfc7950/stmt/deviation/DeviationEffectiveStatementImpl.java @@ -1,11 +1,11 @@ -/** +/* * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.deviation; import com.google.common.collect.ImmutableList; import java.util.ArrayList; @@ -23,10 +23,10 @@ import org.opendaylight.yangtools.yang.model.api.stmt.DeviationEffectiveStatemen import org.opendaylight.yangtools.yang.model.api.stmt.DeviationStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public class DeviationEffectiveStatementImpl +final class DeviationEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements Deviation, DeviationEffectiveStatement, Immutable { private final SchemaPath targetPath; @@ -35,7 +35,7 @@ public class DeviationEffectiveStatementImpl private final List unknownSchemaNodes; private final List deviateDefinitions; - public DeviationEffectiveStatementImpl(final StmtContext ctx) { + DeviationEffectiveStatementImpl(final StmtContext ctx) { super(ctx); this.targetPath = ctx.getStatementArgument().asSchemaPath(); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviation/DeviationStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviation/DeviationStatementImpl.java new file mode 100644 index 0000000000..a6805ca6a5 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviation/DeviationStatementImpl.java @@ -0,0 +1,50 @@ +/* + * 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.rfc7950.stmt.deviation; + +import java.util.Collection; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DeviateStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DeviationStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; +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.StmtContext; + +final class DeviationStatementImpl extends AbstractDeclaredStatement + implements DeviationStatement { + DeviationStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public SchemaNodeIdentifier getTargetNode() { + return argument(); + } + + @Nullable + @Override + public DescriptionStatement getDescription() { + return firstDeclared(DescriptionStatement.class); + } + + @Nullable + @Override + public ReferenceStatement getReference() { + return firstDeclared(ReferenceStatement.class); + } + + @Nonnull + @Override + public Collection getDeviateStatements() { + return allDeclared(DeviateStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviation/DeviationStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviation/DeviationStatementSupport.java new file mode 100644 index 0000000000..6e38bc4b7f --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviation/DeviationStatementSupport.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.deviation; + +import org.opendaylight.yangtools.yang.common.QNameModule; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +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.AbstractStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.spi.source.ModuleCtxToModuleQName; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; + +public final class DeviationStatementSupport extends AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .DEVIATION) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.DEVIATE) + .addOptional(YangStmtMapping.REFERENCE) + .build(); + + public DeviationStatementSupport() { + super(YangStmtMapping.DEVIATION); + } + + @Override + public SchemaNodeIdentifier parseArgumentValue(final StmtContext ctx, final String value) { + return Utils.nodeIdentifierFromPath(ctx, value); + } + + @Override + public DeviationStatement createDeclared(final StmtContext ctx) { + return new DeviationStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new DeviationEffectiveStatementImpl(ctx); + } + + @Override + public void onFullDefinitionDeclared(final StmtContext.Mutable> ctx) { + final QNameModule currentModule = ctx.getFromNamespace(ModuleCtxToModuleQName.class, + ctx.getRoot()); + final QNameModule targetModule = ctx.getStatementArgument().getLastComponent().getModule(); + + if (currentModule.equals(targetModule)) { + throw new InferenceException(ctx.getStatementSourceReference(), + "Deviation must not target the same module as the one it is defined in: %s", currentModule); + } + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/AbstractEnumStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/AbstractEnumStatementSupport.java new file mode 100644 index 0000000000..227fb8c80f --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/AbstractEnumStatementSupport.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.enum_; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.EnumStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +abstract class AbstractEnumStatementSupport extends + AbstractStatementSupport> { + + AbstractEnumStatementSupport() { + super(YangStmtMapping.ENUM); + } + + @Override + public final String parseArgumentValue(final StmtContext ctx, final String value) { + // FIXME: Checks for real value + return value; + } + + @Override + public final EnumStatement createDeclared(final StmtContext ctx) { + return new EnumStatementImpl(ctx); + } + + @Override + public final EffectiveStatement createEffective( + final StmtContext> ctx) { + return new EnumEffectiveStatementImpl(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/type/EnumEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EnumEffectiveStatementImpl.java similarity index 85% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/EnumEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EnumEffectiveStatementImpl.java index de474b35e9..d8264925ff 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/EnumEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EnumEffectiveStatementImpl.java @@ -1,11 +1,11 @@ -/** +/* * 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.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.enum_; import com.google.common.collect.ImmutableList; import java.util.ArrayList; @@ -16,16 +16,17 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.EnumEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.EnumStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ValueEffectiveStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.AbstractEffectiveDocumentedNode; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveDocumentedNode; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public class EnumEffectiveStatementImpl extends AbstractEffectiveDocumentedNode +// FIXME: hide this class +public final class EnumEffectiveStatementImpl extends AbstractEffectiveDocumentedNode implements EnumEffectiveStatement { private final List unknownSchemaNodes; private final String name; private final Integer declaredValue; - public EnumEffectiveStatementImpl(final StmtContext ctx) { + EnumEffectiveStatementImpl(final StmtContext ctx) { super(ctx); name = ctx.rawStatementArgument(); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EnumStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EnumStatementImpl.java new file mode 100644 index 0000000000..89e9b2ed1a --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EnumStatementImpl.java @@ -0,0 +1,57 @@ +/* + * 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.rfc7950.stmt.enum_; + +import java.util.Collection; +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.EnumStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ValueStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class EnumStatementImpl extends AbstractDeclaredStatement implements EnumStatement { + EnumStatementImpl(final StmtContext context) { + super(context); + } + + @Override + public StatusStatement getStatus() { + return firstDeclared(StatusStatement.class); + } + + @Override + public DescriptionStatement getDescription() { + return firstDeclared(DescriptionStatement.class); + } + + @Nonnull + @Override + public Collection getIfFeatures() { + return allDeclared(IfFeatureStatement.class); + } + + @Override + public ReferenceStatement getReference() { + return firstDeclared(ReferenceStatement.class); + } + + @Nonnull + @Override + public String getName() { + return argument(); + } + + @Override + public ValueStatement getValue() { + return firstDeclared(ValueStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EnumStatementRFC6020Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EnumStatementRFC6020Support.java new file mode 100644 index 0000000000..5cad13d1c7 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EnumStatementRFC6020Support.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.enum_; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; + +public final class EnumStatementRFC6020Support extends AbstractEnumStatementSupport { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.ENUM) + .addOptional(YangStmtMapping.DESCRIPTION) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addOptional(YangStmtMapping.VALUE) + .build(); + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/EnumStatementRfc7950Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EnumStatementRFC7950Support.java similarity index 77% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/EnumStatementRfc7950Support.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EnumStatementRFC7950Support.java index cf7ad08bcf..e5bb178c85 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/EnumStatementRfc7950Support.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/enum_/EnumStatementRFC7950Support.java @@ -5,20 +5,19 @@ * 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.rfc7950; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.enum_; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.EnumStatementImpl; /** * Class providing necessary support for processing YANG 1.1 Enum statement. */ @Beta -public final class EnumStatementRfc7950Support extends EnumStatementImpl.Definition { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .ENUM) +public final class EnumStatementRFC7950Support extends AbstractEnumStatementSupport { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.ENUM) .addOptional(YangStmtMapping.DESCRIPTION) .addAny(YangStmtMapping.IF_FEATURE) .addOptional(YangStmtMapping.REFERENCE) 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/rfc7950/stmt/error_app_tag/ErrorAppTagEffectiveStatementImpl.java similarity index 58% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ErrorAppTagEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/error_app_tag/ErrorAppTagEffectiveStatementImpl.java index f33904e451..208eb32799 100644 --- 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/rfc7950/stmt/error_app_tag/ErrorAppTagEffectiveStatementImpl.java @@ -5,16 +5,16 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.error_app_tag; import org.opendaylight.yangtools.yang.model.api.stmt.ErrorAppTagEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ErrorAppTagStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class ErrorAppTagEffectiveStatementImpl - extends DeclaredEffectiveStatementBase implements ErrorAppTagEffectiveStatement { - public ErrorAppTagEffectiveStatementImpl(final StmtContext ctx) { +final class ErrorAppTagEffectiveStatementImpl extends DeclaredEffectiveStatementBase + implements ErrorAppTagEffectiveStatement { + ErrorAppTagEffectiveStatementImpl(final 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/rfc7950/stmt/error_app_tag/ErrorAppTagStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/error_app_tag/ErrorAppTagStatementImpl.java new file mode 100644 index 0000000000..082dc7e47c --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/error_app_tag/ErrorAppTagStatementImpl.java @@ -0,0 +1,25 @@ +/* + * 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.rfc7950.stmt.error_app_tag; + +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.ErrorAppTagStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class ErrorAppTagStatementImpl extends AbstractDeclaredStatement implements ErrorAppTagStatement { + ErrorAppTagStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public String getValue() { + return argument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/error_app_tag/ErrorAppTagStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/error_app_tag/ErrorAppTagStatementSupport.java new file mode 100644 index 0000000000..22f92d6adb --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/error_app_tag/ErrorAppTagStatementSupport.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.error_app_tag; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ErrorAppTagStatement; +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.meta.SubstatementValidator; + +public class ErrorAppTagStatementSupport extends + AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.ERROR_APP_TAG).build(); + + public ErrorAppTagStatementSupport() { + super(YangStmtMapping.ERROR_APP_TAG); + } + + @Override + public String parseArgumentValue(final StmtContext ctx, final String value) { + return value; + } + + @Override + public ErrorAppTagStatement createDeclared( + final StmtContext ctx) { + return new ErrorAppTagStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new ErrorAppTagEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ 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/rfc7950/stmt/error_message/ErrorMessageEffectiveStatementImpl.java similarity index 63% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ErrorMessageEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/error_message/ErrorMessageEffectiveStatementImpl.java index 194147134d..f68a615c72 100644 --- 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/rfc7950/stmt/error_message/ErrorMessageEffectiveStatementImpl.java @@ -5,17 +5,16 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.error_message; import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class ErrorMessageEffectiveStatementImpl - extends DeclaredEffectiveStatementBase +final class ErrorMessageEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements ErrorMessageEffectiveStatement { - public ErrorMessageEffectiveStatementImpl(final StmtContext ctx) { + ErrorMessageEffectiveStatementImpl(final 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/rfc7950/stmt/error_message/ErrorMessageStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/error_message/ErrorMessageStatementImpl.java new file mode 100644 index 0000000000..c9c0bccac6 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/error_message/ErrorMessageStatementImpl.java @@ -0,0 +1,25 @@ +/* + * 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.rfc7950.stmt.error_message; + +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class ErrorMessageStatementImpl extends AbstractDeclaredStatement implements ErrorMessageStatement { + ErrorMessageStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public String getValue() { + return argument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/error_message/ErrorMessageStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/error_message/ErrorMessageStatementSupport.java new file mode 100644 index 0000000000..d8deb56795 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/error_message/ErrorMessageStatementSupport.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.error_message; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageStatement; +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.meta.SubstatementValidator; + +public final class ErrorMessageStatementSupport extends + AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .ERROR_MESSAGE) + .build(); + + public ErrorMessageStatementSupport() { + super(YangStmtMapping.ERROR_MESSAGE); + } + + @Override + public String parseArgumentValue(final StmtContext ctx, final String value) { + return value; + } + + @Override + public ErrorMessageStatement createDeclared(final StmtContext ctx) { + return new ErrorMessageStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new ErrorMessageEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ 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/rfc7950/stmt/extension/ExtensionEffectiveStatementImpl.java similarity index 94% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ExtensionEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionEffectiveStatementImpl.java index 3cea336612..0bceae20fc 100644 --- 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/rfc7950/stmt/extension/ExtensionEffectiveStatementImpl.java @@ -1,11 +1,11 @@ -/** +/* * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.extension; import com.google.common.collect.ImmutableList; import java.util.ArrayDeque; @@ -24,10 +24,12 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.YinElementEffectiveStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.AbstractEffectiveDocumentedNode; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveDocumentedNode; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.argument.ArgumentEffectiveStatementImpl; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public class ExtensionEffectiveStatementImpl extends AbstractEffectiveDocumentedNode +// FIXME: hide this class +public final class ExtensionEffectiveStatementImpl extends AbstractEffectiveDocumentedNode implements ExtensionDefinition, ExtensionEffectiveStatement { private static final class RecursionDetector extends ThreadLocal> { boolean check(final ExtensionEffectiveStatementImpl current) { @@ -108,7 +110,7 @@ public class ExtensionEffectiveStatementImpl extends AbstractEffectiveDocumented * @param ctx Statement context * @return A potentially under-initialized instance */ - public static EffectiveStatement create( + static EffectiveStatement create( final StmtContext> ctx) { // Look at the thread-local leak in case we are invoked recursively final ExtensionEffectiveStatementImpl existing = RecursiveObjectLeaker.lookup(ctx, diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionStatementImpl.java new file mode 100644 index 0000000000..69534ea403 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionStatementImpl.java @@ -0,0 +1,43 @@ +/* + * 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.rfc7950.stmt.extension; + +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class ExtensionStatementImpl extends AbstractDeclaredStatement implements ExtensionStatement { + ExtensionStatementImpl(final StmtContext context) { + super(context); + } + + @Override + public StatusStatement getStatus() { + return firstDeclared(StatusStatement.class); + } + + @Override + public DescriptionStatement getDescription() { + return firstDeclared(DescriptionStatement.class); + } + + @Override + public ReferenceStatement getReference() { + return firstDeclared(ReferenceStatement.class); + } + + @Override + public ArgumentStatement getArgument() { + return firstDeclared(ArgumentStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionStatementSupport.java new file mode 100644 index 0000000000..1109ad21c3 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionStatementSupport.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.extension; + +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement; +import org.opendaylight.yangtools.yang.parser.spi.ExtensionNamespace; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.StatementDefinitionNamespace; +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.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.SupportedExtensionsMapping; + +public final class ExtensionStatementSupport + extends AbstractQNameStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .EXTENSION) + .addOptional(YangStmtMapping.ARGUMENT) + .addOptional(YangStmtMapping.DESCRIPTION) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .build(); + + public ExtensionStatementSupport() { + super(YangStmtMapping.EXTENSION); + } + + @Override + public QName parseArgumentValue(final StmtContext ctx, final String value) { + return StmtContextUtils.qnameFromArgument(ctx, value); + } + + @Override + public ExtensionStatement createDeclared(final StmtContext ctx) { + return new ExtensionStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return ExtensionEffectiveStatementImpl.create(ctx); + } + + @Override + public void onStatementDefinitionDeclared( + final Mutable> stmt) { + super.onStatementDefinitionDeclared(stmt); + + QName stmtName = stmt.getStatementArgument(); + if (SupportedExtensionsMapping.OPENCONFIG_VERSION.getStatementName().isEqualWithoutRevision(stmtName)) { + stmtName = stmtName.withoutRevision(); + } + + stmt.addContext(ExtensionNamespace.class, stmtName, stmt); + + final StmtContext argument = StmtContextUtils.findFirstDeclaredSubstatement(stmt, + ArgumentStatement.class); + final StmtContext yinElement = StmtContextUtils.findFirstDeclaredSubstatement(stmt, + YinElementStatement.class); + + stmt.addToNs(StatementDefinitionNamespace.class, stmt.getStatementArgument(), + new ModelDefinedStatementSupport(new ModelDefinedStatementDefinition(stmt.getStatementArgument(), + argument != null ? argument.getStatementArgument() : null, + yinElement != null ? yinElement.getStatementArgument() : false))); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ModelDefinedStatementDefinition.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ModelDefinedStatementDefinition.java similarity index 91% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ModelDefinedStatementDefinition.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ModelDefinedStatementDefinition.java index b943c6b18a..aa55c67ab2 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ModelDefinedStatementDefinition.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ModelDefinedStatementDefinition.java @@ -5,12 +5,10 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.extension; import static java.util.Objects.requireNonNull; -import com.google.common.annotations.Beta; import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.opendaylight.yangtools.yang.common.QName; @@ -24,8 +22,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedStatement; * Public definition for statements declared by extensions. This class is instantiated for every extension that is seen * to be declared in a model. */ -@Beta -public final class ModelDefinedStatementDefinition implements StatementDefinition { +final class ModelDefinedStatementDefinition implements StatementDefinition { private final QName statementName; private final QName argumentName; private final boolean yinElement; diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ModelDefinedStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ModelDefinedStatementSupport.java similarity index 85% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ModelDefinedStatementSupport.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ModelDefinedStatementSupport.java index 5f34bdd7ef..3c8a75a45f 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ModelDefinedStatementSupport.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ModelDefinedStatementSupport.java @@ -5,7 +5,7 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.extension; import java.util.Optional; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -18,17 +18,17 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; /** * StatementSupport for statements defined via YANG extensions. This is implemented by piggy-backing - * to a {@link UnrecognizedStatementImpl.Definition}. + * to a {@link UnrecognizedStatementSupport}. * * @author Robert Varga */ -public final class ModelDefinedStatementSupport extends AbstractStatementSupport> { - private final UnrecognizedStatementImpl.Definition definition; + private final UnrecognizedStatementSupport definition; ModelDefinedStatementSupport(final ModelDefinedStatementDefinition publicDefinition) { super(publicDefinition); - this.definition = new UnrecognizedStatementImpl.Definition(publicDefinition); + this.definition = new UnrecognizedStatementSupport(publicDefinition); } @Override diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UnrecognizedEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedEffectiveStatementImpl.java similarity index 88% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UnrecognizedEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedEffectiveStatementImpl.java index d1299a068a..69eafb5d6c 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UnrecognizedEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedEffectiveStatementImpl.java @@ -5,8 +5,7 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.extension; import java.util.Objects; import javax.annotation.Nonnull; @@ -15,18 +14,17 @@ import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.UnknownEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; -public final class UnrecognizedEffectiveStatementImpl - extends UnknownEffectiveStatementBase +final class UnrecognizedEffectiveStatementImpl extends UnknownEffectiveStatementBase implements UnrecognizedEffectiveStatement { private final QName maybeQNameArgument; private final SchemaPath path; - public UnrecognizedEffectiveStatementImpl(final StmtContext ctx) { + UnrecognizedEffectiveStatementImpl(final StmtContext ctx) { super(ctx); // FIXME: Remove following section after fixing 4380 diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedStatementImpl.java new file mode 100644 index 0000000000..fc97122650 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedStatementImpl.java @@ -0,0 +1,25 @@ +/* + * 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.rfc7950.stmt.extension; + +import javax.annotation.Nullable; +import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class UnrecognizedStatementImpl extends AbstractDeclaredStatement implements UnrecognizedStatement { + UnrecognizedStatementImpl(final StmtContext context) { + super(context); + } + + @Nullable + @Override + public String getArgument() { + return argument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedStatementSupport.java new file mode 100644 index 0000000000..74e7b3198a --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedStatementSupport.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.extension; + +import java.util.Optional; +import org.opendaylight.yangtools.yang.common.QName; +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.UnrecognizedStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; + +final class UnrecognizedStatementSupport extends AbstractStatementSupport> { + UnrecognizedStatementSupport(final StatementDefinition publicDefinition) { + super(publicDefinition); + } + + @Override + public String parseArgumentValue(final StmtContext ctx, final String value) { + return value; + } + + @Override + public UnrecognizedStatement createDeclared(final StmtContext ctx) { + return new UnrecognizedStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new UnrecognizedEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return null; + } + + @Override + public Optional> getUnknownStatementDefinitionOf( + final StatementDefinition yangStmtDef) { + final QName baseQName = getStatementName(); + final QName argumentName = yangStmtDef.getArgumentName(); + return Optional.of(new ModelDefinedStatementSupport(new ModelDefinedStatementDefinition( + QName.create(baseQName, yangStmtDef.getStatementName().getLocalName()), + argumentName != null ? QName.create(baseQName, argumentName.getLocalName()) : null, + yangStmtDef.isArgumentYinElement()))); + } +} \ 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/rfc7950/stmt/feature/FeatureEffectiveStatementImpl.java similarity index 80% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/FeatureEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/feature/FeatureEffectiveStatementImpl.java index a55f0c7ea0..2d39b45db1 100644 --- 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/rfc7950/stmt/feature/FeatureEffectiveStatementImpl.java @@ -5,20 +5,20 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.feature; import java.util.Objects; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.FeatureDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.FeatureEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.FeatureStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.AbstractEffectiveSchemaNode; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveSchemaNode; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class FeatureEffectiveStatementImpl extends AbstractEffectiveSchemaNode implements - FeatureDefinition, FeatureEffectiveStatement { +final class FeatureEffectiveStatementImpl extends AbstractEffectiveSchemaNode + implements FeatureDefinition, FeatureEffectiveStatement { - public FeatureEffectiveStatementImpl(final StmtContext ctx) { + FeatureEffectiveStatementImpl(final StmtContext ctx) { super(ctx); } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/feature/FeatureStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/feature/FeatureStatementImpl.java new file mode 100644 index 0000000000..7d039ac903 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/feature/FeatureStatementImpl.java @@ -0,0 +1,53 @@ +/* + * 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.rfc7950.stmt.feature; + +import java.util.Collection; +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.FeatureStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class FeatureStatementImpl extends AbstractDeclaredStatement implements FeatureStatement { + FeatureStatementImpl(final StmtContext context) { + super(context); + } + + @Override + public StatusStatement getStatus() { + return firstDeclared(StatusStatement.class); + } + + @Override + public DescriptionStatement getDescription() { + return firstDeclared(DescriptionStatement.class); + } + + @Override + public ReferenceStatement getReference() { + return firstDeclared(ReferenceStatement.class); + } + + @Nonnull + @Override + public Collection getIfFeatures() { + return allDeclared(IfFeatureStatement.class); + } + + @Nonnull + @Override + public QName getName() { + return argument(); + } + +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/feature/FeatureStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/feature/FeatureStatementSupport.java new file mode 100644 index 0000000000..75d4b65d18 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/feature/FeatureStatementSupport.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.feature; + +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.FeatureStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; + +public final class FeatureStatementSupport + extends AbstractQNameStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.FEATURE) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.IF_FEATURE) + .addOptional(YangStmtMapping.STATUS) + .addOptional(YangStmtMapping.REFERENCE) + .build(); + + public FeatureStatementSupport() { + super(YangStmtMapping.FEATURE); + } + + @Override + public QName parseArgumentValue(final StmtContext ctx, final String value) { + return StmtContextUtils.qnameFromArgument(ctx, value); + } + + @Override + public FeatureStatement createDeclared( + final StmtContext ctx) { + return new FeatureStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new FeatureEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file 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/rfc7950/stmt/fraction_digits/FractionDigitsEffectiveStatementImpl.java similarity index 70% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/FractionDigitsEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/fraction_digits/FractionDigitsEffectiveStatementImpl.java index 17706f7d9a..118f31eb1a 100644 --- 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/rfc7950/stmt/fraction_digits/FractionDigitsEffectiveStatementImpl.java @@ -5,17 +5,17 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.fraction_digits; import org.opendaylight.yangtools.yang.model.api.stmt.FractionDigitsEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.FractionDigitsStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class FractionDigitsEffectiveStatementImpl +final class FractionDigitsEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements FractionDigitsEffectiveStatement { - public FractionDigitsEffectiveStatementImpl(final StmtContext ctx) { + FractionDigitsEffectiveStatementImpl(final 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/rfc7950/stmt/fraction_digits/FractionDigitsStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/fraction_digits/FractionDigitsStatementImpl.java new file mode 100644 index 0000000000..d1728b4d2e --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/fraction_digits/FractionDigitsStatementImpl.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.rfc7950.stmt.fraction_digits; + +import org.opendaylight.yangtools.yang.model.api.stmt.FractionDigitsStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class FractionDigitsStatementImpl extends AbstractDeclaredStatement implements FractionDigitsStatement { + FractionDigitsStatementImpl(final StmtContext context) { + super(context); + } + + @Override + public int getValue() { + return argument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/fraction_digits/FractionDigitsStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/fraction_digits/FractionDigitsStatementSupport.java new file mode 100644 index 0000000000..b35781a04e --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/fraction_digits/FractionDigitsStatementSupport.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.fraction_digits; + +import com.google.common.collect.Range; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.FractionDigitsStatement; +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.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; + +public final class FractionDigitsStatementSupport extends AbstractStatementSupport> { + private static final Range FRAC_DIGITS_ALLOWED = Range.closed(1, 18); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.FRACTION_DIGITS) + .build(); + + public FractionDigitsStatementSupport() { + super(YangStmtMapping.FRACTION_DIGITS); + } + + @Override + public Integer parseArgumentValue(final StmtContext ctx, final String value) { + final Integer fractionDigits; + try { + fractionDigits = Integer.valueOf(value); + } catch (NumberFormatException e) { + throw new SourceException(ctx.getStatementSourceReference(), e, + "%s is not valid fraction-digits integer argument", value); + } + + SourceException.throwIf(!FRAC_DIGITS_ALLOWED.contains(fractionDigits), ctx.getStatementSourceReference(), + "fraction-digits argument should be integer within %s", FRAC_DIGITS_ALLOWED); + return fractionDigits; + } + + @Override + public FractionDigitsStatement createDeclared(final StmtContext ctx) { + return new FractionDigitsStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new FractionDigitsEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/AbstractGroupingStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/AbstractGroupingStatementSupport.java new file mode 100644 index 0000000000..b6e838e92a --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/AbstractGroupingStatementSupport.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.grouping; + +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement; +import org.opendaylight.yangtools.yang.parser.spi.GroupingNamespace; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; +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.meta.StmtContextUtils; + +abstract class AbstractGroupingStatementSupport + extends AbstractQNameStatementSupport> { + + AbstractGroupingStatementSupport() { + super(YangStmtMapping.GROUPING); + } + + @Override + public final QName parseArgumentValue(final StmtContext ctx, final String value) { + return StmtContextUtils.qnameFromArgument(ctx, value); + } + + @Override + public final GroupingStatement createDeclared(final StmtContext ctx) { + return new GroupingStatementImpl(ctx); + } + + @Override + public final EffectiveStatement createEffective( + final StmtContext> ctx) { + return new GroupingEffectiveStatementImpl(ctx); + } + + @Override + public final void onFullDefinitionDeclared(final Mutable> stmt) { + super.onFullDefinitionDeclared(stmt); + + if (stmt != null && stmt.getParentContext() != null) { + stmt.getParentContext().addContext(GroupingNamespace.class, stmt.getStatementArgument(), stmt); + } + } +} \ 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/rfc7950/stmt/grouping/GroupingEffectiveStatementImpl.java similarity index 94% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/GroupingEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingEffectiveStatementImpl.java index c8c8b44164..92c378d056 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/rfc7950/stmt/grouping/GroupingEffectiveStatementImpl.java @@ -6,7 +6,7 @@ * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.grouping; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; @@ -23,10 +23,11 @@ import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.GroupingEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveDocumentedDataNodeContainer; import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public class GroupingEffectiveStatementImpl +final class GroupingEffectiveStatementImpl extends AbstractEffectiveDocumentedDataNodeContainer implements GroupingDefinition, GroupingEffectiveStatement { private final QName qname; @@ -36,7 +37,7 @@ public class GroupingEffectiveStatementImpl private final Set notifications; private final List unknownNodes; - public GroupingEffectiveStatementImpl( + GroupingEffectiveStatementImpl( final StmtContext> ctx) { super(ctx); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingStatementImpl.java new file mode 100644 index 0000000000..e05f026b21 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingStatementImpl.java @@ -0,0 +1,79 @@ +/* + * 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.rfc7950.stmt.grouping; + +import java.util.Collection; +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.stmt.ActionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DataDefinitionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.NotificationStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class GroupingStatementImpl extends AbstractDeclaredStatement + implements GroupingStatement { + GroupingStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public QName getName() { + return argument(); + } + + @Override + public StatusStatement getStatus() { + return firstDeclared(StatusStatement.class); + } + + @Override + public DescriptionStatement getDescription() { + return firstDeclared(DescriptionStatement.class); + } + + @Override + public ReferenceStatement getReference() { + return firstDeclared(ReferenceStatement.class); + } + + @Nonnull + @Override + public Collection getTypedefs() { + return allDeclared(TypedefStatement.class); + } + + @Nonnull + @Override + public Collection getGroupings() { + return allDeclared(GroupingStatement.class); + } + + @Nonnull + @Override + public Collection getDataDefinitions() { + return allDeclared(DataDefinitionStatement.class); + } + + @Nonnull + @Override + public Collection getActions() { + return allDeclared(ActionStatement.class); + } + + @Override + public final Collection getNotifications() { + return allDeclared(NotificationStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingStatementRFC6020Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingStatementRFC6020Support.java new file mode 100644 index 0000000000..4d16b206d3 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingStatementRFC6020Support.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.grouping; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; + +public final class GroupingStatementRFC6020Support extends AbstractGroupingStatementSupport { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .GROUPING) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.CHOICE) + .addAny(YangStmtMapping.CONTAINER) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addAny(YangStmtMapping.TYPEDEF) + .addAny(YangStmtMapping.USES) + .build(); + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/GroupingStatementRfc7950Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingStatementRFC7950Support.java similarity index 86% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/GroupingStatementRfc7950Support.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingStatementRFC7950Support.java index 4fa9342332..65c46bb527 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/GroupingStatementRfc7950Support.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingStatementRFC7950Support.java @@ -5,18 +5,17 @@ * 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.rfc7950; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.grouping; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.GroupingStatementImpl; /** * Class providing necessary support for processing YANG 1.1 Grouping statement. */ @Beta -public final class GroupingStatementRfc7950Support extends GroupingStatementImpl.Definition { +public final class GroupingStatementRFC7950Support extends AbstractGroupingStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping .GROUPING) .addAny(YangStmtMapping.ACTION) diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/AbstractIdentityStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/AbstractIdentityStatementSupport.java new file mode 100644 index 0000000000..488eae7587 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/AbstractIdentityStatementSupport.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.identity; + +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +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.IdentityNamespace; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; + +abstract class AbstractIdentityStatementSupport + extends AbstractQNameStatementSupport> { + + AbstractIdentityStatementSupport() { + super(YangStmtMapping.IDENTITY); + } + + @Override + public final QName parseArgumentValue(final StmtContext ctx, final String value) { + return StmtContextUtils.qnameFromArgument(ctx, value); + } + + @Override + public final IdentityStatement createDeclared(final StmtContext ctx) { + return new IdentityStatementImpl(ctx); + } + + @Override + public final EffectiveStatement createEffective( + final StmtContext> ctx) { + return new IdentityEffectiveStatementImpl(ctx); + } + + @Override + public final void onStatementDefinitionDeclared(final StmtContext.Mutable> stmt) { + stmt.addToNs(IdentityNamespace.class, stmt.getStatementArgument(), stmt); + } +} \ No newline at end of file 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/rfc7950/stmt/identity/IdentityEffectiveStatementImpl.java similarity index 93% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/IdentityEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/IdentityEffectiveStatementImpl.java index 4ff6b512b3..2a00f65460 100644 --- 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/rfc7950/stmt/identity/IdentityEffectiveStatementImpl.java @@ -5,7 +5,7 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.identity; import com.google.common.base.MoreObjects; import com.google.common.base.Preconditions; @@ -21,18 +21,18 @@ import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.IdentityEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.IdentityStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.AbstractEffectiveSchemaNode; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveSchemaNode; import org.opendaylight.yangtools.yang.parser.spi.meta.DerivedIdentitiesNamespace; import org.opendaylight.yangtools.yang.parser.spi.meta.MutableStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class IdentityEffectiveStatementImpl extends AbstractEffectiveSchemaNode +final class IdentityEffectiveStatementImpl extends AbstractEffectiveSchemaNode implements IdentityEffectiveStatement, IdentitySchemaNode, MutableStatement { private final Set derivedIdentities; private Set baseIdentities; private boolean sealed; - public IdentityEffectiveStatementImpl( + IdentityEffectiveStatementImpl( final StmtContext> ctx) { super(ctx); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/IdentityStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/IdentityStatementImpl.java new file mode 100644 index 0000000000..c1083692ed --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/IdentityStatementImpl.java @@ -0,0 +1,59 @@ +/* + * 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.rfc7950.stmt.identity; + +import java.util.Collection; +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.stmt.BaseStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.IdentityStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class IdentityStatementImpl extends AbstractDeclaredStatement implements IdentityStatement { + IdentityStatementImpl(final StmtContext context) { + super(context); + } + + @Override + public StatusStatement getStatus() { + return firstDeclared(StatusStatement.class); + } + + @Override + public DescriptionStatement getDescription() { + return firstDeclared(DescriptionStatement.class); + } + + @Nonnull + @Override + public Collection getIfFeatures() { + return allDeclared(IfFeatureStatement.class); + } + + @Override + public ReferenceStatement getReference() { + return firstDeclared(ReferenceStatement.class); + } + + @Nonnull + @Override + public Collection getBases() { + return allDeclared(BaseStatement.class); + } + + @Nonnull + @Override + public QName getName() { + return argument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/IdentityStatementRFC6020Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/IdentityStatementRFC6020Support.java new file mode 100644 index 0000000000..498444e152 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/IdentityStatementRFC6020Support.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.identity; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; + +public final class IdentityStatementRFC6020Support extends AbstractIdentityStatementSupport { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.IDENTITY) + .addOptional(YangStmtMapping.BASE) + .addOptional(YangStmtMapping.DESCRIPTION) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .build(); + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/IdentityStatementRfc7950Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/IdentityStatementRFC7950Support.java similarity index 76% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/IdentityStatementRfc7950Support.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/IdentityStatementRFC7950Support.java index eca346f3b0..346c9372f0 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/IdentityStatementRfc7950Support.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/IdentityStatementRFC7950Support.java @@ -5,20 +5,19 @@ * 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.rfc7950; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.identity; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.IdentityStatementImpl; /** * Class providing necessary support for processing YANG 1.1 Identity statement. */ @Beta -public final class IdentityStatementRfc7950Support extends IdentityStatementImpl.Definition { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .IDENTITY) +public final class IdentityStatementRFC7950Support extends AbstractIdentityStatementSupport { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.IDENTITY) .addAny(YangStmtMapping.BASE) .addOptional(YangStmtMapping.DESCRIPTION) .addAny(YangStmtMapping.IF_FEATURE) 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/rfc7950/stmt/if_feature/IfFeatureEffectiveStatementImpl.java similarity index 73% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/IfFeatureEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/IfFeatureEffectiveStatementImpl.java index 8dfde0a66d..ada653466b 100644 --- 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/rfc7950/stmt/if_feature/IfFeatureEffectiveStatementImpl.java @@ -5,20 +5,20 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.if_feature; import java.util.Set; import java.util.function.Predicate; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class IfFeatureEffectiveStatementImpl +final class IfFeatureEffectiveStatementImpl extends DeclaredEffectiveStatementBase>, IfFeatureStatement> implements IfFeatureEffectiveStatement { - public IfFeatureEffectiveStatementImpl(final StmtContext>, IfFeatureStatement, ?> ctx) { + IfFeatureEffectiveStatementImpl(final StmtContext>, IfFeatureStatement, ?> ctx) { super(ctx); } } \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/IfFeaturePredicateVisitor.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/IfFeaturePredicateVisitor.java new file mode 100644 index 0000000000..05d8ed7c61 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/IfFeaturePredicateVisitor.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.if_feature; + +import static java.util.Objects.requireNonNull; + +import java.util.Set; +import java.util.function.Predicate; +import org.antlr.v4.runtime.CharStreams; +import org.antlr.v4.runtime.CommonTokenStream; +import org.opendaylight.yangtools.antlrv4.code.gen.IfFeatureExpressionLexer; +import org.opendaylight.yangtools.antlrv4.code.gen.IfFeatureExpressionParser; +import org.opendaylight.yangtools.antlrv4.code.gen.IfFeatureExpressionParser.Identifier_ref_argContext; +import org.opendaylight.yangtools.antlrv4.code.gen.IfFeatureExpressionParser.If_feature_exprContext; +import org.opendaylight.yangtools.antlrv4.code.gen.IfFeatureExpressionParser.If_feature_factorContext; +import org.opendaylight.yangtools.antlrv4.code.gen.IfFeatureExpressionParser.If_feature_termContext; +import org.opendaylight.yangtools.antlrv4.code.gen.IfFeatureExpressionParserBaseVisitor; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; + +final class IfFeaturePredicateVisitor extends IfFeatureExpressionParserBaseVisitor>> { + private final StmtContext stmtCtx; + + private IfFeaturePredicateVisitor(final StmtContext ctx) { + this.stmtCtx = requireNonNull(ctx); + } + + static Predicate> parseIfFeatureExpression(final StmtContext ctx, final String value) { + final IfFeatureExpressionLexer lexer = new IfFeatureExpressionLexer(CharStreams.fromString(value)); + final CommonTokenStream tokens = new CommonTokenStream(lexer); + final IfFeatureExpressionParser parser = new IfFeatureExpressionParser(tokens); + + return new IfFeaturePredicateVisitor(ctx).visit(parser.if_feature_expr()); + } + + @Override + public Predicate> visitIf_feature_expr(final If_feature_exprContext ctx) { + if (ctx.if_feature_expr() == null) { + return visitIf_feature_term(ctx.if_feature_term()); + } + + return visitIf_feature_term(ctx.if_feature_term()).or(visitIf_feature_expr(ctx.if_feature_expr())); + } + + @Override + public Predicate> visitIf_feature_term(final If_feature_termContext ctx) { + if (ctx.if_feature_term() == null) { + return visitIf_feature_factor(ctx.if_feature_factor()); + } + + return visitIf_feature_factor(ctx.if_feature_factor()).and(visitIf_feature_term(ctx.if_feature_term())); + } + + @Override + public Predicate> visitIf_feature_factor(final If_feature_factorContext ctx) { + if (ctx.if_feature_expr() != null) { + return visitIf_feature_expr(ctx.if_feature_expr()); + } else if (ctx.if_feature_factor() != null) { + return visitIf_feature_factor(ctx.if_feature_factor()).negate(); + } else if (ctx.identifier_ref_arg() != null) { + return visitIdentifier_ref_arg(ctx.identifier_ref_arg()); + } + + throw new SourceException("Unexpected grammar context during parsing of IfFeature expression. " + + "Most probably IfFeature grammar has been changed.", stmtCtx.getStatementSourceReference()); + } + + @Override + public Predicate> visitIdentifier_ref_arg(final Identifier_ref_argContext ctx) { + final QName featureQName = StmtContextUtils.qnameFromArgument(stmtCtx, ctx.getText()); + return setQNames -> setQNames.contains(featureQName); + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/IfFeatureStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/IfFeatureStatementImpl.java new file mode 100644 index 0000000000..64abce215a --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/IfFeatureStatementImpl.java @@ -0,0 +1,27 @@ +/* + * 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.rfc7950.stmt.if_feature; + +import java.util.Set; +import java.util.function.Predicate; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class IfFeatureStatementImpl extends AbstractDeclaredStatement>> + implements IfFeatureStatement { + IfFeatureStatementImpl(final StmtContext>, IfFeatureStatement, ?> context) { + super(context); + } + + @Override + public Predicate> getIfFeaturePredicate() { + return argument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/IfFeatureStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/IfFeatureStatementSupport.java new file mode 100644 index 0000000000..76f43b7298 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/IfFeatureStatementSupport.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.if_feature; + +import java.util.Set; +import java.util.function.Predicate; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.YangVersion; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; +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.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; + +public final class IfFeatureStatementSupport extends AbstractStatementSupport>, IfFeatureStatement, + EffectiveStatement>, IfFeatureStatement>> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.IF_FEATURE) + .build(); + + public IfFeatureStatementSupport() { + super(YangStmtMapping.IF_FEATURE); + } + + @Override + public Predicate> parseArgumentValue(final StmtContext ctx, final String value) { + if (YangVersion.VERSION_1_1.equals(ctx.getRootVersion())) { + return IfFeaturePredicateVisitor.parseIfFeatureExpression(ctx, value); + } + + final QName qname = StmtContextUtils.qnameFromArgument(ctx, value); + return setQNames -> setQNames.contains(qname); + } + + @Override + public IfFeatureStatement createDeclared(final StmtContext>, IfFeatureStatement, ?> ctx) { + return new IfFeatureStatementImpl(ctx); + } + + @Override + public EffectiveStatement>, IfFeatureStatement> createEffective( + final StmtContext>, IfFeatureStatement, + EffectiveStatement>, IfFeatureStatement>> ctx) { + return new IfFeatureEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/AbstractImportStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/AbstractImportStatementSupport.java new file mode 100644 index 0000000000..c96e728070 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/AbstractImportStatementSupport.java @@ -0,0 +1,104 @@ +/* + * 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.rfc7950.stmt.import_; + +import static org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase.SOURCE_PRE_LINKAGE; +import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.firstAttributeOf; + +import com.google.common.base.Verify; +import java.net.URI; +import java.util.Collection; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ImportStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; +import org.opendaylight.yangtools.yang.parser.spi.PreLinkageModuleNamespace; +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.ModelActionBuilder.InferenceAction; +import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.InferenceContext; +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.meta.StmtContext.Mutable; +import org.opendaylight.yangtools.yang.parser.spi.source.ImpPrefixToNamespace; +import org.opendaylight.yangtools.yang.parser.spi.source.ModuleNameToNamespace; +import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; + +abstract class AbstractImportStatementSupport extends + AbstractStatementSupport> { + AbstractImportStatementSupport() { + super(YangStmtMapping.IMPORT); + } + + @Override + public final String parseArgumentValue(final StmtContext ctx, final String value) { + return value; + } + + @Override + public final ImportStatement createDeclared(final StmtContext ctx) { + return new ImportStatementImpl(ctx); + } + + @Override + public final EffectiveStatement createEffective( + final StmtContext> ctx) { + return new ImportEffectiveStatementImpl(ctx); + } + + @Override + public final void onPreLinkageDeclared(final Mutable> stmt) { + /* + * Add ModuleIdentifier of a module which is required by this module. + * Based on this information, required modules are searched from library + * sources. + */ + stmt.addRequiredSource(RevisionImport.getImportedSourceIdentifier(stmt)); + + final String moduleName = stmt.getStatementArgument(); + final ModelActionBuilder importAction = stmt.newInferenceAction(SOURCE_PRE_LINKAGE); + final Prerequisite> imported = importAction.requiresCtx(stmt, + PreLinkageModuleNamespace.class, moduleName, SOURCE_PRE_LINKAGE); + final Prerequisite> linkageTarget = importAction + .mutatesCtx(stmt.getRoot(), SOURCE_PRE_LINKAGE); + + importAction.apply(new InferenceAction() { + @Override + public void apply(final InferenceContext ctx) { + final StmtContext importedModuleContext = imported.resolve(ctx); + Verify.verify(moduleName.equals(importedModuleContext.getStatementArgument())); + final URI importedModuleNamespace = importedModuleContext.getFromNamespace(ModuleNameToNamespace.class, + moduleName); + Verify.verifyNotNull(importedModuleNamespace); + final String impPrefix = SourceException.throwIfNull( + firstAttributeOf(stmt.declaredSubstatements(), PrefixStatement.class), + stmt.getStatementSourceReference(), "Missing prefix statement"); + + stmt.addToNs(ImpPrefixToNamespace.class, impPrefix, importedModuleNamespace); + } + + @Override + public void prerequisiteFailed(final Collection> failed) { + InferenceException.throwIf(failed.contains(imported), stmt.getStatementSourceReference(), + "Imported module [%s] was not found.", moduleName); + } + }); + } + + @Override + public final void onLinkageDeclared( + final Mutable> stmt) { + if (stmt.isEnabledSemanticVersioning()) { + SemanticVersionImport.onLinkageDeclared(stmt); + } else { + RevisionImport.onLinkageDeclared(stmt); + } + } +} 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/rfc7950/stmt/import_/ImportEffectiveStatementImpl.java similarity index 94% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ImportEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportEffectiveStatementImpl.java index 654dadb1f2..434d9ff2d2 100644 --- 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/rfc7950/stmt/import_/ImportEffectiveStatementImpl.java @@ -5,7 +5,7 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.import_; import com.google.common.base.MoreObjects; import java.util.Objects; @@ -21,14 +21,14 @@ import org.opendaylight.yangtools.yang.model.api.stmt.PrefixEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateEffectiveStatement; import org.opendaylight.yangtools.yang.model.repo.api.SemVerSourceIdentifier; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.MissingSubstatementException; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; import org.opendaylight.yangtools.yang.parser.spi.source.ImportPrefixToSemVerSourceIdentifier; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -public class ImportEffectiveStatementImpl extends DeclaredEffectiveStatementBase +final class ImportEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements ImportEffectiveStatement, ModuleImport { private final String moduleName; @@ -38,7 +38,7 @@ public class ImportEffectiveStatementImpl extends DeclaredEffectiveStatementBase private final String description; private final String reference; - public ImportEffectiveStatementImpl(final StmtContext ctx) { + ImportEffectiveStatementImpl(final StmtContext ctx) { super(ctx); moduleName = ctx.getStatementArgument(); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ImportStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportStatementImpl.java similarity index 85% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ImportStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportStatementImpl.java index 45a61d0418..eefbe3cb87 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ImportStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportStatementImpl.java @@ -5,7 +5,7 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.import_; import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; @@ -16,9 +16,9 @@ import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public class ImportStatementImpl extends AbstractDeclaredStatement implements ImportStatement { +final class ImportStatementImpl extends AbstractDeclaredStatement implements ImportStatement { - ImportStatementImpl(StmtContext context) { + ImportStatementImpl(final StmtContext context) { super(context); } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportStatementRFC6020Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportStatementRFC6020Support.java new file mode 100644 index 0000000000..aac9a22c24 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportStatementRFC6020Support.java @@ -0,0 +1,26 @@ +/* + * 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.rfc7950.stmt.import_; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.SupportedExtensionsMapping; + +public final class ImportStatementRFC6020Support extends AbstractImportStatementSupport { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator + .builder(YangStmtMapping.IMPORT) + .addMandatory(YangStmtMapping.PREFIX) + .addOptional(YangStmtMapping.REVISION_DATE) + .addOptional(SupportedExtensionsMapping.OPENCONFIG_VERSION) + .build(); + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/ImportStatementRfc7950Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportStatementRFC7950Support.java similarity index 85% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/ImportStatementRfc7950Support.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportStatementRFC7950Support.java index d6cabfa790..f86f8e9369 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/ImportStatementRfc7950Support.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportStatementRFC7950Support.java @@ -5,12 +5,11 @@ * 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.rfc7950; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.import_; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ImportStatementDefinition; import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.SupportedExtensionsMapping; /** @@ -18,8 +17,7 @@ import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.SupportedExtensionsMa * allow import statement to have "description" and "reference" as substatements. */ @Beta -public class ImportStatementRfc7950Support extends ImportStatementDefinition { - +public final class ImportStatementRFC7950Support extends AbstractImportStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator .builder(YangStmtMapping.IMPORT) .addMandatory(YangStmtMapping.PREFIX) diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/RevisionImport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/RevisionImport.java new file mode 100644 index 0000000000..a263ff0117 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/RevisionImport.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.import_; + +import static org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase.SOURCE_LINKAGE; +import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.findFirstDeclaredSubstatement; +import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.firstAttributeOf; + +import java.net.URI; +import java.util.Collection; +import java.util.Optional; +import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ImportStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement; +import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; +import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.parser.spi.ModuleNamespace; +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.ModelActionBuilder.InferenceAction; +import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.InferenceContext; +import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.Prerequisite; +import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceKeyCriterion; +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.ImportPrefixToModuleCtx; +import org.opendaylight.yangtools.yang.parser.spi.source.ImportedModuleContext; +import org.opendaylight.yangtools.yang.parser.spi.source.ModuleCtxToSourceIdentifier; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.URIStringToImpPrefix; + +final class RevisionImport { + + private RevisionImport() { + throw new UnsupportedOperationException("Utility class"); + } + + static void onLinkageDeclared( + final Mutable> stmt) { + final ModelActionBuilder importAction = stmt.newInferenceAction(SOURCE_LINKAGE); + final Prerequisite> imported; + final String moduleName = stmt.getStatementArgument(); + final Revision revision = firstAttributeOf(stmt.declaredSubstatements(), RevisionDateStatement.class); + if (revision == null) { + imported = importAction.requiresCtx(stmt, ModuleNamespace.class, + NamespaceKeyCriterion.latestRevisionModule(moduleName), SOURCE_LINKAGE); + } else { + imported = importAction.requiresCtx(stmt, ModuleNamespace.class, + RevisionSourceIdentifier.create(moduleName, Optional.of(revision)), SOURCE_LINKAGE); + } + + final Prerequisite> linkageTarget = importAction.mutatesCtx(stmt.getRoot(), + SOURCE_LINKAGE); + + importAction.apply(new InferenceAction() { + @Override + public void apply(final InferenceContext ctx) { + final StmtContext importedModule = imported.resolve(ctx); + + linkageTarget.resolve(ctx).addToNs(ImportedModuleContext.class, + stmt.getFromNamespace(ModuleCtxToSourceIdentifier.class, importedModule), importedModule); + final String impPrefix = firstAttributeOf(stmt.declaredSubstatements(), PrefixStatement.class); + final URI modNs = firstAttributeOf(importedModule.declaredSubstatements(), + NamespaceStatement.class); + stmt.addToNs(ImportPrefixToModuleCtx.class, impPrefix, importedModule); + stmt.addToNs(URIStringToImpPrefix.class, modNs.toString(), impPrefix); + } + + @Override + public void prerequisiteFailed(final Collection> failed) { + if (failed.contains(imported)) { + throw new InferenceException(stmt.getStatementSourceReference(), + "Imported module [%s] was not found.", moduleName); + } + } + }); + } + + static SourceIdentifier getImportedSourceIdentifier(final StmtContext stmt) { + final StmtContext revision = findFirstDeclaredSubstatement(stmt, + RevisionDateStatement.class); + return revision == null ? RevisionSourceIdentifier.create(stmt.getStatementArgument()) + : RevisionSourceIdentifier.create(stmt.getStatementArgument(), revision.getStatementArgument()); + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/SemanticVersionImport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/SemanticVersionImport.java new file mode 100644 index 0000000000..b432dae604 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/SemanticVersionImport.java @@ -0,0 +1,179 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.import_; + +import static java.util.Objects.requireNonNull; +import static org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase.SOURCE_LINKAGE; +import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.firstAttributeOf; + +import com.google.common.base.MoreObjects.ToStringHelper; +import java.net.URI; +import java.util.Collection; +import java.util.Optional; +import org.opendaylight.yangtools.concepts.SemVer; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ImportStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; +import org.opendaylight.yangtools.yang.model.repo.api.SemVerSourceIdentifier; +import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +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.ModelActionBuilder.InferenceAction; +import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.InferenceContext; +import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.Prerequisite; +import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceKeyCriterion; +import org.opendaylight.yangtools.yang.parser.spi.meta.SemanticVersionModuleNamespace; +import org.opendaylight.yangtools.yang.parser.spi.meta.SemanticVersionNamespace; +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.ImportPrefixToModuleCtx; +import org.opendaylight.yangtools.yang.parser.spi.source.ImportPrefixToSemVerSourceIdentifier; +import org.opendaylight.yangtools.yang.parser.spi.source.ImportedModuleContext; +import org.opendaylight.yangtools.yang.parser.spi.source.ModuleCtxToSourceIdentifier; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.URIStringToImpPrefix; + +final class SemanticVersionImport { + + private abstract static class CompatibleCriterion extends NamespaceKeyCriterion { + private final String moduleName; + + CompatibleCriterion(final String moduleName) { + this.moduleName = requireNonNull(moduleName); + } + + @Override + public boolean match(final SemVerSourceIdentifier key) { + return moduleName.equals(key.getName()); + } + + @Override + protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) { + return toStringHelper.add("moduleName", moduleName); + } + } + + private static final class NoVerCompatibleCriterion extends SemanticVersionImport.CompatibleCriterion { + NoVerCompatibleCriterion(final String moduleName) { + super(moduleName); + } + + @Override + public SemVerSourceIdentifier select(final SemVerSourceIdentifier first, + final SemVerSourceIdentifier second) { + // TODO Auto-generated method stub + return null; + } + } + + private static final class SemVerCompatibleCriterion extends SemanticVersionImport.CompatibleCriterion { + private final SemVer semVer; + + SemVerCompatibleCriterion(final String moduleName, final SemVer semVer) { + super(moduleName); + this.semVer = requireNonNull(semVer); + } + + @Override + public boolean match(final SemVerSourceIdentifier key) { + if (!super.match(key)) { + return false; + } + final Optional optKeyVer = key.getSemanticVersion(); + if (!optKeyVer.isPresent()) { + return false; + } + + final SemVer keyVer = optKeyVer.get(); + if (semVer.getMajor() != keyVer.getMajor()) { + return false; + } + if (semVer.getMinor() > keyVer.getMinor()) { + return false; + } + return semVer.getMinor() < keyVer.getMinor() || semVer.getPatch() <= keyVer.getPatch(); + } + + @Override + public SemVerSourceIdentifier select(final SemVerSourceIdentifier first, + final SemVerSourceIdentifier second) { + return first.getSemanticVersion().get().compareTo(second.getSemanticVersion().get()) >= 0 ? first + : second; + } + + @Override + protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) { + return super.addToStringAttributes(toStringHelper).add("version", semVer); + } + } + + + private SemanticVersionImport() { + throw new UnsupportedOperationException("Utility class"); + } + + static void onLinkageDeclared( + final Mutable> stmt) { + final ModelActionBuilder importAction = stmt.newInferenceAction(SOURCE_LINKAGE); + final String moduleName = stmt.getStatementArgument(); + final SemVer semanticVersion = stmt.getFromNamespace(SemanticVersionNamespace.class, stmt); + final SemanticVersionImport.CompatibleCriterion criterion = semanticVersion == null + ? new NoVerCompatibleCriterion(moduleName) + : new SemVerCompatibleCriterion(moduleName, semanticVersion); + + final Prerequisite> imported = importAction.requiresCtx(stmt, + SemanticVersionModuleNamespace.class, criterion, SOURCE_LINKAGE); + final Prerequisite> linkageTarget = importAction.mutatesCtx(stmt.getRoot(), + SOURCE_LINKAGE); + + importAction.apply(new InferenceAction() { + @Override + public void apply(final InferenceContext ctx) { + final StmtContext importedModule = imported.resolve(ctx); + final SemVer importedVersion = stmt.getFromNamespace(SemanticVersionNamespace.class, stmt); + final SourceIdentifier importedModuleIdentifier = importedModule.getFromNamespace( + ModuleCtxToSourceIdentifier.class, importedModule); + final SemVerSourceIdentifier semVerModuleIdentifier = createSemVerModuleIdentifier( + importedModuleIdentifier, importedVersion); + + linkageTarget.resolve(ctx).addToNs(ImportedModuleContext.class, importedModuleIdentifier, + importedModule); + final String impPrefix = firstAttributeOf(stmt.declaredSubstatements(), PrefixStatement.class); + stmt.addToNs(ImportPrefixToModuleCtx.class, impPrefix, importedModule); + stmt.addToNs(ImportPrefixToSemVerSourceIdentifier.class, impPrefix, semVerModuleIdentifier); + + final URI modNs = firstAttributeOf(importedModule.declaredSubstatements(), + NamespaceStatement.class); + stmt.addToNs(URIStringToImpPrefix.class, modNs.toString(), impPrefix); + } + + @Override + public void prerequisiteFailed(final Collection> failed) { + if (failed.contains(imported)) { + throw new InferenceException(stmt.getStatementSourceReference(), + "Unable to find module compatible with requested import [%s(%s)].", moduleName, + getRequestedImportVersionString(stmt)); + } + } + }); + } + + private static Optional getRequestedImportVersion(final StmtContext stmt) { + return Optional.ofNullable(stmt.getFromNamespace(SemanticVersionNamespace.class, stmt)); + } + + private static String getRequestedImportVersionString(final StmtContext stmt) { + return getRequestedImportVersion(stmt).map(SemVer::toString).orElse(""); + } + + private static SemVerSourceIdentifier createSemVerModuleIdentifier( + final SourceIdentifier importedModuleIdentifier, final SemVer semVer) { + return SemVerSourceIdentifier.create(importedModuleIdentifier.getName(), + importedModuleIdentifier.getRevision(), semVer); + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/include/AbstractIncludeStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/include/AbstractIncludeStatementSupport.java new file mode 100644 index 0000000000..fc32b01b86 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/include/AbstractIncludeStatementSupport.java @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.include; + +import static org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase.SOURCE_LINKAGE; +import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.findFirstDeclaredSubstatement; + +import java.util.Collection; +import java.util.Optional; +import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.IncludeStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement; +import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; +import org.opendaylight.yangtools.yang.parser.spi.SubmoduleNamespace; +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.ModelActionBuilder.InferenceAction; +import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.InferenceContext; +import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.Prerequisite; +import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceKeyCriterion; +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.IncludedModuleContext; +import org.opendaylight.yangtools.yang.parser.spi.source.IncludedSubmoduleNameToModuleCtx; + +abstract class AbstractIncludeStatementSupport extends + AbstractStatementSupport> { + + AbstractIncludeStatementSupport() { + super(YangStmtMapping.INCLUDE); + } + + @Override + public final String parseArgumentValue(final StmtContext ctx, final String value) { + return value; + } + + @Override + public final IncludeStatement createDeclared(final StmtContext ctx) { + return new IncludeStatementImpl(ctx); + } + + @Override + public final EffectiveStatement createEffective( + final StmtContext> ctx) { + return new IncludeEffectiveStatementImpl(ctx); + } + + @Override + public final void onPreLinkageDeclared( + final Mutable> stmt) { + final StmtContext revision = findFirstDeclaredSubstatement(stmt, + RevisionDateStatement.class); + stmt.addRequiredSource(revision == null ? RevisionSourceIdentifier.create(stmt.getStatementArgument()) + : RevisionSourceIdentifier.create(stmt.getStatementArgument(), revision.getStatementArgument())); + } + + @Override + public final void onLinkageDeclared( + final Mutable> stmt) { + final String submoduleName = stmt.getStatementArgument(); + final StmtContext revision = findFirstDeclaredSubstatement(stmt, + RevisionDateStatement.class); + + final ModelActionBuilder includeAction = stmt.newInferenceAction(SOURCE_LINKAGE); + final Prerequisite> requiresCtxPrerequisite; + if (revision == null) { + requiresCtxPrerequisite = includeAction.requiresCtx(stmt, SubmoduleNamespace.class, + NamespaceKeyCriterion.latestRevisionModule(submoduleName), SOURCE_LINKAGE); + } else { + requiresCtxPrerequisite = includeAction.requiresCtx(stmt, SubmoduleNamespace.class, + RevisionSourceIdentifier.create(submoduleName, Optional.of(revision.getStatementArgument())), + SOURCE_LINKAGE); + } + + includeAction.apply(new InferenceAction() { + @Override + public void apply(final InferenceContext ctx) { + final StmtContext includedSubModuleContext = requiresCtxPrerequisite.resolve(ctx); + + stmt.addToNs(IncludedModuleContext.class, revision != null + ? RevisionSourceIdentifier.create(submoduleName, revision.getStatementArgument()) + : RevisionSourceIdentifier.create(submoduleName), includedSubModuleContext); + stmt.addToNs(IncludedSubmoduleNameToModuleCtx.class, stmt.getStatementArgument(), + includedSubModuleContext); + } + + @Override + public void prerequisiteFailed(final Collection> failed) { + InferenceException.throwIf(failed.contains(requiresCtxPrerequisite), + stmt.getStatementSourceReference(), + "Included submodule '%s' was not found: ", stmt.getStatementArgument()); + } + }); + } +} \ No newline at end of file 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/rfc7950/stmt/include/IncludeEffectiveStatementImpl.java similarity index 64% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/IncludeEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/include/IncludeEffectiveStatementImpl.java index a6e7a5165f..28b33eb117 100644 --- 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/rfc7950/stmt/include/IncludeEffectiveStatementImpl.java @@ -5,16 +5,16 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.include; import org.opendaylight.yangtools.yang.model.api.stmt.IncludeEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.IncludeStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class IncludeEffectiveStatementImpl extends DeclaredEffectiveStatementBase +final class IncludeEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements IncludeEffectiveStatement { - public IncludeEffectiveStatementImpl(final StmtContext ctx) { + IncludeEffectiveStatementImpl(final 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/rfc7950/stmt/include/IncludeStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/include/IncludeStatementImpl.java new file mode 100644 index 0000000000..1c162be700 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/include/IncludeStatementImpl.java @@ -0,0 +1,43 @@ +/* + * 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.rfc7950.stmt.include; + +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.IncludeStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class IncludeStatementImpl extends AbstractDeclaredStatement implements IncludeStatement { + IncludeStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public String getModule() { + return argument(); + } + + @Override + public RevisionDateStatement getRevisionDate() { + return firstDeclared(RevisionDateStatement.class); + } + + @Override + public DescriptionStatement getDescription() { + return firstDeclared(DescriptionStatement.class); + } + + @Override + public ReferenceStatement getReference() { + return firstDeclared(ReferenceStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/include/IncludeStatementRFC6020Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/include/IncludeStatementRFC6020Support.java new file mode 100644 index 0000000000..72958a902d --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/include/IncludeStatementRFC6020Support.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.include; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; + +public final class IncludeStatementRFC6020Support extends AbstractIncludeStatementSupport { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.INCLUDE).addOptional(YangStmtMapping.REVISION_DATE).build(); + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/IncludeStatementRfc7950Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/include/IncludeStatementRFC7950Support.java similarity index 82% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/IncludeStatementRfc7950Support.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/include/IncludeStatementRFC7950Support.java index 77185620cf..17a079ad01 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/IncludeStatementRfc7950Support.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/include/IncludeStatementRFC7950Support.java @@ -5,20 +5,18 @@ * 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.rfc7950; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.include; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.IncludeStatementImpl; /** * Implementation of include statement definition for Yang 1.1 (RFC 7950) to * allow include statement to have "description" and "reference" as substatements. */ @Beta -public class IncludeStatementRfc7950Support extends IncludeStatementImpl.Definition { - +public final class IncludeStatementRFC7950Support extends AbstractIncludeStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator .builder(YangStmtMapping.INCLUDE) .addOptional(YangStmtMapping.REVISION_DATE) diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/AbstractInputStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/AbstractInputStatementSupport.java new file mode 100644 index 0000000000..a5c727cf39 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/AbstractInputStatementSupport.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.input; + +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; +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.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ChildSchemaNodes; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.InputEffectiveStatementImpl; + +abstract class AbstractInputStatementSupport + extends AbstractQNameStatementSupport> { + AbstractInputStatementSupport() { + super(YangStmtMapping.INPUT); + } + + @Override + public final QName parseArgumentValue(final StmtContext ctx, final String value) { + return StmtContextUtils.qnameFromArgument(ctx, "input"); + } + + @Override + public final void onStatementAdded(final Mutable> stmt) { + stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); + } + + @Override + public final InputStatement createDeclared(final StmtContext ctx) { + return new InputStatementImpl(ctx); + } + + @Override + public final EffectiveStatement createEffective( + final StmtContext> ctx) { + return new InputEffectiveStatementImpl(ctx); + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/InputStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/InputStatementImpl.java new file mode 100644 index 0000000000..b122ccb67d --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/InputStatementImpl.java @@ -0,0 +1,49 @@ +/* + * 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.rfc7950.stmt.input; + +import java.util.Collection; +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.common.QName; +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.InputStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class InputStatementImpl extends AbstractDeclaredStatement implements InputStatement { + InputStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public Collection getTypedefs() { + return allDeclared(TypedefStatement.class); + } + + @Nonnull + @Override + public Collection getGroupings() { + return allDeclared(GroupingStatement.class); + } + + @Nonnull + @Override + public Collection getDataDefinitions() { + return allDeclared(DataDefinitionStatement.class); + } + + @Nonnull + @Override + public Collection getMusts() { + return allDeclared(MustStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/InputStatementRFC6020Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/InputStatementRFC6020Support.java new file mode 100644 index 0000000000..02fdc17927 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/InputStatementRFC6020Support.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.input; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; + +public final class InputStatementRFC6020Support extends AbstractInputStatementSupport { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .INPUT) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.CHOICE) + .addAny(YangStmtMapping.CONTAINER) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addAny(YangStmtMapping.TYPEDEF) + .addAny(YangStmtMapping.USES) + .build(); + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/InputStatementRfc7950Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/InputStatementRFC7950Support.java similarity index 85% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/InputStatementRfc7950Support.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/InputStatementRFC7950Support.java index eae6460373..247963aa18 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/InputStatementRfc7950Support.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/InputStatementRFC7950Support.java @@ -5,18 +5,17 @@ * 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.rfc7950; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.input; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.InputStatementImpl; /** * Class providing necessary support for processing YANG 1.1 Input statement. */ @Beta -public final class InputStatementRfc7950Support extends InputStatementImpl.Definition { +public final class InputStatementRFC7950Support extends AbstractInputStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping .INPUT) .addAny(YangStmtMapping.ANYDATA) 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/rfc7950/stmt/key/KeyEffectiveStatementImpl.java similarity index 73% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/KeyEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/key/KeyEffectiveStatementImpl.java index 9e916cd53f..a66b78920e 100644 --- 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/rfc7950/stmt/key/KeyEffectiveStatementImpl.java @@ -5,19 +5,19 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.key; import java.util.Collection; import org.opendaylight.yangtools.yang.model.api.stmt.KeyEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class KeyEffectiveStatementImpl +final class KeyEffectiveStatementImpl extends DeclaredEffectiveStatementBase, KeyStatement> implements KeyEffectiveStatement { - public KeyEffectiveStatementImpl(final StmtContext, KeyStatement, ?> ctx) { + KeyEffectiveStatementImpl(final StmtContext, KeyStatement, ?> ctx) { super(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/key/KeyStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/key/KeyStatementImpl.java new file mode 100644 index 0000000000..99648fd50f --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/key/KeyStatementImpl.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.rfc7950.stmt.key; + +import java.util.Collection; +import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement; +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.StmtContext; + +final class KeyStatementImpl extends AbstractDeclaredStatement> + implements KeyStatement { + KeyStatementImpl(final StmtContext, KeyStatement, ?> context) { + super(context); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/key/KeyStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/key/KeyStatementSupport.java new file mode 100644 index 0000000000..e35f8a9e07 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/key/KeyStatementSupport.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.key; + +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSet.Builder; +import java.util.Collection; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.QNameModule; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.QNameCacheNamespace; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; + +public final class KeyStatementSupport + extends AbstractStatementSupport, KeyStatement, + EffectiveStatement, KeyStatement>> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.KEY) + .build(); + + public KeyStatementSupport() { + super(YangStmtMapping.KEY); + } + + @Override + public Collection parseArgumentValue(final StmtContext ctx, final String value) { + final Builder builder = ImmutableSet.builder(); + int tokens = 0; + for (String keyToken : StmtContextUtils.LIST_KEY_SPLITTER.split(value)) { + builder.add(SchemaNodeIdentifier.create(false, StmtContextUtils.qnameFromArgument(ctx, keyToken))); + tokens++; + } + + // Throws NPE on nulls, retains first inserted value, cannot be modified + final Collection ret = builder.build(); + SourceException.throwIf(ret.size() != tokens, ctx.getStatementSourceReference(), + "Key argument '%s' contains duplicates", value); + return ret; + } + + @Override + public Collection adaptArgumentValue( + final StmtContext, KeyStatement, + EffectiveStatement, KeyStatement>> ctx, + final QNameModule targetModule) { + final Builder builder = ImmutableSet.builder(); + boolean replaced = false; + for (final SchemaNodeIdentifier arg : ctx.getStatementArgument()) { + final QName qname = arg.getLastComponent(); + if (!targetModule.equals(qname.getModule())) { + final QName newQname = ctx.getFromNamespace(QNameCacheNamespace.class, + QName.create(targetModule, qname.getLocalName())); + builder.add(SchemaNodeIdentifier.create(false, newQname)); + replaced = true; + } else { + builder.add(arg); + } + } + + // This makes sure we reuse the collection when a grouping is + // instantiated in the same module + return replaced ? builder.build() : ctx.getStatementArgument(); + } + + @Override + public KeyStatement createDeclared(final StmtContext, KeyStatement, ?> ctx) { + return new KeyStatementImpl(ctx); + } + + @Override + public EffectiveStatement, KeyStatement> createEffective( + final StmtContext, KeyStatement, + EffectiveStatement, KeyStatement>> ctx) { + return new KeyEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file 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/rfc7950/stmt/leaf/LeafStatementImpl.java similarity index 50% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/LeafStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/LeafStatementImpl.java index 2816f45008..389429c6aa 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/rfc7950/stmt/leaf/LeafStatementImpl.java @@ -5,14 +5,12 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf; import java.util.Collection; import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; @@ -26,74 +24,13 @@ 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.WhenStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; 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.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.LeafEffectiveStatementImpl; -public class LeafStatementImpl extends AbstractDeclaredStatement implements LeafStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .LEAF) - .addOptional(YangStmtMapping.CONFIG) - .addOptional(YangStmtMapping.DEFAULT) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.IF_FEATURE) - .addOptional(YangStmtMapping.MANDATORY) - .addAny(YangStmtMapping.MUST) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addMandatory(YangStmtMapping.TYPE) - .addOptional(YangStmtMapping.UNITS) - .addOptional(YangStmtMapping.WHEN) - .build(); - - protected LeafStatementImpl(final StmtContext context) { +final class LeafStatementImpl extends AbstractDeclaredStatement implements LeafStatement { + LeafStatementImpl(final StmtContext context) { super(context); } - public static class Definition - extends AbstractQNameStatementSupport> { - - public Definition() { - super(YangStmtMapping.LEAF); - } - - @Override public QName parseArgumentValue(final StmtContext ctx, final String value) { - return StmtContextUtils.qnameFromArgument(ctx,value); - } - - @Override - public void onStatementAdded(final Mutable> stmt) { - stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); - } - - @Override - public LeafStatement createDeclared(final StmtContext ctx) { - return new LeafStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new LeafEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - - @Override - public void onFullDefinitionDeclared( - final Mutable> ctx) { - super.onFullDefinitionDeclared(ctx); - StmtContextUtils.validateIfFeatureAndWhenOnListKeys(ctx); - } - } - @Nullable @Override public Collection getMusts() { diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/LeafStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/LeafStatementSupport.java new file mode 100644 index 0000000000..467d74643d --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/LeafStatementSupport.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.leaf; + +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.LeafStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; +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.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ChildSchemaNodes; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.LeafEffectiveStatementImpl; + +public final class LeafStatementSupport + extends AbstractQNameStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .LEAF) + .addOptional(YangStmtMapping.CONFIG) + .addOptional(YangStmtMapping.DEFAULT) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.IF_FEATURE) + .addOptional(YangStmtMapping.MANDATORY) + .addAny(YangStmtMapping.MUST) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addMandatory(YangStmtMapping.TYPE) + .addOptional(YangStmtMapping.UNITS) + .addOptional(YangStmtMapping.WHEN) + .build(); + + public LeafStatementSupport() { + super(YangStmtMapping.LEAF); + } + + @Override + public QName parseArgumentValue(final StmtContext ctx, final String value) { + return StmtContextUtils.qnameFromArgument(ctx,value); + } + + @Override + public void onStatementAdded(final Mutable> stmt) { + stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); + } + + @Override + public void onFullDefinitionDeclared( + final Mutable> ctx) { + super.onFullDefinitionDeclared(ctx); + StmtContextUtils.validateIfFeatureAndWhenOnListKeys(ctx); + } + + @Override + public LeafStatement createDeclared(final StmtContext ctx) { + return new LeafStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new LeafEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractLeafListStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractLeafListStatementSupport.java new file mode 100644 index 0000000000..0e99c68226 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractLeafListStatementSupport.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.leaf_list; + +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.LeafListStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; +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.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ChildSchemaNodes; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.LeafListEffectiveStatementImpl; + +abstract class AbstractLeafListStatementSupport + extends AbstractQNameStatementSupport> { + + AbstractLeafListStatementSupport() { + super(YangStmtMapping.LEAF_LIST); + } + + @Override + public final void onStatementAdded( + final Mutable> stmt) { + stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); + } + + @Override + public final QName parseArgumentValue(final StmtContext ctx, final String value) { + return StmtContextUtils.qnameFromArgument(ctx, value); + } + + @Override + public final LeafListStatement createDeclared(final StmtContext ctx) { + return new LeafListStatementImpl(ctx); + } + + @Override + public final EffectiveStatement createEffective( + final StmtContext> ctx) { + return new LeafListEffectiveStatementImpl(ctx); + } +} \ No newline at end of file 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/rfc7950/stmt/leaf_list/LeafListStatementImpl.java similarity index 53% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/LeafListStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementImpl.java index 78815feb6c..0a720f7f2b 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/rfc7950/stmt/leaf_list/LeafListStatementImpl.java @@ -5,14 +5,12 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf_list; import java.util.Collection; import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; @@ -28,67 +26,11 @@ 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.WhenStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; 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.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.LeafListEffectiveStatementImpl; - -public class LeafListStatementImpl extends AbstractDeclaredStatement implements LeafListStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .LEAF_LIST) - .addOptional(YangStmtMapping.CONFIG) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.IF_FEATURE) - .addOptional(YangStmtMapping.MIN_ELEMENTS) - .addOptional(YangStmtMapping.MAX_ELEMENTS) - .addAny(YangStmtMapping.MUST) - .addOptional(YangStmtMapping.ORDERED_BY) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addMandatory(YangStmtMapping.TYPE) - .addOptional(YangStmtMapping.UNITS) - .addOptional(YangStmtMapping.WHEN) - .build(); - - protected LeafListStatementImpl(final StmtContext context) { - super(context); - } - public static class Definition - extends AbstractQNameStatementSupport> { - - public Definition() { - super(YangStmtMapping.LEAF_LIST); - } - - @Override - public void onStatementAdded( - final Mutable> stmt) { - stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); - } - - @Override - public QName parseArgumentValue(final StmtContext ctx, final String value) { - return StmtContextUtils.qnameFromArgument(ctx, value); - } - - @Override - public LeafListStatement createDeclared(final StmtContext ctx) { - return new LeafListStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new LeafListEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } +final class LeafListStatementImpl extends AbstractDeclaredStatement implements LeafListStatement { + LeafListStatementImpl(final StmtContext context) { + super(context); } @Nonnull @@ -121,7 +63,7 @@ public class LeafListStatementImpl extends AbstractDeclaredStatement impl } @Override - public final Collection getDefaults() { + public Collection getDefaults() { return allDeclared(DefaultStatement.class); } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementRFC6020Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementRFC6020Support.java new file mode 100644 index 0000000000..2fb813e99d --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementRFC6020Support.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.leaf_list; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; + +public final class LeafListStatementRFC6020Support extends AbstractLeafListStatementSupport { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .LEAF_LIST) + .addOptional(YangStmtMapping.CONFIG) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.IF_FEATURE) + .addOptional(YangStmtMapping.MIN_ELEMENTS) + .addOptional(YangStmtMapping.MAX_ELEMENTS) + .addAny(YangStmtMapping.MUST) + .addOptional(YangStmtMapping.ORDERED_BY) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addMandatory(YangStmtMapping.TYPE) + .addOptional(YangStmtMapping.UNITS) + .addOptional(YangStmtMapping.WHEN) + .build(); + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/LeafListStatementRfc7950Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementRFC7950Support.java similarity index 84% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/LeafListStatementRfc7950Support.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementRFC7950Support.java index 33e08b8dd9..a13c55d090 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/LeafListStatementRfc7950Support.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementRFC7950Support.java @@ -5,18 +5,15 @@ * 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.rfc7950; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf_list; -import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.LeafListStatementImpl; /** * Class providing necessary support for processing YANG 1.1 leaf-list statement. */ -@Beta -public class LeafListStatementRfc7950Support extends LeafListStatementImpl.Definition { +public final class LeafListStatementRFC7950Support extends AbstractLeafListStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping .LEAF_LIST) .addOptional(YangStmtMapping.CONFIG) diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/LengthEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/LengthEffectiveStatementImpl.java similarity index 69% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/LengthEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/LengthEffectiveStatementImpl.java index 68f666c3e4..e7f4195c13 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/LengthEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/LengthEffectiveStatementImpl.java @@ -1,22 +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.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.length; import java.util.List; import org.opendaylight.yangtools.yang.model.api.stmt.LengthEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.LengthStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ValueRange; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractListConstraintEffectiveStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public class LengthEffectiveStatementImpl +// FIXME: hide this type +public final class LengthEffectiveStatementImpl extends AbstractListConstraintEffectiveStatement implements LengthEffectiveStatement { - public LengthEffectiveStatementImpl(final StmtContext, LengthStatement, ?> ctx) { + LengthEffectiveStatementImpl(final StmtContext, LengthStatement, ?> ctx) { super(ctx); } } \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/LengthStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/LengthStatementImpl.java new file mode 100644 index 0000000000..f14abca44b --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/LengthStatementImpl.java @@ -0,0 +1,44 @@ +/* + * 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.rfc7950.stmt.length; + +import java.util.List; +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.LengthStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ValueRange; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class LengthStatementImpl extends AbstractDeclaredStatement> implements LengthStatement { + LengthStatementImpl(final StmtContext, LengthStatement, ?> context) { + super(context); + } + + @Override + public ErrorAppTagStatement getErrorAppTagStatement() { + return firstDeclared(ErrorAppTagStatement.class); + } + + @Override + public ErrorMessageStatement getErrorMessageStatement() { + return firstDeclared(ErrorMessageStatement.class); + } + + @Override + public DescriptionStatement getDescription() { + return firstDeclared(DescriptionStatement.class); + } + + @Override + public ReferenceStatement getReference() { + return firstDeclared(ReferenceStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/LengthStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/LengthStatementSupport.java new file mode 100644 index 0000000000..9f29172226 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/LengthStatementSupport.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.length; + +import java.util.List; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.LengthStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ValueRange; +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.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.TypeUtils; + +public final class LengthStatementSupport extends AbstractStatementSupport, LengthStatement, + EffectiveStatement, LengthStatement>> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .LENGTH) + .addOptional(YangStmtMapping.DESCRIPTION) + .addOptional(YangStmtMapping.ERROR_APP_TAG) + .addOptional(YangStmtMapping.ERROR_MESSAGE) + .addOptional(YangStmtMapping.REFERENCE) + .build(); + + public LengthStatementSupport() { + super(YangStmtMapping.LENGTH); + } + + @Override + public List parseArgumentValue(final StmtContext ctx, final String value) { + return TypeUtils.parseLengthListFromString(ctx, value); + } + + @Override + public LengthStatement createDeclared(final StmtContext, LengthStatement, ?> ctx) { + return new LengthStatementImpl(ctx); + } + + @Override + public EffectiveStatement, LengthStatement> createEffective( + final StmtContext, LengthStatement, EffectiveStatement, + LengthStatement>> ctx) { + return new LengthEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListStatementSupport.java new file mode 100644 index 0000000000..94eccd15bf --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListStatementSupport.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.list; + +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; +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.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ChildSchemaNodes; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ListEffectiveStatementImpl; + +abstract class AbstractListStatementSupport + extends AbstractQNameStatementSupport> { + + AbstractListStatementSupport() { + super(YangStmtMapping.LIST); + } + + @Override + public final QName parseArgumentValue(final StmtContext ctx, final String value) { + return StmtContextUtils.qnameFromArgument(ctx, value); + } + + @Override + public final void onStatementAdded( + final Mutable> stmt) { + stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); + } + + @Override + public final ListStatement createDeclared(final StmtContext ctx) { + return new ListStatementImpl(ctx); + } + + @Override + public final EffectiveStatement createEffective( + final StmtContext> ctx) { + return new ListEffectiveStatementImpl(ctx); + } +} \ No newline at end of file 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/rfc7950/stmt/list/ListStatementImpl.java similarity index 56% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ListStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementImpl.java index 92c0b3f922..26b7d75bc9 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/rfc7950/stmt/list/ListStatementImpl.java @@ -5,14 +5,12 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.list; import java.util.Collection; import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ActionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DataDefinitionStatement; @@ -32,77 +30,11 @@ import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UniqueStatement; import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; 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.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ListEffectiveStatementImpl; - -public class ListStatementImpl extends AbstractDeclaredStatement implements ListStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .LIST) - .addAny(YangStmtMapping.ANYXML) - .addAny(YangStmtMapping.CHOICE) - .addOptional(YangStmtMapping.CONFIG) - .addAny(YangStmtMapping.CONTAINER) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.GROUPING) - .addAny(YangStmtMapping.IF_FEATURE) - .addOptional(YangStmtMapping.KEY) - .addAny(YangStmtMapping.LEAF) - .addAny(YangStmtMapping.LEAF_LIST) - .addAny(YangStmtMapping.LIST) - .addOptional(YangStmtMapping.MAX_ELEMENTS) - .addOptional(YangStmtMapping.MIN_ELEMENTS) - .addAny(YangStmtMapping.MUST) - .addOptional(YangStmtMapping.ORDERED_BY) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addAny(YangStmtMapping.TYPEDEF) - .addAny(YangStmtMapping.UNIQUE) - .addAny(YangStmtMapping.USES) - .addOptional(YangStmtMapping.WHEN) - .build(); - - protected ListStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition - extends AbstractQNameStatementSupport> { - - public Definition() { - super(YangStmtMapping.LIST); - } - - @Override - public QName parseArgumentValue(final StmtContext ctx, final String value) { - return StmtContextUtils.qnameFromArgument(ctx, value); - } - @Override - public void onStatementAdded( - final Mutable> stmt) { - stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); - } - - @Override - public ListStatement createDeclared( - final StmtContext ctx) { - return new ListStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new ListEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } +final class ListStatementImpl extends AbstractDeclaredStatement implements ListStatement { + ListStatementImpl(final StmtContext context) { + super(context); } @Nonnull @@ -203,7 +135,7 @@ public class ListStatementImpl extends AbstractDeclaredStatement implemen } @Override - public final Collection getNotifications() { + public Collection getNotifications() { return allDeclared(NotificationStatement.class); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementRFC6020Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementRFC6020Support.java new file mode 100644 index 0000000000..31ded20f1e --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementRFC6020Support.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.list; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; + +public final class ListStatementRFC6020Support extends AbstractListStatementSupport { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .LIST) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.CHOICE) + .addOptional(YangStmtMapping.CONFIG) + .addAny(YangStmtMapping.CONTAINER) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.IF_FEATURE) + .addOptional(YangStmtMapping.KEY) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addOptional(YangStmtMapping.MAX_ELEMENTS) + .addOptional(YangStmtMapping.MIN_ELEMENTS) + .addAny(YangStmtMapping.MUST) + .addOptional(YangStmtMapping.ORDERED_BY) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addAny(YangStmtMapping.TYPEDEF) + .addAny(YangStmtMapping.UNIQUE) + .addAny(YangStmtMapping.USES) + .addOptional(YangStmtMapping.WHEN) + .build(); + + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/ListStatementRfc7950Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementRFC7950Support.java similarity index 89% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/ListStatementRfc7950Support.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementRFC7950Support.java index 704532e592..6d5ff445e9 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/ListStatementRfc7950Support.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementRFC7950Support.java @@ -5,18 +5,17 @@ * 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.rfc7950; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.list; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ListStatementImpl; /** * Class providing necessary support for processing YANG 1.1 List statement. */ @Beta -public final class ListStatementRfc7950Support extends ListStatementImpl.Definition { +public final class ListStatementRFC7950Support extends AbstractListStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping .LIST) .addAny(YangStmtMapping.ACTION) diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/EmptyMandatoryEffectiveStatement.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/mandatory/EmptyMandatoryEffectiveStatement.java similarity index 97% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/EmptyMandatoryEffectiveStatement.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/mandatory/EmptyMandatoryEffectiveStatement.java index a087928676..750d4aabcb 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/EmptyMandatoryEffectiveStatement.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/mandatory/EmptyMandatoryEffectiveStatement.java @@ -5,7 +5,7 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.mandatory; import com.google.common.collect.ImmutableList; import java.util.Collection; diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/EmptyMandatoryStatement.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/mandatory/EmptyMandatoryStatement.java similarity index 97% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/EmptyMandatoryStatement.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/mandatory/EmptyMandatoryStatement.java index d5bc31d796..cbc97d495f 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/EmptyMandatoryStatement.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/mandatory/EmptyMandatoryStatement.java @@ -5,7 +5,7 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.mandatory; import com.google.common.collect.ImmutableList; import java.util.Collection; 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/rfc7950/stmt/mandatory/MandatoryEffectiveStatementImpl.java similarity index 64% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/MandatoryEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/mandatory/MandatoryEffectiveStatementImpl.java index efa480d0af..428a0c0798 100644 --- 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/rfc7950/stmt/mandatory/MandatoryEffectiveStatementImpl.java @@ -5,16 +5,16 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.mandatory; import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class MandatoryEffectiveStatementImpl extends DeclaredEffectiveStatementBase +final class MandatoryEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements MandatoryEffectiveStatement { - public MandatoryEffectiveStatementImpl(final StmtContext ctx) { + MandatoryEffectiveStatementImpl(final StmtContext ctx) { super(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/mandatory/MandatoryStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/mandatory/MandatoryStatementImpl.java new file mode 100644 index 0000000000..d0c67963b1 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/mandatory/MandatoryStatementImpl.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.rfc7950.stmt.mandatory; + +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class MandatoryStatementImpl extends AbstractDeclaredStatement implements MandatoryStatement { + MandatoryStatementImpl(final StmtContext context) { + super(context); + } + + @Override + @Nonnull public Boolean getValue() { + return argument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/mandatory/MandatoryStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/mandatory/MandatoryStatementSupport.java new file mode 100644 index 0000000000..b6afa24cd1 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/mandatory/MandatoryStatementSupport.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.mandatory; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement; +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.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; + +public class MandatoryStatementSupport extends + AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.MANDATORY).build(); + + public MandatoryStatementSupport() { + super(YangStmtMapping.MANDATORY); + } + + @Override + public Boolean parseArgumentValue(final StmtContext ctx, final String value) { + return Utils.parseBoolean(ctx, value); + } + + @Override + public MandatoryStatement createDeclared(final StmtContext ctx) { + final MandatoryStatement ret = new MandatoryStatementImpl(ctx); + if (EmptyMandatoryStatement.FALSE.equals(ret)) { + return EmptyMandatoryStatement.FALSE; + } else if (EmptyMandatoryStatement.TRUE.equals(ret)) { + return EmptyMandatoryStatement.TRUE; + } else { + return ret; + } + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + final EffectiveStatement ret = new MandatoryEffectiveStatementImpl(ctx); + final MandatoryStatement declared = ret.getDeclared(); + if (declared instanceof EmptyMandatoryStatement && ret.effectiveSubstatements().isEmpty()) { + return ((EmptyMandatoryStatement)declared).toEffective(); + } + return ret; + } + + @Override + public String internArgument(final String rawArgument) { + return Utils.internBoolean(rawArgument); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ 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/rfc7950/stmt/max_elements/MaxElementsEffectiveStatementImpl.java similarity index 63% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/MaxElementsEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/MaxElementsEffectiveStatementImpl.java index ab9e16648a..00a5f53576 100644 --- 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/rfc7950/stmt/max_elements/MaxElementsEffectiveStatementImpl.java @@ -5,17 +5,16 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.max_elements; import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class MaxElementsEffectiveStatementImpl - extends DeclaredEffectiveStatementBase +final class MaxElementsEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements MaxElementsEffectiveStatement { - public MaxElementsEffectiveStatementImpl(final StmtContext ctx) { + MaxElementsEffectiveStatementImpl(final 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/rfc7950/stmt/max_elements/MaxElementsStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/MaxElementsStatementImpl.java new file mode 100644 index 0000000000..0c3b89812f --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/MaxElementsStatementImpl.java @@ -0,0 +1,25 @@ +/* + * 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.rfc7950.stmt.max_elements; + +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class MaxElementsStatementImpl extends AbstractDeclaredStatement implements MaxElementsStatement { + MaxElementsStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public String getValue() { + return argument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/MaxElementsStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/MaxElementsStatementSupport.java new file mode 100644 index 0000000000..cd58397368 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/MaxElementsStatementSupport.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.max_elements; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsStatement; +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.meta.SubstatementValidator; + +public final class MaxElementsStatementSupport extends + AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.MAX_ELEMENTS) + .build(); + + public MaxElementsStatementSupport() { + super(YangStmtMapping.MAX_ELEMENTS); + } + + @Override + public String parseArgumentValue(final StmtContext ctx, final String value) { + return value; + } + + @Override + public MaxElementsStatement createDeclared( + final StmtContext ctx) { + return new MaxElementsStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new MaxElementsEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ 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/rfc7950/stmt/min_elements/MinElementsEffectiveStatementImpl.java similarity index 63% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/MinElementsEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/min_elements/MinElementsEffectiveStatementImpl.java index b39bfdbdaf..f2b5153916 100644 --- 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/rfc7950/stmt/min_elements/MinElementsEffectiveStatementImpl.java @@ -5,17 +5,16 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.min_elements; import org.opendaylight.yangtools.yang.model.api.stmt.MinElementsEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MinElementsStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class MinElementsEffectiveStatementImpl - extends DeclaredEffectiveStatementBase +final class MinElementsEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements MinElementsEffectiveStatement { - public MinElementsEffectiveStatementImpl(final StmtContext ctx) { + MinElementsEffectiveStatementImpl(final 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/rfc7950/stmt/min_elements/MinElementsStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/min_elements/MinElementsStatementImpl.java new file mode 100644 index 0000000000..ab862ead12 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/min_elements/MinElementsStatementImpl.java @@ -0,0 +1,25 @@ +/* + * 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.rfc7950.stmt.min_elements; + +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.MinElementsStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class MinElementsStatementImpl extends AbstractDeclaredStatement implements MinElementsStatement { + MinElementsStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public Integer getValue() { + return argument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/min_elements/MinElementsStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/min_elements/MinElementsStatementSupport.java new file mode 100644 index 0000000000..96f3e0f6f2 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/min_elements/MinElementsStatementSupport.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.min_elements; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.MinElementsStatement; +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.meta.SubstatementValidator; + +public final class MinElementsStatementSupport extends + AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.MIN_ELEMENTS) + .build(); + + public MinElementsStatementSupport() { + super(YangStmtMapping.MIN_ELEMENTS); + } + + @Override + public Integer parseArgumentValue(final StmtContext ctx, final String value) { + return Integer.parseInt(value); + } + + @Override + public MinElementsStatement createDeclared( + final StmtContext ctx) { + return new MinElementsStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new MinElementsEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/effective/ModifierEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/ModifierEffectiveStatementImpl.java similarity index 73% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/effective/ModifierEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/ModifierEffectiveStatementImpl.java index 592a2e6668..b6f4200be4 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/effective/ModifierEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/ModifierEffectiveStatementImpl.java @@ -5,24 +5,23 @@ * 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.rfc7950.effective; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.modifier; import com.google.common.annotations.Beta; import com.google.common.base.MoreObjects; import org.opendaylight.yangtools.yang.model.api.stmt.ModifierEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ModifierStatement; import org.opendaylight.yangtools.yang.model.api.type.ModifierKind; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; /** * YANG 1.1 Modifier effective statement implementation. */ @Beta -public final class ModifierEffectiveStatementImpl - extends DeclaredEffectiveStatementBase +final class ModifierEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements ModifierEffectiveStatement { - public ModifierEffectiveStatementImpl(final StmtContext ctx) { + ModifierEffectiveStatementImpl(final StmtContext ctx) { super(ctx); } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/ModifierStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/ModifierStatementImpl.java new file mode 100644 index 0000000000..ae648881d3 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/ModifierStatementImpl.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2016 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.rfc7950.stmt.modifier; + +import com.google.common.annotations.Beta; +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.ModifierStatement; +import org.opendaylight.yangtools.yang.model.api.type.ModifierKind; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +/** + * Class providing necessary support for processing YANG 1.1 Modifier statement. + */ +@Beta +final class ModifierStatementImpl extends AbstractDeclaredStatement implements ModifierStatement { + ModifierStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public ModifierKind getValue() { + return argument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/ModifierStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/ModifierStatementSupport.java new file mode 100644 index 0000000000..976e67f69a --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/modifier/ModifierStatementSupport.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.modifier; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ModifierStatement; +import org.opendaylight.yangtools.yang.model.api.type.ModifierKind; +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.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; + +public final class ModifierStatementSupport extends AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.MODIFIER).build(); + + public ModifierStatementSupport() { + super(YangStmtMapping.MODIFIER); + } + + @Override + public ModifierKind parseArgumentValue(final StmtContext ctx, final String value) { + return SourceException.unwrap(ModifierKind.parse(value), ctx.getStatementSourceReference(), + "'%s' is not valid argument of modifier statement", value); + } + + @Override + public ModifierStatement createDeclared(final StmtContext ctx) { + return new ModifierStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new ModifierEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file 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/rfc7950/stmt/module/AbstractModuleStatementSupport.java similarity index 76% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ModuleStatementSupport.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/AbstractModuleStatementSupport.java index 28fb20bca2..2877572270 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/rfc7950/stmt/module/AbstractModuleStatementSupport.java @@ -5,7 +5,7 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.module; import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.firstAttributeOf; @@ -31,7 +31,6 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SemanticVersionNamespace; 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.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; import org.opendaylight.yangtools.yang.parser.spi.source.ImpPrefixToNamespace; import org.opendaylight.yangtools.yang.parser.spi.source.ImportPrefixToModuleCtx; import org.opendaylight.yangtools.yang.parser.spi.source.ModuleCtxToModuleQName; @@ -42,63 +41,31 @@ import org.opendaylight.yangtools.yang.parser.spi.source.ModuleNamespaceForBelon import org.opendaylight.yangtools.yang.parser.spi.source.ModuleQNameToModuleName; import org.opendaylight.yangtools.yang.parser.spi.source.PrefixToModule; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ModuleEffectiveStatementImpl; -public class ModuleStatementSupport extends +abstract class AbstractModuleStatementSupport extends AbstractStatementSupport> { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .MODULE) - .addAny(YangStmtMapping.ANYXML) - .addAny(YangStmtMapping.AUGMENT) - .addAny(YangStmtMapping.CHOICE) - .addOptional(YangStmtMapping.CONTACT) - .addAny(YangStmtMapping.CONTAINER) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.DEVIATION) - .addAny(YangStmtMapping.EXTENSION) - .addAny(YangStmtMapping.FEATURE) - .addAny(YangStmtMapping.GROUPING) - .addAny(YangStmtMapping.IDENTITY) - .addAny(YangStmtMapping.IMPORT) - .addAny(YangStmtMapping.INCLUDE) - .addAny(YangStmtMapping.LEAF) - .addAny(YangStmtMapping.LEAF_LIST) - .addAny(YangStmtMapping.LIST) - .addMandatory(YangStmtMapping.NAMESPACE) - .addAny(YangStmtMapping.NOTIFICATION) - .addOptional(YangStmtMapping.ORGANIZATION) - .addMandatory(YangStmtMapping.PREFIX) - .addOptional(YangStmtMapping.REFERENCE) - .addAny(YangStmtMapping.REVISION) - .addAny(YangStmtMapping.RPC) - .addAny(YangStmtMapping.TYPEDEF) - .addAny(YangStmtMapping.USES) - .addOptional(YangStmtMapping.YANG_VERSION) - .addOptional(SupportedExtensionsMapping.OPENCONFIG_VERSION) - .build(); - - public ModuleStatementSupport() { + AbstractModuleStatementSupport() { super(YangStmtMapping.MODULE); } @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { + public final String parseArgumentValue(final StmtContext ctx, final String value) { return value; } @Override - public ModuleStatement createDeclared(final StmtContext ctx) { + public final ModuleStatement createDeclared(final StmtContext ctx) { return new ModuleStatementImpl(ctx); } @Override - public EffectiveStatement createEffective( + public final EffectiveStatement createEffective( final StmtContext> ctx) { return new ModuleEffectiveStatementImpl(ctx); } @Override - public void onPreLinkageDeclared(final Mutable> stmt) { final String moduleName = stmt.getStatementArgument(); @@ -122,7 +89,7 @@ public class ModuleStatementSupport extends } @Override - public void onLinkageDeclared(final Mutable> stmt) { final Optional moduleNs = Optional.ofNullable(firstAttributeOf(stmt.declaredSubstatements(), @@ -170,9 +137,4 @@ public class ModuleStatementSupport extends final SemVerSourceIdentifier id = SemVerSourceIdentifier.create(moduleName, moduleSemVer); stmt.addToNs(SemanticVersionModuleNamespace.class, id, stmt); } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } } 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/rfc7950/stmt/module/ModuleEffectiveStatementImpl.java similarity index 88% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ModuleEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleEffectiveStatementImpl.java index 70d0d76d47..1059e75440 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/rfc7950/stmt/module/ModuleEffectiveStatementImpl.java @@ -5,7 +5,7 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.module; import com.google.common.base.Verify; import java.util.Objects; @@ -13,17 +13,17 @@ import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveModule; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.ModuleCtxToModuleQName; -public final class ModuleEffectiveStatementImpl extends AbstractEffectiveModule +final class ModuleEffectiveStatementImpl extends AbstractEffectiveModule implements ModuleEffectiveStatement { private final QNameModule qnameModule; - public ModuleEffectiveStatementImpl( + ModuleEffectiveStatementImpl( final StmtContext> ctx) { super(ctx); - qnameModule = Verify.verifyNotNull(ctx.getFromNamespace(ModuleCtxToModuleQName.class, ctx)); } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ModuleStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementImpl.java similarity index 78% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ModuleStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementImpl.java index fae53fd978..e100b0fc4f 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ModuleStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementImpl.java @@ -5,18 +5,18 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.module; import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement; import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractRootStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public class ModuleStatementImpl extends AbstractRootStatement implements ModuleStatement { - - protected ModuleStatementImpl(StmtContext context) { +final class ModuleStatementImpl extends AbstractRootStatement implements ModuleStatement { + ModuleStatementImpl(final StmtContext context) { super(context); } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementRFC6020Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementRFC6020Support.java new file mode 100644 index 0000000000..7ac2bc4256 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementRFC6020Support.java @@ -0,0 +1,50 @@ +/* + * 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.rfc7950.stmt.module; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.SupportedExtensionsMapping; + +public final class ModuleStatementRFC6020Support extends AbstractModuleStatementSupport { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .MODULE) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.AUGMENT) + .addAny(YangStmtMapping.CHOICE) + .addOptional(YangStmtMapping.CONTACT) + .addAny(YangStmtMapping.CONTAINER) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.DEVIATION) + .addAny(YangStmtMapping.EXTENSION) + .addAny(YangStmtMapping.FEATURE) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.IDENTITY) + .addAny(YangStmtMapping.IMPORT) + .addAny(YangStmtMapping.INCLUDE) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addMandatory(YangStmtMapping.NAMESPACE) + .addAny(YangStmtMapping.NOTIFICATION) + .addOptional(YangStmtMapping.ORGANIZATION) + .addMandatory(YangStmtMapping.PREFIX) + .addOptional(YangStmtMapping.REFERENCE) + .addAny(YangStmtMapping.REVISION) + .addAny(YangStmtMapping.RPC) + .addAny(YangStmtMapping.TYPEDEF) + .addAny(YangStmtMapping.USES) + .addOptional(YangStmtMapping.YANG_VERSION) + .addOptional(SupportedExtensionsMapping.OPENCONFIG_VERSION) + .build(); + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/ModuleStatementRfc7950Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementRFC7950Support.java similarity index 90% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/ModuleStatementRfc7950Support.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementRFC7950Support.java index c7b29914f6..a1ce07c52a 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/ModuleStatementRfc7950Support.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementRFC7950Support.java @@ -5,16 +5,15 @@ * 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.rfc7950; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.module; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ModuleStatementSupport; import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.SupportedExtensionsMapping; @Beta -public class ModuleStatementRfc7950Support extends ModuleStatementSupport { +public final class ModuleStatementRFC7950Support extends AbstractModuleStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping .MODULE) .addAny(YangStmtMapping.ANYDATA) 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/rfc7950/stmt/must/MustEffectiveStatementImpl.java similarity index 91% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/MustEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/must/MustEffectiveStatementImpl.java index 5e146c56fb..eb6d477140 100644 --- 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/rfc7950/stmt/must/MustEffectiveStatementImpl.java @@ -5,7 +5,7 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.must; import java.util.Objects; import java.util.Optional; @@ -17,10 +17,10 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageEffectiveState import org.opendaylight.yangtools.yang.model.api.stmt.MustEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceEffectiveStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public class MustEffectiveStatementImpl extends DeclaredEffectiveStatementBase +final class MustEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements MustDefinition, MustEffectiveStatement { private final RevisionAwareXPath xpath; @@ -29,7 +29,7 @@ public class MustEffectiveStatementImpl extends DeclaredEffectiveStatementBase ctx) { + MustEffectiveStatementImpl(final StmtContext ctx) { super(ctx); this.xpath = ctx.getStatementArgument(); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/must/MustStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/must/MustStatementImpl.java new file mode 100644 index 0000000000..1d448a4553 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/must/MustStatementImpl.java @@ -0,0 +1,55 @@ +/* + * 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.rfc7950.stmt.must; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; +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.MustStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class MustStatementImpl extends AbstractDeclaredStatement implements MustStatement { + MustStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public RevisionAwareXPath getCondition() { + return argument(); + } + + @Nullable + @Override + public ErrorAppTagStatement getErrorAppTagStatement() { + return firstDeclared(ErrorAppTagStatement.class); + } + + @Nullable + @Override + public ErrorMessageStatement getErrorMessageStatement() { + return firstDeclared(ErrorMessageStatement.class); + } + + @Nullable + @Override + public DescriptionStatement getDescription() { + return firstDeclared(DescriptionStatement.class); + } + + @Nullable + @Override + public ReferenceStatement getReference() { + return firstDeclared(ReferenceStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/must/MustStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/must/MustStatementSupport.java new file mode 100644 index 0000000000..4e62799d1f --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/must/MustStatementSupport.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.must; + +import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement; +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.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; + +public final class MustStatementSupport extends AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .MUST) + .addOptional(YangStmtMapping.DESCRIPTION) + .addOptional(YangStmtMapping.ERROR_APP_TAG) + .addOptional(YangStmtMapping.ERROR_MESSAGE) + .addOptional(YangStmtMapping.REFERENCE) + .build(); + + public MustStatementSupport() { + super(YangStmtMapping.MUST); + } + + @Override + public RevisionAwareXPath parseArgumentValue(final StmtContext ctx, final String value) { + return Utils.parseXPath(ctx, value); + } + + @Override + public MustStatement createDeclared(final StmtContext ctx) { + return new MustStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new MustEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/NamespaceEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/namespace/NamespaceEffectiveStatementImpl.java similarity index 65% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/NamespaceEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/namespace/NamespaceEffectiveStatementImpl.java index 137400948e..de893941d0 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/NamespaceEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/namespace/NamespaceEffectiveStatementImpl.java @@ -5,17 +5,17 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.namespace; import java.net.URI; import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class NamespaceEffectiveStatementImpl extends DeclaredEffectiveStatementBase +final class NamespaceEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements NamespaceEffectiveStatement { - public NamespaceEffectiveStatementImpl(final StmtContext ctx) { + NamespaceEffectiveStatementImpl(final StmtContext ctx) { super(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/namespace/NamespaceStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/namespace/NamespaceStatementImpl.java new file mode 100644 index 0000000000..e895a95911 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/namespace/NamespaceStatementImpl.java @@ -0,0 +1,26 @@ +/* + * 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.rfc7950.stmt.namespace; + +import java.net.URI; +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class NamespaceStatementImpl extends AbstractDeclaredStatement implements NamespaceStatement { + NamespaceStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public URI getUri() { + return argument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/namespace/NamespaceStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/namespace/NamespaceStatementSupport.java new file mode 100644 index 0000000000..001b577a9c --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/namespace/NamespaceStatementSupport.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.namespace; + +import java.net.URI; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceStatement; +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.meta.SubstatementValidator; + +public final class NamespaceStatementSupport extends AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .NAMESPACE) + .build(); + + public NamespaceStatementSupport() { + super(org.opendaylight.yangtools.yang.model.api.YangStmtMapping.NAMESPACE); + } + + @Override + public URI parseArgumentValue(final StmtContext ctx, final String value) { + return URI.create(value); + } + + @Override + public NamespaceStatement createDeclared(final StmtContext ctx) { + return new NamespaceStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new NamespaceEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/AbstractNotificationStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/AbstractNotificationStatementSupport.java new file mode 100644 index 0000000000..fe9e11f7b7 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/AbstractNotificationStatementSupport.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.notification; + +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +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.AbstractQNameStatementSupport; +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.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ChildSchemaNodes; + +abstract class AbstractNotificationStatementSupport + extends AbstractQNameStatementSupport> { + AbstractNotificationStatementSupport() { + super(YangStmtMapping.NOTIFICATION); + } + + @Override + public final QName parseArgumentValue(final StmtContext ctx, final String value) { + return StmtContextUtils.qnameFromArgument(ctx, value); + } + + @Override + public final void onStatementAdded( + final Mutable> stmt) { + stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); + } + + @Override + public final NotificationStatement createDeclared(final StmtContext ctx) { + return new NotificationStatementImpl(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/rfc7950/stmt/notification/NotificationEffectiveStatementImpl.java similarity index 95% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/NotificationEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationEffectiveStatementImpl.java index 08deb1f4a0..e6ea225fb3 100644 --- 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/rfc7950/stmt/notification/NotificationEffectiveStatementImpl.java @@ -1,11 +1,11 @@ -/** +/* * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.notification; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; @@ -25,11 +25,12 @@ import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.NotificationEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.NotificationStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveDocumentedDataNodeContainer; import org.opendaylight.yangtools.yang.parser.spi.meta.CopyHistory; import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public class NotificationEffectiveStatementImpl +final class NotificationEffectiveStatementImpl extends AbstractEffectiveDocumentedDataNodeContainer implements NotificationDefinition, NotificationEffectiveStatement { private final QName qname; @@ -40,7 +41,7 @@ public class NotificationEffectiveStatementImpl private final boolean addedByUses; private final Collection mustConstraints; - public NotificationEffectiveStatementImpl( + NotificationEffectiveStatementImpl( final StmtContext> ctx) { super(ctx); this.qname = ctx.getStatementArgument(); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationStatementImpl.java new file mode 100644 index 0000000000..54ed933ae7 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationStatementImpl.java @@ -0,0 +1,84 @@ +/* + * 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.rfc7950.stmt.notification; + +import java.util.Collection; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.stmt.DataDefinitionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.NotificationStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class NotificationStatementImpl extends AbstractDeclaredStatement implements NotificationStatement { + NotificationStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public QName getName() { + return argument(); + } + + @Nonnull + @Override + public Collection getTypedefs() { + return allDeclared(TypedefStatement.class); + } + + @Nonnull + @Override + public Collection getGroupings() { + return allDeclared(GroupingStatement.class); + } + + @Nonnull + @Override + public Collection getDataDefinitions() { + return allDeclared(DataDefinitionStatement.class); + } + + @Nonnull + @Override + public Collection getMusts() { + return allDeclared(MustStatement.class); + } + + @Nullable + @Override + public StatusStatement getStatus() { + return firstDeclared(StatusStatement.class); + } + + @Nullable + @Override + public DescriptionStatement getDescription() { + return firstDeclared(DescriptionStatement.class); + } + + @Nullable + @Override + public ReferenceStatement getReference() { + return firstDeclared(ReferenceStatement.class); + } + + @Nonnull + @Override + public Collection getIfFeatures() { + return allDeclared(IfFeatureStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationStatementRFC6020Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationStatementRFC6020Support.java new file mode 100644 index 0000000000..37a072440b --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationStatementRFC6020Support.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.notification; + +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +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 org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; + +public final class NotificationStatementRFC6020Support extends AbstractNotificationStatementSupport { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.NOTIFICATION) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.CHOICE) + .addAny(YangStmtMapping.CONTAINER) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.IF_FEATURE) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addAny(YangStmtMapping.TYPEDEF) + .addAny(YangStmtMapping.USES) + .build(); + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new NotificationEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/NotificationStatementRfc7950Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationStatementRFC7950Support.java similarity index 90% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/NotificationStatementRfc7950Support.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationStatementRFC7950Support.java index eeef7c7e10..227ca776fc 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/NotificationStatementRfc7950Support.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationStatementRFC7950Support.java @@ -5,7 +5,7 @@ * 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.rfc7950; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.notification; import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableSet; @@ -19,15 +19,13 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.NotificationStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.NotificationEffectiveStatementImpl; /** * Class providing necessary support for processing YANG 1.1 Notification * statement. */ @Beta -public final class NotificationStatementRfc7950Support extends NotificationStatementImpl.Definition { +public final class NotificationStatementRFC7950Support extends AbstractNotificationStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping .NOTIFICATION) .addAny(YangStmtMapping.ANYDATA) 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/rfc7950/stmt/ordered_by/OrderedByEffectiveStatementImpl.java similarity index 64% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/OrderedByEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/ordered_by/OrderedByEffectiveStatementImpl.java index e1735a5018..c3fdef5ad1 100644 --- 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/rfc7950/stmt/ordered_by/OrderedByEffectiveStatementImpl.java @@ -5,16 +5,16 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.ordered_by; import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class OrderedByEffectiveStatementImpl extends DeclaredEffectiveStatementBase +final class OrderedByEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements OrderedByEffectiveStatement { - public OrderedByEffectiveStatementImpl(final StmtContext ctx) { + OrderedByEffectiveStatementImpl(final 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/rfc7950/stmt/ordered_by/OrderedByStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/ordered_by/OrderedByStatementImpl.java new file mode 100644 index 0000000000..2629b81206 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/ordered_by/OrderedByStatementImpl.java @@ -0,0 +1,25 @@ +/* + * 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.rfc7950.stmt.ordered_by; + +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class OrderedByStatementImpl extends AbstractDeclaredStatement implements OrderedByStatement { + OrderedByStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public String getValue() { + return argument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/ordered_by/OrderedByStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/ordered_by/OrderedByStatementSupport.java new file mode 100644 index 0000000000..765564205e --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/ordered_by/OrderedByStatementSupport.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.ordered_by; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByStatement; +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.meta.SubstatementValidator; + +public final class OrderedByStatementSupport + extends AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.ORDERED_BY) + .build(); + + public OrderedByStatementSupport() { + super(YangStmtMapping.ORDERED_BY); + } + + @Override + public String parseArgumentValue(final StmtContext ctx, final String value) { + return value; + } + + @Override + public OrderedByStatement createDeclared(final StmtContext ctx) { + return new OrderedByStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new OrderedByEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } + + @Override + public String internArgument(final String rawArgument) { + if ("user".equals(rawArgument)) { + return "user"; + } else if ("system".equals(rawArgument)) { + return "system"; + } else { + return rawArgument; + } + } +} \ 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/rfc7950/stmt/organization/OrganizationEffectiveStatementImpl.java similarity index 63% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/OrganizationEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/organization/OrganizationEffectiveStatementImpl.java index f1997b471e..2029a16ad0 100644 --- 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/rfc7950/stmt/organization/OrganizationEffectiveStatementImpl.java @@ -5,17 +5,16 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.organization; import org.opendaylight.yangtools.yang.model.api.stmt.OrganizationEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.OrganizationStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class OrganizationEffectiveStatementImpl - extends DeclaredEffectiveStatementBase +final class OrganizationEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements OrganizationEffectiveStatement { - public OrganizationEffectiveStatementImpl(final StmtContext ctx) { + OrganizationEffectiveStatementImpl(final 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/rfc7950/stmt/organization/OrganizationStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/organization/OrganizationStatementImpl.java new file mode 100644 index 0000000000..dca19cacf1 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/organization/OrganizationStatementImpl.java @@ -0,0 +1,25 @@ +/* + * 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.rfc7950.stmt.organization; + +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.OrganizationStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class OrganizationStatementImpl extends AbstractDeclaredStatement implements OrganizationStatement { + OrganizationStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public String getText() { + return argument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/organization/OrganizationStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/organization/OrganizationStatementSupport.java new file mode 100644 index 0000000000..ec7b6ea348 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/organization/OrganizationStatementSupport.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.organization; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.OrganizationStatement; +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.meta.SubstatementValidator; + +public final class OrganizationStatementSupport extends + AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.ORGANIZATION) + .build(); + + public OrganizationStatementSupport() { + super(YangStmtMapping.ORGANIZATION); + } + + @Override + public String parseArgumentValue(final StmtContext ctx, final String value) { + return value; + } + + @Override + public OrganizationStatement createDeclared( + final StmtContext ctx) { + return new OrganizationStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new OrganizationEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/AbstractOutputStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/AbstractOutputStatementSupport.java new file mode 100644 index 0000000000..8b6856ac5f --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/AbstractOutputStatementSupport.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.output; + +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; +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.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ChildSchemaNodes; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.OutputEffectiveStatementImpl; + +abstract class AbstractOutputStatementSupport extends + AbstractQNameStatementSupport> { + AbstractOutputStatementSupport() { + super(YangStmtMapping.OUTPUT); + } + + @Override + public final QName parseArgumentValue(final StmtContext ctx, final String value) { + return StmtContextUtils.qnameFromArgument(ctx, "output"); + } + + @Override + public final void onStatementAdded(final Mutable> stmt) { + stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); + } + + @Override + public final OutputStatement createDeclared(final StmtContext ctx) { + return new OutputStatementImpl(ctx); + } + + @Override + public final EffectiveStatement createEffective( + final StmtContext> ctx) { + return new OutputEffectiveStatementImpl(ctx); + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/OutputStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/OutputStatementImpl.java new file mode 100644 index 0000000000..3b73a17df3 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/OutputStatementImpl.java @@ -0,0 +1,49 @@ +/* + * 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.rfc7950.stmt.output; + +import java.util.Collection; +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.common.QName; +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.MustStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class OutputStatementImpl extends AbstractDeclaredStatement implements OutputStatement { + OutputStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public Collection getTypedefs() { + return allDeclared(TypedefStatement.class); + } + + @Nonnull + @Override + public Collection getGroupings() { + return allDeclared(GroupingStatement.class); + } + + @Nonnull + @Override + public Collection getDataDefinitions() { + return allDeclared(DataDefinitionStatement.class); + } + + @Nonnull + @Override + public Collection getMusts() { + return allDeclared(MustStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/OutputStatementRFC6020Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/OutputStatementRFC6020Support.java new file mode 100644 index 0000000000..57ae45eb16 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/OutputStatementRFC6020Support.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.output; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; + +public final class OutputStatementRFC6020Support extends AbstractOutputStatementSupport { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .OUTPUT) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.CHOICE) + .addAny(YangStmtMapping.CONTAINER) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addAny(YangStmtMapping.TYPEDEF) + .addAny(YangStmtMapping.USES) + .build(); + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/OutputStatementRfc7950Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/OutputStatementRFC7950Support.java similarity index 85% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/OutputStatementRfc7950Support.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/OutputStatementRFC7950Support.java index 57b87e24be..add0b25664 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/OutputStatementRfc7950Support.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/OutputStatementRFC7950Support.java @@ -5,18 +5,17 @@ * 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.rfc7950; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.output; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.OutputStatementImpl; /** * Class providing necessary support for processing YANG 1.1 Output statement. */ @Beta -public final class OutputStatementRfc7950Support extends OutputStatementImpl.Definition { +public final class OutputStatementRFC7950Support extends AbstractOutputStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping .OUTPUT) .addAny(YangStmtMapping.ANYDATA) diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/package-info.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/package-info.java new file mode 100644 index 0000000000..5a409a9c3e --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/package-info.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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 + */ +/** + * Statement library for YANG version 1 and 1.1, as defined in RFC6020 and RFC7950. Since YANG 1.1 is built on top + * of YANG 1 and our semantic model follows version 1.1, base statements are organized in a single package hierarchy. + * + *

+ * Each statement has its own package underneath this package, from which it exports the StatementSupport instance, + * which can be wired into the statement reactor. Other classes should be kept package-private, so inter-statement + * interactions follow properly-exposed API interfaces. + * + *

+ * Common base and utility classes for individual statement implementations are maintained in this package. + * + * @author Robert Varga + */ +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt; \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/PathEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/path/PathEffectiveStatementImpl.java similarity index 65% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/PathEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/path/PathEffectiveStatementImpl.java index b0efe94cbd..a2972627af 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/PathEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/path/PathEffectiveStatementImpl.java @@ -5,18 +5,17 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.path; import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; import org.opendaylight.yangtools.yang.model.api.stmt.PathEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PathStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class PathEffectiveStatementImpl - extends DeclaredEffectiveStatementBase +final class PathEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements PathEffectiveStatement { - public PathEffectiveStatementImpl(final StmtContext ctx) { + PathEffectiveStatementImpl(final 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/rfc7950/stmt/path/PathStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/path/PathStatementImpl.java new file mode 100644 index 0000000000..bc0df76b04 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/path/PathStatementImpl.java @@ -0,0 +1,26 @@ +/* + * 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.rfc7950.stmt.path; + +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; +import org.opendaylight.yangtools.yang.model.api.stmt.PathStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class PathStatementImpl extends AbstractDeclaredStatement implements PathStatement { + PathStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public String getValue() { + return rawArgument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/path/PathStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/path/PathStatementSupport.java new file mode 100644 index 0000000000..5e5c5e3085 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/path/PathStatementSupport.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.path; + +import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.PathStatement; +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.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; + +public final class PathStatementSupport extends AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .PATH) + .build(); + + public PathStatementSupport() { + super(YangStmtMapping.PATH); + } + + @Override + public RevisionAwareXPath parseArgumentValue(final StmtContext ctx, final String value) { + return Utils.parseXPath(ctx, value); + } + + @Override + public PathStatement createDeclared(final StmtContext ctx) { + return new PathStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new PathEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/AbstractPatternStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/AbstractPatternStatementSupport.java new file mode 100644 index 0000000000..814fbafecc --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/AbstractPatternStatementSupport.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.pattern; + +import java.util.Optional; +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.PatternStatement; +import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint; +import org.opendaylight.yangtools.yang.model.util.RegexUtils; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +abstract class AbstractPatternStatementSupport extends AbstractStatementSupport> { + private static final Logger LOG = LoggerFactory.getLogger(AbstractPatternStatementSupport.class); + + AbstractPatternStatementSupport() { + super(YangStmtMapping.PATTERN); + } + + @Override + public final PatternConstraint parseArgumentValue(final StmtContext ctx, final String value) { + final String pattern = RegexUtils.getJavaRegexFromXSD(value); + + try { + Pattern.compile(pattern); + } catch (final PatternSyntaxException e) { + LOG.debug("Pattern \"{}\" failed to compile at {}", pattern, ctx.getStatementSourceReference(), e); + return null; + } + + return new PatternConstraintImpl(pattern, value, Optional.empty(), Optional.empty()); + } + + @Override + public final PatternStatement createDeclared(final StmtContext ctx) { + return new PatternStatementImpl(ctx); + } + + @Override + public final EffectiveStatement createEffective( + final StmtContext> ctx) { + return new PatternEffectiveStatementImpl(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/type/PatternConstraintEffectiveImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/PatternConstraintImpl.java similarity index 88% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/PatternConstraintEffectiveImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/PatternConstraintImpl.java index 243541b52a..2d1f229aa9 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/PatternConstraintEffectiveImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/PatternConstraintImpl.java @@ -1,11 +1,11 @@ -/** +/* * 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.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.pattern; import static java.util.Objects.requireNonNull; @@ -15,7 +15,7 @@ import java.util.Optional; import org.opendaylight.yangtools.yang.model.api.type.ModifierKind; import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint; -public class PatternConstraintEffectiveImpl implements PatternConstraint { +final class PatternConstraintImpl implements PatternConstraint { private final String regEx; private final String rawRegEx; @@ -25,12 +25,12 @@ public class PatternConstraintEffectiveImpl implements PatternConstraint { private final String errorMessage; private final ModifierKind modifier; - public PatternConstraintEffectiveImpl(final String regex, final String rawRegex, + PatternConstraintImpl(final String regex, final String rawRegex, final Optional description, final Optional reference) { this(regex, rawRegex, description.orElse(null), reference.orElse(null), null, null, null); } - public PatternConstraintEffectiveImpl(final String regex, final String rawRegex, final String description, + PatternConstraintImpl(final String regex, final String rawRegex, final String description, final String reference, final String errorAppTag, final String errorMessage, final ModifierKind modifier) { this.regEx = requireNonNull(regex, "regex must not be null"); this.rawRegEx = requireNonNull(rawRegex, "raw regex must not be null"); @@ -93,7 +93,7 @@ public class PatternConstraintEffectiveImpl implements PatternConstraint { if (getClass() != obj.getClass()) { return false; } - final PatternConstraintEffectiveImpl other = (PatternConstraintEffectiveImpl) obj; + final PatternConstraintImpl other = (PatternConstraintImpl) obj; return Objects.equals(description, other.description) && Objects.equals(errorAppTag, other.errorAppTag) && Objects.equals(errorMessage, other.errorMessage) && Objects.equals(reference, other.reference) && Objects.equals(regEx, other.regEx) && Objects.equals(modifier, other.modifier); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/PatternEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/PatternEffectiveStatementImpl.java similarity index 75% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/PatternEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/PatternEffectiveStatementImpl.java index 927e68710b..747fb8d23e 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/PatternEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/PatternEffectiveStatementImpl.java @@ -1,21 +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.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.pattern; import org.opendaylight.yangtools.yang.model.api.stmt.PatternEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PatternStatement; import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractConstraintEffectiveStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public class PatternEffectiveStatementImpl +final class PatternEffectiveStatementImpl extends AbstractConstraintEffectiveStatement implements PatternEffectiveStatement { - public PatternEffectiveStatementImpl(final StmtContext ctx) { + PatternEffectiveStatementImpl(final StmtContext ctx) { super(ctx); } @@ -25,7 +26,7 @@ public class PatternEffectiveStatementImpl return argument; } - return new PatternConstraintEffectiveImpl(argument.getJavaPatternString(), + return new PatternConstraintImpl(argument.getJavaPatternString(), argument.getRegularExpressionString(), getDescription().orElse(null), getReference().orElse(null), getErrorAppTag().orElse(null), getErrorMessage().orElse(null), getModifier()); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/PatternStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/PatternStatementImpl.java new file mode 100644 index 0000000000..4da40d85e4 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/PatternStatementImpl.java @@ -0,0 +1,57 @@ +/* + * 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.rfc7950.stmt.pattern; + +import javax.annotation.Nonnull; +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.ModifierStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.PatternStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; +import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class PatternStatementImpl extends AbstractDeclaredStatement implements PatternStatement { + + protected PatternStatementImpl(final StmtContext context) { + super(context); + } + + @Override + public ErrorAppTagStatement getErrorAppTagStatement() { + return firstDeclared(ErrorAppTagStatement.class); + } + + @Override + public ErrorMessageStatement getErrorMessageStatement() { + return firstDeclared(ErrorMessageStatement.class); + } + + @Override + public DescriptionStatement getDescription() { + return firstDeclared(DescriptionStatement.class); + } + + @Override + public ModifierStatement getModifierStatement() { + return firstDeclared(ModifierStatement.class); + } + + @Override + public ReferenceStatement getReference() { + return firstDeclared(ReferenceStatement.class); + } + + @Nonnull + @Override + public PatternConstraint getValue() { + return argument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/PatternStatementRFC6020Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/PatternStatementRFC6020Support.java new file mode 100644 index 0000000000..6b0539ff18 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/PatternStatementRFC6020Support.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.pattern; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; + +public final class PatternStatementRFC6020Support extends AbstractPatternStatementSupport { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .PATTERN) + .addOptional(YangStmtMapping.DESCRIPTION) + .addOptional(YangStmtMapping.ERROR_APP_TAG) + .addOptional(YangStmtMapping.ERROR_MESSAGE) + .addOptional(YangStmtMapping.REFERENCE) + .build(); + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/PatternStatementRfc7950Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/PatternStatementRFC7950Support.java similarity index 83% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/PatternStatementRfc7950Support.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/PatternStatementRFC7950Support.java index f6fdd062ba..e91190a4c2 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/PatternStatementRfc7950Support.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/PatternStatementRFC7950Support.java @@ -5,18 +5,17 @@ * 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.rfc7950; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.pattern; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.PatternStatementImpl; /** * Class providing necessary support for processing YANG 1.1 Pattern statement. */ @Beta -public final class PatternStatementRfc7950Support extends PatternStatementImpl.Definition { +public final class PatternStatementRFC7950Support extends AbstractPatternStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping .PATTERN) .addOptional(YangStmtMapping.DESCRIPTION) 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/rfc7950/stmt/position/PositionEffectiveStatementImpl.java similarity index 64% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/PositionEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/PositionEffectiveStatementImpl.java index d54b12644d..e1719bcb2e 100644 --- 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/rfc7950/stmt/position/PositionEffectiveStatementImpl.java @@ -5,16 +5,16 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.position; import org.opendaylight.yangtools.yang.model.api.stmt.PositionEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PositionStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class PositionEffectiveStatementImpl extends DeclaredEffectiveStatementBase +final class PositionEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements PositionEffectiveStatement { - public PositionEffectiveStatementImpl(final StmtContext ctx) { + PositionEffectiveStatementImpl(final 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/rfc7950/stmt/position/PositionStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/PositionStatementImpl.java new file mode 100644 index 0000000000..d206ff677d --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/PositionStatementImpl.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.rfc7950.stmt.position; + +import org.opendaylight.yangtools.yang.model.api.stmt.PositionStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class PositionStatementImpl extends AbstractDeclaredStatement implements PositionStatement { + PositionStatementImpl(final StmtContext context) { + super(context); + } + + @Override + public long getValue() { + return argument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/PositionStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/PositionStatementSupport.java new file mode 100644 index 0000000000..38c8f302a3 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/PositionStatementSupport.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.position; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.PositionStatement; +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.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; + +public final class PositionStatementSupport + extends AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.POSITION).build(); + + public PositionStatementSupport() { + super(YangStmtMapping.POSITION); + } + + @Override + public Long parseArgumentValue(final StmtContext ctx, final String value) { + try { + return Long.parseLong(value); + } catch (NumberFormatException e) { + throw new SourceException(String.format("Bit position value %s is not valid integer", value), + ctx.getStatementSourceReference(), e); + } + } + + @Override + public PositionStatement createDeclared(final StmtContext ctx) { + return new PositionStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new PositionEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/PrefixEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/prefix/PrefixEffectiveStatementImpl.java similarity index 64% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/PrefixEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/prefix/PrefixEffectiveStatementImpl.java index dd79c4d468..b772ed1a3b 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/PrefixEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/prefix/PrefixEffectiveStatementImpl.java @@ -5,16 +5,16 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.prefix; import org.opendaylight.yangtools.yang.model.api.stmt.PrefixEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class PrefixEffectiveStatementImpl extends DeclaredEffectiveStatementBase +final class PrefixEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements PrefixEffectiveStatement { - public PrefixEffectiveStatementImpl(final StmtContext ctx) { + PrefixEffectiveStatementImpl(final StmtContext ctx) { super(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/prefix/PrefixStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/prefix/PrefixStatementImpl.java new file mode 100644 index 0000000000..c338e2c621 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/prefix/PrefixStatementImpl.java @@ -0,0 +1,25 @@ +/* + * 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.rfc7950.stmt.prefix; + +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class PrefixStatementImpl extends AbstractDeclaredStatement implements PrefixStatement { + PrefixStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public String getValue() { + return rawArgument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/prefix/PrefixStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/prefix/PrefixStatementSupport.java new file mode 100644 index 0000000000..96cfc7f4dd --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/prefix/PrefixStatementSupport.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.prefix; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; +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.meta.SubstatementValidator; + +public final class PrefixStatementSupport + extends AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .PREFIX) + .build(); + + public PrefixStatementSupport() { + super(YangStmtMapping.PREFIX); + } + + @Override + public String parseArgumentValue(final StmtContext ctx, final String value) { + return value; + } + + @Override + public PrefixStatement createDeclared(final StmtContext ctx) { + return new PrefixStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new PrefixEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/PresenceEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/presence/PresenceEffectiveStatementImpl.java similarity index 64% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/PresenceEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/presence/PresenceEffectiveStatementImpl.java index 828d4fc987..31d427c698 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/PresenceEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/presence/PresenceEffectiveStatementImpl.java @@ -5,16 +5,16 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.presence; import org.opendaylight.yangtools.yang.model.api.stmt.PresenceEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PresenceStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class PresenceEffectiveStatementImpl extends DeclaredEffectiveStatementBase +final class PresenceEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements PresenceEffectiveStatement { - public PresenceEffectiveStatementImpl(final StmtContext ctx) { + PresenceEffectiveStatementImpl(final StmtContext ctx) { super(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/presence/PresenceStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/presence/PresenceStatementImpl.java new file mode 100644 index 0000000000..0bce15f117 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/presence/PresenceStatementImpl.java @@ -0,0 +1,25 @@ +/* + * 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.rfc7950.stmt.presence; + +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.PresenceStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class PresenceStatementImpl extends AbstractDeclaredStatement implements PresenceStatement { + PresenceStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public String getValue() { + return argument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/presence/PresenceStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/presence/PresenceStatementSupport.java new file mode 100644 index 0000000000..fecb7a1f49 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/presence/PresenceStatementSupport.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.presence; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.PresenceStatement; +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.meta.SubstatementValidator; + +public final class PresenceStatementSupport + extends AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .PRESENCE) + .build(); + + public PresenceStatementSupport() { + super(YangStmtMapping.PRESENCE); + } + + @Override + public String parseArgumentValue(final StmtContext ctx, final String value) { + return value; + } + + @Override + public PresenceStatement createDeclared(final StmtContext ctx) { + return new PresenceStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new PresenceEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/RangeEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RangeEffectiveStatementImpl.java similarity index 61% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/RangeEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RangeEffectiveStatementImpl.java index 497a4f87a2..4a24b53fad 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/RangeEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RangeEffectiveStatementImpl.java @@ -1,21 +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.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.range; import java.util.List; import org.opendaylight.yangtools.yang.model.api.stmt.RangeEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RangeStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ValueRange; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractListConstraintEffectiveStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public class RangeEffectiveStatementImpl extends AbstractListConstraintEffectiveStatement +// FIXME: hide this class +public final class RangeEffectiveStatementImpl + extends AbstractListConstraintEffectiveStatement implements RangeEffectiveStatement { - public RangeEffectiveStatementImpl(final StmtContext, RangeStatement, ?> ctx) { + RangeEffectiveStatementImpl(final StmtContext, RangeStatement, ?> ctx) { super(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RangeStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RangeStatementImpl.java new file mode 100644 index 0000000000..5050af1fdf --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RangeStatementImpl.java @@ -0,0 +1,44 @@ +/* + * 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.rfc7950.stmt.range; + +import java.util.List; +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.RangeStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ValueRange; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class RangeStatementImpl extends AbstractDeclaredStatement> implements RangeStatement { + RangeStatementImpl(final StmtContext, RangeStatement, ?> context) { + super(context); + } + + @Override + public ErrorAppTagStatement getErrorAppTagStatement() { + return firstDeclared(ErrorAppTagStatement.class); + } + + @Override + public ErrorMessageStatement getErrorMessageStatement() { + return firstDeclared(ErrorMessageStatement.class); + } + + @Override + public DescriptionStatement getDescription() { + return firstDeclared(DescriptionStatement.class); + } + + @Override + public ReferenceStatement getReference() { + return firstDeclared(ReferenceStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RangeStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RangeStatementSupport.java new file mode 100644 index 0000000000..09f8d48b09 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RangeStatementSupport.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.range; + +import java.util.List; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.RangeStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ValueRange; +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.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.TypeUtils; + +public final class RangeStatementSupport extends AbstractStatementSupport, RangeStatement, + EffectiveStatement, RangeStatement>> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .RANGE) + .addOptional(YangStmtMapping.DESCRIPTION) + .addOptional(YangStmtMapping.ERROR_APP_TAG) + .addOptional(YangStmtMapping.ERROR_MESSAGE) + .addOptional(YangStmtMapping.REFERENCE) + .build(); + + public RangeStatementSupport() { + super(YangStmtMapping.RANGE); + } + + @Override + public List parseArgumentValue(final StmtContext ctx, final String value) { + return TypeUtils.parseRangeListFromString(ctx, value); + } + + @Override + public RangeStatement createDeclared(final StmtContext, RangeStatement, ?> ctx) { + return new RangeStatementImpl(ctx); + } + + @Override + public EffectiveStatement, RangeStatement> createEffective( + final StmtContext, RangeStatement, EffectiveStatement, + RangeStatement>> ctx) { + return new RangeEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ReferenceEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/reference/ReferenceEffectiveStatementImpl.java similarity index 64% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ReferenceEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/reference/ReferenceEffectiveStatementImpl.java index 8c9ab19831..6a87987026 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ReferenceEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/reference/ReferenceEffectiveStatementImpl.java @@ -5,16 +5,16 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.reference; import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class ReferenceEffectiveStatementImpl extends DeclaredEffectiveStatementBase +final class ReferenceEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements ReferenceEffectiveStatement { - public ReferenceEffectiveStatementImpl(final StmtContext ctx) { + ReferenceEffectiveStatementImpl(final StmtContext ctx) { super(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/reference/ReferenceStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/reference/ReferenceStatementImpl.java new file mode 100644 index 0000000000..6c5a1e19a8 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/reference/ReferenceStatementImpl.java @@ -0,0 +1,25 @@ +/* + * 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.rfc7950.stmt.reference; + +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class ReferenceStatementImpl extends AbstractDeclaredStatement implements ReferenceStatement { + ReferenceStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public String getText() { + return rawArgument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/reference/ReferenceStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/reference/ReferenceStatementSupport.java new file mode 100644 index 0000000000..f29142d45d --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/reference/ReferenceStatementSupport.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.reference; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; +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.meta.SubstatementValidator; + +public final class ReferenceStatementSupport extends AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.REFERENCE) + .build(); + + public ReferenceStatementSupport() { + super(YangStmtMapping.REFERENCE); + } + + @Override + public String parseArgumentValue(final StmtContext ctx, final String value) { + return value; + } + + @Override + public ReferenceStatement createDeclared(final StmtContext ctx) { + return new ReferenceStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new ReferenceEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/AbstractRefineStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/AbstractRefineStatementSupport.java new file mode 100644 index 0000000000..f2979ebd73 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/AbstractRefineStatementSupport.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.refine; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +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.AbstractStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; + +abstract class AbstractRefineStatementSupport extends AbstractStatementSupport> { + + AbstractRefineStatementSupport() { + super(YangStmtMapping.REFINE); + } + + @Override + public final SchemaNodeIdentifier parseArgumentValue(final StmtContext ctx, final String value) { + return Utils.nodeIdentifierFromPath(ctx, value); + } + + @Override + public final RefineStatement createDeclared(final StmtContext ctx) { + return new RefineStatementImpl(ctx); + } + + @Override + public final EffectiveStatement createEffective( + final StmtContext> ctx) { + return new RefineEffectiveStatementImpl(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/rfc7950/stmt/refine/RefineEffectiveStatementImpl.java similarity index 89% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RefineEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/RefineEffectiveStatementImpl.java index 59495b898a..6655b5a210 100644 --- 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/rfc7950/stmt/refine/RefineEffectiveStatementImpl.java @@ -5,7 +5,7 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.refine; import com.google.common.collect.ImmutableList; import java.util.List; @@ -18,9 +18,10 @@ import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; import org.opendaylight.yangtools.yang.model.api.stmt.RefineEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RefineStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.AbstractEffectiveDocumentedNode; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveDocumentedNode; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +// FIXME: hide this class public final class RefineEffectiveStatementImpl extends AbstractEffectiveDocumentedNode implements RefineEffectiveStatement, SchemaNode { @@ -30,7 +31,7 @@ public final class RefineEffectiveStatementImpl private final List unknownNodes; private final SchemaNode refineTargetNode; - public RefineEffectiveStatementImpl(final StmtContext ctx) { + RefineEffectiveStatementImpl(final StmtContext ctx) { super(ctx); qname = ctx.getStatementArgument().getLastComponent(); path = ctx.getSchemaPath().get(); 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/rfc7950/stmt/refine/RefineStatementImpl.java similarity index 55% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RefineStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/RefineStatementImpl.java index 336fb2636a..61b7a52d5e 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/rfc7950/stmt/refine/RefineStatementImpl.java @@ -5,14 +5,11 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.refine; import java.util.Collection; import javax.annotation.Nonnull; import javax.annotation.Nullable; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; @@ -26,59 +23,13 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RefineStatement; import org.opendaylight.yangtools.yang.model.api.stmt.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.StmtContext; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.RefineEffectiveStatementImpl; - -public class RefineStatementImpl extends AbstractDeclaredStatement implements RefineStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .REFINE) - .addOptional(YangStmtMapping.DEFAULT) - .addOptional(YangStmtMapping.DESCRIPTION) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.CONFIG) - .addOptional(YangStmtMapping.MANDATORY) - .addOptional(YangStmtMapping.PRESENCE) - .addAny(YangStmtMapping.MUST) - .addOptional(YangStmtMapping.MIN_ELEMENTS) - .addOptional(YangStmtMapping.MAX_ELEMENTS) - .build(); - protected RefineStatementImpl(final StmtContext context) { +final class RefineStatementImpl extends AbstractDeclaredStatement implements RefineStatement { + RefineStatementImpl(final StmtContext context) { super(context); } - public static class Definition extends AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.REFINE); - } - - @Override - public SchemaNodeIdentifier parseArgumentValue(final StmtContext ctx, final String value) { - return Utils.nodeIdentifierFromPath(ctx, value); - } - - @Override - public RefineStatement createDeclared(final StmtContext ctx) { - return new RefineStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new RefineEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - @Override public String getTargetNode() { return rawArgument(); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/RefineStatementRFC6020Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/RefineStatementRFC6020Support.java new file mode 100644 index 0000000000..a25e6089b5 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/RefineStatementRFC6020Support.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.refine; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; + +public final class RefineStatementRFC6020Support extends AbstractRefineStatementSupport { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.REFINE) + .addOptional(YangStmtMapping.DEFAULT) + .addOptional(YangStmtMapping.DESCRIPTION) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.CONFIG) + .addOptional(YangStmtMapping.MANDATORY) + .addOptional(YangStmtMapping.PRESENCE) + .addAny(YangStmtMapping.MUST) + .addOptional(YangStmtMapping.MIN_ELEMENTS) + .addOptional(YangStmtMapping.MAX_ELEMENTS) + .build(); + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/RefineStatementRfc7950Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/RefineStatementRFC7950Support.java similarity index 85% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/RefineStatementRfc7950Support.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/RefineStatementRFC7950Support.java index 8dcdd400c1..a238701146 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/RefineStatementRfc7950Support.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/RefineStatementRFC7950Support.java @@ -6,18 +6,17 @@ * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc7950; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.refine; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.RefineStatementImpl; /** * Class providing necessary support for processing YANG 1.1 Refine statement. */ @Beta -public final class RefineStatementRfc7950Support extends RefineStatementImpl.Definition { +public final class RefineStatementRFC7950Support extends AbstractRefineStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping .REFINE) .addOptional(YangStmtMapping.DEFAULT) 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/rfc7950/stmt/require_instance/RequireInstanceEffectiveStatementImpl.java similarity index 70% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RequireInstanceEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/require_instance/RequireInstanceEffectiveStatementImpl.java index 7c572ab73e..0dd3aa2644 100644 --- 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/rfc7950/stmt/require_instance/RequireInstanceEffectiveStatementImpl.java @@ -5,17 +5,17 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.require_instance; import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class RequireInstanceEffectiveStatementImpl +final class RequireInstanceEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements RequireInstanceEffectiveStatement { - public RequireInstanceEffectiveStatementImpl(final StmtContext ctx) { + RequireInstanceEffectiveStatementImpl(final 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/rfc7950/stmt/require_instance/RequireInstanceStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/require_instance/RequireInstanceStatementImpl.java new file mode 100644 index 0000000000..708bab32af --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/require_instance/RequireInstanceStatementImpl.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.rfc7950.stmt.require_instance; + +import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class RequireInstanceStatementImpl extends AbstractDeclaredStatement + implements RequireInstanceStatement { + RequireInstanceStatementImpl(final StmtContext context) { + super(context); + } + + @Override + public boolean getValue() { + return argument().booleanValue(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/require_instance/RequireInstanceStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/require_instance/RequireInstanceStatementSupport.java new file mode 100644 index 0000000000..c5c62dd3a6 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/require_instance/RequireInstanceStatementSupport.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.require_instance; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceStatement; +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.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; + +public final class RequireInstanceStatementSupport extends AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.REQUIRE_INSTANCE).build(); + + public RequireInstanceStatementSupport() { + super(YangStmtMapping.REQUIRE_INSTANCE); + } + + @Override + public Boolean parseArgumentValue(final StmtContext ctx, final String value) { + return Utils.parseBoolean(ctx, value); + } + + @Override + public RequireInstanceStatement createDeclared(final StmtContext ctx) { + return new RequireInstanceStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new RequireInstanceEffectiveStatementImpl(ctx); + } + + @Override + public String internArgument(final String rawArgument) { + return Utils.internBoolean(rawArgument); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file 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/rfc7950/stmt/revision/RevisionEffectiveStatementImpl.java similarity index 83% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RevisionEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/revision/RevisionEffectiveStatementImpl.java index feb2eee62b..115de7fb86 100644 --- 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/rfc7950/stmt/revision/RevisionEffectiveStatementImpl.java @@ -5,7 +5,7 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.revision; import java.util.Optional; import org.opendaylight.yangtools.yang.common.Revision; @@ -14,16 +14,16 @@ import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionEffectiveStatem import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RevisionEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RevisionStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class RevisionEffectiveStatementImpl extends DeclaredEffectiveStatementBase +final class RevisionEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements DocumentedNode, RevisionEffectiveStatement { private final String reference; private final String description; - public RevisionEffectiveStatementImpl(final StmtContext ctx) { + RevisionEffectiveStatementImpl(final StmtContext ctx) { super(ctx); final DescriptionEffectiveStatement descStmt = firstEffective(DescriptionEffectiveStatement.class); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/revision/RevisionStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/revision/RevisionStatementImpl.java new file mode 100644 index 0000000000..0762a1799d --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/revision/RevisionStatementImpl.java @@ -0,0 +1,41 @@ +/* + * 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.rfc7950.stmt.revision; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import org.opendaylight.yangtools.yang.common.Revision; +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.RevisionStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class RevisionStatementImpl extends AbstractDeclaredStatement implements RevisionStatement { + RevisionStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public Revision getDate() { + return argument(); + } + + @Nullable + @Override + public DescriptionStatement getDescription() { + return firstDeclared(DescriptionStatement.class); + } + + @Nullable + @Override + public ReferenceStatement getReference() { + return firstDeclared(ReferenceStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/revision/RevisionStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/revision/RevisionStatementSupport.java new file mode 100644 index 0000000000..d1918e5025 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/revision/RevisionStatementSupport.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.revision; + +import java.time.format.DateTimeParseException; +import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.RevisionStatement; +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.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; + +public final class RevisionStatementSupport extends + AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.REVISION) + .addOptional(YangStmtMapping.DESCRIPTION) + .addOptional(YangStmtMapping.REFERENCE) + .build(); + + public RevisionStatementSupport() { + super(YangStmtMapping.REVISION); + } + + @Override + public Revision parseArgumentValue(final StmtContext ctx, final String value) { + try { + return Revision.of(value); + } catch (DateTimeParseException e) { + throw new SourceException(ctx.getStatementSourceReference(), e, + "Revision value %s is not in required format yyyy-MM-dd", value); + } + } + + @Override + public RevisionStatement createDeclared(final StmtContext ctx) { + return new RevisionStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new RevisionEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ 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/rfc7950/stmt/revision_date/RevisionDateEffectiveStatementImpl.java similarity index 65% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RevisionDateEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/revision_date/RevisionDateEffectiveStatementImpl.java index 57160d3bae..13799eb539 100644 --- 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/rfc7950/stmt/revision_date/RevisionDateEffectiveStatementImpl.java @@ -5,18 +5,17 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.revision_date; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class RevisionDateEffectiveStatementImpl - extends DeclaredEffectiveStatementBase +final class RevisionDateEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements RevisionDateEffectiveStatement { - public RevisionDateEffectiveStatementImpl(final StmtContext ctx) { + RevisionDateEffectiveStatementImpl(final StmtContext ctx) { super(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/revision_date/RevisionDateStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/revision_date/RevisionDateStatementImpl.java new file mode 100644 index 0000000000..920113d06f --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/revision_date/RevisionDateStatementImpl.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.rfc7950.stmt.revision_date; + +import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class RevisionDateStatementImpl extends AbstractDeclaredStatement implements RevisionDateStatement { + RevisionDateStatementImpl(final StmtContext context) { + super(context); + } + + @Override + public Revision getDate() { + return argument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/revision_date/RevisionDateStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/revision_date/RevisionDateStatementSupport.java new file mode 100644 index 0000000000..911db9888d --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/revision_date/RevisionDateStatementSupport.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.revision_date; + +import java.time.format.DateTimeParseException; +import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement; +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.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; + +public final class RevisionDateStatementSupport extends AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.REVISION_DATE).build(); + + public RevisionDateStatementSupport() { + super(YangStmtMapping.REVISION_DATE); + } + + @Override + public Revision parseArgumentValue(final StmtContext ctx, final String value) { + try { + return Revision.of(value); + } catch (DateTimeParseException e) { + throw new SourceException(ctx.getStatementSourceReference(), e, + "Revision value %s is not in required format yyyy-MM-dd", value); + } + } + + @Override + public RevisionDateStatement createDeclared(final StmtContext ctx) { + return new RevisionDateStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective(final StmtContext> ctx) { + return new RevisionDateEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/AbstractRpcStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/AbstractRpcStatementSupport.java new file mode 100644 index 0000000000..5d7acdce5b --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/AbstractRpcStatementSupport.java @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.rpc; + +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.RpcStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport; +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.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.spi.source.ImplicitSubstatement; +import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase; +import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementDefinitionContext; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ChildSchemaNodes; + +abstract class AbstractRpcStatementSupport + extends AbstractQNameStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.RPC) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.IF_FEATURE) + .addOptional(YangStmtMapping.INPUT) + .addOptional(YangStmtMapping.OUTPUT) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addAny(YangStmtMapping.TYPEDEF) + .build(); + + AbstractRpcStatementSupport() { + super(YangStmtMapping.RPC); + } + + @Override + public final QName parseArgumentValue(final StmtContext ctx, final String value) { + return StmtContextUtils.qnameFromArgument(ctx, value); + } + + @Override + public final void onStatementAdded( + final Mutable> stmt) { + stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); + } + + @Override + public final RpcStatement createDeclared(final StmtContext ctx) { + return new RpcStatementImpl(ctx); + } + + @Override + public final EffectiveStatement createEffective( + final StmtContext> ctx) { + return new RpcEffectiveStatementImpl(ctx); + } + + @Override + public final void onFullDefinitionDeclared( + final Mutable> stmt) { + super.onFullDefinitionDeclared(stmt); + + if (StmtContextUtils.findFirstDeclaredSubstatement(stmt, InputStatement.class) == null) { + addImplicitStatement((StatementContextBase) stmt, implictInput()); + } + + if (StmtContextUtils.findFirstDeclaredSubstatement(stmt, OutputStatement.class) == null) { + addImplicitStatement((StatementContextBase) stmt, implictOutput()); + } + } + + + @Override + protected final SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } + + abstract StatementSupport implictInput(); + + abstract StatementSupport implictOutput(); + + private static void addImplicitStatement(final StatementContextBase parent, + final StatementSupport statementToAdd) { + final StatementDefinitionContext stmtDefCtx = new StatementDefinitionContext<>(statementToAdd); + + parent.createSubstatement(parent.declaredSubstatements().size(), stmtDefCtx, + ImplicitSubstatement.of(parent.getStatementSourceReference()), null); + } +} \ 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/rfc7950/stmt/rpc/RpcEffectiveStatementImpl.java similarity index 88% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/RpcEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/RpcEffectiveStatementImpl.java index 16da4bd94c..4f67e69678 100644 --- 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/rfc7950/stmt/rpc/RpcEffectiveStatementImpl.java @@ -5,7 +5,7 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.rpc; import com.google.common.collect.ImmutableSet; import java.util.HashSet; @@ -21,18 +21,20 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RpcEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RpcStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.AbstractEffectiveSchemaNode; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.EffectiveStmtUtils; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveSchemaNode; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStmtUtils; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.InputEffectiveStatementImpl; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.OutputEffectiveStatementImpl; -public class RpcEffectiveStatementImpl extends AbstractEffectiveSchemaNode +final class RpcEffectiveStatementImpl extends AbstractEffectiveSchemaNode implements RpcDefinition, RpcEffectiveStatement { private final ContainerSchemaNode input; private final ContainerSchemaNode output; private final Set> typeDefinitions; private final Set groupings; - public RpcEffectiveStatementImpl(final StmtContext> ctx) { super(ctx); this.input = firstEffective(InputEffectiveStatementImpl.class); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/RpcStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/RpcStatementImpl.java new file mode 100644 index 0000000000..b0a5f1e025 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/RpcStatementImpl.java @@ -0,0 +1,81 @@ +/* + * 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.rfc7950.stmt.rpc; + +import java.util.Collection; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.RpcStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class RpcStatementImpl extends AbstractDeclaredStatement implements RpcStatement { + RpcStatementImpl(final StmtContext context) { + super(context); + } + + @Override + public QName getName() { + return argument(); + } + + @Nonnull + @Override + public Collection getTypedefs() { + return allDeclared(TypedefStatement.class); + } + + @Nonnull + @Override + public Collection getGroupings() { + return allDeclared(GroupingStatement.class); + } + + @Nullable + @Override + public StatusStatement getStatus() { + return firstDeclared(StatusStatement.class); + } + + @Nullable + @Override + public DescriptionStatement getDescription() { + return firstDeclared(DescriptionStatement.class); + } + + @Nullable + @Override + public ReferenceStatement getReference() { + return firstDeclared(ReferenceStatement.class); + } + + @Override + public InputStatement getInput() { + return firstDeclared(InputStatement.class); + } + + @Override + public OutputStatement getOutput() { + return firstDeclared(OutputStatement.class); + } + + @Nonnull + @Override + public Collection getIfFeatures() { + return allDeclared(IfFeatureStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/RpcStatementRFC6020Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/RpcStatementRFC6020Support.java new file mode 100644 index 0000000000..fd66922e72 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/RpcStatementRFC6020Support.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.rpc; + +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.input.InputStatementRFC6020Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.output.OutputStatementRFC6020Support; +import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport; + +public final class RpcStatementRFC6020Support extends AbstractRpcStatementSupport { + // TODO: share instances + private static final StatementSupport IMPLICIT_INPUT = new InputStatementRFC6020Support(); + private static final StatementSupport IMPLICIT_OUTPUT = new OutputStatementRFC6020Support(); + + @Override + StatementSupport implictInput() { + return IMPLICIT_INPUT; + } + + @Override + StatementSupport implictOutput() { + return IMPLICIT_OUTPUT; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/RpcStatementRfc7950Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/RpcStatementRFC7950Support.java similarity index 61% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/RpcStatementRfc7950Support.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/RpcStatementRFC7950Support.java index f012048402..f191b843f4 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/RpcStatementRfc7950Support.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/RpcStatementRFC7950Support.java @@ -5,11 +5,12 @@ * 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.rfc7950; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.rpc; import com.google.common.annotations.Beta; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.input.InputStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.output.OutputStatementRFC7950Support; import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.RpcStatementImpl; /** * Bridge class for RFC7950 RPCs. Specializes implicit input/output statements. @@ -17,18 +18,18 @@ import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.RpcStatementImpl; * @author Robert Varga */ @Beta -public final class RpcStatementRfc7950Support extends RpcStatementImpl.Definition { +public final class RpcStatementRFC7950Support extends AbstractRpcStatementSupport { // TODO: share instances - private static final StatementSupport IMPLICIT_INPUT = new InputStatementRfc7950Support(); - private static final StatementSupport IMPLICIT_OUTPUT = new OutputStatementRfc7950Support(); + private static final StatementSupport IMPLICIT_INPUT = new InputStatementRFC7950Support(); + private static final StatementSupport IMPLICIT_OUTPUT = new OutputStatementRFC7950Support(); @Override - protected StatementSupport implictInput() { + StatementSupport implictInput() { return IMPLICIT_INPUT; } @Override - protected StatementSupport implictOutput() { + StatementSupport implictOutput() { return IMPLICIT_OUTPUT; } } 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/rfc7950/stmt/status/StatusEffectiveStatementImpl.java similarity index 66% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/StatusEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/status/StatusEffectiveStatementImpl.java index cc86262759..f293c95c8c 100644 --- 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/rfc7950/stmt/status/StatusEffectiveStatementImpl.java @@ -5,17 +5,17 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.status; import org.opendaylight.yangtools.yang.model.api.Status; import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class StatusEffectiveStatementImpl extends DeclaredEffectiveStatementBase +final class StatusEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements StatusEffectiveStatement { - public StatusEffectiveStatementImpl(final StmtContext ctx) { + StatusEffectiveStatementImpl(final 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/rfc7950/stmt/status/StatusStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/status/StatusStatementImpl.java new file mode 100644 index 0000000000..a4b35fa2bc --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/status/StatusStatementImpl.java @@ -0,0 +1,26 @@ +/* + * 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.rfc7950.stmt.status; + +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.Status; +import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class StatusStatementImpl extends AbstractDeclaredStatement implements StatusStatement { + StatusStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public Status getValue() { + return argument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/status/StatusStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/status/StatusStatementSupport.java new file mode 100644 index 0000000000..3cdbc522ab --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/status/StatusStatementSupport.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.status; + +import org.opendaylight.yangtools.yang.model.api.Status; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; +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.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; + +public final class StatusStatementSupport + extends AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .STATUS) + .build(); + + public StatusStatementSupport() { + super(YangStmtMapping.STATUS); + } + + @Override + public Status parseArgumentValue(final StmtContext ctx, final String value) { + switch (value) { + case "current": + return Status.CURRENT; + case "deprecated": + return Status.DEPRECATED; + case "obsolete": + return Status.OBSOLETE; + default: + throw new SourceException(ctx.getStatementSourceReference(), + "Invalid status '%s', must be one of 'current', 'deprecated' or 'obsolete'", value); + } + } + + @Override + public StatusStatement createDeclared( + final StmtContext ctx) { + return new StatusStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new StatusEffectiveStatementImpl(ctx); + } + + @Override + public String internArgument(final String rawArgument) { + if ("current".equals(rawArgument)) { + return "current"; + } else if ("deprecated".equals(rawArgument)) { + return "deprecated"; + } else if ("obsolete".equals(rawArgument)) { + return "obsolete"; + } else { + return rawArgument; + } + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/AbstractSubmoduleStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/AbstractSubmoduleStatementSupport.java new file mode 100644 index 0000000000..df743ed4d2 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/AbstractSubmoduleStatementSupport.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.submodule; + +import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.findFirstDeclaredSubstatement; +import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.firstAttributeOf; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement; +import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; +import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.parser.spi.SubmoduleNamespace; +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.meta.StmtContext.Mutable; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.spi.source.BelongsToPrefixToModuleName; +import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; + +abstract class AbstractSubmoduleStatementSupport + extends AbstractStatementSupport> { + AbstractSubmoduleStatementSupport() { + super(YangStmtMapping.SUBMODULE); + } + + @Override + public final String parseArgumentValue(final StmtContext ctx, final String value) { + return value; + } + + @Override + public final SubmoduleStatement createDeclared(final StmtContext ctx) { + return new SubmoduleStatementImpl(ctx); + } + + @Override + public final EffectiveStatement createEffective( + final StmtContext> ctx) { + return new SubmoduleEffectiveStatementImpl(ctx); + } + + @Override + public final void onPreLinkageDeclared( + final Mutable> stmt) { + stmt.setRootIdentifier(RevisionSourceIdentifier.create(stmt.getStatementArgument(), + StmtContextUtils.getLatestRevision(stmt.declaredSubstatements()))); + } + + @Override + public final void onLinkageDeclared( + final Mutable> stmt) { + final SourceIdentifier submoduleIdentifier = RevisionSourceIdentifier.create(stmt.getStatementArgument(), + StmtContextUtils.getLatestRevision(stmt.declaredSubstatements())); + + final StmtContext> + possibleDuplicateSubmodule = stmt.getFromNamespace(SubmoduleNamespace.class, submoduleIdentifier); + if (possibleDuplicateSubmodule != null && possibleDuplicateSubmodule != stmt) { + throw new SourceException(stmt.getStatementSourceReference(), "Submodule name collision: %s. At %s", + stmt.getStatementArgument(), possibleDuplicateSubmodule.getStatementSourceReference()); + } + + stmt.addContext(SubmoduleNamespace.class, submoduleIdentifier, stmt); + + final String belongsToModuleName = firstAttributeOf(stmt.declaredSubstatements(), BelongsToStatement.class); + final StmtContext prefixSubStmtCtx = findFirstDeclaredSubstatement(stmt, 0, + BelongsToStatement.class, PrefixStatement.class); + SourceException.throwIfNull(prefixSubStmtCtx, stmt.getStatementSourceReference(), + "Prefix of belongsTo statement is missing in submodule [%s]", stmt.getStatementArgument()); + + final String prefix = (String) prefixSubStmtCtx.getStatementArgument(); + + stmt.addToNs(BelongsToPrefixToModuleName.class, prefix, belongsToModuleName); + } +} \ 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/rfc7950/stmt/submodule/SubmoduleEffectiveStatementImpl.java similarity index 93% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/SubmoduleEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleEffectiveStatementImpl.java index 3b374a2899..dfcdf23b09 100644 --- 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/rfc7950/stmt/submodule/SubmoduleEffectiveStatementImpl.java @@ -5,7 +5,7 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.submodule; import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.firstAttributeOf; @@ -16,15 +16,17 @@ import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RevisionEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveModule; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.ModuleNameToModuleQName; +// FIXME: hide this class public final class SubmoduleEffectiveStatementImpl extends AbstractEffectiveModule implements SubmoduleEffectiveStatement { private final QNameModule qnameModule; - public SubmoduleEffectiveStatementImpl( + SubmoduleEffectiveStatementImpl( final StmtContext> ctx) { super(ctx); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementImpl.java new file mode 100644 index 0000000000..b2003b222b --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementImpl.java @@ -0,0 +1,38 @@ +/* + * 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.rfc7950.stmt.submodule; + +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractRootStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class SubmoduleStatementImpl extends AbstractRootStatement implements SubmoduleStatement { + SubmoduleStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public String getName() { + return rawArgument(); + } + + @Override + public YangVersionStatement getYangVersion() { + return firstDeclared(YangVersionStatement.class); + } + + @Nonnull + @Override + public BelongsToStatement getBelongsTo() { + return firstDeclared(BelongsToStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementRFC6020Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementRFC6020Support.java new file mode 100644 index 0000000000..718e575f15 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementRFC6020Support.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.submodule; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; + +public final class SubmoduleStatementRFC6020Support extends AbstractSubmoduleStatementSupport { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .SUBMODULE) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.AUGMENT) + .addMandatory(YangStmtMapping.BELONGS_TO) + .addAny(YangStmtMapping.CHOICE) + .addOptional(YangStmtMapping.CONTACT) + .addAny(YangStmtMapping.CONTAINER) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.DEVIATION) + .addAny(YangStmtMapping.EXTENSION) + .addAny(YangStmtMapping.FEATURE) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.IDENTITY) + .addAny(YangStmtMapping.IMPORT) + .addAny(YangStmtMapping.INCLUDE) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addAny(YangStmtMapping.NOTIFICATION) + .addOptional(YangStmtMapping.ORGANIZATION) + .addOptional(YangStmtMapping.REFERENCE) + .addAny(YangStmtMapping.REVISION) + .addAny(YangStmtMapping.RPC) + .addAny(YangStmtMapping.TYPEDEF) + .addAny(YangStmtMapping.USES) + .addOptional(YangStmtMapping.YANG_VERSION) + .build(); + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/SubmoduleStatementRfc7950Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementRFC7950Support.java similarity index 89% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/SubmoduleStatementRfc7950Support.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementRFC7950Support.java index c8e219646f..9f1ecd610e 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/SubmoduleStatementRfc7950Support.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementRFC7950Support.java @@ -5,18 +5,17 @@ * 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.rfc7950; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.submodule; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.SubmoduleStatementImpl; /** * Class providing necessary support for processing YANG 1.1 Submodule statement. */ @Beta -public final class SubmoduleStatementRfc7950Support extends SubmoduleStatementImpl.Definition { +public final class SubmoduleStatementRFC7950Support extends AbstractSubmoduleStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping .SUBMODULE) .addAny(YangStmtMapping.ANYDATA) diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractIdentityRefSpecificationSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractIdentityRefSpecificationSupport.java new file mode 100644 index 0000000000..ecb8fbacf5 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractIdentityRefSpecificationSupport.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.type; + +import java.util.Collection; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.BaseStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.IdentityRefSpecification; +import org.opendaylight.yangtools.yang.parser.spi.IdentityNamespace; +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.StmtContext; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; + +abstract class AbstractIdentityRefSpecificationSupport + extends AbstractStatementSupport> { + AbstractIdentityRefSpecificationSupport() { + super(YangStmtMapping.TYPE); + } + + @Override + public final String parseArgumentValue(final StmtContext ctx, final String value) { + return value; + } + + @Override + public final IdentityRefSpecification createDeclared(final StmtContext ctx) { + return new IdentityRefSpecificationImpl(ctx); + } + + @Override + public final EffectiveStatement createEffective( + final StmtContext> ctx) { + return new IdentityRefSpecificationEffectiveStatement(ctx); + } + + @Override + public final void onFullDefinitionDeclared(final Mutable> stmt) { + super.onFullDefinitionDeclared(stmt); + + final Collection> baseStatements = + StmtContextUtils.findAllDeclaredSubstatements(stmt, BaseStatement.class); + for (StmtContext baseStmt : baseStatements) { + final QName baseIdentity = baseStmt.getStatementArgument(); + final StmtContext stmtCtx = stmt.getFromNamespace(IdentityNamespace.class, baseIdentity); + InferenceException.throwIfNull(stmtCtx, stmt.getStatementSourceReference(), + "Referenced base identity '%s' doesn't exist in given scope (module, imported modules, submodules)", + baseIdentity.getLocalName()); + } + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractLeafrefSpecificationSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractLeafrefSpecificationSupport.java new file mode 100644 index 0000000000..52649adee7 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractLeafrefSpecificationSupport.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.type; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.LeafrefSpecification; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +abstract class AbstractLeafrefSpecificationSupport + extends + AbstractStatementSupport> { + AbstractLeafrefSpecificationSupport() { + super(YangStmtMapping.TYPE); + } + + @Override + public final String parseArgumentValue(final StmtContext ctx, final String value) { + return value; + } + + @Override + public final LeafrefSpecification createDeclared(final StmtContext ctx) { + return new LeafrefSpecificationImpl(ctx); + } + + @Override + public final EffectiveStatement createEffective( + final StmtContext> ctx) { + return new LeafrefSpecificationEffectiveStatement(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/type/AbstractTypeEffectiveStatement.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeEffectiveStatement.java similarity index 89% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/AbstractTypeEffectiveStatement.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeEffectiveStatement.java index 6bbeb66c08..fd41e7c693 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/AbstractTypeEffectiveStatement.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeEffectiveStatement.java @@ -5,8 +5,7 @@ * 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.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; @@ -15,14 +14,14 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement; import org.opendaylight.yangtools.yang.model.util.type.TypeBuilder; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; abstract class AbstractTypeEffectiveStatement> extends DeclaredEffectiveStatementBase implements TypeEffectiveStatement { private final T typeDefinition; - protected AbstractTypeEffectiveStatement( + AbstractTypeEffectiveStatement( final StmtContext> ctx, final TypeBuilder builder) { super(ctx); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java new file mode 100644 index 0000000000..195cc9200f --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java @@ -0,0 +1,277 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.type; + +import com.google.common.base.Verify; +import com.google.common.collect.ImmutableMap; +import java.util.Collection; +import java.util.Map; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.TypeDefinition; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement; +import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.BooleanTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.EmptyTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.Int16TypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.Int32TypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.Int64TypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.Int8TypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.Uint16TypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.Uint32TypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.Uint64TypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.Uint8TypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition; +import org.opendaylight.yangtools.yang.model.util.type.RestrictedTypes; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.typedef.TypedefEffectiveStatementImpl; +import org.opendaylight.yangtools.yang.parser.spi.TypeNamespace; +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.ModelActionBuilder.InferenceAction; +import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.InferenceContext; +import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.Prerequisite; +import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase; +import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport; +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.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.TypeUtils; + +abstract class AbstractTypeStatementSupport + extends AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.TYPE) + .addOptional(YangStmtMapping.BASE) + .addAny(YangStmtMapping.BIT) + .addAny(YangStmtMapping.ENUM) + .addOptional(YangStmtMapping.FRACTION_DIGITS) + .addOptional(YangStmtMapping.LENGTH) + .addOptional(YangStmtMapping.PATH) + .addAny(YangStmtMapping.PATTERN) + .addOptional(YangStmtMapping.RANGE) + .addOptional(YangStmtMapping.REQUIRE_INSTANCE) + .addAny(YangStmtMapping.TYPE) + .build(); + + private static final Map> ARGUMENT_SPECIFIC_SUPPORTS = + ImmutableMap.>builder() + .put(TypeUtils.BITS, new BitsSpecificationSupport()) + .put(TypeUtils.DECIMAL64, new Decimal64SpecificationSupport()) + .put(TypeUtils.ENUMERATION, new EnumSpecificationSupport()) + .put(TypeUtils.IDENTITY_REF, new IdentityRefSpecificationRFC6020Support()) + .put(TypeUtils.INSTANCE_IDENTIFIER, new InstanceIdentifierSpecificationSupport()) + .put(TypeUtils.LEAF_REF, new LeafrefSpecificationRFC6020Support()) + .put(TypeUtils.UNION, new UnionSpecificationSupport()) + .build(); + + AbstractTypeStatementSupport() { + super(YangStmtMapping.TYPE); + } + + @Override + public final String parseArgumentValue(final StmtContext ctx, final String value) { + return value; + } + + @Override + public final TypeStatement createDeclared(final StmtContext ctx) { + return BuiltinTypeStatement.maybeReplace(new TypeStatementImpl(ctx)); + } + + @Override + public final TypeEffectiveStatement createEffective( + final StmtContext> ctx) { + + // First look up the proper base type + final TypeEffectiveStatement typeStmt; + switch (ctx.getStatementArgument()) { + case TypeUtils.BINARY: + typeStmt = BuiltinEffectiveStatement.BINARY; + break; + case TypeUtils.BOOLEAN: + typeStmt = BuiltinEffectiveStatement.BOOLEAN; + break; + case TypeUtils.EMPTY: + typeStmt = BuiltinEffectiveStatement.EMPTY; + break; + case TypeUtils.INSTANCE_IDENTIFIER: + typeStmt = BuiltinEffectiveStatement.INSTANCE_IDENTIFIER; + break; + case TypeUtils.INT8: + typeStmt = BuiltinEffectiveStatement.INT8; + break; + case TypeUtils.INT16: + typeStmt = BuiltinEffectiveStatement.INT16; + break; + case TypeUtils.INT32: + typeStmt = BuiltinEffectiveStatement.INT32; + break; + case TypeUtils.INT64: + typeStmt = BuiltinEffectiveStatement.INT64; + break; + case TypeUtils.STRING: + typeStmt = BuiltinEffectiveStatement.STRING; + break; + case TypeUtils.UINT8: + typeStmt = BuiltinEffectiveStatement.UINT8; + break; + case TypeUtils.UINT16: + typeStmt = BuiltinEffectiveStatement.UINT16; + break; + case TypeUtils.UINT32: + typeStmt = BuiltinEffectiveStatement.UINT32; + break; + case TypeUtils.UINT64: + typeStmt = BuiltinEffectiveStatement.UINT64; + break; + default: + final QName qname = StmtContextUtils.qnameFromArgument(ctx, ctx.getStatementArgument()); + final StmtContext typedef = + SourceException.throwIfNull(ctx.getFromNamespace(TypeNamespace.class, qname), + ctx.getStatementSourceReference(), "Type '%s' not found", qname); + + final TypedefEffectiveStatement effectiveTypedef = typedef.buildEffective(); + Verify.verify(effectiveTypedef instanceof TypedefEffectiveStatementImpl); + typeStmt = ((TypedefEffectiveStatementImpl) effectiveTypedef).asTypeEffectiveStatement(); + } + + if (ctx.declaredSubstatements().isEmpty() && ctx.effectiveSubstatements().isEmpty()) { + return typeStmt; + } + + // Now instantiate the proper effective statement for that type + final TypeDefinition baseType = typeStmt.getTypeDefinition(); + if (baseType instanceof BinaryTypeDefinition) { + return new BinaryTypeEffectiveStatementImpl(ctx, (BinaryTypeDefinition) baseType); + } else if (baseType instanceof BitsTypeDefinition) { + return new BitsTypeEffectiveStatementImpl(ctx, (BitsTypeDefinition) baseType); + } else if (baseType instanceof BooleanTypeDefinition) { + return new BooleanTypeEffectiveStatementImpl(ctx, (BooleanTypeDefinition) baseType); + } else if (baseType instanceof DecimalTypeDefinition) { + return new DecimalTypeEffectiveStatementImpl(ctx, (DecimalTypeDefinition) baseType); + } else if (baseType instanceof EmptyTypeDefinition) { + return new EmptyTypeEffectiveStatementImpl(ctx, (EmptyTypeDefinition) baseType); + } else if (baseType instanceof EnumTypeDefinition) { + return new EnumTypeEffectiveStatementImpl(ctx, (EnumTypeDefinition) baseType); + } else if (baseType instanceof IdentityrefTypeDefinition) { + return new IdentityrefTypeEffectiveStatementImpl(ctx, (IdentityrefTypeDefinition) baseType); + } else if (baseType instanceof InstanceIdentifierTypeDefinition) { + return new InstanceIdentifierTypeEffectiveStatementImpl(ctx, + (InstanceIdentifierTypeDefinition) baseType); + } else if (baseType instanceof Int8TypeDefinition) { + return new IntegralTypeEffectiveStatementImpl<>(ctx, + RestrictedTypes.newInt8Builder((Int8TypeDefinition) baseType, + TypeUtils.typeEffectiveSchemaPath(ctx))); + } else if (baseType instanceof Int16TypeDefinition) { + return new IntegralTypeEffectiveStatementImpl<>(ctx, + RestrictedTypes.newInt16Builder((Int16TypeDefinition) baseType, + TypeUtils.typeEffectiveSchemaPath(ctx))); + } else if (baseType instanceof Int32TypeDefinition) { + return new IntegralTypeEffectiveStatementImpl<>(ctx, + RestrictedTypes.newInt32Builder((Int32TypeDefinition) baseType, + TypeUtils.typeEffectiveSchemaPath(ctx))); + } else if (baseType instanceof Int64TypeDefinition) { + return new IntegralTypeEffectiveStatementImpl<>(ctx, + RestrictedTypes.newInt64Builder((Int64TypeDefinition) baseType, + TypeUtils.typeEffectiveSchemaPath(ctx))); + } else if (baseType instanceof LeafrefTypeDefinition) { + return new LeafrefTypeEffectiveStatementImpl(ctx, (LeafrefTypeDefinition) baseType); + } else if (baseType instanceof StringTypeDefinition) { + return new StringTypeEffectiveStatementImpl(ctx, (StringTypeDefinition) baseType); + } else if (baseType instanceof Uint8TypeDefinition) { + return new IntegralTypeEffectiveStatementImpl<>(ctx, + RestrictedTypes.newUint8Builder((Uint8TypeDefinition) baseType, + TypeUtils.typeEffectiveSchemaPath(ctx))); + } else if (baseType instanceof Uint16TypeDefinition) { + return new IntegralTypeEffectiveStatementImpl<>(ctx, + RestrictedTypes.newUint16Builder((Uint16TypeDefinition) baseType, + TypeUtils.typeEffectiveSchemaPath(ctx))); + } else if (baseType instanceof Uint32TypeDefinition) { + return new IntegralTypeEffectiveStatementImpl<>(ctx, + RestrictedTypes.newUint32Builder((Uint32TypeDefinition) baseType, + TypeUtils.typeEffectiveSchemaPath(ctx))); + } else if (baseType instanceof Uint64TypeDefinition) { + return new IntegralTypeEffectiveStatementImpl<>(ctx, + RestrictedTypes.newUint64Builder((Uint64TypeDefinition) baseType, + TypeUtils.typeEffectiveSchemaPath(ctx))); + } else if (baseType instanceof UnionTypeDefinition) { + return new UnionTypeEffectiveStatementImpl(ctx, (UnionTypeDefinition) baseType); + } else { + throw new IllegalStateException("Unhandled base type " + baseType); + } + } + + @Override + public final void onFullDefinitionDeclared( + final Mutable> stmt) { + super.onFullDefinitionDeclared(stmt); + + // if it is yang built-in type, no prerequisite is needed, so simply return + if (TypeUtils.isYangBuiltInTypeString(stmt.getStatementArgument())) { + return; + } + + final QName typeQName = StmtContextUtils.qnameFromArgument(stmt, stmt.getStatementArgument()); + final ModelActionBuilder typeAction = stmt.newInferenceAction(ModelProcessingPhase.EFFECTIVE_MODEL); + final Prerequisite> typePrereq = typeAction.requiresCtx(stmt, TypeNamespace.class, + typeQName, ModelProcessingPhase.EFFECTIVE_MODEL); + typeAction.mutatesEffectiveCtx(stmt.getParentContext()); + + /* + * If the type does not exist, throw new InferenceException. + * Otherwise perform no operation. + */ + typeAction.apply(new InferenceAction() { + @Override + public void apply(final InferenceContext ctx) { + // Intentional NOOP + } + + @Override + public void prerequisiteFailed(final Collection> failed) { + InferenceException.throwIf(failed.contains(typePrereq), stmt.getStatementSourceReference(), + "Type [%s] was not found.", typeQName); + } + }); + } + + @Override + protected final SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } + + @Override + public final String internArgument(final String rawArgument) { + final String found = TypeUtils.findBuiltinString(rawArgument); + return found != null ? found : rawArgument; + } + + @Override + public boolean hasArgumentSpecificSupports() { + return !ARGUMENT_SPECIFIC_SUPPORTS.isEmpty(); + } + + @Override + public StatementSupport getSupportSpecificForArgument(final String argument) { + return ARGUMENT_SPECIFIC_SUPPORTS.get(argument); + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/BinaryTypeEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BinaryTypeEffectiveStatementImpl.java similarity index 88% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/BinaryTypeEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BinaryTypeEffectiveStatementImpl.java index 1a33a104cd..d205c658be 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/BinaryTypeEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BinaryTypeEffectiveStatementImpl.java @@ -5,8 +5,7 @@ * 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.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; @@ -17,16 +16,17 @@ import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition; import org.opendaylight.yangtools.yang.model.util.type.InvalidLengthConstraintException; import org.opendaylight.yangtools.yang.model.util.type.LengthRestrictedTypeBuilder; import org.opendaylight.yangtools.yang.model.util.type.RestrictedTypes; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.length.LengthEffectiveStatementImpl; 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.rfc6020.TypeUtils; -public final class BinaryTypeEffectiveStatementImpl extends DeclaredEffectiveStatementBase +final class BinaryTypeEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements TypeEffectiveStatement { private final BinaryTypeDefinition typeDefinition; - public BinaryTypeEffectiveStatementImpl( + BinaryTypeEffectiveStatementImpl( final StmtContext> ctx, final BinaryTypeDefinition baseType) { super(ctx); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/BitsSpecificationEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BitsSpecificationEffectiveStatement.java similarity index 88% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/BitsSpecificationEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BitsSpecificationEffectiveStatement.java index c33ac5c037..045b19b6c3 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/BitsSpecificationEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BitsSpecificationEffectiveStatement.java @@ -5,8 +5,9 @@ * 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.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; +import com.google.common.annotations.VisibleForTesting; import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -16,16 +17,19 @@ import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition.Bit; import org.opendaylight.yangtools.yang.model.util.type.BaseTypes; import org.opendaylight.yangtools.yang.model.util.type.BitsTypeBuilder; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.bit.BitEffectiveStatementImpl; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -public final class BitsSpecificationEffectiveStatementImpl extends +@VisibleForTesting +// FIXME: hide this class +public final class BitsSpecificationEffectiveStatement extends DeclaredEffectiveStatementBase implements TypeEffectiveStatement { private final BitsTypeDefinition typeDefinition; - public BitsSpecificationEffectiveStatementImpl( + BitsSpecificationEffectiveStatement( final StmtContext> ctx) { super(ctx); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BitsSpecificationImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BitsSpecificationImpl.java new file mode 100644 index 0000000000..606d01cef7 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BitsSpecificationImpl.java @@ -0,0 +1,33 @@ +/* + * 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.rfc7950.stmt.type; + +import java.util.Collection; +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.BitsSpecification; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +public class BitsSpecificationImpl extends AbstractDeclaredStatement implements BitsSpecification { + protected BitsSpecificationImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public String getName() { + return argument(); + } + + @Nonnull + @Override + public Collection getBits() { + return allDeclared(BitStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BitsSpecificationSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BitsSpecificationSupport.java new file mode 100644 index 0000000000..6a21582689 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BitsSpecificationSupport.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.type; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.BitsSpecification; +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.meta.SubstatementValidator; + +final class BitsSpecificationSupport + extends AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.TYPE) + .addMultiple(YangStmtMapping.BIT) + .build(); + + BitsSpecificationSupport() { + super(YangStmtMapping.TYPE); + } + + @Override + public String parseArgumentValue(final StmtContext ctx, final String value) { + return value; + } + + @Override + public BitsSpecification createDeclared(final StmtContext ctx) { + return new BitsSpecificationImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new BitsSpecificationEffectiveStatement(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/BitsTypeEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BitsTypeEffectiveStatementImpl.java similarity index 90% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/BitsTypeEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BitsTypeEffectiveStatementImpl.java index d672056084..8ad9d9f1ae 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/BitsTypeEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BitsTypeEffectiveStatementImpl.java @@ -6,7 +6,7 @@ * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.common.YangVersion; @@ -18,16 +18,17 @@ import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition.Bit; import org.opendaylight.yangtools.yang.model.util.type.BitsTypeBuilder; import org.opendaylight.yangtools.yang.model.util.type.RestrictedTypes; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.bit.BitEffectiveStatementImpl; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -public final class BitsTypeEffectiveStatementImpl extends DeclaredEffectiveStatementBase +final class BitsTypeEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements TypeEffectiveStatement { private final BitsTypeDefinition typeDefinition; - public BitsTypeEffectiveStatementImpl( + BitsTypeEffectiveStatementImpl( final StmtContext> ctx, final BitsTypeDefinition baseType) { super(ctx); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/BooleanTypeEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BooleanTypeEffectiveStatementImpl.java similarity index 80% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/BooleanTypeEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BooleanTypeEffectiveStatementImpl.java index a4fee258d8..6422f591bf 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/BooleanTypeEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BooleanTypeEffectiveStatementImpl.java @@ -5,8 +5,7 @@ * 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.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement; @@ -15,8 +14,8 @@ import org.opendaylight.yangtools.yang.model.util.type.RestrictedTypes; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.TypeUtils; -public final class BooleanTypeEffectiveStatementImpl extends AbstractTypeEffectiveStatement { - public BooleanTypeEffectiveStatementImpl( +final class BooleanTypeEffectiveStatementImpl extends AbstractTypeEffectiveStatement { + BooleanTypeEffectiveStatementImpl( final StmtContext> ctx, final BooleanTypeDefinition baseType) { super(ctx, RestrictedTypes.newBooleanBuilder(baseType, TypeUtils.typeEffectiveSchemaPath(ctx))); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/BuiltinEffectiveStatement.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BuiltinEffectiveStatement.java similarity index 94% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/BuiltinEffectiveStatement.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BuiltinEffectiveStatement.java index df1435f11a..f5d16f9ff5 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/BuiltinEffectiveStatement.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BuiltinEffectiveStatement.java @@ -5,7 +5,7 @@ * 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.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; import static java.util.Objects.requireNonNull; @@ -26,7 +26,7 @@ import org.opendaylight.yangtools.yang.model.util.type.BaseTypes; /** * Common shared effective statements for built-in types. */ -public enum BuiltinEffectiveStatement implements TypeEffectiveStatement { +enum BuiltinEffectiveStatement implements TypeEffectiveStatement { BINARY(BaseTypes.binaryType()), BOOLEAN(BaseTypes.booleanType()), EMPTY(BaseTypes.emptyType()), diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BuiltinTypeStatement.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BuiltinTypeStatement.java similarity index 96% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BuiltinTypeStatement.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BuiltinTypeStatement.java index 78effbe3ef..7ab2609a9e 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BuiltinTypeStatement.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BuiltinTypeStatement.java @@ -5,7 +5,7 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; import static java.util.Objects.requireNonNull; @@ -20,6 +20,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.meta.StatementSource; import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.TypeUtils; final class BuiltinTypeStatement implements TypeStatement { private static final Map BUILTINS; diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/Decimal64SpecificationEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/Decimal64SpecificationEffectiveStatement.java similarity index 81% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/Decimal64SpecificationEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/Decimal64SpecificationEffectiveStatement.java index 4b233ae81f..dc71149f3d 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/Decimal64SpecificationEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/Decimal64SpecificationEffectiveStatement.java @@ -5,8 +5,9 @@ * 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.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; +import com.google.common.annotations.VisibleForTesting; import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -16,21 +17,23 @@ import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.Decimal64Spe import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition; import org.opendaylight.yangtools.yang.model.util.type.BaseTypes; import org.opendaylight.yangtools.yang.model.util.type.DecimalTypeBuilder; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.range.RangeEffectiveStatementImpl; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class Decimal64SpecificationEffectiveStatementImpl extends - DeclaredEffectiveStatementBase +// FIXME: hide this class +@VisibleForTesting +public final class Decimal64SpecificationEffectiveStatement + extends DeclaredEffectiveStatementBase implements TypeEffectiveStatement { private final DecimalTypeDefinition typeDefinition; - public Decimal64SpecificationEffectiveStatementImpl( + Decimal64SpecificationEffectiveStatement( final StmtContext> ctx) { super(ctx); final DecimalTypeBuilder builder = BaseTypes.decimalTypeBuilder(ctx.getSchemaPath().get()); - for (final EffectiveStatement stmt : effectiveSubstatements()) { if (stmt instanceof FractionDigitsEffectiveStatement) { builder.setFractionDigits(((FractionDigitsEffectiveStatement) stmt).argument()); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/Decimal64SpecificationImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/Decimal64SpecificationImpl.java new file mode 100644 index 0000000000..74cd94b92d --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/Decimal64SpecificationImpl.java @@ -0,0 +1,38 @@ +/* + * 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.rfc7950.stmt.type; + +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.FractionDigitsStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.RangeStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.Decimal64Specification; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class Decimal64SpecificationImpl extends AbstractDeclaredStatement implements Decimal64Specification { + Decimal64SpecificationImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public String getName() { + return argument(); + } + + @Nonnull + @Override + public FractionDigitsStatement getFractionDigits() { + return firstDeclared(FractionDigitsStatement.class); + } + + @Override + public RangeStatement getRange() { + return firstDeclared(RangeStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/Decimal64SpecificationSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/Decimal64SpecificationSupport.java new file mode 100644 index 0000000000..59163ada70 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/Decimal64SpecificationSupport.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.type; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.Decimal64Specification; +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.meta.SubstatementValidator; + +final class Decimal64SpecificationSupport extends AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.TYPE) + .addMandatory(YangStmtMapping.FRACTION_DIGITS) + .addOptional(YangStmtMapping.RANGE) + .build(); + + Decimal64SpecificationSupport() { + super(YangStmtMapping.TYPE); + } + + @Override + public String parseArgumentValue(final StmtContext ctx, final String value) { + return value; + } + + @Override + public Decimal64Specification createDeclared(final StmtContext ctx) { + return new Decimal64SpecificationImpl(ctx); + } + + @Override + public EffectiveStatement createEffective(final StmtContext> ctx) { + return new Decimal64SpecificationEffectiveStatement(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/DecimalTypeEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/DecimalTypeEffectiveStatementImpl.java similarity index 87% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/DecimalTypeEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/DecimalTypeEffectiveStatementImpl.java index 106b79c207..d592ca7b2c 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/DecimalTypeEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/DecimalTypeEffectiveStatementImpl.java @@ -5,8 +5,7 @@ * 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.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; import java.math.BigDecimal; import javax.annotation.Nonnull; @@ -18,16 +17,17 @@ import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement; import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition; import org.opendaylight.yangtools.yang.model.util.type.RangeRestrictedTypeBuilder; import org.opendaylight.yangtools.yang.model.util.type.RestrictedTypes; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.range.RangeEffectiveStatementImpl; 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.rfc6020.TypeUtils; -public final class DecimalTypeEffectiveStatementImpl extends DeclaredEffectiveStatementBase +final class DecimalTypeEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements TypeEffectiveStatement { private final DecimalTypeDefinition typeDefinition; - public DecimalTypeEffectiveStatementImpl( + DecimalTypeEffectiveStatementImpl( final StmtContext> ctx, final DecimalTypeDefinition baseType) { super(ctx); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/EffectiveTypeUtil.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EffectiveTypeUtil.java similarity index 84% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/EffectiveTypeUtil.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EffectiveTypeUtil.java index 1aea8738b4..8213207108 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/EffectiveTypeUtil.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EffectiveTypeUtil.java @@ -5,13 +5,17 @@ * 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.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; +import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition.Bit; import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair; import org.opendaylight.yangtools.yang.model.util.type.BitBuilder; import org.opendaylight.yangtools.yang.model.util.type.EnumPairBuilder; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.bit.BitEffectiveStatementImpl; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.enum_.EnumEffectiveStatementImpl; +@Beta final class EffectiveTypeUtil { private EffectiveTypeUtil() { throw new UnsupportedOperationException(); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/EmptyTypeEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EmptyTypeEffectiveStatementImpl.java similarity index 81% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/EmptyTypeEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EmptyTypeEffectiveStatementImpl.java index d63cc3c6fe..36b8632bb7 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/EmptyTypeEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EmptyTypeEffectiveStatementImpl.java @@ -5,8 +5,7 @@ * 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.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement; @@ -15,8 +14,8 @@ import org.opendaylight.yangtools.yang.model.util.type.RestrictedTypes; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.TypeUtils; -public final class EmptyTypeEffectiveStatementImpl extends AbstractTypeEffectiveStatement { - public EmptyTypeEffectiveStatementImpl( +final class EmptyTypeEffectiveStatementImpl extends AbstractTypeEffectiveStatement { + EmptyTypeEffectiveStatementImpl( final StmtContext> ctx, final EmptyTypeDefinition baseType) { super(ctx, RestrictedTypes.newEmptyBuilder(baseType, TypeUtils.typeEffectiveSchemaPath(ctx))); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/EnumSpecificationEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EnumSpecificationEffectiveStatement.java similarity index 87% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/EnumSpecificationEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EnumSpecificationEffectiveStatement.java index 65a4c71da4..29b9bdfd85 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/EnumSpecificationEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EnumSpecificationEffectiveStatement.java @@ -5,8 +5,9 @@ * 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.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; +import com.google.common.annotations.VisibleForTesting; import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -16,17 +17,20 @@ import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair; import org.opendaylight.yangtools.yang.model.util.type.BaseTypes; import org.opendaylight.yangtools.yang.model.util.type.EnumerationTypeBuilder; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.enum_.EnumEffectiveStatementImpl; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -public final class EnumSpecificationEffectiveStatementImpl extends +@VisibleForTesting +// FIXME: hide this class +public final class EnumSpecificationEffectiveStatement extends DeclaredEffectiveStatementBase implements TypeEffectiveStatement { private final EnumTypeDefinition typeDefinition; - public EnumSpecificationEffectiveStatementImpl( + EnumSpecificationEffectiveStatement( final StmtContext> ctx) { super(ctx); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EnumSpecificationImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EnumSpecificationImpl.java new file mode 100644 index 0000000000..add9bed0ed --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EnumSpecificationImpl.java @@ -0,0 +1,33 @@ +/* + * 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.rfc7950.stmt.type; + +import java.util.Collection; +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.EnumStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.EnumSpecification; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class EnumSpecificationImpl extends AbstractDeclaredStatement implements EnumSpecification { + EnumSpecificationImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public String getName() { + return argument(); + } + + @Nonnull + @Override + public Collection getEnums() { + return allDeclared(EnumStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EnumSpecificationSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EnumSpecificationSupport.java new file mode 100644 index 0000000000..01aea391f8 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EnumSpecificationSupport.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.type; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.EnumSpecification; +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.meta.SubstatementValidator; + +final class EnumSpecificationSupport + extends AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .TYPE) + .addMultiple(YangStmtMapping.ENUM) + .build(); + + EnumSpecificationSupport() { + super(YangStmtMapping.TYPE); + } + + @Override + public String parseArgumentValue(final StmtContext ctx, final String value) { + return value; + } + + @Override + public EnumSpecification createDeclared(final StmtContext ctx) { + return new EnumSpecificationImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new EnumSpecificationEffectiveStatement(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/EnumTypeEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EnumTypeEffectiveStatementImpl.java similarity index 90% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/EnumTypeEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EnumTypeEffectiveStatementImpl.java index 8f0431a70e..ca9b6be31d 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/EnumTypeEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EnumTypeEffectiveStatementImpl.java @@ -6,7 +6,7 @@ * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.common.YangVersion; @@ -18,16 +18,17 @@ import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair; import org.opendaylight.yangtools.yang.model.util.type.EnumerationTypeBuilder; import org.opendaylight.yangtools.yang.model.util.type.RestrictedTypes; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.enum_.EnumEffectiveStatementImpl; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -public final class EnumTypeEffectiveStatementImpl extends DeclaredEffectiveStatementBase +final class EnumTypeEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements TypeEffectiveStatement { private final EnumTypeDefinition typeDefinition; - public EnumTypeEffectiveStatementImpl( + EnumTypeEffectiveStatementImpl( final StmtContext> ctx, final EnumTypeDefinition baseType) { super(ctx); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/IdentityRefSpecificationEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/IdentityRefSpecificationEffectiveStatement.java similarity index 88% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/IdentityRefSpecificationEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/IdentityRefSpecificationEffectiveStatement.java index e00cb2cad5..19a78b39ec 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/IdentityRefSpecificationEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/IdentityRefSpecificationEffectiveStatement.java @@ -5,7 +5,7 @@ * 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.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.common.QName; @@ -19,17 +19,18 @@ import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.IdentityRefS import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition; import org.opendaylight.yangtools.yang.model.util.type.BaseTypes; import org.opendaylight.yangtools.yang.model.util.type.IdentityrefTypeBuilder; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.IdentityNamespace; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class IdentityRefSpecificationEffectiveStatementImpl extends +// FIXME: hide this class +public final class IdentityRefSpecificationEffectiveStatement extends DeclaredEffectiveStatementBase implements TypeEffectiveStatement { private final IdentityrefTypeDefinition typeDefinition; - public IdentityRefSpecificationEffectiveStatementImpl(final StmtContext> ctx) { super(ctx); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/IdentityRefSpecificationImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/IdentityRefSpecificationImpl.java new file mode 100644 index 0000000000..422ab90dfc --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/IdentityRefSpecificationImpl.java @@ -0,0 +1,33 @@ +/* + * 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.rfc7950.stmt.type; + +import java.util.Collection; +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.BaseStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.IdentityRefSpecification; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class IdentityRefSpecificationImpl extends AbstractDeclaredStatement implements IdentityRefSpecification { + IdentityRefSpecificationImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public String getName() { + return argument(); + } + + @Nonnull + @Override + public Collection getBases() { + return allDeclared(BaseStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/IdentityRefSpecificationRFC6020Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/IdentityRefSpecificationRFC6020Support.java new file mode 100644 index 0000000000..bc2eb81d5e --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/IdentityRefSpecificationRFC6020Support.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.type; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; + +final class IdentityRefSpecificationRFC6020Support extends AbstractIdentityRefSpecificationSupport { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .TYPE) + .addMandatory(YangStmtMapping.BASE) + .build(); + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/IdentityrefSpecificationRfc7950Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/IdentityrefSpecificationRFC7950Support.java similarity index 74% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/IdentityrefSpecificationRfc7950Support.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/IdentityrefSpecificationRFC7950Support.java index 47e3e20343..0323dd4c93 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/IdentityrefSpecificationRfc7950Support.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/IdentityrefSpecificationRFC7950Support.java @@ -5,19 +5,15 @@ * 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.rfc7950.stmt.type; -package org.opendaylight.yangtools.yang.parser.stmt.rfc7950; - -import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.IdentityRefSpecificationImpl; /** * Class providing necessary support for processing YANG 1.1 identityref statement. */ -@Beta -public class IdentityrefSpecificationRfc7950Support extends IdentityRefSpecificationImpl.Definition { +final class IdentityrefSpecificationRFC7950Support extends AbstractIdentityRefSpecificationSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping .TYPE) .addMultiple(YangStmtMapping.BASE) diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/IdentityrefTypeEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/IdentityrefTypeEffectiveStatementImpl.java similarity index 79% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/IdentityrefTypeEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/IdentityrefTypeEffectiveStatementImpl.java index 91a561570a..9e97ec6f9f 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/IdentityrefTypeEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/IdentityrefTypeEffectiveStatementImpl.java @@ -5,8 +5,7 @@ * 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.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement; @@ -15,10 +14,8 @@ import org.opendaylight.yangtools.yang.model.util.type.RestrictedTypes; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.TypeUtils; -public final class IdentityrefTypeEffectiveStatementImpl extends - AbstractTypeEffectiveStatement { - - public IdentityrefTypeEffectiveStatementImpl( +final class IdentityrefTypeEffectiveStatementImpl extends AbstractTypeEffectiveStatement { + IdentityrefTypeEffectiveStatementImpl( final StmtContext> ctx, final IdentityrefTypeDefinition baseType) { super(ctx, RestrictedTypes.newIdentityrefBuilder(baseType, TypeUtils.typeEffectiveSchemaPath(ctx))); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/InstanceIdentifierSpecificationEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/InstanceIdentifierSpecificationEffectiveStatement.java similarity index 88% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/InstanceIdentifierSpecificationEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/InstanceIdentifierSpecificationEffectiveStatement.java index eeece4775e..a519531be6 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/InstanceIdentifierSpecificationEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/InstanceIdentifierSpecificationEffectiveStatement.java @@ -5,7 +5,7 @@ * 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.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; @@ -17,16 +17,16 @@ import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefi import org.opendaylight.yangtools.yang.model.util.type.BaseTypes; import org.opendaylight.yangtools.yang.model.util.type.InstanceIdentifierTypeBuilder; import org.opendaylight.yangtools.yang.model.util.type.RestrictedTypes; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class InstanceIdentifierSpecificationEffectiveStatementImpl +final class InstanceIdentifierSpecificationEffectiveStatement extends DeclaredEffectiveStatementBase implements TypeEffectiveStatement { private final InstanceIdentifierTypeDefinition typeDefinition; - public InstanceIdentifierSpecificationEffectiveStatementImpl(final StmtContext> ctx) { super(ctx); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/InstanceIdentifierSpecificationImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/InstanceIdentifierSpecificationImpl.java new file mode 100644 index 0000000000..0bd0bef98f --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/InstanceIdentifierSpecificationImpl.java @@ -0,0 +1,32 @@ +/* + * 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.rfc7950.stmt.type; + +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.InstanceIdentifierSpecification; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class InstanceIdentifierSpecificationImpl extends AbstractDeclaredStatement + implements InstanceIdentifierSpecification { + InstanceIdentifierSpecificationImpl(final StmtContext ctx) { + super(ctx); + } + + @Nonnull + @Override + public String getName() { + return argument(); + } + + @Override + public RequireInstanceStatement getRequireInstance() { + return firstDeclared(RequireInstanceStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/InstanceIdentifierSpecificationSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/InstanceIdentifierSpecificationSupport.java new file mode 100644 index 0000000000..be40ac355a --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/InstanceIdentifierSpecificationSupport.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.type; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.InstanceIdentifierSpecification; +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.meta.SubstatementValidator; + +final class InstanceIdentifierSpecificationSupport extends AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.TYPE) + .addOptional(YangStmtMapping.REQUIRE_INSTANCE) + .build(); + + InstanceIdentifierSpecificationSupport() { + super(YangStmtMapping.TYPE); + } + + @Override + public String parseArgumentValue(final StmtContext ctx, final String value) { + return value; + } + + @Override + public InstanceIdentifierSpecification createDeclared( + final StmtContext ctx) { + return new InstanceIdentifierSpecificationImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new InstanceIdentifierSpecificationEffectiveStatement(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/InstanceIdentifierTypeEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/InstanceIdentifierTypeEffectiveStatementImpl.java similarity index 89% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/InstanceIdentifierTypeEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/InstanceIdentifierTypeEffectiveStatementImpl.java index 5eb850e204..3230a876e2 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/InstanceIdentifierTypeEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/InstanceIdentifierTypeEffectiveStatementImpl.java @@ -5,8 +5,7 @@ * 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.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; @@ -17,15 +16,15 @@ import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement; import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition; import org.opendaylight.yangtools.yang.model.util.type.InstanceIdentifierTypeBuilder; import org.opendaylight.yangtools.yang.model.util.type.RestrictedTypes; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.TypeUtils; -public final class InstanceIdentifierTypeEffectiveStatementImpl +final class InstanceIdentifierTypeEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements TypeEffectiveStatement { private final InstanceIdentifierTypeDefinition typeDefinition; - public InstanceIdentifierTypeEffectiveStatementImpl( + InstanceIdentifierTypeEffectiveStatementImpl( final StmtContext> ctx, final InstanceIdentifierTypeDefinition baseType) { super(ctx); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/IntegralTypeEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/IntegralTypeEffectiveStatementImpl.java new file mode 100644 index 0000000000..9c2ad03e14 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/IntegralTypeEffectiveStatementImpl.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.type; + +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement; +import org.opendaylight.yangtools.yang.model.api.type.RangeRestrictedTypeDefinition; +import org.opendaylight.yangtools.yang.model.util.type.InvalidRangeConstraintException; +import org.opendaylight.yangtools.yang.model.util.type.RangeRestrictedTypeBuilder; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.range.RangeEffectiveStatementImpl; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; + +final class IntegralTypeEffectiveStatementImpl, + N extends Number & Comparable> extends DeclaredEffectiveStatementBase + implements TypeEffectiveStatement { + + private final T typeDefinition; + + IntegralTypeEffectiveStatementImpl( + final StmtContext> ctx, + final RangeRestrictedTypeBuilder builder) { + super(ctx); + + for (EffectiveStatement stmt : effectiveSubstatements()) { + if (stmt instanceof RangeEffectiveStatementImpl) { + final RangeEffectiveStatementImpl rangeStmt = (RangeEffectiveStatementImpl)stmt; + builder.setRangeConstraint(rangeStmt, rangeStmt.argument()); + } + if (stmt instanceof UnknownSchemaNode) { + builder.addUnknownSchemaNode((UnknownSchemaNode)stmt); + } + } + + try { + typeDefinition = builder.build(); + } catch (InvalidRangeConstraintException e) { + throw new SourceException(ctx.getStatementSourceReference(), e, "Invalid range constraint: %s", + e.getOffendingRanges()); + } + } + + @Nonnull + @Override + public T getTypeDefinition() { + return typeDefinition; + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/LeafrefSpecificationEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/LeafrefSpecificationEffectiveStatement.java similarity index 85% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/LeafrefSpecificationEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/LeafrefSpecificationEffectiveStatement.java index 36c9b0964b..c1431ee12b 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/LeafrefSpecificationEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/LeafrefSpecificationEffectiveStatement.java @@ -5,8 +5,9 @@ * 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.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; +import com.google.common.annotations.VisibleForTesting; import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -17,15 +18,17 @@ import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.LeafrefSpeci import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition; import org.opendaylight.yangtools.yang.model.util.type.BaseTypes; import org.opendaylight.yangtools.yang.model.util.type.LeafrefTypeBuilder; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class LeafrefSpecificationEffectiveStatementImpl +@VisibleForTesting +// FIXME: hide this class +public final class LeafrefSpecificationEffectiveStatement extends DeclaredEffectiveStatementBase implements TypeEffectiveStatement { private final LeafrefTypeDefinition typeDefinition; - public LeafrefSpecificationEffectiveStatementImpl(final StmtContext> ctx) { super(ctx); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/LeafrefSpecificationImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/LeafrefSpecificationImpl.java new file mode 100644 index 0000000000..47413d9a3e --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/LeafrefSpecificationImpl.java @@ -0,0 +1,41 @@ +/* + * 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.rfc7950.stmt.type; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import org.opendaylight.yangtools.yang.model.api.stmt.PathStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.LeafrefSpecification; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class LeafrefSpecificationImpl extends AbstractDeclaredStatement implements LeafrefSpecification { + LeafrefSpecificationImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public String getName() { + return argument(); + } + + @Nonnull + @Override + public PathStatement getPath() { + return firstDeclared(PathStatement.class); + } + + @Nullable + @Override + public RequireInstanceStatement getRequireInstance() { + return firstDeclared(RequireInstanceStatement.class); + } + +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/LeafrefSpecificationRFC6020Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/LeafrefSpecificationRFC6020Support.java new file mode 100644 index 0000000000..699a3fe87a --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/LeafrefSpecificationRFC6020Support.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.type; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; + +final class LeafrefSpecificationRFC6020Support extends AbstractLeafrefSpecificationSupport { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .TYPE) + .addMandatory(YangStmtMapping.PATH) + .build(); + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/LeafrefSpecificationRfc7950Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/LeafrefSpecificationRFC7950Support.java similarity index 76% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/LeafrefSpecificationRfc7950Support.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/LeafrefSpecificationRFC7950Support.java index 4485d44e2e..24d9f8eb3f 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/LeafrefSpecificationRfc7950Support.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/LeafrefSpecificationRFC7950Support.java @@ -5,19 +5,15 @@ * 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.rfc7950.stmt.type; -package org.opendaylight.yangtools.yang.parser.stmt.rfc7950; - -import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.LeafrefSpecificationImpl; /** * Class providing necessary support for processing YANG 1.1 leafref statement. */ -@Beta -public class LeafrefSpecificationRfc7950Support extends LeafrefSpecificationImpl.Definition { +final class LeafrefSpecificationRFC7950Support extends AbstractLeafrefSpecificationSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping .TYPE) .addMandatory(YangStmtMapping.PATH) diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/LeafrefTypeEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/LeafrefTypeEffectiveStatementImpl.java similarity index 87% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/LeafrefTypeEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/LeafrefTypeEffectiveStatementImpl.java index 6f7a54fcf8..10b995c879 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/LeafrefTypeEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/LeafrefTypeEffectiveStatementImpl.java @@ -5,8 +5,7 @@ * 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.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; @@ -17,16 +16,16 @@ import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement; import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition; import org.opendaylight.yangtools.yang.model.util.type.RequireInstanceRestrictedTypeBuilder; import org.opendaylight.yangtools.yang.model.util.type.RestrictedTypes; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.TypeUtils; -public final class LeafrefTypeEffectiveStatementImpl extends DeclaredEffectiveStatementBase +final class LeafrefTypeEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements TypeEffectiveStatement { private final LeafrefTypeDefinition typeDefinition; - public LeafrefTypeEffectiveStatementImpl( + LeafrefTypeEffectiveStatementImpl( final StmtContext> ctx, final LeafrefTypeDefinition baseType) { super(ctx); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/StringTypeEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/StringTypeEffectiveStatementImpl.java similarity index 90% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/StringTypeEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/StringTypeEffectiveStatementImpl.java index c18cdbd711..a16368f590 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/StringTypeEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/StringTypeEffectiveStatementImpl.java @@ -5,8 +5,7 @@ * 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.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; @@ -19,19 +18,20 @@ import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition; import org.opendaylight.yangtools.yang.model.util.type.InvalidLengthConstraintException; import org.opendaylight.yangtools.yang.model.util.type.RestrictedTypes; import org.opendaylight.yangtools.yang.model.util.type.StringTypeBuilder; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.length.LengthEffectiveStatementImpl; 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.rfc6020.TypeUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public final class StringTypeEffectiveStatementImpl extends DeclaredEffectiveStatementBase +final class StringTypeEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements TypeEffectiveStatement { private static final Logger LOG = LoggerFactory.getLogger(StringTypeEffectiveStatementImpl.class); private final StringTypeDefinition typeDefinition; - public StringTypeEffectiveStatementImpl( + StringTypeEffectiveStatementImpl( final StmtContext> ctx, final StringTypeDefinition baseType) { super(ctx); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/TypeStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/TypeStatementImpl.java new file mode 100644 index 0000000000..b02166922f --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/TypeStatementImpl.java @@ -0,0 +1,25 @@ +/* + * 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.rfc7950.stmt.type; + +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class TypeStatementImpl extends AbstractDeclaredStatement implements TypeStatement { + TypeStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public String getName() { + return argument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/TypeStatementRFC6020Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/TypeStatementRFC6020Support.java new file mode 100644 index 0000000000..57f93d5fc2 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/TypeStatementRFC6020Support.java @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.type; + +public final class TypeStatementRFC6020Support extends AbstractTypeStatementSupport { + +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/TypeStatementRfc7950Support.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/TypeStatementRFC7950Support.java similarity index 71% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/TypeStatementRfc7950Support.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/TypeStatementRFC7950Support.java index 2252525c78..04b5d1a0a3 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/TypeStatementRfc7950Support.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/TypeStatementRFC7950Support.java @@ -5,24 +5,22 @@ * 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.rfc7950; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableMap; import java.util.Map; import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.TypeStatementImpl; import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.TypeUtils; /** * Class providing necessary support for processing YANG 1.1 Type statement. */ @Beta -public final class TypeStatementRfc7950Support extends TypeStatementImpl.Definition { - private static final Map> ARGUMENT_SPECIFIC_SUPPORTS = - ImmutableMap.>of( - TypeUtils.LEAF_REF, new LeafrefSpecificationRfc7950Support(), - TypeUtils.IDENTITY_REF, new IdentityrefSpecificationRfc7950Support()); +public final class TypeStatementRFC7950Support extends AbstractTypeStatementSupport { + private static final Map> ARGUMENT_SPECIFIC_SUPPORTS = ImmutableMap.of( + TypeUtils.LEAF_REF, new LeafrefSpecificationRFC7950Support(), + TypeUtils.IDENTITY_REF, new IdentityrefSpecificationRFC7950Support()); @Override public boolean hasArgumentSpecificSupports() { diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/UnionSpecificationEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/UnionSpecificationEffectiveStatement.java similarity index 85% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/UnionSpecificationEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/UnionSpecificationEffectiveStatement.java index b7209f61a0..6d90e2436e 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/UnionSpecificationEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/UnionSpecificationEffectiveStatement.java @@ -5,8 +5,9 @@ * 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.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; +import com.google.common.annotations.VisibleForTesting; import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -15,16 +16,18 @@ import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.UnionSpecifi import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition; import org.opendaylight.yangtools.yang.model.util.type.BaseTypes; import org.opendaylight.yangtools.yang.model.util.type.UnionTypeBuilder; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class UnionSpecificationEffectiveStatementImpl extends +@VisibleForTesting +// FIXME: hide this class +public final class UnionSpecificationEffectiveStatement extends DeclaredEffectiveStatementBase implements TypeEffectiveStatement { private final UnionTypeDefinition typeDefinition; - public UnionSpecificationEffectiveStatementImpl( + UnionSpecificationEffectiveStatement( final StmtContext> ctx) { super(ctx); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/UnionSpecificationImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/UnionSpecificationImpl.java new file mode 100644 index 0000000000..bdeba5ba4a --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/UnionSpecificationImpl.java @@ -0,0 +1,34 @@ +/* + * 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.rfc7950.stmt.type; + +import java.util.Collection; +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.UnionSpecification; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class UnionSpecificationImpl extends AbstractDeclaredStatement implements UnionSpecification { + UnionSpecificationImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public String getName() { + return argument(); + } + + @Nonnull + @Override + public Collection getTypes() { + return allDeclared(TypeStatement.class); + } + +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/UnionSpecificationSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/UnionSpecificationSupport.java new file mode 100644 index 0000000000..3fcc5f7e20 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/UnionSpecificationSupport.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.type; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.UnionSpecification; +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.meta.SubstatementValidator; + +final class UnionSpecificationSupport extends + AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .TYPE) + .addMultiple(YangStmtMapping.TYPE) + .build(); + + UnionSpecificationSupport() { + super(YangStmtMapping.TYPE); + } + + @Override + public String parseArgumentValue(final StmtContext ctx, final String value) { + return value; + } + + @Override + public UnionSpecification createDeclared(final StmtContext ctx) { + return new UnionSpecificationImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new UnionSpecificationEffectiveStatement(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/UnionTypeEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/UnionTypeEffectiveStatementImpl.java similarity index 81% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/UnionTypeEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/UnionTypeEffectiveStatementImpl.java index 79aec01bdf..c8bf5d1b93 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/UnionTypeEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/UnionTypeEffectiveStatementImpl.java @@ -5,8 +5,7 @@ * 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.type; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement; @@ -15,8 +14,8 @@ import org.opendaylight.yangtools.yang.model.util.type.RestrictedTypes; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.TypeUtils; -public final class UnionTypeEffectiveStatementImpl extends AbstractTypeEffectiveStatement { - public UnionTypeEffectiveStatementImpl( +final class UnionTypeEffectiveStatementImpl extends AbstractTypeEffectiveStatement { + UnionTypeEffectiveStatementImpl( final StmtContext> ctx, final UnionTypeDefinition baseType) { super(ctx, RestrictedTypes.newUnionBuilder(baseType, TypeUtils.typeEffectiveSchemaPath(ctx))); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/TypeDefEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/typedef/TypedefEffectiveStatementImpl.java similarity index 91% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/TypeDefEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/typedef/TypedefEffectiveStatementImpl.java index 11cf580283..5f882f10b5 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/TypeDefEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/typedef/TypedefEffectiveStatementImpl.java @@ -5,7 +5,7 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.typedef; import java.util.Collection; import java.util.Map; @@ -29,22 +29,23 @@ import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UnitsEffectiveStatement; import org.opendaylight.yangtools.yang.model.util.type.DerivedTypeBuilder; import org.opendaylight.yangtools.yang.model.util.type.DerivedTypes; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.AbstractEffectiveSchemaNode; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveSchemaNode; 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.rfc6020.TypeUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public final class TypeDefEffectiveStatementImpl extends AbstractEffectiveSchemaNode implements +// FIXME: hide this class +public final class TypedefEffectiveStatementImpl extends AbstractEffectiveSchemaNode implements TypedefEffectiveStatement { - private static final Logger LOG = LoggerFactory.getLogger(TypeDefEffectiveStatementImpl.class); + private static final Logger LOG = LoggerFactory.getLogger(TypedefEffectiveStatementImpl.class); private final TypeDefinition typeDefinition; private TypeEffectiveStatement typeStatement; - public TypeDefEffectiveStatementImpl(final StmtContext ctx) { + TypedefEffectiveStatementImpl(final StmtContext ctx) { super(ctx); final TypeEffectiveStatement typeEffectiveStmt = firstSubstatementOfType(TypeEffectiveStatement.class); @@ -112,18 +113,18 @@ public final class TypeDefEffectiveStatementImpl extends AbstractEffectiveSchema @Override public > V get(@Nonnull final Class namespace, @Nonnull final K identifier) { - return TypeDefEffectiveStatementImpl.this.get(namespace, identifier); + return TypedefEffectiveStatementImpl.this.get(namespace, identifier); } @Override public > Map getAll(@Nonnull final Class namespace) { - return TypeDefEffectiveStatementImpl.this.getAll(namespace); + return TypedefEffectiveStatementImpl.this.getAll(namespace); } @Nonnull @Override public Collection> effectiveSubstatements() { - return TypeDefEffectiveStatementImpl.this.effectiveSubstatements(); + return TypedefEffectiveStatementImpl.this.effectiveSubstatements(); } @Nonnull @@ -146,7 +147,7 @@ public final class TypeDefEffectiveStatementImpl extends AbstractEffectiveSchema @Nonnull @Override public TypeDefinition getTypeDefinition() { - return TypeDefEffectiveStatementImpl.this.getTypeDefinition(); + return TypedefEffectiveStatementImpl.this.getTypeDefinition(); } } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/typedef/TypedefStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/typedef/TypedefStatementImpl.java new file mode 100644 index 0000000000..cd6ef93306 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/typedef/TypedefStatementImpl.java @@ -0,0 +1,68 @@ +/* + * 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.rfc7950.stmt.typedef; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.UnitsStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class TypedefStatementImpl extends AbstractDeclaredStatement implements TypedefStatement { + TypedefStatementImpl(final StmtContext context) { + super(context); + } + + @Nullable + @Override + public StatusStatement getStatus() { + return firstDeclared(StatusStatement.class); + } + + @Nullable + @Override + public DescriptionStatement getDescription() { + return firstDeclared(DescriptionStatement.class); + } + + @Nullable + @Override + public ReferenceStatement getReference() { + return firstDeclared(ReferenceStatement.class); + } + + @Nonnull + @Override + public TypeStatement getType() { + return firstDeclared(TypeStatement.class); + } + + @Override + public UnitsStatement getUnits() { + return firstDeclared(UnitsStatement.class); + } + + @Nonnull + @Override + public QName getName() { + return argument(); + } + + @Nullable + @Override + public DefaultStatement getDefault() { + return firstDeclared(DefaultStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/typedef/TypedefStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/typedef/TypedefStatementSupport.java new file mode 100644 index 0000000000..b9ac420391 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/typedef/TypedefStatementSupport.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.typedef; + +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement; +import org.opendaylight.yangtools.yang.parser.spi.TypeNamespace; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; + +public final class TypedefStatementSupport extends + AbstractQNameStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.TYPEDEF) + .addOptional(YangStmtMapping.DEFAULT) + .addOptional(YangStmtMapping.DESCRIPTION) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addMandatory(YangStmtMapping.TYPE) + .addOptional(YangStmtMapping.UNITS) + .build(); + + public TypedefStatementSupport() { + super(YangStmtMapping.TYPEDEF); + } + + @Override + public QName parseArgumentValue(final StmtContext ctx, final String value) { + return StmtContextUtils.qnameFromArgument(ctx, value); + } + + @Override + public TypedefStatement createDeclared(final StmtContext ctx) { + return new TypedefStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new TypedefEffectiveStatementImpl(ctx); + } + + @Override + public void onFullDefinitionDeclared(final StmtContext.Mutable> stmt) { + super.onFullDefinitionDeclared(stmt); + + if (stmt != null && stmt.getParentContext() != null) { + final StmtContext existing = stmt.getParentContext() + .getFromNamespace(TypeNamespace.class, stmt.getStatementArgument()); + SourceException.throwIf(existing != null, stmt.getStatementSourceReference(), + "Duplicate name for typedef %s", stmt.getStatementArgument()); + + stmt.getParentContext().addContext(TypeNamespace.class, stmt.getStatementArgument(), stmt); + } + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UniqueEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/unique/UniqueEffectiveStatementImpl.java similarity index 71% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UniqueEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/unique/UniqueEffectiveStatementImpl.java index 61ebf11648..3354ef8a3c 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UniqueEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/unique/UniqueEffectiveStatementImpl.java @@ -5,8 +5,7 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.unique; import java.util.Collection; import javax.annotation.Nonnull; @@ -14,13 +13,12 @@ import org.opendaylight.yangtools.yang.model.api.UniqueConstraint; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Relative; import org.opendaylight.yangtools.yang.model.api.stmt.UniqueEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UniqueStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class UniqueEffectiveStatementImpl - extends DeclaredEffectiveStatementBase, UniqueStatement> +final class UniqueEffectiveStatementImpl extends DeclaredEffectiveStatementBase, UniqueStatement> implements UniqueConstraint, UniqueEffectiveStatement { - public UniqueEffectiveStatementImpl(final StmtContext, UniqueStatement, ?> ctx) { + UniqueEffectiveStatementImpl(final StmtContext, UniqueStatement, ?> ctx) { super(ctx); } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/unique/UniqueStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/unique/UniqueStatementImpl.java new file mode 100644 index 0000000000..e9d543da9d --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/unique/UniqueStatementImpl.java @@ -0,0 +1,29 @@ +/* + * 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.rfc7950.stmt.unique; + +import java.util.Collection; +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Relative; +import org.opendaylight.yangtools.yang.model.api.stmt.UniqueStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class UniqueStatementImpl extends AbstractDeclaredStatement> + implements UniqueStatement { + UniqueStatementImpl(final StmtContext, UniqueStatement, ?> context) { + super(context); + } + + @Nonnull + @Override + public Collection getTag() { + return argument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/unique/UniqueStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/unique/UniqueStatementSupport.java new file mode 100644 index 0000000000..d30373ca41 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/unique/UniqueStatementSupport.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.unique; + +import com.google.common.base.Splitter; +import com.google.common.collect.ImmutableSet; +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Relative; +import org.opendaylight.yangtools.yang.model.api.stmt.UniqueStatement; +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.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; + +public final class UniqueStatementSupport + extends AbstractStatementSupport, UniqueStatement, + EffectiveStatement, UniqueStatement>> { + private static final Splitter SPACE_SPLITTER = Splitter.on(' ').omitEmptyStrings().trimResults(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.UNIQUE) + .build(); + + public UniqueStatementSupport() { + super(YangStmtMapping.UNIQUE); + } + + @Override + public Collection parseArgumentValue(final StmtContext ctx, + final String value) { + final Collection uniqueConstraints = parseUniqueConstraintArgument(ctx, value); + SourceException.throwIf(uniqueConstraints.isEmpty(), ctx.getStatementSourceReference(), + "Invalid argument value '%s' of unique statement. The value must contains at least " + + "one descendant schema node identifier.", value); + return uniqueConstraints; + } + + @Override + public UniqueStatement createDeclared(final StmtContext, UniqueStatement, ?> ctx) { + return new UniqueStatementImpl(ctx); + } + + @Override + public EffectiveStatement, UniqueStatement> createEffective( + final StmtContext, UniqueStatement, + EffectiveStatement, UniqueStatement>> ctx) { + return new UniqueEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } + + private static Collection parseUniqueConstraintArgument( + final StmtContext ctx, final String argumentValue) { + final Set uniqueConstraintNodes = new HashSet<>(); + for (final String uniqueArgToken : SPACE_SPLITTER.split(argumentValue)) { + final SchemaNodeIdentifier nodeIdentifier = Utils.nodeIdentifierFromPath(ctx, uniqueArgToken); + SourceException.throwIf(nodeIdentifier.isAbsolute(), ctx.getStatementSourceReference(), + "Unique statement argument '%s' contains schema node identifier '%s' " + + "which is not in the descendant node identifier form.", argumentValue, uniqueArgToken); + uniqueConstraintNodes.add((SchemaNodeIdentifier.Relative) nodeIdentifier); + } + return ImmutableSet.copyOf(uniqueConstraintNodes); + } +} \ No newline at end of file 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/rfc7950/stmt/units/UnitsEffectiveStatementImpl.java similarity index 65% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UnitsEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/units/UnitsEffectiveStatementImpl.java index f0e88a98dc..4485fda7d0 100644 --- 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/rfc7950/stmt/units/UnitsEffectiveStatementImpl.java @@ -5,16 +5,16 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.units; import org.opendaylight.yangtools.yang.model.api.stmt.UnitsEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UnitsStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class UnitsEffectiveStatementImpl extends DeclaredEffectiveStatementBase +final class UnitsEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements UnitsEffectiveStatement { - public UnitsEffectiveStatementImpl(final StmtContext ctx) { + UnitsEffectiveStatementImpl(final StmtContext ctx) { super(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/units/UnitsStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/units/UnitsStatementImpl.java new file mode 100644 index 0000000000..6a9f01bc8f --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/units/UnitsStatementImpl.java @@ -0,0 +1,25 @@ +/* + * 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.rfc7950.stmt.units; + +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.model.api.stmt.UnitsStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class UnitsStatementImpl extends AbstractDeclaredStatement implements UnitsStatement { + UnitsStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public String getName() { + return argument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/units/UnitsStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/units/UnitsStatementSupport.java new file mode 100644 index 0000000000..ec1ec9b916 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/units/UnitsStatementSupport.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.units; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.UnitsStatement; +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.meta.SubstatementValidator; + +public final class UnitsStatementSupport + extends AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.UNITS) + .build(); + + public UnitsStatementSupport() { + super(YangStmtMapping.UNITS); + } + + @Override + public String parseArgumentValue(final StmtContext ctx, final String value) { + return value; + } + + @Override + public UnitsStatement createDeclared( + final StmtContext ctx) { + return new UnitsStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new UnitsEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file 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/rfc7950/stmt/uses/UsesStatementImpl.java similarity index 73% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UsesStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementImpl.java index a5166b80da..48c61586a0 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/rfc7950/stmt/uses/UsesStatementImpl.java @@ -5,7 +5,7 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.uses; import com.google.common.collect.ImmutableSet; import java.util.ArrayList; @@ -27,121 +27,29 @@ import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement; import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement; -import org.opendaylight.yangtools.yang.parser.spi.GroupingNamespace; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType; 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.ModelActionBuilder.InferenceAction; -import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.InferenceContext; -import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.Prerequisite; -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.meta.StmtContext.Mutable; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; import org.opendaylight.yangtools.yang.parser.spi.source.ModuleCtxToModuleQName; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; import org.opendaylight.yangtools.yang.parser.spi.validation.ValidationBundlesNamespace; import org.opendaylight.yangtools.yang.parser.spi.validation.ValidationBundlesNamespace.ValidationBundleType; import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.UsesEffectiveStatementImpl; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangValidationBundles; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class UsesStatementImpl extends AbstractDeclaredStatement implements UsesStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .USES) - .addAny(YangStmtMapping.AUGMENT) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.IF_FEATURE) - .addAny(YangStmtMapping.REFINE) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addOptional(YangStmtMapping.WHEN) - .build(); - +final class UsesStatementImpl extends AbstractDeclaredStatement implements UsesStatement { private static final Logger LOG = LoggerFactory.getLogger(UsesStatementImpl.class); - protected UsesStatementImpl(final StmtContext context) { + UsesStatementImpl(final StmtContext context) { super(context); } - public static class Definition extends - AbstractQNameStatementSupport> { - - public Definition() { - super(YangStmtMapping.USES); - } - - @Override - public QName parseArgumentValue(final StmtContext ctx, final String value) { - return StmtContextUtils.qnameFromArgument(ctx, value); - } - - @Override - public void onFullDefinitionDeclared( - final Mutable> usesNode) { - if (!usesNode.isSupportedByFeatures()) { - return; - } - super.onFullDefinitionDeclared(usesNode); - - final ModelActionBuilder usesAction = usesNode.newInferenceAction(ModelProcessingPhase.EFFECTIVE_MODEL); - final QName groupingName = usesNode.getStatementArgument(); - - final Prerequisite> sourceGroupingPre = usesAction.requiresCtx(usesNode, - GroupingNamespace.class, groupingName, ModelProcessingPhase.EFFECTIVE_MODEL); - final Prerequisite> targetNodePre = usesAction.mutatesEffectiveCtx( - usesNode.getParentContext()); - - usesAction.apply(new InferenceAction() { - - @Override - public void apply(final InferenceContext ctx) { - final StatementContextBase targetNodeStmtCtx = - (StatementContextBase) targetNodePre.resolve(ctx); - final StatementContextBase sourceGrpStmtCtx = - (StatementContextBase) sourceGroupingPre.resolve(ctx); - - try { - copyFromSourceToTarget(sourceGrpStmtCtx, targetNodeStmtCtx, usesNode); - resolveUsesNode(usesNode, targetNodeStmtCtx); - StmtContextUtils.validateIfFeatureAndWhenOnListKeys(usesNode); - } catch (final SourceException e) { - LOG.warn(e.getMessage(), e); - throw e; - } - } - - @Override - public void prerequisiteFailed(final Collection> failed) { - InferenceException.throwIf(failed.contains(sourceGroupingPre), - usesNode.getStatementSourceReference(), "Grouping '%s' was not resolved.", groupingName); - throw new InferenceException("Unknown error occurred.", usesNode.getStatementSourceReference()); - } - }); - } - - @Override - public UsesStatement createDeclared(final StmtContext ctx) { - return new UsesStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new UsesEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - - } - @Nonnull @Override public QName getName() { diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementSupport.java new file mode 100644 index 0000000000..ba16a93cac --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementSupport.java @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.uses; + +import java.util.Collection; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement; +import org.opendaylight.yangtools.yang.parser.spi.GroupingNamespace; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; +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.ModelActionBuilder.InferenceAction; +import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.InferenceContext; +import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.Prerequisite; +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.meta.StmtContext.Mutable; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; +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; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public final class UsesStatementSupport extends + AbstractQNameStatementSupport> { + private static final Logger LOG = LoggerFactory.getLogger(UsesStatementSupport.class); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .USES) + .addAny(YangStmtMapping.AUGMENT) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.IF_FEATURE) + .addAny(YangStmtMapping.REFINE) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addOptional(YangStmtMapping.WHEN) + .build(); + + public UsesStatementSupport() { + super(YangStmtMapping.USES); + } + + @Override + public QName parseArgumentValue(final StmtContext ctx, final String value) { + return StmtContextUtils.qnameFromArgument(ctx, value); + } + + @Override + public void onFullDefinitionDeclared( + final Mutable> usesNode) { + if (!usesNode.isSupportedByFeatures()) { + return; + } + super.onFullDefinitionDeclared(usesNode); + + final ModelActionBuilder usesAction = usesNode.newInferenceAction(ModelProcessingPhase.EFFECTIVE_MODEL); + final QName groupingName = usesNode.getStatementArgument(); + + final Prerequisite> sourceGroupingPre = usesAction.requiresCtx(usesNode, + GroupingNamespace.class, groupingName, ModelProcessingPhase.EFFECTIVE_MODEL); + final Prerequisite> targetNodePre = usesAction.mutatesEffectiveCtx( + usesNode.getParentContext()); + + usesAction.apply(new InferenceAction() { + + @Override + public void apply(final InferenceContext ctx) { + final StatementContextBase targetNodeStmtCtx = + (StatementContextBase) targetNodePre.resolve(ctx); + final StatementContextBase sourceGrpStmtCtx = + (StatementContextBase) sourceGroupingPre.resolve(ctx); + + try { + UsesStatementImpl.copyFromSourceToTarget(sourceGrpStmtCtx, targetNodeStmtCtx, usesNode); + UsesStatementImpl.resolveUsesNode(usesNode, targetNodeStmtCtx); + StmtContextUtils.validateIfFeatureAndWhenOnListKeys(usesNode); + } catch (final SourceException e) { + LOG.warn(e.getMessage(), e); + throw e; + } + } + + @Override + public void prerequisiteFailed(final Collection> failed) { + InferenceException.throwIf(failed.contains(sourceGroupingPre), + usesNode.getStatementSourceReference(), "Grouping '%s' was not resolved.", groupingName); + throw new InferenceException("Unknown error occurred.", usesNode.getStatementSourceReference()); + } + }); + } + + @Override + public UsesStatement createDeclared(final StmtContext ctx) { + return new UsesStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new UsesEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file 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/rfc7950/stmt/value/ValueEffectiveStatementImpl.java similarity index 64% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ValueEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/value/ValueEffectiveStatementImpl.java index fd5803a194..aa000a9223 100644 --- 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/rfc7950/stmt/value/ValueEffectiveStatementImpl.java @@ -5,16 +5,16 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.value; import org.opendaylight.yangtools.yang.model.api.stmt.ValueEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ValueStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class ValueEffectiveStatementImpl extends DeclaredEffectiveStatementBase +final class ValueEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements ValueEffectiveStatement { - public ValueEffectiveStatementImpl(final StmtContext ctx) { + ValueEffectiveStatementImpl(final 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/rfc7950/stmt/value/ValueStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/value/ValueStatementImpl.java new file mode 100644 index 0000000000..90b7fcc07f --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/value/ValueStatementImpl.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.rfc7950.stmt.value; + +import org.opendaylight.yangtools.yang.model.api.stmt.ValueStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class ValueStatementImpl extends AbstractDeclaredStatement implements ValueStatement { + ValueStatementImpl(final StmtContext context) { + super(context); + } + + @Override + public int getValue() { + return argument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/value/ValueStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/value/ValueStatementSupport.java new file mode 100644 index 0000000000..f366a1fc26 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/value/ValueStatementSupport.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.value; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ValueStatement; +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.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; + +public final class ValueStatementSupport extends + AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.VALUE).build(); + + public ValueStatementSupport() { + super(YangStmtMapping.VALUE); + } + + @Override + public Integer parseArgumentValue(final StmtContext ctx, final String value) { + try { + return Integer.valueOf(value); + } catch (NumberFormatException e) { + throw new SourceException(ctx.getStatementSourceReference(), e, + "%s is not valid value statement integer argument in a range of -2147483648..2147483647", value); + } + } + + @Override + public ValueStatement createDeclared(final StmtContext ctx) { + return new ValueStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new ValueEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ 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/rfc7950/stmt/when/WhenEffectiveStatementImpl.java similarity index 61% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/WhenEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/when/WhenEffectiveStatementImpl.java index 69aa22dcbb..177cbc0b3d 100644 --- 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/rfc7950/stmt/when/WhenEffectiveStatementImpl.java @@ -5,17 +5,17 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.when; import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; import org.opendaylight.yangtools.yang.model.api.stmt.WhenEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class WhenEffectiveStatementImpl - extends DeclaredEffectiveStatementBase implements WhenEffectiveStatement { - public WhenEffectiveStatementImpl(final StmtContext ctx) { +final class WhenEffectiveStatementImpl extends DeclaredEffectiveStatementBase + implements WhenEffectiveStatement { + WhenEffectiveStatementImpl(final 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/rfc7950/stmt/when/WhenStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/when/WhenStatementImpl.java new file mode 100644 index 0000000000..d268fbcd7a --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/when/WhenStatementImpl.java @@ -0,0 +1,41 @@ +/* + * 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.rfc7950.stmt.when; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; +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.WhenStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class WhenStatementImpl extends AbstractDeclaredStatement implements WhenStatement { + WhenStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public RevisionAwareXPath getCondition() { + return argument(); + } + + @Nullable + @Override + public DescriptionStatement getDescription() { + return firstDeclared(DescriptionStatement.class); + } + + @Nullable + @Override + public ReferenceStatement getReference() { + return firstDeclared(ReferenceStatement.class); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/when/WhenStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/when/WhenStatementSupport.java new file mode 100644 index 0000000000..4b795fa956 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/when/WhenStatementSupport.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.when; + +import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement; +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.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; + +public final class WhenStatementSupport extends AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.WHEN) + .addOptional(YangStmtMapping.DESCRIPTION) + .addOptional(YangStmtMapping.REFERENCE) + .build(); + + public WhenStatementSupport() { + super(YangStmtMapping.WHEN); + } + + @Override + public RevisionAwareXPath parseArgumentValue(final StmtContext ctx, final String value) { + return Utils.parseXPath(ctx, value); + } + + @Override + public WhenStatement createDeclared(final StmtContext ctx) { + return new WhenStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new WhenEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ 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/rfc7950/stmt/yang_version/YangVersionEffectiveStatementImpl.java similarity index 64% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/YangVersionEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/yang_version/YangVersionEffectiveStatementImpl.java index 3acaa8c552..f513785f80 100644 --- 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/rfc7950/stmt/yang_version/YangVersionEffectiveStatementImpl.java @@ -5,18 +5,17 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.yang_version; import org.opendaylight.yangtools.yang.common.YangVersion; import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class YangVersionEffectiveStatementImpl - extends DeclaredEffectiveStatementBase +final class YangVersionEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements YangVersionEffectiveStatement { - public YangVersionEffectiveStatementImpl(final StmtContext ctx) { + YangVersionEffectiveStatementImpl(final 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/rfc7950/stmt/yang_version/YangVersionStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/yang_version/YangVersionStatementImpl.java new file mode 100644 index 0000000000..556b141256 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/yang_version/YangVersionStatementImpl.java @@ -0,0 +1,26 @@ +/* + * 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.rfc7950.stmt.yang_version; + +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.common.YangVersion; +import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class YangVersionStatementImpl extends AbstractDeclaredStatement implements YangVersionStatement { + YangVersionStatementImpl(final StmtContext context) { + super(context); + } + + @Nonnull + @Override + public YangVersion getValue() { + return argument(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/yang_version/YangVersionStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/yang_version/YangVersionStatementSupport.java new file mode 100644 index 0000000000..4d229a708e --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/yang_version/YangVersionStatementSupport.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.yang_version; + +import org.opendaylight.yangtools.yang.common.YangVersion; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionStatement; +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.meta.StmtContext.Mutable; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; + +public final class YangVersionStatementSupport extends AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping + .YANG_VERSION) + .build(); + + public YangVersionStatementSupport() { + super(YangStmtMapping.YANG_VERSION); + } + + @Override + public YangVersion parseArgumentValue(final StmtContext ctx, final String value) { + return SourceException.unwrap(YangVersion.parse(value), ctx.getStatementSourceReference(), + "Unsupported YANG version %s", value); + } + + @Override + public YangVersionStatement createDeclared(final StmtContext ctx) { + return new YangVersionStatementImpl(ctx); + } + + @Override + public void onPreLinkageDeclared(final Mutable> stmt) { + stmt.setRootVersion(stmt.getStatementArgument()); + } + + @Override + public EffectiveStatement createEffective(final StmtContext> ctx) { + return new YangVersionEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ 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/rfc7950/stmt/yin_element/YinElementEffectiveStatementImpl.java similarity index 63% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/YinElementEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/yin_element/YinElementEffectiveStatementImpl.java index bccad509b5..116b4717bd 100644 --- 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/rfc7950/stmt/yin_element/YinElementEffectiveStatementImpl.java @@ -5,17 +5,16 @@ * 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; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.yin_element; import org.opendaylight.yangtools.yang.model.api.stmt.YinElementEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public final class YinElementEffectiveStatementImpl - extends DeclaredEffectiveStatementBase +final class YinElementEffectiveStatementImpl extends DeclaredEffectiveStatementBase implements YinElementEffectiveStatement { - public YinElementEffectiveStatementImpl(final StmtContext ctx) { + YinElementEffectiveStatementImpl(final StmtContext ctx) { super(ctx); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/yin_element/YinElementStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/yin_element/YinElementStatementImpl.java new file mode 100644 index 0000000000..e9ae7549b8 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/yin_element/YinElementStatementImpl.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.rfc7950.stmt.yin_element; + +import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class YinElementStatementImpl extends AbstractDeclaredStatement implements YinElementStatement { + YinElementStatementImpl(final StmtContext context) { + super(context); + } + + @Override + public boolean getValue() { + return argument().booleanValue(); + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/yin_element/YinElementStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/yin_element/YinElementStatementSupport.java new file mode 100644 index 0000000000..865fe69ae0 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/yin_element/YinElementStatementSupport.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.rfc7950.stmt.yin_element; + +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement; +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.meta.SubstatementValidator; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; + +public final class YinElementStatementSupport extends + AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( + YangStmtMapping.YIN_ELEMENT).build(); + + public YinElementStatementSupport() { + super(YangStmtMapping.YIN_ELEMENT); + } + + @Override + public Boolean parseArgumentValue(final StmtContext ctx, final String value) { + return Utils.parseBoolean(ctx, value); + } + + @Override + public YinElementStatement createDeclared(final StmtContext ctx) { + return new YinElementStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> ctx) { + return new YinElementEffectiveStatementImpl(ctx); + } + + @Override + public String internArgument(final String rawArgument) { + return Utils.internBoolean(rawArgument); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; + } +} \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationEffectiveStatementImpl.java index ef3840cb09..1077d110b5 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationEffectiveStatementImpl.java @@ -13,7 +13,7 @@ import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.UnknownEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; @VisibleForTesting diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionEffectiveStatementImpl.java index 523011d1a6..88ae3320c4 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionEffectiveStatementImpl.java @@ -12,7 +12,7 @@ import javax.annotation.Nonnull; import org.opendaylight.yangtools.concepts.SemVer; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaPath; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.UnknownEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; final class OpenconfigVersionEffectiveStatementImpl extends 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 deleted file mode 100644 index 36f3820d36..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AnyxmlStatementImpl.java +++ /dev/null @@ -1,164 +0,0 @@ -/** - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import java.util.Collection; -import java.util.Map; -import java.util.Optional; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -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.AnyxmlStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; -import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; -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.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.anyxmlschema.AnyxmlSchemaLocationNamespace; -import org.opendaylight.yangtools.yang.parser.stmt.anyxmlschema.AnyxmlSchemaLocationStatement; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.AnyxmlEffectiveStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.YangModeledAnyXmlEffectiveStatementImpl; - -public class AnyxmlStatementImpl extends AbstractDeclaredStatement implements AnyxmlStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .ANYXML) - .addOptional(YangStmtMapping.CONFIG) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.IF_FEATURE) - .addOptional(YangStmtMapping.MANDATORY) - .addAny(YangStmtMapping.MUST) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addOptional(YangStmtMapping.WHEN) - .addOptional(SupportedExtensionsMapping.ANYXML_SCHEMA_LOCATION) - .build(); - - protected AnyxmlStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends - AbstractQNameStatementSupport> { - - public Definition() { - super(YangStmtMapping.ANYXML); - } - - @Override - public QName parseArgumentValue(final StmtContext ctx, final String value) { - return StmtContextUtils.qnameFromArgument(ctx, value); - } - - @Override - public void onStatementAdded(final Mutable> stmt) { - stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); - } - - @Override - public AnyxmlStatement createDeclared(final StmtContext ctx) { - return new AnyxmlStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - final Map>> schemaLocations = - ctx.getAllFromCurrentStmtCtxNamespace(AnyxmlSchemaLocationNamespace.class); - if (schemaLocations != null && !schemaLocations.isEmpty()) { - final SchemaNodeIdentifier anyXmlSchemaNodeIdentifier = schemaLocations.values().iterator().next() - .getStatementArgument(); - final Optional anyXmlSchema = getAnyXmlSchema(ctx, anyXmlSchemaNodeIdentifier); - if (anyXmlSchema.isPresent()) { - return new YangModeledAnyXmlEffectiveStatementImpl(ctx, anyXmlSchema.get()); - } - } - return new AnyxmlEffectiveStatementImpl(ctx); - } - - private static Optional getAnyXmlSchema( - final StmtContext> ctx, - final SchemaNodeIdentifier contentSchemaPath) { - final StmtContext findNode = Utils.findNode(ctx.getRoot(), contentSchemaPath); - if (findNode != null) { - final EffectiveStatement anyXmlSchemaNode = findNode.buildEffective(); - if (anyXmlSchemaNode instanceof ContainerSchemaNode) { - return Optional.of((ContainerSchemaNode) anyXmlSchemaNode); - } - } - return Optional.empty(); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public QName getName() { - return argument(); - } - - @Override - public WhenStatement getWhenStatement() { - return firstDeclared(WhenStatement.class); - } - - @Nonnull - @Override - public Collection getIfFeatures() { - return allDeclared(IfFeatureStatement.class); - } - - @Nonnull - @Override - public Collection getMusts() { - return allDeclared(MustStatement.class); - } - - @Override - public ConfigStatement getConfig() { - return firstDeclared(ConfigStatement.class); - } - - @Override - public StatusStatement getStatus() { - return firstDeclared(StatusStatement.class); - } - - @Override - public DescriptionStatement getDescription() { - return firstDeclared(DescriptionStatement.class); - } - - @Override - public ReferenceStatement getReference() { - return firstDeclared(ReferenceStatement.class); - } - - @Override - public MandatoryStatement getMandatory() { - return firstDeclared(MandatoryStatement.class); - } -} 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 deleted file mode 100644 index 9f2f8254d8..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ArgumentStatementImpl.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ArgumentEffectiveStatementImpl; - -public class ArgumentStatementImpl extends AbstractDeclaredStatement - implements ArgumentStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .ARGUMENT) - .addOptional(YangStmtMapping.YIN_ELEMENT) - .build(); - - protected ArgumentStatementImpl( - final StmtContext context) { - super(context); - } - - public static class Definition - extends - AbstractQNameStatementSupport> { - - public Definition() { - super(YangStmtMapping.ARGUMENT); - } - - @Override - public QName parseArgumentValue(final StmtContext ctx, final String value) { - return StmtContextUtils.qnameFromArgument(ctx, value); - } - - @Override - public ArgumentStatement createDeclared( - final StmtContext ctx) { - return new ArgumentStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new ArgumentEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public QName getName() { - return argument(); - } - - @Override - public YinElementStatement getYinElement() { - return firstDeclared(YinElementStatement.class); - } - -} 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 deleted file mode 100644 index 7ecd95cbe0..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AugmentStatementImpl.java +++ /dev/null @@ -1,450 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import com.google.common.base.Verify; -import com.google.common.collect.ImmutableSet; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Objects; -import java.util.Set; -import java.util.regex.Pattern; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.common.YangVersion; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ActionStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.AugmentStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DataDefinitionStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.NotificationStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; -import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement; -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.CopyType; -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.ModelActionBuilder.Prerequisite; -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.meta.StmtContext.Mutable; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.spi.source.AugmentToChoiceNamespace; -import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -import org.opendaylight.yangtools.yang.parser.spi.source.StmtOrderingNamespace; -import org.opendaylight.yangtools.yang.parser.spi.validation.ValidationBundlesNamespace; -import org.opendaylight.yangtools.yang.parser.spi.validation.ValidationBundlesNamespace.ValidationBundleType; -import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.AugmentEffectiveStatementImpl; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class AugmentStatementImpl extends AbstractDeclaredStatement implements AugmentStatement { - private static final Logger LOG = LoggerFactory.getLogger(AugmentStatementImpl.class); - private static final Pattern PATH_REL_PATTERN1 = Pattern.compile("\\.\\.?\\s*/(.+)"); - private static final Pattern PATH_REL_PATTERN2 = Pattern.compile("//.*"); - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator - .builder(YangStmtMapping.AUGMENT) - .addAny(YangStmtMapping.ANYXML) - .addAny(YangStmtMapping.CASE) - .addAny(YangStmtMapping.CHOICE) - .addAny(YangStmtMapping.CONTAINER) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.IF_FEATURE) - .addAny(YangStmtMapping.LEAF) - .addAny(YangStmtMapping.LEAF_LIST) - .addAny(YangStmtMapping.LIST) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addAny(YangStmtMapping.USES) - .addOptional(YangStmtMapping.WHEN) - .build(); - - protected AugmentStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.AUGMENT); - } - - @Override - public SchemaNodeIdentifier parseArgumentValue(final StmtContext ctx, final String value) { - SourceException.throwIf(PATH_REL_PATTERN1.matcher(value).matches() - || PATH_REL_PATTERN2.matcher(value).matches(), ctx.getStatementSourceReference(), - "Augment argument \'%s\' is not valid, it can be only absolute path; or descendant if used in uses", - value); - - return Utils.nodeIdentifierFromPath(ctx, value); - } - - @Override - public AugmentStatement createDeclared( - final StmtContext ctx) { - return new AugmentStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new AugmentEffectiveStatementImpl(ctx); - } - - @Override - public void onFullDefinitionDeclared(final Mutable> augmentNode) { - if (!augmentNode.isSupportedByFeatures()) { - return; - } - - super.onFullDefinitionDeclared(augmentNode); - - if (StmtContextUtils.isInExtensionBody(augmentNode)) { - return; - } - - final ModelActionBuilder augmentAction = augmentNode.newInferenceAction( - ModelProcessingPhase.EFFECTIVE_MODEL); - final Prerequisite>> sourceCtxPrereq = - augmentAction.requiresCtx(augmentNode, ModelProcessingPhase.EFFECTIVE_MODEL); - final Prerequisite>> target = - augmentAction.mutatesEffectiveCtx(getSearchRoot(augmentNode), - SchemaNodeIdentifierBuildNamespace.class, augmentNode.getStatementArgument()); - - augmentAction.apply(new ModelActionBuilder.InferenceAction() { - @Override - public void apply(final ModelActionBuilder.InferenceContext ctx) { - final StatementContextBase augmentTargetCtx = - (StatementContextBase) target.resolve(ctx); - if (!isSupportedAugmentTarget(augmentTargetCtx) - || StmtContextUtils.isInExtensionBody(augmentTargetCtx)) { - augmentNode.setIsSupportedToBuildEffective(false); - return; - } - /** - * Marks case short hand in augment - */ - if (augmentTargetCtx.getPublicDefinition() == YangStmtMapping.CHOICE) { - augmentNode.addToNs(AugmentToChoiceNamespace.class, augmentNode, Boolean.TRUE); - } - - // FIXME: this is a workaround for models which augment a node which is added via an extension - // which we do not handle. This needs to be reworked in terms of unknown schema nodes. - final StatementContextBase augmentSourceCtx = (StatementContextBase) augmentNode; - try { - copyFromSourceToTarget(augmentSourceCtx, augmentTargetCtx); - augmentTargetCtx.addEffectiveSubstatement(augmentSourceCtx); - updateAugmentOrder(augmentSourceCtx); - } catch (final SourceException e) { - LOG.warn("Failed to add augmentation {} defined at {}", - augmentTargetCtx.getStatementSourceReference(), - augmentSourceCtx.getStatementSourceReference(), e); - } - } - - private void updateAugmentOrder(final StatementContextBase augmentSourceCtx) { - Integer currentOrder = augmentSourceCtx.getFromNamespace(StmtOrderingNamespace.class, - YangStmtMapping.AUGMENT); - if (currentOrder == null) { - currentOrder = 1; - } else { - currentOrder++; - } - - augmentSourceCtx.addToNs(StmtOrderingNamespace.class, YangStmtMapping.AUGMENT, currentOrder); - } - - @Override - public void prerequisiteFailed(final Collection> failed) { - /* - * Do not fail, if it is an uses-augment to an unknown node. - */ - if (YangStmtMapping.USES == augmentNode.getParentContext().getPublicDefinition()) { - final StatementContextBase targetNode = Utils.findNode(getSearchRoot(augmentNode), - augmentNode.getStatementArgument()); - if (targetNode != null && StmtContextUtils.isUnknownStatement(targetNode)) { - augmentNode.setIsSupportedToBuildEffective(false); - LOG.warn( - "Uses-augment to unknown node {}. Augmentation has not been performed. At line: {}", - augmentNode.getStatementArgument(), augmentNode.getStatementSourceReference()); - return; - } - } - - throw new InferenceException(augmentNode.getStatementSourceReference(), - "Augment target '%s' not found", augmentNode.getStatementArgument()); - } - }); - } - - private static Mutable getSearchRoot(final Mutable augmentContext) { - final Mutable parent = augmentContext.getParentContext(); - // Augment is in uses - we need to augment instantiated nodes in parent. - if (YangStmtMapping.USES == parent.getPublicDefinition()) { - return parent.getParentContext(); - } - return parent; - } - - public static void copyFromSourceToTarget(final StatementContextBase sourceCtx, - final StatementContextBase targetCtx) { - final CopyType typeOfCopy = UsesStatement.class.equals(sourceCtx.getParentContext().getPublicDefinition() - .getDeclaredRepresentationClass()) ? CopyType.ADDED_BY_USES_AUGMENTATION - : CopyType.ADDED_BY_AUGMENTATION; - /* - * Since Yang 1.1, if an augmentation is made conditional with a - * "when" statement, it is allowed to add mandatory nodes. - */ - final boolean skipCheckOfMandatoryNodes = YangVersion.VERSION_1_1.equals(sourceCtx.getRootVersion()) - && isConditionalAugmentStmt(sourceCtx); - - final Collection> declared = sourceCtx.mutableDeclaredSubstatements(); - final Collection> effective = sourceCtx.mutableEffectiveSubstatements(); - final Collection> buffer = new ArrayList<>(declared.size() + effective.size()); - - for (final Mutable originalStmtCtx : declared) { - if (originalStmtCtx.isSupportedByFeatures()) { - copyStatement(originalStmtCtx, targetCtx, typeOfCopy, buffer, skipCheckOfMandatoryNodes); - } - } - for (final Mutable originalStmtCtx : effective) { - copyStatement(originalStmtCtx, targetCtx, typeOfCopy, buffer, skipCheckOfMandatoryNodes); - } - - targetCtx.addEffectiveSubstatements(buffer); - } - - /** - * Checks whether supplied statement context is conditional augment - * statement. - * - * @param ctx - * statement context to be checked - * - * @return true if supplied statement context is conditional augment - * statement, otherwise false - */ - private static boolean isConditionalAugmentStmt(final StmtContext ctx) { - return ctx.getPublicDefinition() == YangStmtMapping.AUGMENT - && StmtContextUtils.findFirstSubstatement(ctx, WhenStatement.class) != null; - } - - private static void copyStatement(final Mutable original, final StatementContextBase target, - final CopyType typeOfCopy, final Collection> buffer, - final boolean skipCheckOfMandatoryNodes) { - if (needToCopyByAugment(original)) { - validateNodeCanBeCopiedByAugment(original, target, typeOfCopy, skipCheckOfMandatoryNodes); - - buffer.add(target.childCopyOf(original, typeOfCopy)); - } else if (isReusedByAugment(original)) { - buffer.add(original); - } - } - - private static void validateNodeCanBeCopiedByAugment(final StmtContext sourceCtx, - final StatementContextBase targetCtx, final CopyType typeOfCopy, - final boolean skipCheckOfMandatoryNodes) { - - if (WhenStatement.class.equals(sourceCtx.getPublicDefinition().getDeclaredRepresentationClass())) { - return; - } - - if (!skipCheckOfMandatoryNodes && typeOfCopy == CopyType.ADDED_BY_AUGMENTATION - && reguiredCheckOfMandatoryNodes(sourceCtx, targetCtx)) { - checkForMandatoryNodes(sourceCtx); - } - - for (final StmtContext subStatement : targetCtx.allSubstatements()) { - final boolean sourceIsDataNode = DataDefinitionStatement.class.isAssignableFrom(sourceCtx - .getPublicDefinition().getDeclaredRepresentationClass()); - final boolean targetIsDataNode = DataDefinitionStatement.class.isAssignableFrom(subStatement - .getPublicDefinition().getDeclaredRepresentationClass()); - final boolean qNamesEqual = sourceIsDataNode && targetIsDataNode - && Objects.equals(sourceCtx.getStatementArgument(), subStatement.getStatementArgument()); - - InferenceException.throwIf(qNamesEqual, sourceCtx.getStatementSourceReference(), - "An augment cannot add node named '%s' because this name is already used in target", - sourceCtx.rawStatementArgument()); - } - } - - private static void checkForMandatoryNodes(final StmtContext sourceCtx) { - if (StmtContextUtils.isNonPresenceContainer(sourceCtx)) { - /* - * We need to iterate over both declared and effective sub-statements, - * because a mandatory node can be: - * a) declared in augment body - * b) added to augment body also via uses of a grouping and - * such sub-statements are stored in effective sub-statements collection. - */ - sourceCtx.allSubstatementsStream().forEach(Definition::checkForMandatoryNodes); - } - - InferenceException.throwIf(StmtContextUtils.isMandatoryNode(sourceCtx), - sourceCtx.getStatementSourceReference(), - "An augment cannot add node '%s' because it is mandatory and in module different than target", - sourceCtx.rawStatementArgument()); - } - - private static boolean reguiredCheckOfMandatoryNodes(final StmtContext sourceCtx, - Mutable targetCtx) { - /* - * If the statement argument is not QName, it cannot be mandatory - * statement, therefore return false and skip mandatory nodes validation - */ - if (!(sourceCtx.getStatementArgument() instanceof QName)) { - return false; - } - final QName sourceStmtQName = (QName) sourceCtx.getStatementArgument(); - - // RootStatementContext, for example - final Mutable root = targetCtx.getRoot(); - do { - Verify.verify(targetCtx.getStatementArgument() instanceof QName, - "Argument of augment target statement must be QName."); - final QName targetStmtQName = (QName) targetCtx.getStatementArgument(); - /* - * If target is from another module, return true and perform - * mandatory nodes validation - */ - if (!Utils.belongsToTheSameModule(targetStmtQName, sourceStmtQName)) { - return true; - } - - /* - * If target or one of the target's ancestors from the same namespace - * is a presence container - * or is non-mandatory choice - * or is non-mandatory list - * return false and skip mandatory nodes validation, because these nodes - * are not mandatory node containers according to RFC 6020 section 3.1. - */ - if (StmtContextUtils.isPresenceContainer(targetCtx) - || StmtContextUtils.isNotMandatoryNodeOfType(targetCtx, YangStmtMapping.CHOICE) - || StmtContextUtils.isNotMandatoryNodeOfType(targetCtx, YangStmtMapping.LIST)) { - return false; - } - } while ((targetCtx = targetCtx.getParentContext()) != root); - - /* - * All target node's parents belong to the same module as source node, - * therefore return false and skip mandatory nodes validation. - */ - return false; - } - - private static final Set NOCOPY_DEF_SET = ImmutableSet.of(YangStmtMapping.USES, - YangStmtMapping.WHEN, YangStmtMapping.DESCRIPTION, YangStmtMapping.REFERENCE, YangStmtMapping.STATUS); - - public static boolean needToCopyByAugment(final StmtContext stmtContext) { - return !NOCOPY_DEF_SET.contains(stmtContext.getPublicDefinition()); - } - - private static final Set REUSED_DEF_SET = ImmutableSet.of(YangStmtMapping.TYPEDEF); - - public static boolean isReusedByAugment(final StmtContext stmtContext) { - return REUSED_DEF_SET.contains(stmtContext.getPublicDefinition()); - } - - static boolean isSupportedAugmentTarget(final StmtContext substatementCtx) { - /* - * :TODO Substatement must be allowed augment target type e.g. - * Container, etc... and must not be for example grouping, identity etc. - * It is problem in case when more than one substatements have the same - * QName, for example Grouping and Container are siblings and they have - * the same QName. We must find the Container and the Grouping must be - * ignored as disallowed augment target. - */ - final Collection allowedAugmentTargets = substatementCtx.getFromNamespace( - ValidationBundlesNamespace.class, ValidationBundleType.SUPPORTED_AUGMENT_TARGETS); - - // if no allowed target is returned we consider all targets allowed - return allowedAugmentTargets == null || allowedAugmentTargets.isEmpty() - || allowedAugmentTargets.contains(substatementCtx.getPublicDefinition()); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public SchemaNodeIdentifier getTargetNode() { - return argument(); - } - - @Nonnull - @Override - public Collection getDataDefinitions() { - return allDeclared(DataDefinitionStatement.class); - } - - @Nonnull - @Override - public Collection getActions() { - return allDeclared(ActionStatement.class); - } - - @Nonnull - @Override - public final Collection getNotifications() { - return allDeclared(NotificationStatement.class); - } - - @Nullable - @Override - public ReferenceStatement getReference() { - return firstDeclared(ReferenceStatement.class); - } - - @Nullable - @Override - public DescriptionStatement getDescription() { - return firstDeclared(DescriptionStatement.class); - } - - @Nullable - @Override - public StatusStatement getStatus() { - return firstDeclared(StatusStatement.class); - } - - @Nullable - @Override - public WhenStatement getWhenStatement() { - return firstDeclared(WhenStatement.class); - } - - @Nonnull - @Override - public Collection getCases() { - return allDeclared(CaseStatement.class); - } - - @Nonnull - @Override - public Collection getIfFeatures() { - return allDeclared(IfFeatureStatement.class); - } -} 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 deleted file mode 100644 index b810db4ffc..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BaseStatementImpl.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.BaseStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.IdentityStatement; -import org.opendaylight.yangtools.yang.parser.spi.IdentityNamespace; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; -import org.opendaylight.yangtools.yang.parser.spi.meta.DerivedIdentitiesNamespace; -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.ModelActionBuilder.InferenceAction; -import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.InferenceContext; -import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.Prerequisite; -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.meta.StmtContext.Mutable; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.BaseEffectiveStatementImpl; - -public class BaseStatementImpl extends AbstractDeclaredStatement implements BaseStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = - SubstatementValidator.builder(YangStmtMapping.BASE).build(); - - protected BaseStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition - extends AbstractQNameStatementSupport> { - - public Definition() { - super(YangStmtMapping.BASE); - } - - @Override - public QName parseArgumentValue(final StmtContext ctx, final String value) { - return StmtContextUtils.qnameFromArgument(ctx, value); - } - - @Override - public BaseStatement createDeclared(final StmtContext ctx) { - return new BaseStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new BaseEffectiveStatementImpl(ctx); - } - - @Override - public void onStatementDefinitionDeclared( - final Mutable> baseStmtCtx) { - final Mutable baseParentCtx = baseStmtCtx.getParentContext(); - if (StmtContextUtils.producesDeclared(baseParentCtx, IdentityStatement.class)) { - - final QName baseIdentityQName = baseStmtCtx.getStatementArgument(); - final ModelActionBuilder baseIdentityAction = baseStmtCtx.newInferenceAction( - ModelProcessingPhase.STATEMENT_DEFINITION); - final Prerequisite> requiresPrereq = baseIdentityAction.requiresCtx(baseStmtCtx, - IdentityNamespace.class, baseIdentityQName, ModelProcessingPhase.STATEMENT_DEFINITION); - final Prerequisite> mutatesPrereq = baseIdentityAction.mutatesCtx( - baseParentCtx, ModelProcessingPhase.STATEMENT_DEFINITION); - - baseIdentityAction.apply(new InferenceAction() { - @Override - public void apply(final InferenceContext ctx) { - List> derivedIdentities = baseStmtCtx.getFromNamespace( - DerivedIdentitiesNamespace.class, baseStmtCtx.getStatementArgument()); - if (derivedIdentities == null) { - derivedIdentities = new ArrayList<>(1); - baseStmtCtx.addToNs(DerivedIdentitiesNamespace.class, baseIdentityQName, derivedIdentities); - } - derivedIdentities.add(baseParentCtx); - } - - @Override - public void prerequisiteFailed(final Collection> failed) { - throw new InferenceException(baseStmtCtx.getStatementSourceReference(), - "Unable to resolve identity %s and base identity %s", - baseParentCtx.getStatementArgument(), baseStmtCtx.getStatementArgument()); - } - }); - } - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public QName getName() { - return argument(); - } -} 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 deleted file mode 100644 index 30c1cc1bbb..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BelongsToStatementImpl.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.findFirstDeclaredSubstatement; - -import java.util.Collection; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -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.ModelActionBuilder.InferenceAction; -import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.InferenceContext; -import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.Prerequisite; -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.meta.StmtContext.Mutable; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.spi.source.BelongsToModuleContext; -import org.opendaylight.yangtools.yang.parser.spi.source.BelongsToPrefixToModuleCtx; -import org.opendaylight.yangtools.yang.parser.spi.source.ModuleNamespaceForBelongsTo; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.BelongsToEffectiveStatementImpl; - -public class BelongsToStatementImpl extends AbstractDeclaredStatement - implements BelongsToStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = - SubstatementValidator.builder(YangStmtMapping.BELONGS_TO).addMandatory(YangStmtMapping.PREFIX).build(); - - protected BelongsToStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition - extends - AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.BELONGS_TO); - } - - @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; - } - - @Override - public BelongsToStatement createDeclared( - final StmtContext ctx) { - return new BelongsToStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new BelongsToEffectiveStatementImpl(ctx); - } - - @Override - public void onPreLinkageDeclared(final StmtContext.Mutable> belongsToCtx) { - belongsToCtx.addRequiredSource(getSourceIdentifier(belongsToCtx)); - } - - @Override - public void onLinkageDeclared(final Mutable> belongsToCtx) { - ModelActionBuilder belongsToAction = belongsToCtx.newInferenceAction(ModelProcessingPhase.SOURCE_LINKAGE); - - final SourceIdentifier belongsToSourceIdentifier = getSourceIdentifier(belongsToCtx); - final Prerequisite> belongsToPrereq = belongsToAction.requiresCtx(belongsToCtx, - ModuleNamespaceForBelongsTo.class, belongsToCtx.getStatementArgument(), - ModelProcessingPhase.SOURCE_LINKAGE); - - belongsToAction.apply(new InferenceAction() { - @Override - public void apply(final InferenceContext ctx) { - StmtContext belongsToModuleCtx = belongsToPrereq.resolve(ctx); - - belongsToCtx.addToNs(BelongsToModuleContext.class, belongsToSourceIdentifier, belongsToModuleCtx); - belongsToCtx.addToNs(BelongsToPrefixToModuleCtx.class, - findFirstDeclaredSubstatement(belongsToCtx, PrefixStatement.class).getStatementArgument(), - belongsToModuleCtx); - } - - @Override - public void prerequisiteFailed(final Collection> failed) { - if (failed.contains(belongsToPrereq)) { - throw new InferenceException(belongsToCtx.getStatementSourceReference(), - "Module '%s' from belongs-to was not found", belongsToCtx.getStatementArgument()); - } - } - }); - } - - private static SourceIdentifier getSourceIdentifier(final StmtContext> belongsToCtx) { - return RevisionSourceIdentifier.create(belongsToCtx.getStatementArgument()); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public String getModule() { - return argument(); - } - - @Nonnull - @Override - public PrefixStatement getPrefix() { - return firstDeclared(PrefixStatement.class); - } -} 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 deleted file mode 100644 index 095a884a79..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BitStatementImpl.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import java.util.Collection; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.PositionStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.BitEffectiveStatementImpl; - -public class BitStatementImpl extends AbstractDeclaredStatement implements BitStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .BIT) - .addOptional(YangStmtMapping.DESCRIPTION) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addOptional(YangStmtMapping.POSITION) - .build(); - - protected BitStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends - AbstractQNameStatementSupport> { - - public Definition() { - super(YangStmtMapping.BIT); - } - - @Override - public QName parseArgumentValue(final StmtContext ctx, final String value) { - return StmtContextUtils.qnameFromArgument(ctx, value); - } - - @Override - public BitStatement createDeclared(final StmtContext ctx) { - return new BitStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new BitEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Override - public StatusStatement getStatus() { - return firstDeclared(StatusStatement.class); - } - - @Override - public DescriptionStatement getDescription() { - return firstDeclared(DescriptionStatement.class); - } - - @Nonnull - @Override - public Collection getIfFeatures() { - return allDeclared(IfFeatureStatement.class); - } - - @Override - public ReferenceStatement getReference() { - return firstDeclared(ReferenceStatement.class); - } - - @Nonnull - @Override - public String getName() { - return argument().getLocalName(); - } - - @Override - public PositionStatement getPosition() { - return firstDeclared(PositionStatement.class); - } - -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BitsSpecificationImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BitsSpecificationImpl.java deleted file mode 100644 index df66053802..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BitsSpecificationImpl.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import java.util.Collection; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.BitsSpecification; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.BitsSpecificationEffectiveStatementImpl; - -public class BitsSpecificationImpl extends AbstractDeclaredStatement implements BitsSpecification { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .TYPE) - .addMultiple(YangStmtMapping.BIT) - .build(); - - protected BitsSpecificationImpl(final StmtContext context) { - super(context); - } - - public static class Definition - extends AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.TYPE); - } - - @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; - } - - @Override - public BitsSpecification createDeclared(final StmtContext ctx) { - return new BitsSpecificationImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new BitsSpecificationEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public String getName() { - return argument(); - } - - @Nonnull - @Override - public Collection getBits() { - return allDeclared(BitStatement.class); - } -} 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 deleted file mode 100644 index 7ca5b16b85..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/CaseStatementImpl.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import java.util.Collection; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DataDefinitionStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; -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.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.CaseEffectiveStatementImpl; - -public class CaseStatementImpl extends AbstractDeclaredStatement implements CaseStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .CASE) - .addAny(YangStmtMapping.ANYXML) - .addAny(YangStmtMapping.CHOICE) - .addAny(YangStmtMapping.CONTAINER) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.IF_FEATURE) - .addAny(YangStmtMapping.LEAF) - .addAny(YangStmtMapping.LEAF_LIST) - .addAny(YangStmtMapping.LIST) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addAny(YangStmtMapping.USES) - .addOptional(YangStmtMapping.WHEN) - .build(); - - protected CaseStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition - extends AbstractQNameStatementSupport> { - - public Definition() { - super(YangStmtMapping.CASE); - } - - @Override public QName parseArgumentValue(final StmtContext ctx, final String value) { - return StmtContextUtils.qnameFromArgument(ctx, value); - } - - @Override - public void onStatementAdded( - final Mutable> stmt) { - stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); - } - - @Override public CaseStatement createDeclared( - final StmtContext ctx) { - return new CaseStatementImpl(ctx); - } - - @Override public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new CaseEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public QName getName() { - return argument(); - } - - @Override - public WhenStatement getWhenStatement() { - return firstDeclared(WhenStatement.class); - } - - @Nonnull - @Override - public Collection getIfFeatures() { - return allDeclared(IfFeatureStatement.class); - } - - @Nonnull - @Override - public Collection getDataDefinitions() { - return allDeclared(DataDefinitionStatement.class); - } - - @Nullable - @Override - public StatusStatement getStatus() { - return firstDeclared(StatusStatement.class); - } - - @Nullable - @Override - public DescriptionStatement getDescription() { - return firstDeclared(DescriptionStatement.class); - } - - @Nullable - @Override - public ReferenceStatement getReference() { - return firstDeclared(ReferenceStatement.class); - } -} 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 deleted file mode 100644 index b96b741b6a..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ChoiceStatementImpl.java +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import java.util.Collection; -import java.util.Optional; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -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.CaseStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; -import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport; -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.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ChoiceEffectiveStatementImpl; - -public class ChoiceStatementImpl extends AbstractDeclaredStatement - implements ChoiceStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .CHOICE) - .addAny(YangStmtMapping.ANYXML) - .addAny(YangStmtMapping.CASE) - .addOptional(YangStmtMapping.CONFIG) - .addAny(YangStmtMapping.CONTAINER) - .addOptional(YangStmtMapping.DEFAULT) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.IF_FEATURE) - .addAny(YangStmtMapping.LEAF) - .addAny(YangStmtMapping.LEAF_LIST) - .addAny(YangStmtMapping.LIST) - .addOptional(YangStmtMapping.MANDATORY) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addOptional(YangStmtMapping.WHEN) - .build(); - - protected ChoiceStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends - AbstractQNameStatementSupport> { - private static final StatementSupport IMPLICIT_CASE = new CaseStatementImpl.Definition(); - - public Definition() { - super(YangStmtMapping.CHOICE); - } - - @Override - public QName parseArgumentValue(final StmtContext ctx, final String value) { - return StmtContextUtils.qnameFromArgument(ctx, value); - } - - @Override - public Optional> getImplicitParentFor(final StatementDefinition stmtDef) { - if (YangValidationBundles.SUPPORTED_CASE_SHORTHANDS.contains(stmtDef)) { - return Optional.of(implictCase()); - } - return Optional.empty(); - } - - @Override - public void onStatementAdded( - final Mutable> stmt) { - stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); - } - - @Override - public ChoiceStatement createDeclared(final StmtContext ctx) { - return new ChoiceStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new ChoiceEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - - protected StatementSupport implictCase() { - return IMPLICIT_CASE; - } - } - - @Nonnull - @Override - public QName getName() { - return argument(); - } - - @Nullable - @Override - public DefaultStatement getDefault() { - return firstDeclared(DefaultStatement.class); - } - - @Nullable - @Override - public ConfigStatement getConfig() { - return firstDeclared(ConfigStatement.class); - } - - @Nullable - @Override - public MandatoryStatement getMandatory() { - return firstDeclared(MandatoryStatement.class); - } - - @Nonnull - @Override - public Collection getCases() { - return allDeclared(CaseStatement.class); - } - - @Override - public WhenStatement getWhenStatement() { - return firstDeclared(WhenStatement.class); - } - - @Nonnull - @Override - public Collection getIfFeatures() { - return allDeclared(IfFeatureStatement.class); - } - - @Nullable - @Override - public StatusStatement getStatus() { - return firstDeclared(StatusStatement.class); - } - - @Nullable - @Override - public DescriptionStatement getDescription() { - return firstDeclared(DescriptionStatement.class); - } - - @Nullable - @Override - public ReferenceStatement getReference() { - return firstDeclared(ReferenceStatement.class); - } -} 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 deleted file mode 100644 index 7334bbdd34..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ConfigStatementImpl.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ConfigEffectiveStatementImpl; - -public class ConfigStatementImpl extends AbstractDeclaredStatement implements ConfigStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.CONFIG).build(); - - protected ConfigStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends - AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.CONFIG); - } - - @Override - public Boolean parseArgumentValue(final StmtContext ctx, final String value) { - return Utils.parseBoolean(ctx, value); - } - - @Override - public ConfigStatement createDeclared(final StmtContext ctx) { - final ConfigStatement ret = new ConfigStatementImpl(ctx); - - if (EmptyConfigStatement.FALSE.equals(ret)) { - return EmptyConfigStatement.FALSE; - } else if (EmptyConfigStatement.TRUE.equals(ret)) { - return EmptyConfigStatement.TRUE; - } else { - return ret; - } - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - final EffectiveStatement ret = new ConfigEffectiveStatementImpl(ctx); - final ConfigStatement declared = ret.getDeclared(); - if (declared instanceof EmptyConfigStatement && ret.effectiveSubstatements().isEmpty()) { - return ((EmptyConfigStatement)declared).toEffective(); - } - return ret; - } - - @Override - public String internArgument(final String rawArgument) { - return Utils.internBoolean(rawArgument); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Override - public boolean getValue() { - return argument().booleanValue(); - } -} 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 deleted file mode 100644 index 83c037ee6b..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ContactStatementImpl.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ContactStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ContactEffectiveStatementImpl; - -public class ContactStatementImpl extends AbstractDeclaredStatement implements ContactStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .CONTACT) - .build(); - - protected ContactStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends - AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.CONTACT); - } - - @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; - } - - @Override - public ContactStatement createDeclared(final StmtContext ctx) { - return new ContactStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new ContactEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public String getText() { - return rawArgument(); - } -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Decimal64SpecificationImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Decimal64SpecificationImpl.java deleted file mode 100644 index 4b7f559869..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Decimal64SpecificationImpl.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.FractionDigitsStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.RangeStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.Decimal64Specification; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.Decimal64SpecificationEffectiveStatementImpl; - -public class Decimal64SpecificationImpl extends AbstractDeclaredStatement implements Decimal64Specification { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .TYPE) - .addMandatory(YangStmtMapping.FRACTION_DIGITS) - .addOptional(YangStmtMapping.RANGE) - .build(); - - protected Decimal64SpecificationImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.TYPE); - } - - @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; - } - - @Override - public Decimal64Specification createDeclared(final StmtContext ctx) { - return new Decimal64SpecificationImpl(ctx); - } - - @Override - public EffectiveStatement createEffective(final StmtContext> ctx) { - return new Decimal64SpecificationEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public String getName() { - return argument(); - } - - @Nonnull - @Override - public FractionDigitsStatement getFractionDigits() { - return firstDeclared(FractionDigitsStatement.class); - } - - @Override - public RangeStatement getRange() { - return firstDeclared(RangeStatement.class); - } -} 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 deleted file mode 100644 index 329dfe6ecf..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/DefaultStatementImpl.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.DefaultEffectiveStatementImpl; - -public class DefaultStatementImpl extends AbstractDeclaredStatement implements - DefaultStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .DEFAULT) - .build(); - - protected DefaultStatementImpl( - final StmtContext context) { - super(context); - } - - public static class Definition - extends AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.DEFAULT); - } - - @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; - } - - @Override - public DefaultStatement createDeclared(final StmtContext ctx) { - return new DefaultStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new DefaultEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public String getValue() { - return rawArgument(); - } -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/DescriptionStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/DescriptionStatementImpl.java deleted file mode 100644 index 77dc41bf22..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/DescriptionStatementImpl.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.DescriptionEffectiveStatementImpl; - -public class DescriptionStatementImpl extends AbstractDeclaredStatement implements DescriptionStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .DESCRIPTION) - .build(); - - protected DescriptionStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.DESCRIPTION); - } - - @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; - } - - @Override - public DescriptionStatement createDeclared(final StmtContext ctx) { - return new DescriptionStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new DescriptionEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public String getText() { - return rawArgument(); - } -} 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 deleted file mode 100644 index 88b8990f4e..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/DeviateStatementImpl.java +++ /dev/null @@ -1,387 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableMap.Builder; -import com.google.common.collect.ImmutableSet; -import java.util.Collection; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.common.QNameModule; -import org.opendaylight.yangtools.yang.common.YangVersion; -import org.opendaylight.yangtools.yang.model.api.DeviateKind; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -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.DeviateStatement; -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.CopyType; -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.ModelActionBuilder.InferenceAction; -import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.InferenceContext; -import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.Prerequisite; -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.meta.StmtContext.Mutable; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.spi.source.ModuleCtxToModuleQName; -import org.opendaylight.yangtools.yang.parser.spi.source.ModulesDeviatedByModules; -import org.opendaylight.yangtools.yang.parser.spi.source.ModulesDeviatedByModules.SupportedModules; -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.DeviateEffectiveStatementImpl; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class DeviateStatementImpl extends AbstractDeclaredStatement implements DeviateStatement { - private static final Logger LOG = LoggerFactory.getLogger(DeviateStatementImpl.class); - - private static final SubstatementValidator DEVIATE_NOT_SUPPORTED_SUBSTATEMENT_VALIDATOR = - SubstatementValidator.builder(YangStmtMapping.DEVIATE).build(); - - private static final SubstatementValidator DEVIATE_ADD_SUBSTATEMENT_VALIDATOR = - SubstatementValidator.builder(YangStmtMapping.DEVIATE) - .addOptional(YangStmtMapping.CONFIG) - .addOptional(YangStmtMapping.DEFAULT) - .addOptional(YangStmtMapping.MANDATORY) - .addOptional(YangStmtMapping.MAX_ELEMENTS) - .addOptional(YangStmtMapping.MIN_ELEMENTS) - .addAny(YangStmtMapping.MUST) - .addAny(YangStmtMapping.UNIQUE) - .addOptional(YangStmtMapping.UNITS) - .build(); - - private static final SubstatementValidator DEVIATE_REPLACE_SUBSTATEMENT_VALIDATOR = - SubstatementValidator.builder(YangStmtMapping.DEVIATE) - .addOptional(YangStmtMapping.CONFIG) - .addOptional(YangStmtMapping.DEFAULT) - .addOptional(YangStmtMapping.MANDATORY) - .addOptional(YangStmtMapping.MAX_ELEMENTS) - .addOptional(YangStmtMapping.MIN_ELEMENTS) - .addOptional(YangStmtMapping.TYPE) - .addOptional(YangStmtMapping.UNITS) - .build(); - - private static final SubstatementValidator DEVIATE_DELETE_SUBSTATEMENT_VALIDATOR = - SubstatementValidator.builder(YangStmtMapping.DEVIATE) - .addOptional(YangStmtMapping.DEFAULT) - .addAny(YangStmtMapping.MUST) - .addAny(YangStmtMapping.UNIQUE) - .addOptional(YangStmtMapping.UNITS) - .build(); - - protected DeviateStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends AbstractStatementSupport> { - private static final Map KEYWORD_TO_DEVIATE_MAP; - - static { - final Builder keywordToDeviateMapBuilder = ImmutableMap.builder(); - for (final DeviateKind deviate : DeviateKind.values()) { - keywordToDeviateMapBuilder.put(deviate.getKeyword(), deviate); - } - KEYWORD_TO_DEVIATE_MAP = keywordToDeviateMapBuilder.build(); - } - - private static final Set SINGLETON_STATEMENTS = ImmutableSet.of( - YangStmtMapping.UNITS, YangStmtMapping.CONFIG, YangStmtMapping.MANDATORY, - YangStmtMapping.MIN_ELEMENTS, YangStmtMapping.MAX_ELEMENTS); - - private static final Set IMPLICIT_STATEMENTS = ImmutableSet.of(YangStmtMapping.CONFIG, - YangStmtMapping.MANDATORY, YangStmtMapping.MAX_ELEMENTS, YangStmtMapping.MIN_ELEMENTS); - - public Definition() { - super(YangStmtMapping.DEVIATE); - } - - @Override - public DeviateKind parseArgumentValue(final StmtContext ctx, final String value) { - return SourceException.throwIfNull(KEYWORD_TO_DEVIATE_MAP.get(value), - ctx.getStatementSourceReference(), "String '%s' is not valid deviate argument", value); - } - - @Override - public DeviateStatement createDeclared(final StmtContext ctx) { - return new DeviateStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new DeviateEffectiveStatementImpl(ctx); - } - - @Override - public void onFullDefinitionDeclared(final Mutable> deviateStmtCtx) { - final DeviateKind deviateKind = deviateStmtCtx.getStatementArgument(); - getSubstatementValidatorForDeviate(deviateKind).validate(deviateStmtCtx); - - final SchemaNodeIdentifier deviationTarget = - (SchemaNodeIdentifier) deviateStmtCtx.getParentContext().getStatementArgument(); - - if (!isDeviationSupported(deviateStmtCtx, deviationTarget)) { - return; - } - - final ModelActionBuilder deviateAction = deviateStmtCtx.newInferenceAction( - ModelProcessingPhase.EFFECTIVE_MODEL); - - final Prerequisite>> sourceCtxPrerequisite = - deviateAction.requiresCtx(deviateStmtCtx, ModelProcessingPhase.EFFECTIVE_MODEL); - - final Prerequisite>> targetCtxPrerequisite = - deviateAction.mutatesEffectiveCtx(deviateStmtCtx.getRoot(), - SchemaNodeIdentifierBuildNamespace.class, deviationTarget); - - deviateAction.apply(new InferenceAction() { - @Override - public void apply(final InferenceContext ctx) throws InferenceException { - // FIXME once BUG-7760 gets fixed, there will be no need for these dirty casts - final StatementContextBase sourceNodeStmtCtx = - (StatementContextBase) sourceCtxPrerequisite.resolve(ctx); - final StatementContextBase targetNodeStmtCtx = - (StatementContextBase) targetCtxPrerequisite.resolve(ctx); - - switch (deviateKind) { - case NOT_SUPPORTED: - targetNodeStmtCtx.setIsSupportedToBuildEffective(false); - break; - case ADD: - performDeviateAdd(sourceNodeStmtCtx, targetNodeStmtCtx); - break; - case REPLACE: - performDeviateReplace(sourceNodeStmtCtx, targetNodeStmtCtx); - break; - case DELETE: - performDeviateDelete(sourceNodeStmtCtx, targetNodeStmtCtx); - break; - default: - throw new IllegalStateException("Unsupported deviate " + deviateKind); - } - } - - @Override - public void prerequisiteFailed(final Collection> failed) { - throw new InferenceException(deviateStmtCtx.getParentContext().getStatementSourceReference(), - "Deviation target '%s' not found.", deviationTarget); - } - }); - } - - private static boolean isDeviationSupported(final Mutable> deviateStmtCtx, - final SchemaNodeIdentifier deviationTarget) { - final Map> modulesDeviatedByModules = deviateStmtCtx.getFromNamespace( - ModulesDeviatedByModules.class, SupportedModules.SUPPORTED_MODULES); - if (modulesDeviatedByModules == null) { - return true; - } - - final QNameModule currentModule = deviateStmtCtx.getFromNamespace(ModuleCtxToModuleQName.class, - deviateStmtCtx.getRoot()); - final QNameModule targetModule = deviationTarget.getLastComponent().getModule(); - - final Set deviationModulesSupportedByTargetModule = modulesDeviatedByModules.get(targetModule); - if (deviationModulesSupportedByTargetModule != null) { - return deviationModulesSupportedByTargetModule.contains(currentModule); - } - - return false; - } - - private static void performDeviateAdd(final StatementContextBase deviateStmtCtx, - final StatementContextBase targetCtx) { - for (Mutable originalStmtCtx : deviateStmtCtx.mutableDeclaredSubstatements()) { - validateDeviationTarget(originalStmtCtx, targetCtx); - addStatement(originalStmtCtx, targetCtx); - } - } - - private static void addStatement(final Mutable stmtCtxToBeAdded, - final StatementContextBase targetCtx) { - if (!StmtContextUtils.isUnknownStatement(stmtCtxToBeAdded)) { - final StatementDefinition stmtToBeAdded = stmtCtxToBeAdded.getPublicDefinition(); - if (SINGLETON_STATEMENTS.contains(stmtToBeAdded) || YangStmtMapping.DEFAULT.equals(stmtToBeAdded) - && YangStmtMapping.LEAF.equals(targetCtx.getPublicDefinition())) { - for (final StmtContext targetCtxSubstatement : targetCtx.allSubstatements()) { - InferenceException.throwIf(stmtToBeAdded.equals(targetCtxSubstatement.getPublicDefinition()), - stmtCtxToBeAdded.getStatementSourceReference(), - "Deviation cannot add substatement %s to target node %s because it is already defined " - + "in target and can appear only once.", - stmtToBeAdded.getStatementName(), targetCtx.getStatementArgument()); - } - } - } - - copyStatement(stmtCtxToBeAdded, targetCtx); - } - - private static void performDeviateReplace(final StatementContextBase deviateStmtCtx, - final StatementContextBase targetCtx) { - for (Mutable originalStmtCtx : deviateStmtCtx.mutableDeclaredSubstatements()) { - validateDeviationTarget(originalStmtCtx, targetCtx); - replaceStatement(originalStmtCtx, targetCtx); - } - } - - private static void replaceStatement(final Mutable stmtCtxToBeReplaced, - final StatementContextBase targetCtx) { - final StatementDefinition stmtToBeReplaced = stmtCtxToBeReplaced.getPublicDefinition(); - - if (YangStmtMapping.DEFAULT.equals(stmtToBeReplaced) - && YangStmtMapping.LEAF_LIST.equals(targetCtx.getPublicDefinition())) { - LOG.error("Deviation cannot replace substatement {} in target leaf-list {} because a leaf-list can " - + "have multiple default statements. At line: {}", stmtToBeReplaced.getStatementName(), - targetCtx.getStatementArgument(), stmtCtxToBeReplaced.getStatementSourceReference()); - return; - } - - for (final StmtContext targetCtxSubstatement : targetCtx.effectiveSubstatements()) { - if (stmtToBeReplaced.equals(targetCtxSubstatement.getPublicDefinition())) { - targetCtx.removeStatementFromEffectiveSubstatements(stmtToBeReplaced); - copyStatement(stmtCtxToBeReplaced, targetCtx); - return; - } - } - - for (final Mutable targetCtxSubstatement : targetCtx.mutableDeclaredSubstatements()) { - if (stmtToBeReplaced.equals(targetCtxSubstatement.getPublicDefinition())) { - targetCtxSubstatement.setIsSupportedToBuildEffective(false); - copyStatement(stmtCtxToBeReplaced, targetCtx); - return; - } - } - - // This is a special case when deviate replace of a config/mandatory/max/min-elements substatement targets - // a node which does not contain an explicitly declared config/mandatory/max/min-elements. - // However, according to RFC6020/RFC7950, these properties are always implicitly present. - if (IMPLICIT_STATEMENTS.contains(stmtToBeReplaced)) { - addStatement(stmtCtxToBeReplaced, targetCtx); - return; - } - - throw new InferenceException(stmtCtxToBeReplaced.getStatementSourceReference(), "Deviation cannot replace " - + "substatement %s in target node %s because it does not exist in target node.", - stmtToBeReplaced.getStatementName(), targetCtx.getStatementArgument()); - } - - private static void performDeviateDelete(final StatementContextBase deviateStmtCtx, - final StatementContextBase targetCtx) { - for (Mutable originalStmtCtx : deviateStmtCtx.mutableDeclaredSubstatements()) { - validateDeviationTarget(originalStmtCtx, targetCtx); - deleteStatement(originalStmtCtx, targetCtx); - } - } - - private static void deleteStatement(final StmtContext stmtCtxToBeDeleted, - final StatementContextBase targetCtx) { - final StatementDefinition stmtToBeDeleted = stmtCtxToBeDeleted.getPublicDefinition(); - final String stmtArgument = stmtCtxToBeDeleted.rawStatementArgument(); - - for (final Mutable targetCtxSubstatement : targetCtx.mutableEffectiveSubstatements()) { - if (statementsAreEqual(stmtToBeDeleted, stmtArgument, targetCtxSubstatement.getPublicDefinition(), - targetCtxSubstatement.rawStatementArgument())) { - targetCtx.removeStatementFromEffectiveSubstatements(stmtToBeDeleted, stmtArgument); - return; - } - } - - for (final Mutable targetCtxSubstatement : targetCtx.mutableDeclaredSubstatements()) { - if (statementsAreEqual(stmtToBeDeleted, stmtArgument, targetCtxSubstatement.getPublicDefinition(), - targetCtxSubstatement.rawStatementArgument())) { - targetCtxSubstatement.setIsSupportedToBuildEffective(false); - return; - } - } - - LOG.error("Deviation cannot delete substatement {} with argument '{}' in target node {} because it does " - + "not exist in the target node. At line: {}", stmtToBeDeleted.getStatementName(), stmtArgument, - targetCtx.getStatementArgument(), stmtCtxToBeDeleted.getStatementSourceReference()); - } - - private static void copyStatement(final Mutable stmtCtxToBeCopied, - final StatementContextBase targetCtx) { - // we need to make a copy of the statement context only if it is an unknown statement, otherwise - // we can reuse the original statement context - if (!StmtContextUtils.isUnknownStatement(stmtCtxToBeCopied)) { - targetCtx.addEffectiveSubstatement(stmtCtxToBeCopied); - } else { - targetCtx.addEffectiveSubstatement(targetCtx.childCopyOf(stmtCtxToBeCopied, CopyType.ORIGINAL)); - } - } - - private static boolean statementsAreEqual(final StatementDefinition firstStmtDef, final String firstStmtArg, - final StatementDefinition secondStmtDef, final String secondStmtArg) { - return firstStmtDef.equals(secondStmtDef) && Objects.equals(firstStmtArg, secondStmtArg); - } - - private static void validateDeviationTarget(final StmtContext deviateSubStmtCtx, - final StmtContext targetCtx) { - InferenceException.throwIf(!isSupportedDeviationTarget(deviateSubStmtCtx, targetCtx, - targetCtx.getRootVersion()), deviateSubStmtCtx.getStatementSourceReference(), - "%s is not a valid deviation target for substatement %s.", - targetCtx.getStatementArgument(), deviateSubStmtCtx.getPublicDefinition().getStatementName()); - } - - private static boolean isSupportedDeviationTarget(final StmtContext deviateSubstatementCtx, - final StmtContext deviateTargetCtx, final YangVersion yangVersion) { - Set supportedDeviationTargets = - YangValidationBundles.SUPPORTED_DEVIATION_TARGETS.get(deviateTargetCtx.getRootVersion(), - deviateSubstatementCtx.getPublicDefinition()); - - if (supportedDeviationTargets == null) { - supportedDeviationTargets = YangValidationBundles.SUPPORTED_DEVIATION_TARGETS.get(YangVersion.VERSION_1, - deviateSubstatementCtx.getPublicDefinition()); - } - - // if supportedDeviationTargets is null, it means that the deviate substatement is an unknown statement - return supportedDeviationTargets == null || supportedDeviationTargets.contains( - deviateTargetCtx.getPublicDefinition()); - } - - protected SubstatementValidator getSubstatementValidatorForDeviate(final DeviateKind deviateKind) { - switch (deviateKind) { - case NOT_SUPPORTED: - return DEVIATE_NOT_SUPPORTED_SUBSTATEMENT_VALIDATOR; - case ADD: - return DEVIATE_ADD_SUBSTATEMENT_VALIDATOR; - case REPLACE: - return DEVIATE_REPLACE_SUBSTATEMENT_VALIDATOR; - case DELETE: - return DEVIATE_DELETE_SUBSTATEMENT_VALIDATOR; - default: - throw new IllegalStateException(String.format( - "Substatement validator for deviate %s has not been defined.", deviateKind)); - } - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return null; - } - } - - @Nonnull - @Override - public DeviateKind getValue() { - return argument(); - } -} 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 deleted file mode 100644 index 65846e401f..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/DeviationStatementImpl.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import java.util.Collection; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import org.opendaylight.yangtools.yang.common.QNameModule; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DeviateStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DeviationStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; -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.StmtContext; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.spi.source.ModuleCtxToModuleQName; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.DeviationEffectiveStatementImpl; - -public class DeviationStatementImpl extends AbstractDeclaredStatement - implements DeviationStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .DEVIATION) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.DEVIATE) - .addOptional(YangStmtMapping.REFERENCE) - .build(); - - protected DeviationStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.DEVIATION); - } - - @Override - public SchemaNodeIdentifier parseArgumentValue(final StmtContext ctx, final String value) { - return Utils.nodeIdentifierFromPath(ctx, value); - } - - @Override - public DeviationStatement createDeclared(final StmtContext ctx) { - return new DeviationStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new DeviationEffectiveStatementImpl(ctx); - } - - @Override - public void onFullDefinitionDeclared(final StmtContext.Mutable> ctx) { - final QNameModule currentModule = ctx.getFromNamespace(ModuleCtxToModuleQName.class, - ctx.getRoot()); - final QNameModule targetModule = ctx.getStatementArgument().getLastComponent().getModule(); - - if (currentModule.equals(targetModule)) { - throw new InferenceException(ctx.getStatementSourceReference(), - "Deviation must not target the same module as the one it is defined in: %s", currentModule); - } - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public SchemaNodeIdentifier getTargetNode() { - return argument(); - } - - @Nullable - @Override - public DescriptionStatement getDescription() { - return firstDeclared(DescriptionStatement.class); - } - - @Nullable - @Override - public ReferenceStatement getReference() { - return firstDeclared(ReferenceStatement.class); - } - - @Nonnull - @Override - public Collection getDeviateStatements() { - return allDeclared(DeviateStatement.class); - } -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/EnumSpecificationImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/EnumSpecificationImpl.java deleted file mode 100644 index f4442e02b5..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/EnumSpecificationImpl.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import java.util.Collection; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.EnumStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.EnumSpecification; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.EnumSpecificationEffectiveStatementImpl; - -public class EnumSpecificationImpl extends AbstractDeclaredStatement implements EnumSpecification { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .TYPE) - .addMultiple(YangStmtMapping.ENUM) - .build(); - - protected EnumSpecificationImpl(final StmtContext context) { - super(context); - } - - public static class Definition - extends AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.TYPE); - } - - @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; - } - - @Override - public EnumSpecification createDeclared(final StmtContext ctx) { - return new EnumSpecificationImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new EnumSpecificationEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public String getName() { - return argument(); - } - - @Nonnull - @Override - public Collection getEnums() { - return allDeclared(EnumStatement.class); - } -} 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 deleted file mode 100644 index 689730ce62..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/EnumStatementImpl.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import java.util.Collection; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.EnumStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ValueStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.EnumEffectiveStatementImpl; - -public class EnumStatementImpl extends AbstractDeclaredStatement implements EnumStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .ENUM) - .addOptional(YangStmtMapping.DESCRIPTION) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addOptional(YangStmtMapping.VALUE) - .build(); - - protected EnumStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends - AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.ENUM); - } - - @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - // FIXME: Checks for real value - return value; - } - - @Override - public EnumStatement createDeclared(final StmtContext ctx) { - return new EnumStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new EnumEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Override - public StatusStatement getStatus() { - return firstDeclared(StatusStatement.class); - } - - @Override - public DescriptionStatement getDescription() { - return firstDeclared(DescriptionStatement.class); - } - - @Nonnull - @Override - public Collection getIfFeatures() { - return allDeclared(IfFeatureStatement.class); - } - - @Override - public ReferenceStatement getReference() { - return firstDeclared(ReferenceStatement.class); - } - - @Nonnull - @Override - public String getName() { - return argument(); - } - - @Override - public ValueStatement getValue() { - return firstDeclared(ValueStatement.class); - } -} 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 deleted file mode 100644 index 6231b75035..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ErrorAppTagStatementImpl.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ErrorAppTagStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ErrorAppTagEffectiveStatementImpl; - -public class ErrorAppTagStatementImpl extends AbstractDeclaredStatement - implements ErrorAppTagStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .ERROR_APP_TAG) - .build(); - - protected ErrorAppTagStatementImpl( - final StmtContext context) { - super(context); - } - - public static class Definition extends - AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.ERROR_APP_TAG); - } - - @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; - } - - @Override - public ErrorAppTagStatement createDeclared( - final StmtContext ctx) { - return new ErrorAppTagStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new ErrorAppTagEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public String getValue() { - return argument(); - } -} 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 deleted file mode 100644 index 817f1b4234..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ErrorMessageStatementImpl.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ErrorMessageEffectiveStatementImpl; - -public class ErrorMessageStatementImpl extends - AbstractDeclaredStatement implements ErrorMessageStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .ERROR_MESSAGE) - .build(); - - protected ErrorMessageStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends - AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.ERROR_MESSAGE); - } - - @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; - } - - @Override - public ErrorMessageStatement createDeclared(final StmtContext ctx) { - return new ErrorMessageStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new ErrorMessageEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public String getValue() { - return argument(); - } -} 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 deleted file mode 100644 index b883bd33e7..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ExtensionStatementImpl.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement; -import org.opendaylight.yangtools.yang.parser.spi.ExtensionNamespace; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; -import org.opendaylight.yangtools.yang.parser.spi.meta.StatementDefinitionNamespace; -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.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ExtensionEffectiveStatementImpl; - -public class ExtensionStatementImpl extends AbstractDeclaredStatement implements ExtensionStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .EXTENSION) - .addOptional(YangStmtMapping.ARGUMENT) - .addOptional(YangStmtMapping.DESCRIPTION) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .build(); - - protected ExtensionStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition - extends AbstractQNameStatementSupport> { - public Definition() { - super(YangStmtMapping.EXTENSION); - } - - @Override - public QName parseArgumentValue(final StmtContext ctx, final String value) { - return StmtContextUtils.qnameFromArgument(ctx, value); - } - - @Override - public ExtensionStatement createDeclared(final StmtContext ctx) { - return new ExtensionStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return ExtensionEffectiveStatementImpl.create(ctx); - } - - @Override - public void onStatementDefinitionDeclared( - final Mutable> stmt) { - super.onStatementDefinitionDeclared(stmt); - - QName stmtName = stmt.getStatementArgument(); - if (SupportedExtensionsMapping.OPENCONFIG_VERSION.getStatementName().isEqualWithoutRevision(stmtName)) { - stmtName = stmtName.withoutRevision(); - } - - stmt.addContext(ExtensionNamespace.class, stmtName, stmt); - - final StmtContext argument = StmtContextUtils.findFirstDeclaredSubstatement(stmt, - ArgumentStatement.class); - final StmtContext yinElement = StmtContextUtils.findFirstDeclaredSubstatement(stmt, - YinElementStatement.class); - - stmt.addToNs(StatementDefinitionNamespace.class, stmt.getStatementArgument(), - new ModelDefinedStatementSupport(new ModelDefinedStatementDefinition(stmt.getStatementArgument(), - argument != null ? argument.getStatementArgument() : null, - yinElement != null ? yinElement.getStatementArgument() : false))); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Override - public StatusStatement getStatus() { - return firstDeclared(StatusStatement.class); - } - - @Override - public DescriptionStatement getDescription() { - return firstDeclared(DescriptionStatement.class); - } - - @Override - public ReferenceStatement getReference() { - return firstDeclared(ReferenceStatement.class); - } - - @Override - public ArgumentStatement getArgument() { - return firstDeclared(ArgumentStatement.class); - } -} 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 deleted file mode 100644 index ee8b956fd7..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/FeatureStatementImpl.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import java.util.Collection; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.FeatureStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.FeatureEffectiveStatementImpl; - -public class FeatureStatementImpl extends AbstractDeclaredStatement - implements FeatureStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .FEATURE) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.IF_FEATURE) - .addOptional(YangStmtMapping.STATUS) - .addOptional(YangStmtMapping.REFERENCE) - .build(); - - protected FeatureStatementImpl( - final StmtContext context) { - super(context); - } - - public static class Definition - extends AbstractQNameStatementSupport> { - - public Definition() { - super(YangStmtMapping.FEATURE); - } - - @Override - public QName parseArgumentValue(final StmtContext ctx, final String value) { - return StmtContextUtils.qnameFromArgument(ctx, value); - } - - @Override - public FeatureStatement createDeclared( - final StmtContext ctx) { - return new FeatureStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new FeatureEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Override - public StatusStatement getStatus() { - return firstDeclared(StatusStatement.class); - } - - @Override - public DescriptionStatement getDescription() { - return firstDeclared(DescriptionStatement.class); - } - - @Override - public ReferenceStatement getReference() { - return firstDeclared(ReferenceStatement.class); - } - - @Nonnull - @Override - public Collection getIfFeatures() { - return allDeclared(IfFeatureStatement.class); - } - - @Nonnull - @Override - public QName getName() { - return argument(); - } - -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/FractionDigitsStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/FractionDigitsStatementImpl.java deleted file mode 100644 index 492fb0aba6..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/FractionDigitsStatementImpl.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import com.google.common.collect.Range; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.FractionDigitsStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.FractionDigitsEffectiveStatementImpl; - -public class FractionDigitsStatementImpl extends AbstractDeclaredStatement implements FractionDigitsStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .FRACTION_DIGITS) - .build(); - - private static final Range FRAC_DIGITS_ALLOWED = Range.closed(1, 18); - - protected FractionDigitsStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.FRACTION_DIGITS); - } - - @Override - public Integer parseArgumentValue(final StmtContext ctx, final String value) { - final Integer fractionDigits; - try { - fractionDigits = Integer.valueOf(value); - } catch (NumberFormatException e) { - throw new SourceException(ctx.getStatementSourceReference(), e, - "%s is not valid fraction-digits integer argument", value); - } - - SourceException.throwIf(!FRAC_DIGITS_ALLOWED.contains(fractionDigits), ctx.getStatementSourceReference(), - "fraction-digits argument should be integer within %s", FRAC_DIGITS_ALLOWED); - return fractionDigits; - } - - @Override - public FractionDigitsStatement createDeclared(final StmtContext ctx) { - return new FractionDigitsStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new FractionDigitsEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Override - public int getValue() { - return argument(); - } -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/GroupingStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/GroupingStatementImpl.java deleted file mode 100644 index e765ad1392..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/GroupingStatementImpl.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import java.util.Collection; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ActionStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DataDefinitionStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.NotificationStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement; -import org.opendaylight.yangtools.yang.parser.spi.GroupingNamespace; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; -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.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.GroupingEffectiveStatementImpl; - -public class GroupingStatementImpl extends AbstractDeclaredStatement - implements GroupingStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .GROUPING) - .addAny(YangStmtMapping.ANYXML) - .addAny(YangStmtMapping.CHOICE) - .addAny(YangStmtMapping.CONTAINER) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.GROUPING) - .addAny(YangStmtMapping.LEAF) - .addAny(YangStmtMapping.LEAF_LIST) - .addAny(YangStmtMapping.LIST) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addAny(YangStmtMapping.TYPEDEF) - .addAny(YangStmtMapping.USES) - .build(); - - protected GroupingStatementImpl( - final StmtContext context) { - super(context); - } - - public static class Definition - extends AbstractQNameStatementSupport> { - - public Definition() { - super(YangStmtMapping.GROUPING); - } - - @Override - public QName parseArgumentValue(final StmtContext ctx, final String value) { - return StmtContextUtils.qnameFromArgument(ctx, value); - } - - @Override - public GroupingStatement createDeclared( - final StmtContext ctx) { - return new GroupingStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new GroupingEffectiveStatementImpl(ctx); - } - - @Override - public void onFullDefinitionDeclared(final Mutable> stmt) { - super.onFullDefinitionDeclared(stmt); - - if (stmt != null && stmt.getParentContext() != null) { - stmt.getParentContext().addContext(GroupingNamespace.class, stmt.getStatementArgument(), stmt); - } - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public QName getName() { - return argument(); - } - - @Override - public StatusStatement getStatus() { - return firstDeclared(StatusStatement.class); - } - - @Override - public DescriptionStatement getDescription() { - return firstDeclared(DescriptionStatement.class); - } - - @Override - public ReferenceStatement getReference() { - return firstDeclared(ReferenceStatement.class); - } - - @Nonnull - @Override - public Collection getTypedefs() { - return allDeclared(TypedefStatement.class); - } - - @Nonnull - @Override - public Collection getGroupings() { - return allDeclared(GroupingStatement.class); - } - - @Nonnull - @Override - public Collection getDataDefinitions() { - return allDeclared(DataDefinitionStatement.class); - } - - @Nonnull - @Override - public Collection getActions() { - return allDeclared(ActionStatement.class); - } - - @Override - public final Collection getNotifications() { - return allDeclared(NotificationStatement.class); - } -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IdentityRefSpecificationImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IdentityRefSpecificationImpl.java deleted file mode 100644 index 2509363a29..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IdentityRefSpecificationImpl.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import java.util.Collection; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.BaseStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.IdentityRefSpecification; -import org.opendaylight.yangtools.yang.parser.spi.IdentityNamespace; -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.StmtContext; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.IdentityRefSpecificationEffectiveStatementImpl; - -public class IdentityRefSpecificationImpl extends AbstractDeclaredStatement - implements IdentityRefSpecification { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .TYPE) - .addMandatory(YangStmtMapping.BASE) - .build(); - - protected IdentityRefSpecificationImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.TYPE); - } - - @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; - } - - @Override - public IdentityRefSpecification createDeclared(final StmtContext ctx) { - return new IdentityRefSpecificationImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new IdentityRefSpecificationEffectiveStatementImpl(ctx); - } - - @Override - public void onFullDefinitionDeclared(final Mutable> stmt) { - super.onFullDefinitionDeclared(stmt); - - final Collection> baseStatements = - StmtContextUtils.findAllDeclaredSubstatements(stmt, BaseStatement.class); - for (StmtContext baseStmt : baseStatements) { - final QName baseIdentity = baseStmt.getStatementArgument(); - final StmtContext stmtCtx = stmt.getFromNamespace(IdentityNamespace.class, baseIdentity); - InferenceException.throwIfNull(stmtCtx, stmt.getStatementSourceReference(), - "Referenced base identity '%s' doesn't exist in given scope (module, imported modules, submodules)", - baseIdentity.getLocalName()); - } - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public String getName() { - return argument(); - } - - @Nonnull - @Override - public Collection getBases() { - return allDeclared(BaseStatement.class); - } -} 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 deleted file mode 100644 index 24f77d668e..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IdentityStatementImpl.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import java.util.Collection; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.BaseStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.IdentityStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; -import org.opendaylight.yangtools.yang.parser.spi.IdentityNamespace; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.IdentityEffectiveStatementImpl; - -public class IdentityStatementImpl extends AbstractDeclaredStatement implements IdentityStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .IDENTITY) - .addOptional(YangStmtMapping.BASE) - .addOptional(YangStmtMapping.DESCRIPTION) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .build(); - - protected IdentityStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition - extends AbstractQNameStatementSupport> { - - public Definition() { - super(YangStmtMapping.IDENTITY); - } - - @Override - public QName parseArgumentValue(final StmtContext ctx, final String value) { - return StmtContextUtils.qnameFromArgument(ctx, value); - } - - @Override - public IdentityStatement createDeclared(final StmtContext ctx) { - return new IdentityStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new IdentityEffectiveStatementImpl(ctx); - } - - @Override - public void onStatementDefinitionDeclared(final StmtContext.Mutable> stmt) { - stmt.addToNs(IdentityNamespace.class, stmt.getStatementArgument(), stmt); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Override - public StatusStatement getStatus() { - return firstDeclared(StatusStatement.class); - } - - @Override - public DescriptionStatement getDescription() { - return firstDeclared(DescriptionStatement.class); - } - - @Nonnull - @Override - public Collection getIfFeatures() { - return allDeclared(IfFeatureStatement.class); - } - - @Override - public ReferenceStatement getReference() { - return firstDeclared(ReferenceStatement.class); - } - - @Nonnull - @Override - public Collection getBases() { - return allDeclared(BaseStatement.class); - } - - @Nonnull - @Override - public QName getName() { - return argument(); - } -} 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 deleted file mode 100644 index 3c4004256d..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IfFeatureStatementImpl.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import static java.util.Objects.requireNonNull; - -import java.util.Set; -import java.util.function.Predicate; -import org.antlr.v4.runtime.CharStreams; -import org.antlr.v4.runtime.CommonTokenStream; -import org.opendaylight.yangtools.antlrv4.code.gen.IfFeatureExpressionLexer; -import org.opendaylight.yangtools.antlrv4.code.gen.IfFeatureExpressionParser; -import org.opendaylight.yangtools.antlrv4.code.gen.IfFeatureExpressionParser.Identifier_ref_argContext; -import org.opendaylight.yangtools.antlrv4.code.gen.IfFeatureExpressionParser.If_feature_exprContext; -import org.opendaylight.yangtools.antlrv4.code.gen.IfFeatureExpressionParser.If_feature_factorContext; -import org.opendaylight.yangtools.antlrv4.code.gen.IfFeatureExpressionParser.If_feature_termContext; -import org.opendaylight.yangtools.antlrv4.code.gen.IfFeatureExpressionParserBaseVisitor; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.common.YangVersion; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; -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.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.IfFeatureEffectiveStatementImpl; - -public class IfFeatureStatementImpl extends AbstractDeclaredStatement>> - implements IfFeatureStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .IF_FEATURE) - .build(); - - protected IfFeatureStatementImpl(final StmtContext>, IfFeatureStatement, ?> context) { - super(context); - } - - public static class Definition extends AbstractStatementSupport>, IfFeatureStatement, - EffectiveStatement>, IfFeatureStatement>> { - - public Definition() { - super(YangStmtMapping.IF_FEATURE); - } - - @Override - public Predicate> parseArgumentValue(final StmtContext ctx, final String value) { - if (YangVersion.VERSION_1_1.equals(ctx.getRootVersion())) { - return parseIfFeatureExpression(ctx, value); - } - - final QName qname = StmtContextUtils.qnameFromArgument(ctx, value); - return setQNames -> setQNames.contains(qname); - } - - @Override - public IfFeatureStatement createDeclared(final StmtContext>, IfFeatureStatement, ?> ctx) { - return new IfFeatureStatementImpl(ctx); - } - - @Override - public EffectiveStatement>, IfFeatureStatement> createEffective( - final StmtContext>, IfFeatureStatement, - EffectiveStatement>, IfFeatureStatement>> ctx) { - return new IfFeatureEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - - private static Predicate> parseIfFeatureExpression(final StmtContext ctx, - final String value) { - final IfFeatureExpressionLexer lexer = new IfFeatureExpressionLexer(CharStreams.fromString(value)); - final CommonTokenStream tokens = new CommonTokenStream(lexer); - final IfFeatureExpressionParser parser = new IfFeatureExpressionParser(tokens); - - return new IfFeaturePredicateVisitor(ctx).visit(parser.if_feature_expr()); - } - - private static class IfFeaturePredicateVisitor - extends IfFeatureExpressionParserBaseVisitor>> { - private final StmtContext stmtCtx; - - IfFeaturePredicateVisitor(final StmtContext ctx) { - this.stmtCtx = requireNonNull(ctx); - } - - @Override - public Predicate> visitIf_feature_expr(final If_feature_exprContext ctx) { - if (ctx.if_feature_expr() == null) { - return visitIf_feature_term(ctx.if_feature_term()); - } - - return visitIf_feature_term(ctx.if_feature_term()).or(visitIf_feature_expr(ctx.if_feature_expr())); - } - - @Override - public Predicate> visitIf_feature_term(final If_feature_termContext ctx) { - if (ctx.if_feature_term() == null) { - return visitIf_feature_factor(ctx.if_feature_factor()); - } - - return visitIf_feature_factor(ctx.if_feature_factor()).and(visitIf_feature_term(ctx.if_feature_term())); - } - - @Override - public Predicate> visitIf_feature_factor(final If_feature_factorContext ctx) { - if (ctx.if_feature_expr() != null) { - return visitIf_feature_expr(ctx.if_feature_expr()); - } else if (ctx.if_feature_factor() != null) { - return visitIf_feature_factor(ctx.if_feature_factor()).negate(); - } else if (ctx.identifier_ref_arg() != null) { - return visitIdentifier_ref_arg(ctx.identifier_ref_arg()); - } - - throw new SourceException("Unexpected grammar context during parsing of IfFeature expression. " - + "Most probably IfFeature grammar has been changed.", stmtCtx.getStatementSourceReference()); - } - - @Override - public Predicate> visitIdentifier_ref_arg(final Identifier_ref_argContext ctx) { - final QName featureQName = StmtContextUtils.qnameFromArgument(stmtCtx, ctx.getText()); - return setQNames -> setQNames.contains(featureQName); - } - } - } - - @Override - public Predicate> getIfFeaturePredicate() { - return argument(); - } -} 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 deleted file mode 100644 index b472682b54..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ImportStatementDefinition.java +++ /dev/null @@ -1,332 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import static java.util.Objects.requireNonNull; -import static org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase.SOURCE_LINKAGE; -import static org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase.SOURCE_PRE_LINKAGE; -import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.findFirstDeclaredSubstatement; -import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.firstAttributeOf; - -import com.google.common.base.MoreObjects.ToStringHelper; -import com.google.common.base.Verify; -import java.net.URI; -import java.util.Collection; -import java.util.Optional; -import org.opendaylight.yangtools.concepts.SemVer; -import org.opendaylight.yangtools.yang.common.Revision; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ImportStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.SemVerSourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.parser.spi.ModuleNamespace; -import org.opendaylight.yangtools.yang.parser.spi.PreLinkageModuleNamespace; -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.ModelActionBuilder.InferenceAction; -import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.InferenceContext; -import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.Prerequisite; -import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceKeyCriterion; -import org.opendaylight.yangtools.yang.parser.spi.meta.SemanticVersionModuleNamespace; -import org.opendaylight.yangtools.yang.parser.spi.meta.SemanticVersionNamespace; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.spi.source.ImpPrefixToNamespace; -import org.opendaylight.yangtools.yang.parser.spi.source.ImportPrefixToModuleCtx; -import org.opendaylight.yangtools.yang.parser.spi.source.ImportPrefixToSemVerSourceIdentifier; -import org.opendaylight.yangtools.yang.parser.spi.source.ImportedModuleContext; -import org.opendaylight.yangtools.yang.parser.spi.source.ModuleCtxToSourceIdentifier; -import org.opendaylight.yangtools.yang.parser.spi.source.ModuleNameToNamespace; -import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ImportEffectiveStatementImpl; - -public class ImportStatementDefinition extends - AbstractStatementSupport> { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator - .builder(YangStmtMapping.IMPORT) - .addMandatory(YangStmtMapping.PREFIX) - .addOptional(YangStmtMapping.REVISION_DATE) - .addOptional(SupportedExtensionsMapping.OPENCONFIG_VERSION) - .build(); - - public ImportStatementDefinition() { - super(YangStmtMapping.IMPORT); - } - - @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; - } - - @Override - public ImportStatement createDeclared(final StmtContext ctx) { - return new ImportStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new ImportEffectiveStatementImpl(ctx); - } - - @Override - public void onPreLinkageDeclared(final Mutable> stmt) { - /* - * Add ModuleIdentifier of a module which is required by this module. - * Based on this information, required modules are searched from library - * sources. - */ - stmt.addRequiredSource(RevisionImport.getImportedSourceIdentifier(stmt)); - - final String moduleName = stmt.getStatementArgument(); - final ModelActionBuilder importAction = stmt.newInferenceAction(SOURCE_PRE_LINKAGE); - final Prerequisite> imported = importAction.requiresCtx(stmt, - PreLinkageModuleNamespace.class, moduleName, SOURCE_PRE_LINKAGE); - final Prerequisite> linkageTarget = importAction - .mutatesCtx(stmt.getRoot(), SOURCE_PRE_LINKAGE); - - importAction.apply(new InferenceAction() { - @Override - public void apply(final InferenceContext ctx) { - final StmtContext importedModuleContext = imported.resolve(ctx); - Verify.verify(moduleName.equals(importedModuleContext.getStatementArgument())); - final URI importedModuleNamespace = importedModuleContext.getFromNamespace(ModuleNameToNamespace.class, - moduleName); - Verify.verifyNotNull(importedModuleNamespace); - final String impPrefix = SourceException.throwIfNull( - firstAttributeOf(stmt.declaredSubstatements(), PrefixStatement.class), - stmt.getStatementSourceReference(), "Missing prefix statement"); - - stmt.addToNs(ImpPrefixToNamespace.class, impPrefix, importedModuleNamespace); - } - - @Override - public void prerequisiteFailed(final Collection> failed) { - InferenceException.throwIf(failed.contains(imported), stmt.getStatementSourceReference(), - "Imported module [%s] was not found.", moduleName); - } - }); - } - - @Override - public void onLinkageDeclared( - final Mutable> stmt) { - if (stmt.isEnabledSemanticVersioning()) { - SemanticVersionImport.onLinkageDeclared(stmt); - } else { - RevisionImport.onLinkageDeclared(stmt); - } - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - - private static class RevisionImport { - - private RevisionImport() { - throw new UnsupportedOperationException("Utility class"); - } - - private static void onLinkageDeclared( - final Mutable> stmt) { - final ModelActionBuilder importAction = stmt.newInferenceAction(SOURCE_LINKAGE); - final Prerequisite> imported; - final String moduleName = stmt.getStatementArgument(); - final Revision revision = firstAttributeOf(stmt.declaredSubstatements(), RevisionDateStatement.class); - if (revision == null) { - imported = importAction.requiresCtx(stmt, ModuleNamespace.class, - NamespaceKeyCriterion.latestRevisionModule(moduleName), SOURCE_LINKAGE); - } else { - imported = importAction.requiresCtx(stmt, ModuleNamespace.class, - RevisionSourceIdentifier.create(moduleName, Optional.of(revision)), SOURCE_LINKAGE); - } - - final Prerequisite> linkageTarget = importAction.mutatesCtx(stmt.getRoot(), - SOURCE_LINKAGE); - - importAction.apply(new InferenceAction() { - @Override - public void apply(final InferenceContext ctx) { - final StmtContext importedModule = imported.resolve(ctx); - - linkageTarget.resolve(ctx).addToNs(ImportedModuleContext.class, - stmt.getFromNamespace(ModuleCtxToSourceIdentifier.class, importedModule), importedModule); - final String impPrefix = firstAttributeOf(stmt.declaredSubstatements(), PrefixStatement.class); - final URI modNs = firstAttributeOf(importedModule.declaredSubstatements(), - NamespaceStatement.class); - stmt.addToNs(ImportPrefixToModuleCtx.class, impPrefix, importedModule); - stmt.addToNs(URIStringToImpPrefix.class, modNs.toString(), impPrefix); - } - - @Override - public void prerequisiteFailed(final Collection> failed) { - if (failed.contains(imported)) { - throw new InferenceException(stmt.getStatementSourceReference(), - "Imported module [%s] was not found.", moduleName); - } - } - }); - } - - static SourceIdentifier getImportedSourceIdentifier(final StmtContext stmt) { - final StmtContext revision = findFirstDeclaredSubstatement(stmt, - RevisionDateStatement.class); - return revision == null ? RevisionSourceIdentifier.create(stmt.getStatementArgument()) - : RevisionSourceIdentifier.create(stmt.getStatementArgument(), revision.getStatementArgument()); - } - } - - private static class SemanticVersionImport { - - private abstract static class CompatibleCriterion extends NamespaceKeyCriterion { - private final String moduleName; - - CompatibleCriterion(final String moduleName) { - this.moduleName = requireNonNull(moduleName); - } - - @Override - public boolean match(final SemVerSourceIdentifier key) { - return moduleName.equals(key.getName()); - } - - @Override - protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) { - return toStringHelper.add("moduleName", moduleName); - } - } - - private static final class NoVerCompatibleCriterion extends CompatibleCriterion { - NoVerCompatibleCriterion(final String moduleName) { - super(moduleName); - } - - @Override - public SemVerSourceIdentifier select(final SemVerSourceIdentifier first, - final SemVerSourceIdentifier second) { - // TODO Auto-generated method stub - return null; - } - } - - private static final class SemVerCompatibleCriterion extends CompatibleCriterion { - private final SemVer semVer; - - SemVerCompatibleCriterion(final String moduleName, final SemVer semVer) { - super(moduleName); - this.semVer = requireNonNull(semVer); - } - - @Override - public boolean match(final SemVerSourceIdentifier key) { - if (!super.match(key)) { - return false; - } - final Optional optKeyVer = key.getSemanticVersion(); - if (!optKeyVer.isPresent()) { - return false; - } - - final SemVer keyVer = optKeyVer.get(); - if (semVer.getMajor() != keyVer.getMajor()) { - return false; - } - if (semVer.getMinor() > keyVer.getMinor()) { - return false; - } - return semVer.getMinor() < keyVer.getMinor() || semVer.getPatch() <= keyVer.getPatch(); - } - - @Override - public SemVerSourceIdentifier select(final SemVerSourceIdentifier first, - final SemVerSourceIdentifier second) { - return first.getSemanticVersion().get().compareTo(second.getSemanticVersion().get()) >= 0 ? first - : second; - } - - @Override - protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) { - return super.addToStringAttributes(toStringHelper).add("version", semVer); - } - } - - - private SemanticVersionImport() { - throw new UnsupportedOperationException("Utility class"); - } - - private static void onLinkageDeclared( - final Mutable> stmt) { - final ModelActionBuilder importAction = stmt.newInferenceAction(SOURCE_LINKAGE); - final String moduleName = stmt.getStatementArgument(); - final SemVer semanticVersion = stmt.getFromNamespace(SemanticVersionNamespace.class, stmt); - final CompatibleCriterion criterion = semanticVersion == null ? new NoVerCompatibleCriterion(moduleName) - : new SemVerCompatibleCriterion(moduleName, semanticVersion); - - final Prerequisite> imported = importAction.requiresCtx(stmt, - SemanticVersionModuleNamespace.class, criterion, SOURCE_LINKAGE); - final Prerequisite> linkageTarget = importAction.mutatesCtx(stmt.getRoot(), - SOURCE_LINKAGE); - - importAction.apply(new InferenceAction() { - @Override - public void apply(final InferenceContext ctx) { - final StmtContext importedModule = imported.resolve(ctx); - final SemVer importedVersion = stmt.getFromNamespace(SemanticVersionNamespace.class, stmt); - final SourceIdentifier importedModuleIdentifier = importedModule.getFromNamespace( - ModuleCtxToSourceIdentifier.class, importedModule); - final SemVerSourceIdentifier semVerModuleIdentifier = createSemVerModuleIdentifier( - importedModuleIdentifier, importedVersion); - - linkageTarget.resolve(ctx).addToNs(ImportedModuleContext.class, importedModuleIdentifier, - importedModule); - final String impPrefix = firstAttributeOf(stmt.declaredSubstatements(), PrefixStatement.class); - stmt.addToNs(ImportPrefixToModuleCtx.class, impPrefix, importedModule); - stmt.addToNs(ImportPrefixToSemVerSourceIdentifier.class, impPrefix, semVerModuleIdentifier); - - final URI modNs = firstAttributeOf(importedModule.declaredSubstatements(), - NamespaceStatement.class); - stmt.addToNs(URIStringToImpPrefix.class, modNs.toString(), impPrefix); - } - - @Override - public void prerequisiteFailed(final Collection> failed) { - if (failed.contains(imported)) { - throw new InferenceException(stmt.getStatementSourceReference(), - "Unable to find module compatible with requested import [%s(%s)].", moduleName, - getRequestedImportVersionString(stmt)); - } - } - }); - } - - private static Optional getRequestedImportVersion(final StmtContext stmt) { - return Optional.ofNullable(stmt.getFromNamespace(SemanticVersionNamespace.class, stmt)); - } - - private static String getRequestedImportVersionString(final StmtContext stmt) { - return getRequestedImportVersion(stmt).map(SemVer::toString).orElse(""); - } - - private static SemVerSourceIdentifier createSemVerModuleIdentifier( - final SourceIdentifier importedModuleIdentifier, final SemVer semVer) { - return SemVerSourceIdentifier.create(importedModuleIdentifier.getName(), - importedModuleIdentifier.getRevision(), semVer); - } - } -} 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 deleted file mode 100644 index 94410e044a..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IncludeStatementImpl.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.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.findFirstDeclaredSubstatement; - -import java.util.Collection; -import java.util.Optional; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.common.Revision; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.IncludeStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; -import org.opendaylight.yangtools.yang.parser.spi.SubmoduleNamespace; -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.ModelActionBuilder.InferenceAction; -import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.InferenceContext; -import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.Prerequisite; -import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceKeyCriterion; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.spi.source.IncludedModuleContext; -import org.opendaylight.yangtools.yang.parser.spi.source.IncludedSubmoduleNameToModuleCtx; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.IncludeEffectiveStatementImpl; - -public class IncludeStatementImpl extends AbstractDeclaredStatement implements IncludeStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.INCLUDE).addOptional(YangStmtMapping.REVISION_DATE).build(); - - protected IncludeStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends - AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.INCLUDE); - } - - @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; - } - - @Override - public IncludeStatement createDeclared(final StmtContext ctx) { - return new IncludeStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new IncludeEffectiveStatementImpl(ctx); - } - - @Override - public void onPreLinkageDeclared( - final Mutable> stmt) { - final StmtContext revision = findFirstDeclaredSubstatement(stmt, - RevisionDateStatement.class); - stmt.addRequiredSource(revision == null ? RevisionSourceIdentifier.create(stmt.getStatementArgument()) - : RevisionSourceIdentifier.create(stmt.getStatementArgument(), revision.getStatementArgument())); - } - - @Override - public void onLinkageDeclared( - final Mutable> stmt) { - final String submoduleName = stmt.getStatementArgument(); - final StmtContext revision = findFirstDeclaredSubstatement(stmt, - RevisionDateStatement.class); - - final ModelActionBuilder includeAction = stmt.newInferenceAction(SOURCE_LINKAGE); - final Prerequisite> requiresCtxPrerequisite; - if (revision == null) { - requiresCtxPrerequisite = includeAction.requiresCtx(stmt, SubmoduleNamespace.class, - NamespaceKeyCriterion.latestRevisionModule(submoduleName), SOURCE_LINKAGE); - } else { - requiresCtxPrerequisite = includeAction.requiresCtx(stmt, SubmoduleNamespace.class, - RevisionSourceIdentifier.create(submoduleName, Optional.of(revision.getStatementArgument())), - SOURCE_LINKAGE); - } - - includeAction.apply(new InferenceAction() { - @Override - public void apply(final InferenceContext ctx) { - final StmtContext includedSubModuleContext = requiresCtxPrerequisite.resolve(ctx); - - stmt.addToNs(IncludedModuleContext.class, revision != null - ? RevisionSourceIdentifier.create(submoduleName, revision.getStatementArgument()) - : RevisionSourceIdentifier.create(submoduleName), includedSubModuleContext); - stmt.addToNs(IncludedSubmoduleNameToModuleCtx.class, stmt.getStatementArgument(), - includedSubModuleContext); - } - - @Override - public void prerequisiteFailed(final Collection> failed) { - InferenceException.throwIf(failed.contains(requiresCtxPrerequisite), - stmt.getStatementSourceReference(), - "Included submodule '%s' was not found: ", stmt.getStatementArgument()); - } - }); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public String getModule() { - return argument(); - } - - @Override - public RevisionDateStatement getRevisionDate() { - return firstDeclared(RevisionDateStatement.class); - } - - @Override - public DescriptionStatement getDescription() { - return firstDeclared(DescriptionStatement.class); - } - - @Override - public ReferenceStatement getReference() { - return firstDeclared(ReferenceStatement.class); - } - -} 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 deleted file mode 100644 index 27f4180e23..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/InputStatementImpl.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import java.util.Collection; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -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.InputStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; -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.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.InputEffectiveStatementImpl; - -public class InputStatementImpl extends AbstractDeclaredStatement - implements InputStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .INPUT) - .addAny(YangStmtMapping.ANYXML) - .addAny(YangStmtMapping.CHOICE) - .addAny(YangStmtMapping.CONTAINER) - .addAny(YangStmtMapping.GROUPING) - .addAny(YangStmtMapping.LEAF) - .addAny(YangStmtMapping.LEAF_LIST) - .addAny(YangStmtMapping.LIST) - .addAny(YangStmtMapping.TYPEDEF) - .addAny(YangStmtMapping.USES) - .build(); - - protected InputStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition - extends AbstractQNameStatementSupport> { - - public Definition() { - super(YangStmtMapping.INPUT); - } - - @Override - public QName parseArgumentValue(final StmtContext ctx, final String value) { - return StmtContextUtils.qnameFromArgument(ctx, "input"); - } - - @Override - public void onStatementAdded(final Mutable> stmt) { - stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); - } - - @Override - public InputStatement createDeclared( - final StmtContext ctx) { - return new InputStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new InputEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public Collection getTypedefs() { - return allDeclared(TypedefStatement.class); - } - - @Nonnull - @Override - public Collection getGroupings() { - return allDeclared(GroupingStatement.class); - } - - @Nonnull - @Override - public Collection getDataDefinitions() { - return allDeclared(DataDefinitionStatement.class); - } - - @Nonnull - @Override - public Collection getMusts() { - return allDeclared(MustStatement.class); - } -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/InstanceIdentifierSpecificationImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/InstanceIdentifierSpecificationImpl.java deleted file mode 100644 index a8b447da94..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/InstanceIdentifierSpecificationImpl.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.InstanceIdentifierSpecification; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.InstanceIdentifierSpecificationEffectiveStatementImpl; - -public class InstanceIdentifierSpecificationImpl extends AbstractDeclaredStatement - implements InstanceIdentifierSpecification { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .TYPE) - .addOptional(YangStmtMapping.REQUIRE_INSTANCE) - .build(); - - protected InstanceIdentifierSpecificationImpl(final StmtContext ctx) { - super(ctx); - } - - public static class Definition extends AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.TYPE); - } - - @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; - } - - @Override - public InstanceIdentifierSpecification createDeclared( - final StmtContext ctx) { - return new InstanceIdentifierSpecificationImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new InstanceIdentifierSpecificationEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public String getName() { - return argument(); - } - - @Override - public RequireInstanceStatement getRequireInstance() { - return firstDeclared(RequireInstanceStatement.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 deleted file mode 100644 index 1aa600b115..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/KeyStatementImpl.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.ImmutableSet.Builder; -import java.util.Collection; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.common.QNameModule; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement; -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.QNameCacheNamespace; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.KeyEffectiveStatementImpl; - -public class KeyStatementImpl extends AbstractDeclaredStatement> implements - KeyStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .KEY) - .build(); - - protected KeyStatementImpl(final StmtContext, KeyStatement, ?> context) { - super(context); - } - - public static class Definition - extends - AbstractStatementSupport, KeyStatement, - EffectiveStatement, KeyStatement>> { - - public Definition() { - super(YangStmtMapping.KEY); - } - - @Override - public Collection parseArgumentValue(final StmtContext ctx, final String value) { - final Builder builder = ImmutableSet.builder(); - int tokens = 0; - for (String keyToken : StmtContextUtils.LIST_KEY_SPLITTER.split(value)) { - builder.add(SchemaNodeIdentifier.create(false, StmtContextUtils.qnameFromArgument(ctx, keyToken))); - tokens++; - } - - // Throws NPE on nulls, retains first inserted value, cannot be modified - final Collection ret = builder.build(); - SourceException.throwIf(ret.size() != tokens, ctx.getStatementSourceReference(), - "Key argument '%s' contains duplicates", value); - return ret; - } - - @Override - public Collection adaptArgumentValue( - final StmtContext, KeyStatement, - EffectiveStatement, KeyStatement>> ctx, - final QNameModule targetModule) { - final Builder builder = ImmutableSet.builder(); - boolean replaced = false; - for (final SchemaNodeIdentifier arg : ctx.getStatementArgument()) { - final QName qname = arg.getLastComponent(); - if (!targetModule.equals(qname.getModule())) { - final QName newQname = ctx.getFromNamespace(QNameCacheNamespace.class, - QName.create(targetModule, qname.getLocalName())); - builder.add(SchemaNodeIdentifier.create(false, newQname)); - replaced = true; - } else { - builder.add(arg); - } - } - - // This makes sure we reuse the collection when a grouping is - // instantiated in the same module - return replaced ? builder.build() : ctx.getStatementArgument(); - } - - @Override - public KeyStatement createDeclared(final StmtContext, KeyStatement, ?> ctx) { - return new KeyStatementImpl(ctx); - } - - @Override - public EffectiveStatement, KeyStatement> createEffective( - final StmtContext, KeyStatement, - EffectiveStatement, KeyStatement>> ctx) { - return new KeyEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/LeafrefSpecificationImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/LeafrefSpecificationImpl.java deleted file mode 100644 index ae56ceef5c..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/LeafrefSpecificationImpl.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.PathStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.LeafrefSpecification; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.LeafrefSpecificationEffectiveStatementImpl; - -public class LeafrefSpecificationImpl extends AbstractDeclaredStatement - implements LeafrefSpecification { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .TYPE) - .addMandatory(YangStmtMapping.PATH) - .build(); - - protected LeafrefSpecificationImpl( - final StmtContext context) { - super(context); - } - - public static class Definition - extends - AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.TYPE); - } - - @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; - } - - @Override - public LeafrefSpecification createDeclared(final StmtContext ctx) { - return new LeafrefSpecificationImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new LeafrefSpecificationEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public String getName() { - return argument(); - } - - @Nonnull - @Override - public PathStatement getPath() { - return firstDeclared(PathStatement.class); - } - - @Nullable - @Override - public RequireInstanceStatement getRequireInstance() { - return firstDeclared(RequireInstanceStatement.class); - } - -} 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 deleted file mode 100644 index 55d58eb7ad..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/LengthStatementImpl.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import java.util.List; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -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.LengthStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ValueRange; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.LengthEffectiveStatementImpl; - -public class LengthStatementImpl extends AbstractDeclaredStatement> - implements LengthStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .LENGTH) - .addOptional(YangStmtMapping.DESCRIPTION) - .addOptional(YangStmtMapping.ERROR_APP_TAG) - .addOptional(YangStmtMapping.ERROR_MESSAGE) - .addOptional(YangStmtMapping.REFERENCE) - .build(); - - protected LengthStatementImpl(final StmtContext, LengthStatement, ?> context) { - super(context); - } - - public static class Definition extends AbstractStatementSupport, LengthStatement, - EffectiveStatement, LengthStatement>> { - - public Definition() { - super(YangStmtMapping.LENGTH); - } - - @Override - public List parseArgumentValue(final StmtContext ctx, final String value) { - return TypeUtils.parseLengthListFromString(ctx, value); - } - - @Override - public LengthStatement createDeclared(final StmtContext, LengthStatement, ?> ctx) { - return new LengthStatementImpl(ctx); - } - - @Override - public EffectiveStatement, LengthStatement> createEffective( - final StmtContext, LengthStatement, EffectiveStatement, - LengthStatement>> ctx) { - return new LengthEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Override - public ErrorAppTagStatement getErrorAppTagStatement() { - return firstDeclared(ErrorAppTagStatement.class); - } - - @Override - public ErrorMessageStatement getErrorMessageStatement() { - return firstDeclared(ErrorMessageStatement.class); - } - - @Override - public DescriptionStatement getDescription() { - return firstDeclared(DescriptionStatement.class); - } - - @Override - public ReferenceStatement getReference() { - return firstDeclared(ReferenceStatement.class); - } -} 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 deleted file mode 100644 index e601764ee3..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MandatoryStatementImpl.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.MandatoryEffectiveStatementImpl; - -public class MandatoryStatementImpl extends AbstractDeclaredStatement implements MandatoryStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .MANDATORY) - .build(); - - protected MandatoryStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends - AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.MANDATORY); - } - - @Override - public Boolean parseArgumentValue(final StmtContext ctx, final String value) { - return Utils.parseBoolean(ctx, value); - } - - @Override - public MandatoryStatement createDeclared(final StmtContext ctx) { - final MandatoryStatement ret = new MandatoryStatementImpl(ctx); - if (EmptyMandatoryStatement.FALSE.equals(ret)) { - return EmptyMandatoryStatement.FALSE; - } else if (EmptyMandatoryStatement.TRUE.equals(ret)) { - return EmptyMandatoryStatement.TRUE; - } else { - return ret; - } - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - final EffectiveStatement ret = new MandatoryEffectiveStatementImpl(ctx); - final MandatoryStatement declared = ret.getDeclared(); - if (declared instanceof EmptyMandatoryStatement && ret.effectiveSubstatements().isEmpty()) { - return ((EmptyMandatoryStatement)declared).toEffective(); - } - return ret; - } - - @Override - public String internArgument(final String rawArgument) { - return Utils.internBoolean(rawArgument); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Override - @Nonnull public Boolean getValue() { - return argument(); - } -} 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 deleted file mode 100644 index 90c8dbd678..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MaxElementsStatementImpl.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.MaxElementsEffectiveStatementImpl; - -public class MaxElementsStatementImpl extends AbstractDeclaredStatement - implements MaxElementsStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .MAX_ELEMENTS) - .build(); - - protected MaxElementsStatementImpl( - final StmtContext context) { - super(context); - } - - public static class Definition - extends - AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.MAX_ELEMENTS); - } - - @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; - } - - @Override - public MaxElementsStatement createDeclared( - final StmtContext ctx) { - return new MaxElementsStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new MaxElementsEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public String getValue() { - return argument(); - } - -} 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 deleted file mode 100644 index 3baf09e0a6..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MinElementsStatementImpl.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.MinElementsStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.MinElementsEffectiveStatementImpl; - -public class MinElementsStatementImpl extends - AbstractDeclaredStatement implements MinElementsStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .MIN_ELEMENTS) - .build(); - - protected MinElementsStatementImpl( - final StmtContext context) { - super(context); - } - - public static class Definition - extends - AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.MIN_ELEMENTS); - } - - @Override - public Integer parseArgumentValue(final StmtContext ctx, final String value) { - return Integer.parseInt(value); - } - - @Override - public MinElementsStatement createDeclared( - final StmtContext ctx) { - return new MinElementsStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new MinElementsEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public Integer getValue() { - return argument(); - } -} 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 deleted file mode 100644 index 80ad665eba..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/MustStatementImpl.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -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.MustStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.MustEffectiveStatementImpl; - -public class MustStatementImpl extends AbstractDeclaredStatement implements MustStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .MUST) - .addOptional(YangStmtMapping.DESCRIPTION) - .addOptional(YangStmtMapping.ERROR_APP_TAG) - .addOptional(YangStmtMapping.ERROR_MESSAGE) - .addOptional(YangStmtMapping.REFERENCE) - .build(); - - protected MustStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.MUST); - } - - @Override - public RevisionAwareXPath parseArgumentValue(final StmtContext ctx, final String value) { - return Utils.parseXPath(ctx, value); - } - - @Override - public MustStatement createDeclared(final StmtContext ctx) { - return new MustStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new MustEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public RevisionAwareXPath getCondition() { - return argument(); - } - - @Nullable - @Override - public ErrorAppTagStatement getErrorAppTagStatement() { - return firstDeclared(ErrorAppTagStatement.class); - } - - @Nullable - @Override - public ErrorMessageStatement getErrorMessageStatement() { - return firstDeclared(ErrorMessageStatement.class); - } - - @Nullable - @Override - public DescriptionStatement getDescription() { - return firstDeclared(DescriptionStatement.class); - } - - @Nullable - @Override - public ReferenceStatement getReference() { - return firstDeclared(ReferenceStatement.class); - } -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/NamespaceStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/NamespaceStatementImpl.java deleted file mode 100644 index 4a28591581..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/NamespaceStatementImpl.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import java.net.URI; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.NamespaceEffectiveStatementImpl; - -public class NamespaceStatementImpl extends AbstractDeclaredStatement implements NamespaceStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .NAMESPACE) - .build(); - - public static class Definition extends AbstractStatementSupport> { - - public Definition() { - super(org.opendaylight.yangtools.yang.model.api.YangStmtMapping.NAMESPACE); - } - - @Override - public URI parseArgumentValue(final StmtContext ctx, final String value) { - return URI.create(value); - } - - @Override - public NamespaceStatement createDeclared(final StmtContext ctx) { - return new NamespaceStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new NamespaceEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - NamespaceStatementImpl(final StmtContext context) { - super(context); - } - - @Nonnull - @Override - public URI getUri() { - return argument(); - } -} 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 deleted file mode 100644 index a18a528fe9..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/NotificationStatementImpl.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import java.util.Collection; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DataDefinitionStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.NotificationStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; -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.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.NotificationEffectiveStatementImpl; - -public class NotificationStatementImpl extends AbstractDeclaredStatement - implements NotificationStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .NOTIFICATION) - .addAny(YangStmtMapping.ANYXML) - .addAny(YangStmtMapping.CHOICE) - .addAny(YangStmtMapping.CONTAINER) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.GROUPING) - .addAny(YangStmtMapping.IF_FEATURE) - .addAny(YangStmtMapping.LEAF) - .addAny(YangStmtMapping.LEAF_LIST) - .addAny(YangStmtMapping.LIST) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addAny(YangStmtMapping.TYPEDEF) - .addAny(YangStmtMapping.USES) - .build(); - - protected NotificationStatementImpl( - final StmtContext context) { - super(context); - } - - public static class Definition - extends - AbstractQNameStatementSupport> { - - public Definition() { - super(YangStmtMapping.NOTIFICATION); - } - - @Override - public QName parseArgumentValue(final StmtContext ctx, final String value) { - return StmtContextUtils.qnameFromArgument(ctx, value); - } - - @Override - public void onStatementAdded( - final Mutable> stmt) { - stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); - } - - @Override - public NotificationStatement createDeclared( - final StmtContext ctx) { - return new NotificationStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new NotificationEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public QName getName() { - return argument(); - } - - @Nonnull - @Override - public Collection getTypedefs() { - return allDeclared(TypedefStatement.class); - } - - @Nonnull - @Override - public Collection getGroupings() { - return allDeclared(GroupingStatement.class); - } - - @Nonnull - @Override - public Collection getDataDefinitions() { - return allDeclared(DataDefinitionStatement.class); - } - - @Nonnull - @Override - public Collection getMusts() { - return allDeclared(MustStatement.class); - } - - @Nullable - @Override - public StatusStatement getStatus() { - return firstDeclared(StatusStatement.class); - } - - @Nullable - @Override - public DescriptionStatement getDescription() { - return firstDeclared(DescriptionStatement.class); - } - - @Nullable - @Override - public ReferenceStatement getReference() { - return firstDeclared(ReferenceStatement.class); - } - - @Nonnull - @Override - public Collection getIfFeatures() { - return allDeclared(IfFeatureStatement.class); - } -} 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 deleted file mode 100644 index 1ae0143d33..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OrderedByStatementImpl.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.OrderedByEffectiveStatementImpl; - -public class OrderedByStatementImpl extends AbstractDeclaredStatement implements OrderedByStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .ORDERED_BY) - .build(); - - protected OrderedByStatementImpl( - final StmtContext context) { - super(context); - } - - public static class Definition - extends - AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.ORDERED_BY); - } - - @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; - } - - @Override - public OrderedByStatement createDeclared(final StmtContext ctx) { - return new OrderedByStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new OrderedByEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - - @Override - public String internArgument(final String rawArgument) { - if ("user".equals(rawArgument)) { - return "user"; - } else if ("system".equals(rawArgument)) { - return "system"; - } else { - return rawArgument; - } - } - } - - @Nonnull - @Override - public String getValue() { - return argument(); - } - -} 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 deleted file mode 100644 index c67e5b8e16..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OrganizationStatementImpl.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.OrganizationStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.OrganizationEffectiveStatementImpl; - -public class OrganizationStatementImpl extends AbstractDeclaredStatement implements OrganizationStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .ORGANIZATION) - .build(); - - protected OrganizationStatementImpl( - final StmtContext context) { - super(context); - } - - public static class Definition - extends - AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.ORGANIZATION); - } - - @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; - } - - @Override - public OrganizationStatement createDeclared( - final StmtContext ctx) { - return new OrganizationStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new OrganizationEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public String getText() { - return argument(); - } -} 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 deleted file mode 100644 index a4c1041847..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OutputStatementImpl.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import java.util.Collection; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -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.MustStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; -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.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.OutputEffectiveStatementImpl; - -public class OutputStatementImpl extends AbstractDeclaredStatement implements OutputStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .OUTPUT) - .addAny(YangStmtMapping.ANYXML) - .addAny(YangStmtMapping.CHOICE) - .addAny(YangStmtMapping.CONTAINER) - .addAny(YangStmtMapping.GROUPING) - .addAny(YangStmtMapping.LEAF) - .addAny(YangStmtMapping.LEAF_LIST) - .addAny(YangStmtMapping.LIST) - .addAny(YangStmtMapping.TYPEDEF) - .addAny(YangStmtMapping.USES) - .build(); - - protected OutputStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends - AbstractQNameStatementSupport> { - - public Definition() { - super(YangStmtMapping.OUTPUT); - } - - @Override - public QName parseArgumentValue(final StmtContext ctx, final String value) { - return StmtContextUtils.qnameFromArgument(ctx, "output"); - } - - @Override - public void onStatementAdded(final Mutable> stmt) { - stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); - } - - @Override - public OutputStatement createDeclared(final StmtContext ctx) { - return new OutputStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new OutputEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public Collection getTypedefs() { - return allDeclared(TypedefStatement.class); - } - - @Nonnull - @Override - public Collection getGroupings() { - return allDeclared(GroupingStatement.class); - } - - @Nonnull - @Override - public Collection getDataDefinitions() { - return allDeclared(DataDefinitionStatement.class); - } - - @Nonnull - @Override - public Collection getMusts() { - return allDeclared(MustStatement.class); - } -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PathStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PathStatementImpl.java deleted file mode 100644 index 334b93836e..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PathStatementImpl.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.PathStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.PathEffectiveStatementImpl; - -public class PathStatementImpl extends AbstractDeclaredStatement implements PathStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .PATH) - .build(); - - protected PathStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.PATH); - } - - @Override - public RevisionAwareXPath parseArgumentValue(final StmtContext ctx, final String value) { - return Utils.parseXPath(ctx, value); - } - - @Override - public PathStatement createDeclared(final StmtContext ctx) { - return new PathStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new PathEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public String getValue() { - return rawArgument(); - } -} 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 deleted file mode 100644 index 53d3c814e2..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PatternStatementImpl.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import java.util.Optional; -import java.util.regex.Pattern; -import java.util.regex.PatternSyntaxException; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -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.ModifierStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.PatternStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; -import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint; -import org.opendaylight.yangtools.yang.model.util.RegexUtils; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.PatternConstraintEffectiveImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.PatternEffectiveStatementImpl; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class PatternStatementImpl extends AbstractDeclaredStatement implements PatternStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .PATTERN) - .addOptional(YangStmtMapping.DESCRIPTION) - .addOptional(YangStmtMapping.ERROR_APP_TAG) - .addOptional(YangStmtMapping.ERROR_MESSAGE) - .addOptional(YangStmtMapping.REFERENCE) - .build(); - private static final Logger LOG = LoggerFactory.getLogger(PatternStatementImpl.class); - - protected PatternStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.PATTERN); - } - - @Override - public PatternConstraint parseArgumentValue(final StmtContext ctx, final String value) { - final String pattern = RegexUtils.getJavaRegexFromXSD(value); - - try { - Pattern.compile(pattern); - } catch (final PatternSyntaxException e) { - LOG.debug("Pattern \"{}\" failed to compile at {}", pattern, ctx.getStatementSourceReference(), e); - return null; - } - - return new PatternConstraintEffectiveImpl(pattern, value, Optional.empty(), Optional.empty()); - } - - @Override - public PatternStatement createDeclared(final StmtContext ctx) { - return new PatternStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new PatternEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Override - public ErrorAppTagStatement getErrorAppTagStatement() { - return firstDeclared(ErrorAppTagStatement.class); - } - - @Override - public ErrorMessageStatement getErrorMessageStatement() { - return firstDeclared(ErrorMessageStatement.class); - } - - @Override - public DescriptionStatement getDescription() { - return firstDeclared(DescriptionStatement.class); - } - - @Override - public ModifierStatement getModifierStatement() { - return firstDeclared(ModifierStatement.class); - } - - @Override - public ReferenceStatement getReference() { - return firstDeclared(ReferenceStatement.class); - } - - @Nonnull - @Override - public PatternConstraint getValue() { - return argument(); - } -} 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 deleted file mode 100644 index 213d317387..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PositionStatementImpl.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.PositionStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.PositionEffectiveStatementImpl; - -public class PositionStatementImpl extends AbstractDeclaredStatement implements PositionStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.POSITION).build(); - - protected PositionStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.POSITION); - } - - @Override - public Long parseArgumentValue(final StmtContext ctx, final String value) { - try { - return Long.parseLong(value); - } catch (NumberFormatException e) { - throw new SourceException(String.format("Bit position value %s is not valid integer", value), - ctx.getStatementSourceReference(), e); - } - } - - @Override - public PositionStatement createDeclared(final StmtContext ctx) { - return new PositionStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new PositionEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Override - public long getValue() { - return argument(); - } -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PrefixStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PrefixStatementImpl.java deleted file mode 100644 index 695c74ca73..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PrefixStatementImpl.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.PrefixEffectiveStatementImpl; - -public class PrefixStatementImpl extends AbstractDeclaredStatement implements PrefixStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .PREFIX) - .build(); - - public static class Definition - extends AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.PREFIX); - } - - @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; - } - - @Override - public PrefixStatement createDeclared(final StmtContext ctx) { - return new PrefixStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new PrefixEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - PrefixStatementImpl(final StmtContext context) { - super(context); - } - - @Nonnull - @Override - public String getValue() { - return rawArgument(); - } -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PresenceStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PresenceStatementImpl.java deleted file mode 100644 index c70fc9661d..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PresenceStatementImpl.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.PresenceStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.PresenceEffectiveStatementImpl; - -public class PresenceStatementImpl extends AbstractDeclaredStatement implements PresenceStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .PRESENCE) - .build(); - - protected PresenceStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition - extends - AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.PRESENCE); - } - - @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; - } - - @Override - public PresenceStatement createDeclared(final StmtContext ctx) { - return new PresenceStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new PresenceEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public String getValue() { - return argument(); - } - -} 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 deleted file mode 100644 index c1afac80e0..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RangeStatementImpl.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import java.math.BigDecimal; -import java.util.List; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -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.RangeStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ValueRange; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.RangeEffectiveStatementImpl; - -public class RangeStatementImpl extends AbstractDeclaredStatement> implements RangeStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .RANGE) - .addOptional(YangStmtMapping.DESCRIPTION) - .addOptional(YangStmtMapping.ERROR_APP_TAG) - .addOptional(YangStmtMapping.ERROR_MESSAGE) - .addOptional(YangStmtMapping.REFERENCE) - .build(); - - // these objects are to compare whether range has MAX or MIN value - // none of these values should appear as Yang number according to spec so they are safe to use - public static final BigDecimal YANG_MIN_NUM = BigDecimal.valueOf(-Double.MAX_VALUE); - public static final BigDecimal YANG_MAX_NUM = BigDecimal.valueOf(Double.MAX_VALUE); - - protected RangeStatementImpl(final StmtContext, RangeStatement, ?> context) { - super(context); - } - - public static class Definition extends AbstractStatementSupport, RangeStatement, - EffectiveStatement, RangeStatement>> { - - public Definition() { - super(YangStmtMapping.RANGE); - } - - @Override - public List parseArgumentValue(final StmtContext ctx, final String value) { - return TypeUtils.parseRangeListFromString(ctx, value); - } - - @Override - public RangeStatement createDeclared(final StmtContext, RangeStatement, ?> ctx) { - return new RangeStatementImpl(ctx); - } - - @Override - public EffectiveStatement, RangeStatement> createEffective( - final StmtContext, RangeStatement, EffectiveStatement, - RangeStatement>> ctx) { - return new RangeEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Override - public ErrorAppTagStatement getErrorAppTagStatement() { - return firstDeclared(ErrorAppTagStatement.class); - } - - @Override - public ErrorMessageStatement getErrorMessageStatement() { - return firstDeclared(ErrorMessageStatement.class); - } - - @Override - public DescriptionStatement getDescription() { - return firstDeclared(DescriptionStatement.class); - } - - @Override - public ReferenceStatement getReference() { - return firstDeclared(ReferenceStatement.class); - } -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ReferenceStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ReferenceStatementImpl.java deleted file mode 100644 index b0739a0ec2..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ReferenceStatementImpl.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ReferenceEffectiveStatementImpl; - -public class ReferenceStatementImpl extends AbstractDeclaredStatement implements ReferenceStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .REFERENCE) - .build(); - - protected ReferenceStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.REFERENCE); - } - - @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; - } - - @Override - public ReferenceStatement createDeclared(final StmtContext ctx) { - return new ReferenceStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new ReferenceEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public String getText() { - return rawArgument(); - } -} 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 deleted file mode 100644 index 8f84250d99..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RequireInstanceStatementImpl.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.RequireInstanceEffectiveStatementImpl; - -public class RequireInstanceStatementImpl extends AbstractDeclaredStatement - implements RequireInstanceStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.REQUIRE_INSTANCE).build(); - - protected RequireInstanceStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.REQUIRE_INSTANCE); - } - - @Override - public Boolean parseArgumentValue(final StmtContext ctx, final String value) { - return Utils.parseBoolean(ctx, value); - } - - @Override - public RequireInstanceStatement createDeclared(final StmtContext ctx) { - return new RequireInstanceStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new RequireInstanceEffectiveStatementImpl(ctx); - } - - @Override - public String internArgument(final String rawArgument) { - return Utils.internBoolean(rawArgument); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Override - public boolean getValue() { - return argument().booleanValue(); - } -} 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 deleted file mode 100644 index abafa2ac04..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RevisionDateStatementImpl.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import java.time.format.DateTimeParseException; -import org.opendaylight.yangtools.yang.common.Revision; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.RevisionDateEffectiveStatementImpl; - -public class RevisionDateStatementImpl extends AbstractDeclaredStatement implements RevisionDateStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = - SubstatementValidator.builder(YangStmtMapping.REVISION_DATE).build(); - - protected RevisionDateStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.REVISION_DATE); - } - - @Override - public Revision parseArgumentValue(final StmtContext ctx, final String value) { - try { - return Revision.of(value); - } catch (DateTimeParseException e) { - throw new SourceException(ctx.getStatementSourceReference(), e, - "Revision value %s is not in required format yyyy-MM-dd", value); - } - } - - @Override - public RevisionDateStatement createDeclared(final StmtContext ctx) { - return new RevisionDateStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective(final StmtContext> ctx) { - return new RevisionDateEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Override - public Revision getDate() { - return argument(); - } -} 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 deleted file mode 100644 index a7a689bf54..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RevisionStatementImpl.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import java.time.format.DateTimeParseException; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import org.opendaylight.yangtools.yang.common.Revision; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -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.RevisionStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.RevisionEffectiveStatementImpl; - -public class RevisionStatementImpl extends AbstractDeclaredStatement - implements RevisionStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.REVISION) - .addOptional(YangStmtMapping.DESCRIPTION) - .addOptional(YangStmtMapping.REFERENCE) - .build(); - - protected RevisionStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends - AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.REVISION); - } - - @Override - public Revision parseArgumentValue(final StmtContext ctx, final String value) { - try { - return Revision.of(value); - } catch (DateTimeParseException e) { - throw new SourceException(ctx.getStatementSourceReference(), e, - "Revision value %s is not in required format yyyy-MM-dd", value); - } - } - - @Override - public RevisionStatement createDeclared(final StmtContext ctx) { - return new RevisionStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new RevisionEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public Revision getDate() { - return argument(); - } - - @Nullable - @Override - public DescriptionStatement getDescription() { - return firstDeclared(DescriptionStatement.class); - } - - @Nullable - @Override - public ReferenceStatement getReference() { - return firstDeclared(ReferenceStatement.class); - } -} 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 deleted file mode 100644 index 53c55195b3..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RpcStatementImpl.java +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import java.util.Collection; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.RpcStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; -import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport; -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.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.spi.source.ImplicitSubstatement; -import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase; -import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementDefinitionContext; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.RpcEffectiveStatementImpl; - -public class RpcStatementImpl extends AbstractDeclaredStatement implements RpcStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .RPC) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.GROUPING) - .addAny(YangStmtMapping.IF_FEATURE) - .addOptional(YangStmtMapping.INPUT) - .addOptional(YangStmtMapping.OUTPUT) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addAny(YangStmtMapping.TYPEDEF) - .build(); - - protected RpcStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition - extends AbstractQNameStatementSupport> { - // TODO: share instances - private static final StatementSupport IMPLICIT_INPUT = new InputStatementImpl.Definition(); - private static final StatementSupport IMPLICIT_OUTPUT = new OutputStatementImpl.Definition(); - - public Definition() { - super(YangStmtMapping.RPC); - } - - @Override - public QName parseArgumentValue(final StmtContext ctx, final String value) { - return StmtContextUtils.qnameFromArgument(ctx, value); - } - - @Override - public void onStatementAdded(final Mutable> stmt) { - stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); - } - - @Override - public RpcStatement createDeclared( - final StmtContext ctx) { - return new RpcStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new RpcEffectiveStatementImpl(ctx); - } - - @Override - public void onFullDefinitionDeclared( - final Mutable> stmt) { - super.onFullDefinitionDeclared(stmt); - - if (StmtContextUtils.findFirstDeclaredSubstatement(stmt, InputStatement.class) == null) { - addImplicitStatement((StatementContextBase) stmt, implictInput()); - } - - if (StmtContextUtils.findFirstDeclaredSubstatement(stmt, OutputStatement.class) == null) { - addImplicitStatement((StatementContextBase) stmt, implictOutput()); - } - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - - protected StatementSupport implictInput() { - return IMPLICIT_INPUT; - } - - protected StatementSupport implictOutput() { - return IMPLICIT_OUTPUT; - } - - private static void addImplicitStatement(final StatementContextBase parent, - final StatementSupport statementToAdd) { - final StatementDefinitionContext stmtDefCtx = new StatementDefinitionContext<>(statementToAdd); - - parent.createSubstatement(parent.declaredSubstatements().size(), stmtDefCtx, - ImplicitSubstatement.of(parent.getStatementSourceReference()), null); - } - } - - @Override - public QName getName() { - return argument(); - } - - @Nonnull - @Override - public Collection getTypedefs() { - return allDeclared(TypedefStatement.class); - } - - @Nonnull - @Override - public Collection getGroupings() { - return allDeclared(GroupingStatement.class); - } - - @Nullable - @Override - public StatusStatement getStatus() { - return firstDeclared(StatusStatement.class); - } - - @Nullable - @Override - public DescriptionStatement getDescription() { - return firstDeclared(DescriptionStatement.class); - } - - @Nullable - @Override - public ReferenceStatement getReference() { - return firstDeclared(ReferenceStatement.class); - } - - @Override - public InputStatement getInput() { - return firstDeclared(InputStatement.class); - } - - @Override - public OutputStatement getOutput() { - return firstDeclared(OutputStatement.class); - } - - @Nonnull - @Override - public Collection getIfFeatures() { - return allDeclared(IfFeatureStatement.class); - } -} 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 deleted file mode 100644 index 5f5cdfafe8..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/StatusStatementImpl.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.Status; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.StatusEffectiveStatementImpl; - -public class StatusStatementImpl extends AbstractDeclaredStatement - implements StatusStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .STATUS) - .build(); - - protected StatusStatementImpl( - final StmtContext context) { - super(context); - } - - public static class Definition - extends - AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.STATUS); - } - - @Override - public Status parseArgumentValue(final StmtContext ctx, final String value) { - switch (value) { - case "current": - return Status.CURRENT; - case "deprecated": - return Status.DEPRECATED; - case "obsolete": - return Status.OBSOLETE; - default: - throw new SourceException(ctx.getStatementSourceReference(), - "Invalid status '%s', must be one of 'current', 'deprecated' or 'obsolete'", value); - } - } - - @Override - public StatusStatement createDeclared( - final StmtContext ctx) { - return new StatusStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new StatusEffectiveStatementImpl(ctx); - } - - @Override - public String internArgument(final String rawArgument) { - if ("current".equals(rawArgument)) { - return "current"; - } else if ("deprecated".equals(rawArgument)) { - return "deprecated"; - } else if ("obsolete".equals(rawArgument)) { - return "obsolete"; - } else { - return rawArgument; - } - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public Status getValue() { - return argument(); - } - -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/SubmoduleStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/SubmoduleStatementImpl.java deleted file mode 100644 index 0e1f1ae43a..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/SubmoduleStatementImpl.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.findFirstDeclaredSubstatement; -import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.firstAttributeOf; - -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionStatement; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.parser.spi.SubmoduleNamespace; -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.meta.StmtContext.Mutable; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.spi.source.BelongsToPrefixToModuleName; -import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.SubmoduleEffectiveStatementImpl; - -public class SubmoduleStatementImpl extends AbstractRootStatement implements SubmoduleStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .SUBMODULE) - .addAny(YangStmtMapping.ANYXML) - .addAny(YangStmtMapping.AUGMENT) - .addMandatory(YangStmtMapping.BELONGS_TO) - .addAny(YangStmtMapping.CHOICE) - .addOptional(YangStmtMapping.CONTACT) - .addAny(YangStmtMapping.CONTAINER) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.DEVIATION) - .addAny(YangStmtMapping.EXTENSION) - .addAny(YangStmtMapping.FEATURE) - .addAny(YangStmtMapping.GROUPING) - .addAny(YangStmtMapping.IDENTITY) - .addAny(YangStmtMapping.IMPORT) - .addAny(YangStmtMapping.INCLUDE) - .addAny(YangStmtMapping.LEAF) - .addAny(YangStmtMapping.LEAF_LIST) - .addAny(YangStmtMapping.LIST) - .addAny(YangStmtMapping.NOTIFICATION) - .addOptional(YangStmtMapping.ORGANIZATION) - .addOptional(YangStmtMapping.REFERENCE) - .addAny(YangStmtMapping.REVISION) - .addAny(YangStmtMapping.RPC) - .addAny(YangStmtMapping.TYPEDEF) - .addAny(YangStmtMapping.USES) - .addOptional(YangStmtMapping.YANG_VERSION) - .build(); - - protected SubmoduleStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.SUBMODULE); - } - - @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; - } - - @Override - public SubmoduleStatement createDeclared( - final StmtContext ctx) { - return new SubmoduleStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new SubmoduleEffectiveStatementImpl(ctx); - } - - @Override - public void onPreLinkageDeclared( - final Mutable> stmt) { - stmt.setRootIdentifier(RevisionSourceIdentifier.create(stmt.getStatementArgument(), - StmtContextUtils.getLatestRevision(stmt.declaredSubstatements()))); - } - - @Override - public void onLinkageDeclared( - final Mutable> stmt) { - final SourceIdentifier submoduleIdentifier = RevisionSourceIdentifier.create(stmt.getStatementArgument(), - StmtContextUtils.getLatestRevision(stmt.declaredSubstatements())); - - final StmtContext> - possibleDuplicateSubmodule = stmt.getFromNamespace(SubmoduleNamespace.class, submoduleIdentifier); - if (possibleDuplicateSubmodule != null && possibleDuplicateSubmodule != stmt) { - throw new SourceException(stmt.getStatementSourceReference(), "Submodule name collision: %s. At %s", - stmt.getStatementArgument(), possibleDuplicateSubmodule.getStatementSourceReference()); - } - - stmt.addContext(SubmoduleNamespace.class, submoduleIdentifier, stmt); - - final String belongsToModuleName = firstAttributeOf(stmt.declaredSubstatements(), BelongsToStatement.class); - final StmtContext prefixSubStmtCtx = findFirstDeclaredSubstatement(stmt, 0, - BelongsToStatement.class, PrefixStatement.class); - SourceException.throwIfNull(prefixSubStmtCtx, stmt.getStatementSourceReference(), - "Prefix of belongsTo statement is missing in submodule [%s]", stmt.getStatementArgument()); - - final String prefix = (String) prefixSubStmtCtx.getStatementArgument(); - - stmt.addToNs(BelongsToPrefixToModuleName.class, prefix, belongsToModuleName); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public String getName() { - return rawArgument(); - } - - @Override - public YangVersionStatement getYangVersion() { - return firstDeclared(YangVersionStatement.class); - } - - @Nonnull - @Override - public BelongsToStatement getBelongsTo() { - return firstDeclared(BelongsToStatement.class); - } -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypeStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypeStatementImpl.java deleted file mode 100644 index 53d5ceeb44..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypeStatementImpl.java +++ /dev/null @@ -1,288 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import com.google.common.base.Verify; -import com.google.common.collect.ImmutableMap; -import java.util.Collection; -import java.util.Map; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.TypeDefinition; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement; -import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.BooleanTypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.EmptyTypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.Int16TypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.Int32TypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.Int64TypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.Int8TypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.Uint16TypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.Uint32TypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.Uint64TypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.Uint8TypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition; -import org.opendaylight.yangtools.yang.parser.spi.TypeNamespace; -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.ModelActionBuilder.InferenceAction; -import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.InferenceContext; -import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.Prerequisite; -import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase; -import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport; -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.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.TypeDefEffectiveStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.BinaryTypeEffectiveStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.BitsTypeEffectiveStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.BooleanTypeEffectiveStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.BuiltinEffectiveStatement; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.DecimalTypeEffectiveStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.EmptyTypeEffectiveStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.EnumTypeEffectiveStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.IdentityrefTypeEffectiveStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.InstanceIdentifierTypeEffectiveStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.IntegralTypeEffectiveStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.LeafrefTypeEffectiveStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.StringTypeEffectiveStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.UnionTypeEffectiveStatementImpl; - -public class TypeStatementImpl extends AbstractDeclaredStatement - implements TypeStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .TYPE) - .addOptional(YangStmtMapping.BASE) - .addAny(YangStmtMapping.BIT) - .addAny(YangStmtMapping.ENUM) - .addOptional(YangStmtMapping.FRACTION_DIGITS) - .addOptional(YangStmtMapping.LENGTH) - .addOptional(YangStmtMapping.PATH) - .addAny(YangStmtMapping.PATTERN) - .addOptional(YangStmtMapping.RANGE) - .addOptional(YangStmtMapping.REQUIRE_INSTANCE) - .addAny(YangStmtMapping.TYPE) - .build(); - - protected TypeStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition - extends AbstractStatementSupport> { - - private static final Map> ARGUMENT_SPECIFIC_SUPPORTS = - ImmutableMap.>builder() - .put(TypeUtils.DECIMAL64, new Decimal64SpecificationImpl.Definition()) - .put(TypeUtils.UNION, new UnionSpecificationImpl.Definition()) - .put(TypeUtils.ENUMERATION, new EnumSpecificationImpl.Definition()) - .put(TypeUtils.LEAF_REF, new LeafrefSpecificationImpl.Definition()) - .put(TypeUtils.BITS, new BitsSpecificationImpl.Definition()) - .put(TypeUtils.IDENTITY_REF, new IdentityRefSpecificationImpl.Definition()) - .put(TypeUtils.INSTANCE_IDENTIFIER, new InstanceIdentifierSpecificationImpl.Definition()) - .build(); - - public Definition() { - super(YangStmtMapping.TYPE); - } - - @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; - } - - @Override - public TypeStatement createDeclared(final StmtContext ctx) { - return BuiltinTypeStatement.maybeReplace(new TypeStatementImpl(ctx)); - } - - @Override - public TypeEffectiveStatement createEffective( - final StmtContext> ctx) { - - // First look up the proper base type - final TypeEffectiveStatement typeStmt; - switch (ctx.getStatementArgument()) { - case TypeUtils.BINARY: - typeStmt = BuiltinEffectiveStatement.BINARY; - break; - case TypeUtils.BOOLEAN: - typeStmt = BuiltinEffectiveStatement.BOOLEAN; - break; - case TypeUtils.EMPTY: - typeStmt = BuiltinEffectiveStatement.EMPTY; - break; - case TypeUtils.INSTANCE_IDENTIFIER: - typeStmt = BuiltinEffectiveStatement.INSTANCE_IDENTIFIER; - break; - case TypeUtils.INT8: - typeStmt = BuiltinEffectiveStatement.INT8; - break; - case TypeUtils.INT16: - typeStmt = BuiltinEffectiveStatement.INT16; - break; - case TypeUtils.INT32: - typeStmt = BuiltinEffectiveStatement.INT32; - break; - case TypeUtils.INT64: - typeStmt = BuiltinEffectiveStatement.INT64; - break; - case TypeUtils.STRING: - typeStmt = BuiltinEffectiveStatement.STRING; - break; - case TypeUtils.UINT8: - typeStmt = BuiltinEffectiveStatement.UINT8; - break; - case TypeUtils.UINT16: - typeStmt = BuiltinEffectiveStatement.UINT16; - break; - case TypeUtils.UINT32: - typeStmt = BuiltinEffectiveStatement.UINT32; - break; - case TypeUtils.UINT64: - typeStmt = BuiltinEffectiveStatement.UINT64; - break; - default: - final QName qname = StmtContextUtils.qnameFromArgument(ctx, ctx.getStatementArgument()); - final StmtContext typedef = - SourceException.throwIfNull(ctx.getFromNamespace(TypeNamespace.class, qname), - ctx.getStatementSourceReference(), "Type '%s' not found", qname); - - final TypedefEffectiveStatement effectiveTypedef = typedef.buildEffective(); - Verify.verify(effectiveTypedef instanceof TypeDefEffectiveStatementImpl); - typeStmt = ((TypeDefEffectiveStatementImpl) effectiveTypedef).asTypeEffectiveStatement(); - } - - if (ctx.declaredSubstatements().isEmpty() && ctx.effectiveSubstatements().isEmpty()) { - return typeStmt; - } - - // Now instantiate the proper effective statement for that type - final TypeDefinition baseType = typeStmt.getTypeDefinition(); - if (baseType instanceof BinaryTypeDefinition) { - return new BinaryTypeEffectiveStatementImpl(ctx, (BinaryTypeDefinition) baseType); - } else if (baseType instanceof BitsTypeDefinition) { - return new BitsTypeEffectiveStatementImpl(ctx, (BitsTypeDefinition) baseType); - } else if (baseType instanceof BooleanTypeDefinition) { - return new BooleanTypeEffectiveStatementImpl(ctx, (BooleanTypeDefinition) baseType); - } else if (baseType instanceof DecimalTypeDefinition) { - return new DecimalTypeEffectiveStatementImpl(ctx, (DecimalTypeDefinition) baseType); - } else if (baseType instanceof EmptyTypeDefinition) { - return new EmptyTypeEffectiveStatementImpl(ctx, (EmptyTypeDefinition) baseType); - } else if (baseType instanceof EnumTypeDefinition) { - return new EnumTypeEffectiveStatementImpl(ctx, (EnumTypeDefinition) baseType); - } else if (baseType instanceof IdentityrefTypeDefinition) { - return new IdentityrefTypeEffectiveStatementImpl(ctx, (IdentityrefTypeDefinition) baseType); - } else if (baseType instanceof InstanceIdentifierTypeDefinition) { - return new InstanceIdentifierTypeEffectiveStatementImpl(ctx, - (InstanceIdentifierTypeDefinition) baseType); - } else if (baseType instanceof Int8TypeDefinition) { - return IntegralTypeEffectiveStatementImpl.create(ctx, (Int8TypeDefinition) baseType); - } else if (baseType instanceof Int16TypeDefinition) { - return IntegralTypeEffectiveStatementImpl.create(ctx, (Int16TypeDefinition) baseType); - } else if (baseType instanceof Int32TypeDefinition) { - return IntegralTypeEffectiveStatementImpl.create(ctx, (Int32TypeDefinition) baseType); - } else if (baseType instanceof Int64TypeDefinition) { - return IntegralTypeEffectiveStatementImpl.create(ctx, (Int64TypeDefinition) baseType); - } else if (baseType instanceof LeafrefTypeDefinition) { - return new LeafrefTypeEffectiveStatementImpl(ctx, (LeafrefTypeDefinition) baseType); - } else if (baseType instanceof StringTypeDefinition) { - return new StringTypeEffectiveStatementImpl(ctx, (StringTypeDefinition) baseType); - } else if (baseType instanceof Uint8TypeDefinition) { - return IntegralTypeEffectiveStatementImpl.create(ctx, (Uint8TypeDefinition) baseType); - } else if (baseType instanceof Uint16TypeDefinition) { - return IntegralTypeEffectiveStatementImpl.create(ctx, (Uint16TypeDefinition) baseType); - } else if (baseType instanceof Uint32TypeDefinition) { - return IntegralTypeEffectiveStatementImpl.create(ctx, (Uint32TypeDefinition) baseType); - } else if (baseType instanceof Uint64TypeDefinition) { - return IntegralTypeEffectiveStatementImpl.create(ctx, (Uint64TypeDefinition) baseType); - } else if (baseType instanceof UnionTypeDefinition) { - return new UnionTypeEffectiveStatementImpl(ctx, (UnionTypeDefinition) baseType); - } else { - throw new IllegalStateException("Unhandled base type " + baseType); - } - } - - @Override - public void onFullDefinitionDeclared( - final Mutable> stmt) { - super.onFullDefinitionDeclared(stmt); - - // if it is yang built-in type, no prerequisite is needed, so simply return - if (TypeUtils.isYangBuiltInTypeString(stmt.getStatementArgument())) { - return; - } - - final QName typeQName = StmtContextUtils.qnameFromArgument(stmt, stmt.getStatementArgument()); - final ModelActionBuilder typeAction = stmt.newInferenceAction(ModelProcessingPhase.EFFECTIVE_MODEL); - final Prerequisite> typePrereq = typeAction.requiresCtx(stmt, TypeNamespace.class, - typeQName, ModelProcessingPhase.EFFECTIVE_MODEL); - typeAction.mutatesEffectiveCtx(stmt.getParentContext()); - - /* - * If the type does not exist, throw new InferenceException. - * Otherwise perform no operation. - */ - typeAction.apply(new InferenceAction() { - @Override - public void apply(final InferenceContext ctx) { - // Intentional NOOP - } - - @Override - public void prerequisiteFailed(final Collection> failed) { - InferenceException.throwIf(failed.contains(typePrereq), stmt.getStatementSourceReference(), - "Type [%s] was not found.", typeQName); - } - }); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - - @Override - public boolean hasArgumentSpecificSupports() { - return !ARGUMENT_SPECIFIC_SUPPORTS.isEmpty(); - } - - @Override - public StatementSupport getSupportSpecificForArgument(final String argument) { - return ARGUMENT_SPECIFIC_SUPPORTS.get(argument); - } - - @Override - public String internArgument(final String rawArgument) { - final String found = TypeUtils.findBuiltinString(rawArgument); - return found != null ? found : rawArgument; - } - } - - @Nonnull - @Override - public String getName() { - return argument(); - } -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypeUtils.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypeUtils.java index 8f832ca79c..d3e3148c24 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypeUtils.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypeUtils.java @@ -90,15 +90,20 @@ public final class TypeUtils { private static final Splitter PIPE_SPLITTER = Splitter.on('|').trimResults(); private static final Splitter TWO_DOTS_SPLITTER = Splitter.on("..").trimResults(); + // these objects are to compare whether range has MAX or MIN value + // none of these values should appear as Yang number according to spec so they are safe to use + private static final BigDecimal YANG_MIN_NUM = BigDecimal.valueOf(-Double.MAX_VALUE); + private static final BigDecimal YANG_MAX_NUM = BigDecimal.valueOf(Double.MAX_VALUE); + private TypeUtils() { } private static BigDecimal yangConstraintToBigDecimal(final Number number) { if (UnresolvedNumber.max().equals(number)) { - return RangeStatementImpl.YANG_MAX_NUM; + return YANG_MAX_NUM; } if (UnresolvedNumber.min().equals(number)) { - return RangeStatementImpl.YANG_MIN_NUM; + return YANG_MIN_NUM; } return new BigDecimal(number.toString()); @@ -207,6 +212,8 @@ public final class TypeUtils { return ranges; } + // Not used anywhere + @Deprecated public static boolean isYangTypeBodyStmtString(final String typeName) { return TYPE_BODY_STMTS.contains(typeName); } @@ -273,7 +280,7 @@ public final class TypeUtils { && isAnyDefaultValueMarkedWithIfFeature(typeStmt, defaultValues); } - static String findBuiltinString(final String rawArgument) { + public static String findBuiltinString(final String rawArgument) { return BUILT_IN_TYPES.get(rawArgument); } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypedefStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypedefStatementImpl.java deleted file mode 100644 index e149b628cf..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypedefStatementImpl.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.UnitsStatement; -import org.opendaylight.yangtools.yang.parser.spi.TypeNamespace; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.TypeDefEffectiveStatementImpl; - -public class TypedefStatementImpl extends AbstractDeclaredStatement implements TypedefStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .TYPEDEF) - .addOptional(YangStmtMapping.DEFAULT) - .addOptional(YangStmtMapping.DESCRIPTION) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addMandatory(YangStmtMapping.TYPE) - .addOptional(YangStmtMapping.UNITS) - .build(); - - protected TypedefStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends - AbstractQNameStatementSupport> { - - public Definition() { - super(YangStmtMapping.TYPEDEF); - } - - @Override - public QName parseArgumentValue(final StmtContext ctx, final String value) { - return StmtContextUtils.qnameFromArgument(ctx, value); - } - - @Override - public TypedefStatement createDeclared(final StmtContext ctx) { - return new TypedefStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new TypeDefEffectiveStatementImpl(ctx); - } - - @Override - public void onFullDefinitionDeclared(final StmtContext.Mutable> stmt) { - super.onFullDefinitionDeclared(stmt); - - if (stmt != null && stmt.getParentContext() != null) { - final StmtContext existing = stmt.getParentContext() - .getFromNamespace(TypeNamespace.class, stmt.getStatementArgument()); - SourceException.throwIf(existing != null, stmt.getStatementSourceReference(), - "Duplicate name for typedef %s", stmt.getStatementArgument()); - - stmt.getParentContext().addContext(TypeNamespace.class, stmt.getStatementArgument(), stmt); - } - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nullable - @Override - public StatusStatement getStatus() { - return firstDeclared(StatusStatement.class); - } - - @Nullable - @Override - public DescriptionStatement getDescription() { - return firstDeclared(DescriptionStatement.class); - } - - @Nullable - @Override - public ReferenceStatement getReference() { - return firstDeclared(ReferenceStatement.class); - } - - @Nonnull - @Override - public TypeStatement getType() { - return firstDeclared(TypeStatement.class); - } - - @Override - public UnitsStatement getUnits() { - return firstDeclared(UnitsStatement.class); - } - - @Nonnull - @Override - public QName getName() { - return argument(); - } - - @Nullable - @Override - public DefaultStatement getDefault() { - return firstDeclared(DefaultStatement.class); - } -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UnionSpecificationImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UnionSpecificationImpl.java deleted file mode 100644 index bcea2e72e8..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UnionSpecificationImpl.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import java.util.Collection; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.UnionSpecification; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.UnionSpecificationEffectiveStatementImpl; - -public class UnionSpecificationImpl extends AbstractDeclaredStatement - implements UnionSpecification { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .TYPE) - .addMultiple(YangStmtMapping.TYPE) - .build(); - - protected UnionSpecificationImpl( - final StmtContext context) { - super(context); - } - - public static class Definition extends - AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.TYPE); - } - - @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; - } - - @Override - public UnionSpecification createDeclared(final StmtContext ctx) { - return new UnionSpecificationImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new UnionSpecificationEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public String getName() { - return argument(); - } - - @Nonnull - @Override - public Collection getTypes() { - return allDeclared(TypeStatement.class); - } - -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UniqueStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UniqueStatementImpl.java deleted file mode 100644 index 4bf4d27776..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UniqueStatementImpl.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import java.util.Collection; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; -import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Relative; -import org.opendaylight.yangtools.yang.model.api.stmt.UniqueStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.UniqueEffectiveStatementImpl; - -public class UniqueStatementImpl extends AbstractDeclaredStatement> - implements UniqueStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .UNIQUE) - .build(); - - protected UniqueStatementImpl( - final StmtContext, UniqueStatement, ?> context) { - super(context); - } - - public static class Definition - extends AbstractStatementSupport, UniqueStatement, - EffectiveStatement, UniqueStatement>> { - - public Definition() { - super(YangStmtMapping.UNIQUE); - } - - @Override - public Collection parseArgumentValue(final StmtContext ctx, - final String value) { - final Collection uniqueConstraints = Utils.parseUniqueConstraintArgument(ctx, value); - SourceException.throwIf(uniqueConstraints.isEmpty(), ctx.getStatementSourceReference(), - "Invalid argument value '%s' of unique statement. The value must contains at least " - + "one descendant schema node identifier.", value); - return uniqueConstraints; - } - - @Override - public UniqueStatement createDeclared(final StmtContext, UniqueStatement, ?> ctx) { - return new UniqueStatementImpl(ctx); - } - - @Override - public EffectiveStatement, UniqueStatement> createEffective( - final StmtContext, UniqueStatement, - EffectiveStatement, UniqueStatement>> ctx) { - return new UniqueEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public Collection getTag() { - return argument(); - } -} 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 deleted file mode 100644 index 153c24002f..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UnitsStatementImpl.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.UnitsStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.UnitsEffectiveStatementImpl; - -public class UnitsStatementImpl extends AbstractDeclaredStatement - implements UnitsStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .UNITS) - .build(); - - protected UnitsStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition - extends - AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.UNITS); - } - - @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; - } - - @Override - public UnitsStatement createDeclared( - final StmtContext ctx) { - return new UnitsStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new UnitsEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public String getName() { - return argument(); - } - -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UnrecognizedStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UnrecognizedStatementImpl.java deleted file mode 100644 index dd8ce0d93d..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UnrecognizedStatementImpl.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import java.util.Optional; -import javax.annotation.Nullable; -import org.opendaylight.yangtools.yang.common.QName; -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.UnrecognizedStatement; -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.StatementSupport; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.UnrecognizedEffectiveStatementImpl; - -public final class UnrecognizedStatementImpl extends AbstractDeclaredStatement - implements UnrecognizedStatement { - - protected UnrecognizedStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends AbstractStatementSupport> { - - public Definition(final StatementDefinition publicDefinition) { - super(publicDefinition); - } - - @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; - } - - @Override - public UnrecognizedStatement createDeclared(final StmtContext ctx) { - return new UnrecognizedStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new UnrecognizedEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return null; - } - - @Override - public Optional> getUnknownStatementDefinitionOf( - final StatementDefinition yangStmtDef) { - final QName baseQName = getStatementName(); - final QName argumentName = yangStmtDef.getArgumentName(); - return Optional.of(new ModelDefinedStatementSupport(new ModelDefinedStatementDefinition( - QName.create(baseQName, yangStmtDef.getStatementName().getLocalName()), - argumentName != null ? QName.create(baseQName, argumentName.getLocalName()) : null, - yangStmtDef.isArgumentYinElement()))); - } - } - - @Nullable - @Override - public String getArgument() { - return argument(); - } -} 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 693bfd5c49..a729520b56 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 @@ -13,7 +13,6 @@ import static org.opendaylight.yangtools.yang.common.YangConstants.YANG_XPATH_FU import com.google.common.base.CharMatcher; import com.google.common.base.Splitter; import com.google.common.collect.ImmutableBiMap; -import com.google.common.collect.ImmutableSet; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -105,24 +104,11 @@ public final class Utils { return keyNodes; } - static Collection parseUniqueConstraintArgument(final StmtContext ctx, - final String argumentValue) { - final Set uniqueConstraintNodes = new HashSet<>(); - for (final String uniqueArgToken : SPACE_SPLITTER.split(argumentValue)) { - final SchemaNodeIdentifier nodeIdentifier = nodeIdentifierFromPath(ctx, uniqueArgToken); - SourceException.throwIf(nodeIdentifier.isAbsolute(), ctx.getStatementSourceReference(), - "Unique statement argument '%s' contains schema node identifier '%s' " - + "which is not in the descendant node identifier form.", argumentValue, uniqueArgToken); - uniqueConstraintNodes.add((SchemaNodeIdentifier.Relative) nodeIdentifier); - } - return ImmutableSet.copyOf(uniqueConstraintNodes); - } - private static String trimSingleLastSlashFromXPath(final String path) { return path.endsWith("/") ? path.substring(0, path.length() - 1) : path; } - static RevisionAwareXPath parseXPath(final StmtContext ctx, final String path) { + public static RevisionAwareXPath parseXPath(final StmtContext ctx, final String path) { final XPath xPath = XPATH_FACTORY.get().newXPath(); xPath.setNamespaceContext(StmtNamespaceContext.create(ctx, ImmutableBiMap.of(RFC6020_YANG_NAMESPACE.toString(), YANG_XPATH_FUNCTIONS_PREFIX))); @@ -279,7 +265,7 @@ public final class Utils { node); } - static @Nonnull Boolean parseBoolean(final StmtContext ctx, final String input) { + public static @Nonnull Boolean parseBoolean(final StmtContext ctx, final String input) { if ("true".equals(input)) { return Boolean.TRUE; } else if ("false".equals(input)) { @@ -291,7 +277,7 @@ public final class Utils { } } - static String internBoolean(final String input) { + public static String internBoolean(final String input) { if ("true".equals(input)) { return "true"; } else if ("false".equals(input)) { 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 deleted file mode 100644 index 4782ea6544..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ValueStatementImpl.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ValueStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ValueEffectiveStatementImpl; - -public class ValueStatementImpl extends AbstractDeclaredStatement implements ValueStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.VALUE).build(); - - protected ValueStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends - AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.VALUE); - } - - @Override - public Integer parseArgumentValue(final StmtContext ctx, final String value) { - try { - return Integer.valueOf(value); - } catch (NumberFormatException e) { - throw new SourceException(ctx.getStatementSourceReference(), e, - "%s is not valid value statement integer argument in a range of -2147483648..2147483647", value); - } - } - - @Override - public ValueStatement createDeclared(final StmtContext ctx) { - return new ValueStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new ValueEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Override - public int getValue() { - return argument(); - } -} 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 deleted file mode 100644 index 6a61c9a8ad..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/WhenStatementImpl.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -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.WhenStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.WhenEffectiveStatementImpl; - -public class WhenStatementImpl extends AbstractDeclaredStatement implements WhenStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .WHEN) - .addOptional(YangStmtMapping.DESCRIPTION) - .addOptional(YangStmtMapping.REFERENCE) - .build(); - - protected WhenStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.WHEN); - } - - @Override - public RevisionAwareXPath parseArgumentValue(final StmtContext ctx, final String value) { - return Utils.parseXPath(ctx, value); - } - - @Override - public WhenStatement createDeclared(final StmtContext ctx) { - return new WhenStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new WhenEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public RevisionAwareXPath getCondition() { - return argument(); - } - - @Nullable - @Override - public DescriptionStatement getDescription() { - return firstDeclared(DescriptionStatement.class); - } - - @Nullable - @Override - public ReferenceStatement getReference() { - return firstDeclared(ReferenceStatement.class); - } -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YangInferencePipeline.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YangInferencePipeline.java index 5a9cec9e57..50ea3013e5 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YangInferencePipeline.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YangInferencePipeline.java @@ -20,6 +20,96 @@ import java.util.Map; import java.util.Set; import org.opendaylight.yangtools.yang.common.YangVersion; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.action.ActionStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.anydata.AnydataStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.anyxml.AnyxmlStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.argument.ArgumentStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.augment.AugmentStatementRFC6020Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.augment.AugmentStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.base.BaseStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.belongs_to.BelongsToStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.bit.BitStatementRFC6020Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.bit.BitStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.case_.CaseStatementRFC6020Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.case_.CaseStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.choice.ChoiceStatementRFC6020Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.choice.ChoiceStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.config.ConfigStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.contact.ContactStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.container.ContainerStatementRFC6020Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.container.ContainerStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.default_.DefaultStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.description.DescriptionStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.deviate.DeviateStatementRFC6020Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.deviate.DeviateStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.deviation.DeviationStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.enum_.EnumStatementRFC6020Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.enum_.EnumStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.error_app_tag.ErrorAppTagStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.error_message.ErrorMessageStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.extension.ExtensionStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.feature.FeatureStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.fraction_digits.FractionDigitsStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.grouping.GroupingStatementRFC6020Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.grouping.GroupingStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.identity.IdentityStatementRFC6020Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.identity.IdentityStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.if_feature.IfFeatureStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.import_.ImportStatementRFC6020Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.import_.ImportStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.include.IncludeStatementRFC6020Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.include.IncludeStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.input.InputStatementRFC6020Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.input.InputStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.key.KeyStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf.LeafStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf_list.LeafListStatementRFC6020Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf_list.LeafListStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.length.LengthStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.list.ListStatementRFC6020Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.list.ListStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.mandatory.MandatoryStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.max_elements.MaxElementsStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.min_elements.MinElementsStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.modifier.ModifierStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.module.ModuleStatementRFC6020Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.module.ModuleStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.must.MustStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.namespace.NamespaceStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.notification.NotificationStatementRFC6020Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.notification.NotificationStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.ordered_by.OrderedByStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.organization.OrganizationStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.output.OutputStatementRFC6020Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.output.OutputStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.path.PathStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.pattern.PatternStatementRFC6020Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.pattern.PatternStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.position.PositionStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.prefix.PrefixStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.presence.PresenceStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.range.RangeStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.reference.ReferenceStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.refine.RefineStatementRFC6020Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.refine.RefineStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.require_instance.RequireInstanceStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.revision.RevisionStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.revision_date.RevisionDateStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.rpc.RpcStatementRFC6020Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.rpc.RpcStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.status.StatusStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.submodule.SubmoduleStatementRFC6020Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.submodule.SubmoduleStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type.TypeStatementRFC6020Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type.TypeStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.typedef.TypedefStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.unique.UniqueStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.units.UnitsStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.uses.UsesStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.value.ValueStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.when.WhenStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.yang_version.YangVersionStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.yin_element.YinElementStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.ExtensionNamespace; import org.opendaylight.yangtools.yang.parser.spi.GroupingNamespace; import org.opendaylight.yangtools.yang.parser.spi.IdentityNamespace; @@ -63,31 +153,6 @@ import org.opendaylight.yangtools.yang.parser.stmt.anyxmlschema.AnyxmlSchemaLoca import org.opendaylight.yangtools.yang.parser.stmt.openconfig.OpenconfigVersionSupport; import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor; import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor.Builder; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.ActionStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.AnydataStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.AugmentStatementRfc7950Support; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.BitStatementRfc7950Support; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.CaseStatementRfc7950Support; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.ChoiceStatementRfc7950Support; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.ContainerStatementRfc7950Support; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.DeviateStatementRfc7950Support; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.EnumStatementRfc7950Support; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.GroupingStatementRfc7950Support; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.IdentityStatementRfc7950Support; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.ImportStatementRfc7950Support; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.IncludeStatementRfc7950Support; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.InputStatementRfc7950Support; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.LeafListStatementRfc7950Support; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.ListStatementRfc7950Support; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.ModifierStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.ModuleStatementRfc7950Support; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.NotificationStatementRfc7950Support; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.OutputStatementRfc7950Support; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.PatternStatementRfc7950Support; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.RefineStatementRfc7950Support; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.RpcStatementRfc7950Support; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.SubmoduleStatementRfc7950Support; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.TypeStatementRfc7950Support; import org.opendaylight.yangtools.yang.parser.stmt.rfc8040.YangDataStatementSupport; public final class YangInferencePipeline { @@ -101,20 +166,20 @@ public final class YangInferencePipeline { public static final StatementSupportBundle PRE_LINKAGE_BUNDLE = StatementSupportBundle .derivedFrom(INIT_BUNDLE) - .addVersionSpecificSupport(VERSION_1, new ModuleStatementSupport()) - .addVersionSpecificSupport(VERSION_1_1, new ModuleStatementRfc7950Support()) - .addVersionSpecificSupport(VERSION_1, new SubmoduleStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1_1, new SubmoduleStatementRfc7950Support()) - .addSupport(new NamespaceStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1, new ImportStatementDefinition()) - .addVersionSpecificSupport(VERSION_1_1, new ImportStatementRfc7950Support()) - .addVersionSpecificSupport(VERSION_1, new IncludeStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1_1, new IncludeStatementRfc7950Support()) - .addSupport(new BelongsToStatementImpl.Definition()) - .addSupport(new PrefixStatementImpl.Definition()) - .addSupport(new YangVersionStatementImpl.Definition()) - .addSupport(new RevisionStatementImpl.Definition()) - .addSupport(new RevisionDateStatementImpl.Definition()) + .addVersionSpecificSupport(VERSION_1, new ModuleStatementRFC6020Support()) + .addVersionSpecificSupport(VERSION_1_1, new ModuleStatementRFC7950Support()) + .addVersionSpecificSupport(VERSION_1, new SubmoduleStatementRFC6020Support()) + .addVersionSpecificSupport(VERSION_1_1, new SubmoduleStatementRFC7950Support()) + .addSupport(new NamespaceStatementSupport()) + .addVersionSpecificSupport(VERSION_1, new ImportStatementRFC6020Support()) + .addVersionSpecificSupport(VERSION_1_1, new ImportStatementRFC7950Support()) + .addVersionSpecificSupport(VERSION_1, new IncludeStatementRFC6020Support()) + .addVersionSpecificSupport(VERSION_1_1, new IncludeStatementRFC7950Support()) + .addSupport(new BelongsToStatementSupport()) + .addSupport(new PrefixStatementSupport()) + .addSupport(new YangVersionStatementSupport()) + .addSupport(new RevisionStatementSupport()) + .addSupport(new RevisionDateStatementSupport()) .addSupport(global(ModuleNameToNamespace.class)) .addSupport(global(PreLinkageModuleNamespace.class)) .addSupport(sourceLocal(ImpPrefixToNamespace.class)) @@ -123,10 +188,10 @@ public final class YangInferencePipeline { public static final StatementSupportBundle LINKAGE_BUNDLE = StatementSupportBundle .derivedFrom(PRE_LINKAGE_BUNDLE) - .addSupport(new DescriptionStatementImpl.Definition()) - .addSupport(new ReferenceStatementImpl.Definition()) - .addSupport(new ContactStatementImpl.Definition()) - .addSupport(new OrganizationStatementImpl.Definition()) + .addSupport(new DescriptionStatementSupport()) + .addSupport(new ReferenceStatementSupport()) + .addSupport(new ContactStatementSupport()) + .addSupport(new OrganizationStatementSupport()) .addSupport(global(ModuleNamespace.class)) .addSupport(global(ModuleNamespaceForBelongsTo.class)) .addSupport(global(SubmoduleNamespace.class)) @@ -153,91 +218,91 @@ public final class YangInferencePipeline { public static final StatementSupportBundle STMT_DEF_BUNDLE = StatementSupportBundle .derivedFrom(LINKAGE_BUNDLE) - .addSupport(new YinElementStatementImpl.Definition()) - .addSupport(new ArgumentStatementImpl.Definition()) - .addSupport(new ExtensionStatementImpl.Definition()) + .addSupport(new YinElementStatementSupport()) + .addSupport(new ArgumentStatementSupport()) + .addSupport(new ExtensionStatementSupport()) .addSupport(new ChildSchemaNodes<>()) .addSupport(new SchemaNodeIdentifierBuildNamespace()) .addSupport(global(ExtensionNamespace.class)) - .addSupport(new TypedefStatementImpl.Definition()) + .addSupport(new TypedefStatementSupport()) .addSupport(treeScoped(TypeNamespace.class)) - .addVersionSpecificSupport(VERSION_1, new IdentityStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1_1, new IdentityStatementRfc7950Support()) + .addVersionSpecificSupport(VERSION_1, new IdentityStatementRFC6020Support()) + .addVersionSpecificSupport(VERSION_1_1, new IdentityStatementRFC7950Support()) .addSupport(global(IdentityNamespace.class)) - .addSupport(new DefaultStatementImpl.Definition()) - .addSupport(new StatusStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1, new TypeStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1_1, new TypeStatementRfc7950Support()) - .addSupport(new UnitsStatementImpl.Definition()) - .addSupport(new RequireInstanceStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1, new BitStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1_1, new BitStatementRfc7950Support()) - .addSupport(new PathStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1, new EnumStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1_1, new EnumStatementRfc7950Support()) - .addSupport(new LengthStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1, new PatternStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1_1, new PatternStatementRfc7950Support()) - .addVersionSpecificSupport(VERSION_1_1, new ModifierStatementImpl.Definition()) - .addSupport(new RangeStatementImpl.Definition()) - .addSupport(new KeyStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1, new ContainerStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1_1, new ContainerStatementRfc7950Support()) - .addVersionSpecificSupport(VERSION_1, new GroupingStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1_1, new GroupingStatementRfc7950Support()) - .addVersionSpecificSupport(VERSION_1, new ListStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1_1, new ListStatementRfc7950Support()) - .addSupport(new UniqueStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1_1, new ActionStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1, new RpcStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1_1, new RpcStatementRfc7950Support()) - .addVersionSpecificSupport(VERSION_1, new InputStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1_1, new InputStatementRfc7950Support()) - .addVersionSpecificSupport(VERSION_1, new OutputStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1_1, new OutputStatementRfc7950Support()) - .addVersionSpecificSupport(VERSION_1, new NotificationStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1_1, new NotificationStatementRfc7950Support()) - .addSupport(new FractionDigitsStatementImpl.Definition()) - .addSupport(new BaseStatementImpl.Definition()) + .addSupport(new DefaultStatementSupport()) + .addSupport(new StatusStatementSupport()) + .addVersionSpecificSupport(VERSION_1, new TypeStatementRFC6020Support()) + .addVersionSpecificSupport(VERSION_1_1, new TypeStatementRFC7950Support()) + .addSupport(new UnitsStatementSupport()) + .addSupport(new RequireInstanceStatementSupport()) + .addVersionSpecificSupport(VERSION_1, new BitStatementRFC6020Support()) + .addVersionSpecificSupport(VERSION_1_1, new BitStatementRFC7950Support()) + .addSupport(new PathStatementSupport()) + .addVersionSpecificSupport(VERSION_1, new EnumStatementRFC6020Support()) + .addVersionSpecificSupport(VERSION_1_1, new EnumStatementRFC7950Support()) + .addSupport(new LengthStatementSupport()) + .addVersionSpecificSupport(VERSION_1, new PatternStatementRFC6020Support()) + .addVersionSpecificSupport(VERSION_1_1, new PatternStatementRFC7950Support()) + .addVersionSpecificSupport(VERSION_1_1, new ModifierStatementSupport()) + .addSupport(new RangeStatementSupport()) + .addSupport(new KeyStatementSupport()) + .addVersionSpecificSupport(VERSION_1, new ContainerStatementRFC6020Support()) + .addVersionSpecificSupport(VERSION_1_1, new ContainerStatementRFC7950Support()) + .addVersionSpecificSupport(VERSION_1, new GroupingStatementRFC6020Support()) + .addVersionSpecificSupport(VERSION_1_1, new GroupingStatementRFC7950Support()) + .addVersionSpecificSupport(VERSION_1, new ListStatementRFC6020Support()) + .addVersionSpecificSupport(VERSION_1_1, new ListStatementRFC7950Support()) + .addSupport(new UniqueStatementSupport()) + .addVersionSpecificSupport(VERSION_1_1, new ActionStatementSupport()) + .addVersionSpecificSupport(VERSION_1, new RpcStatementRFC6020Support()) + .addVersionSpecificSupport(VERSION_1_1, new RpcStatementRFC7950Support()) + .addVersionSpecificSupport(VERSION_1, new InputStatementRFC6020Support()) + .addVersionSpecificSupport(VERSION_1_1, new InputStatementRFC7950Support()) + .addVersionSpecificSupport(VERSION_1, new OutputStatementRFC6020Support()) + .addVersionSpecificSupport(VERSION_1_1, new OutputStatementRFC7950Support()) + .addVersionSpecificSupport(VERSION_1, new NotificationStatementRFC6020Support()) + .addVersionSpecificSupport(VERSION_1_1, new NotificationStatementRFC7950Support()) + .addSupport(new FractionDigitsStatementSupport()) + .addSupport(new BaseStatementSupport()) .addSupport(global(DerivedIdentitiesNamespace.class)) .addSupport(global(StatementDefinitionNamespace.class)) .build(); public static final StatementSupportBundle FULL_DECL_BUNDLE = StatementSupportBundle .derivedFrom(STMT_DEF_BUNDLE) - .addSupport(new LeafStatementImpl.Definition()) - .addSupport(new ConfigStatementImpl.Definition()) - .addSupport(new DeviationStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1, new DeviateStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1_1, new DeviateStatementRfc7950Support()) - .addVersionSpecificSupport(VERSION_1, new ChoiceStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1_1, new ChoiceStatementRfc7950Support()) - .addVersionSpecificSupport(VERSION_1, new CaseStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1_1, new CaseStatementRfc7950Support()) - .addSupport(new MustStatementImpl.Definition()) - .addSupport(new MandatoryStatementImpl.Definition()) - .addSupport(new AnyxmlStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1_1, new AnydataStatementImpl.Definition()) - .addSupport(new IfFeatureStatementImpl.Definition()) - .addSupport(new UsesStatementImpl.Definition()) + .addSupport(new LeafStatementSupport()) + .addSupport(new ConfigStatementSupport()) + .addSupport(new DeviationStatementSupport()) + .addVersionSpecificSupport(VERSION_1, new DeviateStatementRFC6020Support()) + .addVersionSpecificSupport(VERSION_1_1, new DeviateStatementRFC7950Support()) + .addVersionSpecificSupport(VERSION_1, new ChoiceStatementRFC6020Support()) + .addVersionSpecificSupport(VERSION_1_1, new ChoiceStatementRFC7950Support()) + .addVersionSpecificSupport(VERSION_1, new CaseStatementRFC6020Support()) + .addVersionSpecificSupport(VERSION_1_1, new CaseStatementRFC7950Support()) + .addSupport(new MustStatementSupport()) + .addSupport(new MandatoryStatementSupport()) + .addSupport(new AnyxmlStatementSupport()) + .addVersionSpecificSupport(VERSION_1_1, new AnydataStatementSupport()) + .addSupport(new IfFeatureStatementSupport()) + .addSupport(new UsesStatementSupport()) .addSupport(treeScoped(GroupingNamespace.class)) //treeScoped - .addSupport(new ErrorMessageStatementImpl.Definition()) - .addSupport(new ErrorAppTagStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1, new LeafListStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1_1, new LeafListStatementRfc7950Support()) - .addSupport(new PresenceStatementImpl.Definition()) - .addSupport(new MaxElementsStatementImpl.Definition()) - .addSupport(new MinElementsStatementImpl.Definition()) - .addSupport(new OrderedByStatementImpl.Definition()) - .addSupport(new WhenStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1, new AugmentStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1_1, new AugmentStatementRfc7950Support()) + .addSupport(new ErrorMessageStatementSupport()) + .addSupport(new ErrorAppTagStatementSupport()) + .addVersionSpecificSupport(VERSION_1, new LeafListStatementRFC6020Support()) + .addVersionSpecificSupport(VERSION_1_1, new LeafListStatementRFC7950Support()) + .addSupport(new PresenceStatementSupport()) + .addSupport(new MaxElementsStatementSupport()) + .addSupport(new MinElementsStatementSupport()) + .addSupport(new OrderedByStatementSupport()) + .addSupport(new WhenStatementSupport()) + .addVersionSpecificSupport(VERSION_1, new AugmentStatementRFC6020Support()) + .addVersionSpecificSupport(VERSION_1_1, new AugmentStatementRFC7950Support()) .addSupport(treeScoped(AugmentToChoiceNamespace.class)) - .addVersionSpecificSupport(VERSION_1, new RefineStatementImpl.Definition()) - .addVersionSpecificSupport(VERSION_1_1, new RefineStatementRfc7950Support()) - .addSupport(new FeatureStatementImpl.Definition()) - .addSupport(new PositionStatementImpl.Definition()) - .addSupport(new ValueStatementImpl.Definition()) + .addVersionSpecificSupport(VERSION_1, new RefineStatementRFC6020Support()) + .addVersionSpecificSupport(VERSION_1_1, new RefineStatementRFC7950Support()) + .addSupport(new FeatureStatementSupport()) + .addSupport(new PositionStatementSupport()) + .addSupport(new ValueStatementSupport()) .addSupport(AnyxmlSchemaLocationSupport.getInstance()) .addSupport(treeScoped(AnyxmlSchemaLocationNamespace.class)) .addSupport(YangDataStatementSupport.getInstance()) 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 deleted file mode 100644 index f1cad558eb..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YangVersionStatementImpl.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.common.YangVersion; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionStatement; -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.meta.StmtContext.Mutable; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.YangVersionEffectiveStatementImpl; - -public class YangVersionStatementImpl extends AbstractDeclaredStatement implements YangVersionStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .YANG_VERSION) - .build(); - - protected YangVersionStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.YANG_VERSION); - } - - @Override - public YangVersion parseArgumentValue(final StmtContext ctx, final String value) { - return SourceException.unwrap(YangVersion.parse(value), ctx.getStatementSourceReference(), - "Unsupported YANG version %s", value); - } - - @Override - public YangVersionStatement createDeclared(final StmtContext ctx) { - return new YangVersionStatementImpl(ctx); - } - - @Override - public void onPreLinkageDeclared(final Mutable> stmt) { - stmt.setRootVersion(stmt.getStatementArgument()); - } - - @Override - public EffectiveStatement createEffective(final StmtContext> ctx) { - return new YangVersionEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public YangVersion getValue() { - return argument(); - } -} 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 deleted file mode 100644 index 752d1f2522..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YinElementStatementImpl.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; - -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.YinElementEffectiveStatementImpl; - -public class YinElementStatementImpl extends AbstractDeclaredStatement - implements YinElementStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.YIN_ELEMENT).build(); - - protected YinElementStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends - AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.YIN_ELEMENT); - } - - @Override - public Boolean parseArgumentValue(final StmtContext ctx, final String value) { - return Utils.parseBoolean(ctx, value); - } - - @Override - public YinElementStatement createDeclared(final StmtContext ctx) { - return new YinElementStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new YinElementEffectiveStatementImpl(ctx); - } - - @Override - public String internArgument(final String rawArgument) { - return Utils.internBoolean(rawArgument); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Override - public boolean getValue() { - return argument().booleanValue(); - } -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveDataSchemaNode.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveDataSchemaNode.java index b111cea7a8..12055f575e 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveDataSchemaNode.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveDataSchemaNode.java @@ -11,7 +11,7 @@ import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.AbstractEffectiveSchemaNode; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveSchemaNode; import org.opendaylight.yangtools.yang.parser.spi.meta.CopyHistory; import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveSimpleDataNodeContainer.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveSimpleDataNodeContainer.java index 94330bf8a9..ed04ee44c5 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveSimpleDataNodeContainer.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveSimpleDataNodeContainer.java @@ -24,6 +24,7 @@ import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveDocumentedDataNodeContainer; import org.opendaylight.yangtools.yang.parser.spi.meta.CopyHistory; import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/CaseShorthandImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/CaseShorthandImpl.java index 2b6b325c02..165bb8e8c0 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/CaseShorthandImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/CaseShorthandImpl.java @@ -31,14 +31,15 @@ import org.opendaylight.yangtools.yang.model.api.TypeDefinition; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; import org.opendaylight.yangtools.yang.model.api.UsesNode; -final class CaseShorthandImpl implements ChoiceCaseNode, DerivableSchemaNode { +// FIXME: hide this somewhere +public final class CaseShorthandImpl implements ChoiceCaseNode, DerivableSchemaNode { private final DataSchemaNode caseShorthandNode; private final ChoiceCaseNode original; private final SchemaPath path; private final boolean augmenting; - CaseShorthandImpl(final DataSchemaNode caseShorthandNode) { + public CaseShorthandImpl(final DataSchemaNode caseShorthandNode) { this.caseShorthandNode = requireNonNull(caseShorthandNode); this.path = requireNonNull(caseShorthandNode.getPath().getParent()); this.original = getOriginalIfPresent(caseShorthandNode); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/EffectiveConstraintDefinitionImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/EffectiveConstraintDefinitionImpl.java index 60ae7e057e..ed0cb28891 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/EffectiveConstraintDefinitionImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/EffectiveConstraintDefinitionImpl.java @@ -20,7 +20,7 @@ import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MinElementsEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.WhenEffectiveStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.EffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementBase; final class EffectiveConstraintDefinitionImpl implements ConstraintDefinition { private static final String UNBOUNDED_STR = "unbounded"; 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 6c5bf25553..ab63c6d1e9 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 @@ -32,7 +32,8 @@ import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; import org.opendaylight.yangtools.yang.model.api.stmt.UsesEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement; import org.opendaylight.yangtools.yang.model.api.stmt.WhenEffectiveStatement; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.AbstractEffectiveDocumentedNode; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveDocumentedNode; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.refine.RefineEffectiveStatementImpl; import org.opendaylight.yangtools.yang.parser.spi.GroupingNamespace; import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/IntegralTypeEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/IntegralTypeEffectiveStatementImpl.java deleted file mode 100644 index 3b2f340eed..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/IntegralTypeEffectiveStatementImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright (c) 2017 Pantheon Technologies, s.r.o. 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.type; - -import java.math.BigInteger; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement; -import org.opendaylight.yangtools.yang.model.api.type.Int16TypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.Int32TypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.Int64TypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.Int8TypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.RangeRestrictedTypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.Uint16TypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.Uint32TypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.Uint64TypeDefinition; -import org.opendaylight.yangtools.yang.model.api.type.Uint8TypeDefinition; -import org.opendaylight.yangtools.yang.model.util.type.InvalidRangeConstraintException; -import org.opendaylight.yangtools.yang.model.util.type.RangeRestrictedTypeBuilder; -import org.opendaylight.yangtools.yang.model.util.type.RestrictedTypes; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; -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.rfc6020.TypeUtils; - -public final class IntegralTypeEffectiveStatementImpl, - N extends Number & Comparable> extends DeclaredEffectiveStatementBase - implements TypeEffectiveStatement { - - private final T typeDefinition; - - private IntegralTypeEffectiveStatementImpl( - final StmtContext> ctx, - final RangeRestrictedTypeBuilder builder) { - super(ctx); - - for (EffectiveStatement stmt : effectiveSubstatements()) { - if (stmt instanceof RangeEffectiveStatementImpl) { - final RangeEffectiveStatementImpl rangeStmt = (RangeEffectiveStatementImpl)stmt; - builder.setRangeConstraint(rangeStmt, rangeStmt.argument()); - } - if (stmt instanceof UnknownSchemaNode) { - builder.addUnknownSchemaNode((UnknownSchemaNode)stmt); - } - } - - try { - typeDefinition = builder.build(); - } catch (InvalidRangeConstraintException e) { - throw new SourceException(ctx.getStatementSourceReference(), e, "Invalid range constraint: %s", - e.getOffendingRanges()); - } - } - - public static IntegralTypeEffectiveStatementImpl create( - final StmtContext> ctx, - final Int8TypeDefinition baseType) { - return new IntegralTypeEffectiveStatementImpl<>(ctx, RestrictedTypes.newInt8Builder(baseType, - TypeUtils.typeEffectiveSchemaPath(ctx))); - } - - public static IntegralTypeEffectiveStatementImpl create( - final StmtContext> ctx, - final Int16TypeDefinition baseType) { - return new IntegralTypeEffectiveStatementImpl<>(ctx, RestrictedTypes.newInt16Builder(baseType, - TypeUtils.typeEffectiveSchemaPath(ctx))); - } - - public static IntegralTypeEffectiveStatementImpl create( - final StmtContext> ctx, - final Int32TypeDefinition baseType) { - return new IntegralTypeEffectiveStatementImpl<>(ctx, RestrictedTypes.newInt32Builder(baseType, - TypeUtils.typeEffectiveSchemaPath(ctx))); - } - - public static IntegralTypeEffectiveStatementImpl create( - final StmtContext> ctx, - final Int64TypeDefinition baseType) { - return new IntegralTypeEffectiveStatementImpl<>(ctx, RestrictedTypes.newInt64Builder(baseType, - TypeUtils.typeEffectiveSchemaPath(ctx))); - } - - public static IntegralTypeEffectiveStatementImpl create( - final StmtContext> ctx, - final Uint8TypeDefinition baseType) { - return new IntegralTypeEffectiveStatementImpl<>(ctx, RestrictedTypes.newUint8Builder(baseType, - TypeUtils.typeEffectiveSchemaPath(ctx))); - } - - public static IntegralTypeEffectiveStatementImpl create( - final StmtContext> ctx, - final Uint16TypeDefinition baseType) { - return new IntegralTypeEffectiveStatementImpl<>(ctx, RestrictedTypes.newUint16Builder(baseType, - TypeUtils.typeEffectiveSchemaPath(ctx))); - } - - public static IntegralTypeEffectiveStatementImpl create( - final StmtContext> ctx, - final Uint32TypeDefinition baseType) { - return new IntegralTypeEffectiveStatementImpl<>(ctx, RestrictedTypes.newUint32Builder(baseType, - TypeUtils.typeEffectiveSchemaPath(ctx))); - } - - public static IntegralTypeEffectiveStatementImpl create( - final StmtContext> ctx, - final Uint64TypeDefinition baseType) { - return new IntegralTypeEffectiveStatementImpl<>(ctx, RestrictedTypes.newUint64Builder(baseType, - TypeUtils.typeEffectiveSchemaPath(ctx))); - } - - @Nonnull - @Override - public T getTypeDefinition() { - return typeDefinition; - } -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/NumericalRestrictionsEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/NumericalRestrictionsEffectiveStatementImpl.java index 43eef278e0..8420182316 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/NumericalRestrictionsEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/NumericalRestrictionsEffectiveStatementImpl.java @@ -8,7 +8,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type; import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.NumericalRestrictions; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; public class NumericalRestrictionsEffectiveStatementImpl diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/StringRestrictionsEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/StringRestrictionsEffectiveStatementImpl.java index 8030937a79..99d89821b8 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/StringRestrictionsEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/type/StringRestrictionsEffectiveStatementImpl.java @@ -8,7 +8,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type; import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.StringRestrictions; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.DeclaredEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; public class StringRestrictionsEffectiveStatementImpl diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/ActionStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/ActionStatementImpl.java deleted file mode 100644 index f43c23de0d..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/ActionStatementImpl.java +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Copyright (c) 2016 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.rfc7950; - -import com.google.common.collect.ImmutableSet; -import java.util.Collection; -import java.util.Set; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -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.ActionStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; -import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.spi.source.ImplicitSubstatement; -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.reactor.StatementDefinitionContext; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ChildSchemaNodes; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.effective.ActionEffectiveStatementImpl; - -public class ActionStatementImpl extends AbstractDeclaredStatement implements ActionStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.ACTION) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.GROUPING) - .addAny(YangStmtMapping.IF_FEATURE) - .addOptional(YangStmtMapping.INPUT) - .addOptional(YangStmtMapping.OUTPUT) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addAny(YangStmtMapping.TYPEDEF) - .build(); - - protected ActionStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition - extends AbstractQNameStatementSupport> { - - private static final Set ILLEGAL_PARENTS = ImmutableSet.of(YangStmtMapping.NOTIFICATION, - YangStmtMapping.RPC, YangStmtMapping.ACTION); - private static final StatementSupport IMPLICIT_INPUT = new InputStatementRfc7950Support(); - private static final StatementSupport IMPLICIT_OUTPUT = new OutputStatementRfc7950Support(); - - public Definition() { - super(YangStmtMapping.ACTION); - } - - @Override - public QName parseArgumentValue(final StmtContext ctx, final String value) { - return StmtContextUtils.qnameFromArgument(ctx, value); - } - - @Override - public void onStatementAdded( - final StmtContext.Mutable> stmt) { - stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); - } - - @Override - public ActionStatement createDeclared( - final StmtContext ctx) { - return new ActionStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - SourceException.throwIf(StmtContextUtils.hasAncestorOfType(ctx, ILLEGAL_PARENTS), - ctx.getStatementSourceReference(), - "Action %s is defined within a notification, rpc or another action", ctx.getStatementArgument()); - SourceException.throwIf(!StmtContextUtils.hasAncestorOfTypeWithChildOfType(ctx, YangStmtMapping.LIST, - YangStmtMapping.KEY), ctx.getStatementSourceReference(), - "Action %s is defined within a list that has no key statement", ctx.getStatementArgument()); - SourceException.throwIf(StmtContextUtils.hasParentOfType(ctx, YangStmtMapping.CASE), - ctx.getStatementSourceReference(), "Action %s is defined within a case statement", - ctx.getStatementArgument()); - SourceException.throwIf(StmtContextUtils.hasParentOfType(ctx, YangStmtMapping.MODULE), - ctx.getStatementSourceReference(), "Action %s is defined at the top level of a module", - ctx.getStatementArgument()); - return new ActionEffectiveStatementImpl(ctx); - } - - @Override - public void onFullDefinitionDeclared(final StmtContext.Mutable> stmt) { - super.onFullDefinitionDeclared(stmt); - - if (StmtContextUtils.findFirstDeclaredSubstatement(stmt, InputStatement.class) == null) { - addImplicitStatement((StatementContextBase) stmt, IMPLICIT_INPUT); - } - - if (StmtContextUtils.findFirstDeclaredSubstatement(stmt, OutputStatement.class) == null) { - addImplicitStatement((StatementContextBase) stmt, IMPLICIT_OUTPUT); - } - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - - private static void addImplicitStatement(final StatementContextBase parent, - final StatementSupport statementToAdd) { - final StatementDefinitionContext stmtDefCtx = new StatementDefinitionContext<>(statementToAdd); - - parent.createSubstatement(parent.declaredSubstatements().size(), stmtDefCtx, - ImplicitSubstatement.of(parent.getStatementSourceReference()), null); - } - } - - @Override - public QName getName() { - return argument(); - } - - @Nonnull - @Override - public Collection getTypedefs() { - return allDeclared(TypedefStatement.class); - } - - @Nonnull - @Override - public Collection getGroupings() { - return allDeclared(GroupingStatement.class); - } - - @Nullable - @Override - public StatusStatement getStatus() { - return firstDeclared(StatusStatement.class); - } - - @Nullable - @Override - public DescriptionStatement getDescription() { - return firstDeclared(DescriptionStatement.class); - } - - @Nullable - @Override - public ReferenceStatement getReference() { - return firstDeclared(ReferenceStatement.class); - } - - @Override - public InputStatement getInput() { - return firstDeclared(InputStatement.class); - } - - @Override - public OutputStatement getOutput() { - return firstDeclared(OutputStatement.class); - } - - @Nonnull - @Override - public Collection getIfFeatures() { - return allDeclared(IfFeatureStatement.class); - } -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/AnydataStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/AnydataStatementImpl.java deleted file mode 100644 index 9a862dd1a1..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/AnydataStatementImpl.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright (c) 2016 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.rfc7950; - -import com.google.common.annotations.Beta; -import java.util.Collection; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.AnydataStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; -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.meta.StmtContextUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ChildSchemaNodes; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.effective.AnydataEffectiveStatementImpl; - -/** - * YANG 1.1 AnyData declared statement implementation. - */ -@Beta -public final class AnydataStatementImpl extends AbstractDeclaredStatement implements AnydataStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .ANYDATA) - .addOptional(YangStmtMapping.CONFIG) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.IF_FEATURE) - .addOptional(YangStmtMapping.MANDATORY) - .addAny(YangStmtMapping.MUST) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addOptional(YangStmtMapping.WHEN) - .build(); - - protected AnydataStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends - AbstractQNameStatementSupport> { - - public Definition() { - super(YangStmtMapping.ANYDATA); - } - - @Override - public QName parseArgumentValue(final StmtContext ctx, final String value) { - return StmtContextUtils.qnameFromArgument(ctx, value); - } - - @Override - public void onStatementAdded(final Mutable> stmt) { - stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt); - } - - @Override - public AnydataStatement createDeclared(final StmtContext ctx) { - return new AnydataStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new AnydataEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Override - public QName getName() { - return argument(); - } - - @Override - public WhenStatement getWhenStatement() { - return firstDeclared(WhenStatement.class); - } - - @Override - public Collection getIfFeatures() { - return allDeclared(IfFeatureStatement.class); - } - - @Override - public Collection getMusts() { - return allDeclared(MustStatement.class); - } - - @Override - public ConfigStatement getConfig() { - return firstDeclared(ConfigStatement.class); - } - - @Override - public StatusStatement getStatus() { - return firstDeclared(StatusStatement.class); - } - - @Override - public DescriptionStatement getDescription() { - return firstDeclared(DescriptionStatement.class); - } - - @Override - public ReferenceStatement getReference() { - return firstDeclared(ReferenceStatement.class); - } - - @Override - public MandatoryStatement getMandatory() { - return firstDeclared(MandatoryStatement.class); - } -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/ModifierStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/ModifierStatementImpl.java deleted file mode 100644 index f25292106a..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/ModifierStatementImpl.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2016 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.rfc7950; - -import com.google.common.annotations.Beta; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ModifierStatement; -import org.opendaylight.yangtools.yang.model.api.type.ModifierKind; -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.meta.SubstatementValidator; -import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.effective.ModifierEffectiveStatementImpl; - -/** - * Class providing necessary support for processing YANG 1.1 Modifier statement. - */ -@Beta -public final class ModifierStatementImpl extends AbstractDeclaredStatement implements ModifierStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.MODIFIER).build(); - - protected ModifierStatementImpl(final StmtContext context) { - super(context); - } - - public static class Definition extends AbstractStatementSupport> { - - public Definition() { - super(YangStmtMapping.MODIFIER); - } - - @Override - public ModifierKind parseArgumentValue(final StmtContext ctx, final String value) { - return SourceException.unwrap(ModifierKind.parse(value), ctx.getStatementSourceReference(), - "'%s' is not valid argument of modifier statement", value); - } - - @Override - public ModifierStatement createDeclared(final StmtContext ctx) { - return new ModifierStatementImpl(ctx); - } - - @Override - public EffectiveStatement createEffective( - final StmtContext> ctx) { - return new ModifierEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Nonnull - @Override - public ModifierKind getValue() { - return argument(); - } -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/effective/package-info.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/effective/package-info.java deleted file mode 100644 index 627fb4133d..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/effective/package-info.java +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright (c) 2017 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -/** - * Contains implementation of Rfc7950 effective statements. - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc7950.effective; \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/package-info.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/package-info.java deleted file mode 100644 index bafb852737..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/package-info.java +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Copyright (c) 2017 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -/** - * Contains implementation of statement supports for Rfc7950 statements - * and implementation of declared statements specific to Rfc7950. - */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc7950; \ No newline at end of file diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataEffectiveStatementImpl.java index a3c84c9837..6c5b269832 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataEffectiveStatementImpl.java @@ -18,7 +18,7 @@ import org.opendaylight.yangtools.rfc8040.model.api.YangDataStatement; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaPath; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.UnknownEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ContainerEffectiveStatementImpl; diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug6972Test.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug6972Test.java index 108fbdf62a..6a445e9042 100644 --- a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug6972Test.java +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug6972Test.java @@ -23,7 +23,6 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.LeafEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UnitsEffectiveStatement; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.UnitsEffectiveStatementImpl; public class Bug6972Test { @@ -43,22 +42,22 @@ public class Bug6972Test { final QName barFooCont = QName.create("bar-ns", "bar-foo", revision); final QName barFooLeaf = QName.create("bar-ns", "foo", revision); - final UnitsEffectiveStatementImpl unitsBar1 = getEffectiveUnits(bar, barExportCont, barFooLeaf); - final UnitsEffectiveStatementImpl unitsBar2 = getEffectiveUnits(bar, barFooCont, barFooLeaf); + final UnitsEffectiveStatement unitsBar1 = getEffectiveUnits(bar, barExportCont, barFooLeaf); + final UnitsEffectiveStatement unitsBar2 = getEffectiveUnits(bar, barFooCont, barFooLeaf); final QName bazExportCont = QName.create("baz-ns", "baz-export", revision); final QName bazFooCont = QName.create("baz-ns", "baz-foo", revision); final QName bazFooLeaf = QName.create("baz-ns", "foo", revision); - final UnitsEffectiveStatementImpl unitsBaz1 = getEffectiveUnits(baz, bazExportCont, bazFooLeaf); - final UnitsEffectiveStatementImpl unitsBaz2 = getEffectiveUnits(baz, bazFooCont, bazFooLeaf); + final UnitsEffectiveStatement unitsBaz1 = getEffectiveUnits(baz, bazExportCont, bazFooLeaf); + final UnitsEffectiveStatement unitsBaz2 = getEffectiveUnits(baz, bazFooCont, bazFooLeaf); assertTrue(unitsBar1 == unitsBar2 && unitsBar1 == unitsBaz1 && unitsBar1 == unitsBaz2); } - private static UnitsEffectiveStatementImpl getEffectiveUnits(final Module module, final QName containerQName, + private static UnitsEffectiveStatement getEffectiveUnits(final Module module, final QName containerQName, final QName leafQName) { - UnitsEffectiveStatementImpl units = null; + UnitsEffectiveStatement units = null; final ContainerSchemaNode cont = (ContainerSchemaNode) module.getDataChildByName(containerQName); assertNotNull(cont); @@ -67,7 +66,7 @@ public class Bug6972Test { for (EffectiveStatement effStmt : ((LeafEffectiveStatement) leaf).effectiveSubstatements()) { if (effStmt instanceof UnitsEffectiveStatement) { - units = (UnitsEffectiveStatementImpl) effStmt; + units = (UnitsEffectiveStatement) effStmt; break; } } diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/DeclaredStatementsTest.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/DeclaredStatementsTest.java index e4f190777f..e86b7f9e6c 100644 --- a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/DeclaredStatementsTest.java +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/DeclaredStatementsTest.java @@ -29,13 +29,17 @@ import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.Status; +import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.AugmentEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.AugmentStatement; import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement; import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DataDefinitionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement; @@ -50,6 +54,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ImportStatement; import org.opendaylight.yangtools.yang.model.api.stmt.IncludeStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement; import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceStatement; @@ -59,18 +64,13 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RevisionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement; import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement; import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.AnyxmlEffectiveStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.AugmentEffectiveStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ChoiceEffectiveStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ContainerEffectiveStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ModuleEffectiveStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.SubmoduleEffectiveStatementImpl; public class DeclaredStatementsTest { @@ -88,7 +88,7 @@ public class DeclaredStatementsTest { final AnyXmlSchemaNode anyxmlSchemaNode = (AnyXmlSchemaNode) testModule.getDataChildByName( QName.create(testModule.getQNameModule(), "foobar")); assertNotNull(anyxmlSchemaNode); - final AnyxmlStatement anyxmlStatement = ((AnyxmlEffectiveStatementImpl) anyxmlSchemaNode).getDeclared(); + final AnyxmlStatement anyxmlStatement = ((AnyxmlEffectiveStatement) anyxmlSchemaNode).getDeclared(); final QName name = anyxmlStatement.getName(); assertNotNull(name); @@ -158,7 +158,7 @@ public class DeclaredStatementsTest { final ChoiceSchemaNode choiceSchemaNode = (ChoiceSchemaNode) testModule.getDataChildByName( QName.create(testModule.getQNameModule(), "test-choice")); assertNotNull(choiceSchemaNode); - final ChoiceStatement choiceStatement = ((ChoiceEffectiveStatementImpl) choiceSchemaNode).getDeclared(); + final ChoiceStatement choiceStatement = ((ChoiceEffectiveStatement) choiceSchemaNode).getDeclared(); final QName name = choiceStatement.getName(); assertNotNull(name); @@ -228,7 +228,7 @@ public class DeclaredStatementsTest { assertEquals(1, augmentationSchemas.size()); final AugmentationSchemaNode augmentationSchema = augmentationSchemas.iterator().next(); - final AugmentStatement augmentStatement = ((AugmentEffectiveStatementImpl) augmentationSchema).getDeclared(); + final AugmentStatement augmentStatement = ((AugmentEffectiveStatement) augmentationSchema).getDeclared(); final SchemaNodeIdentifier targetNode = augmentStatement.getTargetNode(); assertNotNull(targetNode); @@ -253,7 +253,7 @@ public class DeclaredStatementsTest { final Module testModule = schemaContext.findModules("parent-module-declared-test").iterator().next(); assertNotNull(testModule); - final ModuleStatement moduleStatement = ((ModuleEffectiveStatementImpl) testModule).getDeclared(); + final ModuleStatement moduleStatement = ((ModuleEffectiveStatement) testModule).getDeclared(); final String moduleStatementName = moduleStatement.getName(); assertNotNull(moduleStatementName); @@ -279,7 +279,7 @@ public class DeclaredStatementsTest { assertEquals(1, submodules.size()); final Module submodule = submodules.iterator().next(); - final SubmoduleStatement submoduleStatement = ((SubmoduleEffectiveStatementImpl) submodule).getDeclared(); + final SubmoduleStatement submoduleStatement = ((SubmoduleEffectiveStatement) submodule).getDeclared(); final String submoduleStatementName = submoduleStatement.getName(); assertNotNull(submoduleStatementName); @@ -308,7 +308,7 @@ public class DeclaredStatementsTest { final Module testModule = schemaContext.findModule("root-module-declared-test", revision).get(); assertNotNull(testModule); - final ModuleStatement moduleStatement = ((ModuleEffectiveStatementImpl) testModule).getDeclared(); + final ModuleStatement moduleStatement = ((ModuleEffectiveStatement) testModule).getDeclared(); assertEquals(1, moduleStatement.getImports().size()); final ImportStatement importStatement = moduleStatement.getImports().iterator().next(); @@ -383,7 +383,7 @@ public class DeclaredStatementsTest { QName.create(testModule.getQNameModule(), "test-container")); assertNotNull(containerSchemaNode); final ContainerStatement containerStatement = - ((ContainerEffectiveStatementImpl) containerSchemaNode).getDeclared(); + ((ContainerEffectiveStatement) containerSchemaNode).getDeclared(); final QName name = containerStatement.getName(); assertNotNull(name); diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/EffectiveStatementTypeTest.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/EffectiveStatementTypeTest.java index 241d3827c2..a506fb48e1 100644 --- a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/EffectiveStatementTypeTest.java +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/EffectiveStatementTypeTest.java @@ -25,6 +25,7 @@ import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.Status; +import org.opendaylight.yangtools.yang.model.api.stmt.LeafEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition; @@ -38,18 +39,17 @@ import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint; +import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint; import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition; import org.opendaylight.yangtools.yang.parser.impl.DefaultReactors; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type.BitsSpecificationEffectiveStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type.Decimal64SpecificationEffectiveStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type.EnumSpecificationEffectiveStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type.IdentityRefSpecificationEffectiveStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type.LeafrefSpecificationEffectiveStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type.UnionSpecificationEffectiveStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.LeafEffectiveStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.BitsSpecificationEffectiveStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.Decimal64SpecificationEffectiveStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.EnumSpecificationEffectiveStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.IdentityRefSpecificationEffectiveStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.LeafrefSpecificationEffectiveStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.PatternConstraintEffectiveImpl; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.UnionSpecificationEffectiveStatementImpl; public class EffectiveStatementTypeTest { private static SchemaContext effectiveSchemaContext; @@ -72,7 +72,7 @@ public class EffectiveStatementTypeTest { assertNotNull(currentLeaf.getType()); final BinaryTypeDefinition binaryEff = (BinaryTypeDefinition) - ((TypeEffectiveStatement) ((LeafEffectiveStatementImpl) currentLeaf) + ((TypeEffectiveStatement) ((LeafEffectiveStatement) currentLeaf) .effectiveSubstatements().iterator().next()).getTypeDefinition(); assertNull(binaryEff.getBaseType()); @@ -96,8 +96,8 @@ public class EffectiveStatementTypeTest { final Bit bitEff = bitsEffIter.get(0); final Bit bitEffSecond = bitsEffIter.get(1); - final BitsTypeDefinition bitsEff = ((BitsSpecificationEffectiveStatementImpl) - ((LeafEffectiveStatementImpl) currentLeaf).effectiveSubstatements().iterator().next()) + final BitsTypeDefinition bitsEff = ((BitsSpecificationEffectiveStatement) + ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next()) .getTypeDefinition(); assertNull(bitsEff.getBaseType()); @@ -137,7 +137,7 @@ public class EffectiveStatementTypeTest { currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-boolean")); assertNotNull(currentLeaf.getType()); final BooleanTypeDefinition booleanEff = (BooleanTypeDefinition) ((TypeEffectiveStatement) - ((LeafEffectiveStatementImpl) currentLeaf).effectiveSubstatements().iterator().next()) + ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next()) .getTypeDefinition(); assertNull(booleanEff.getBaseType()); @@ -156,8 +156,8 @@ public class EffectiveStatementTypeTest { public void testDecimal64() { currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-decimal64")); assertNotNull(currentLeaf.getType()); - final DecimalTypeDefinition decimal64Eff = ((Decimal64SpecificationEffectiveStatementImpl) - ((LeafEffectiveStatementImpl) currentLeaf).effectiveSubstatements().iterator().next()) + final DecimalTypeDefinition decimal64Eff = ((Decimal64SpecificationEffectiveStatement) + ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next()) .getTypeDefinition(); assertNull(decimal64Eff.getBaseType()); @@ -188,7 +188,7 @@ public class EffectiveStatementTypeTest { currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-empty")); assertNotNull(currentLeaf.getType()); final EmptyTypeDefinition emptyEff = (EmptyTypeDefinition) ((TypeEffectiveStatement) - ((LeafEffectiveStatementImpl) currentLeaf).effectiveSubstatements().iterator().next()) + ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next()) .getTypeDefinition(); assertEquals(Optional.empty(), emptyEff.getUnits()); @@ -210,8 +210,8 @@ public class EffectiveStatementTypeTest { final List enumEffIter = ((EnumTypeDefinition) currentLeaf.getType()).getValues(); final EnumPair enumEff = enumEffIter.iterator().next(); - final EnumTypeDefinition enumSpecEff = ((EnumSpecificationEffectiveStatementImpl) - ((LeafEffectiveStatementImpl) currentLeaf).effectiveSubstatements().iterator().next()) + final EnumTypeDefinition enumSpecEff = ((EnumSpecificationEffectiveStatement) + ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next()) .getTypeDefinition(); assertEquals("enumeration", enumSpecEff.getQName().getLocalName()); @@ -243,8 +243,8 @@ public class EffectiveStatementTypeTest { currentLeaf = (LeafSchemaNode) types .getDataChildByName(QName.create(types.getQNameModule(), "leaf-identityref")); assertNotNull(currentLeaf.getType()); - final IdentityrefTypeDefinition identityRefEff = ((IdentityRefSpecificationEffectiveStatementImpl) - ((LeafEffectiveStatementImpl) currentLeaf).effectiveSubstatements().iterator().next()) + final IdentityrefTypeDefinition identityRefEff = ((IdentityRefSpecificationEffectiveStatement) + ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next()) .getTypeDefinition(); assertEquals(Optional.empty(), identityRefEff.getDefaultValue()); @@ -268,7 +268,7 @@ public class EffectiveStatementTypeTest { "leaf-instance-identifier")); assertNotNull(currentLeaf.getType()); final InstanceIdentifierTypeDefinition instanceIdentEff = (InstanceIdentifierTypeDefinition) - ((TypeEffectiveStatement) ((LeafEffectiveStatementImpl) currentLeaf).effectiveSubstatements() + ((TypeEffectiveStatement) ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements() .iterator().next()).getTypeDefinition(); assertNotNull(instanceIdentEff.toString()); @@ -293,8 +293,8 @@ public class EffectiveStatementTypeTest { currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-leafref")); assertNotNull(currentLeaf.getType()); - final LeafrefTypeDefinition leafrefEff = ((LeafrefSpecificationEffectiveStatementImpl) - ((LeafEffectiveStatementImpl) currentLeaf).effectiveSubstatements().iterator().next()) + final LeafrefTypeDefinition leafrefEff = ((LeafrefSpecificationEffectiveStatement) + ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next()) .getTypeDefinition(); assertEquals("/container-test/leaf-test", leafrefEff.getPathStatement().toString()); @@ -319,49 +319,49 @@ public class EffectiveStatementTypeTest { currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-int8")); assertNotNull(currentLeaf.getType()); final TypeEffectiveStatement int8Eff = (TypeEffectiveStatement) - ((LeafEffectiveStatementImpl) currentLeaf).effectiveSubstatements().iterator().next(); + ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next(); assertNotNull(int8Eff.toString()); currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-int16")); assertNotNull(currentLeaf.getType()); final TypeEffectiveStatement int16Eff = (TypeEffectiveStatement) - ((LeafEffectiveStatementImpl) currentLeaf).effectiveSubstatements().iterator().next(); + ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next(); assertNotNull(int16Eff.toString()); currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-int32")); assertNotNull(currentLeaf.getType()); final TypeEffectiveStatement int32Eff = (TypeEffectiveStatement) - ((LeafEffectiveStatementImpl) currentLeaf).effectiveSubstatements().iterator().next(); + ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next(); assertNotNull(int32Eff.toString()); currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-int64")); assertNotNull(currentLeaf.getType()); final TypeEffectiveStatement int64Eff = (TypeEffectiveStatement) - ((LeafEffectiveStatementImpl) currentLeaf).effectiveSubstatements().iterator().next(); + ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next(); assertNotNull(int64Eff.toString()); currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-uint8")); assertNotNull(currentLeaf.getType()); final TypeEffectiveStatement uint8Eff = (TypeEffectiveStatement) - ((LeafEffectiveStatementImpl) currentLeaf).effectiveSubstatements().iterator().next(); + ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next(); assertNotNull(uint8Eff.toString()); currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-uint16")); assertNotNull(currentLeaf.getType()); final TypeEffectiveStatement uint16Eff = (TypeEffectiveStatement) - ((LeafEffectiveStatementImpl) currentLeaf).effectiveSubstatements().iterator().next(); + ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next(); assertNotNull(uint16Eff.toString()); currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-uint32")); assertNotNull(currentLeaf.getType()); final TypeEffectiveStatement uint32Eff = (TypeEffectiveStatement) - ((LeafEffectiveStatementImpl) currentLeaf).effectiveSubstatements().iterator().next(); + ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next(); assertNotNull(uint32Eff.toString()); currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-uint64")); assertNotNull(currentLeaf.getType()); final TypeEffectiveStatement uint64Eff = (TypeEffectiveStatement) - ((LeafEffectiveStatementImpl) currentLeaf).effectiveSubstatements().iterator().next(); + ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next(); assertNotNull(uint64Eff.toString()); } @@ -369,8 +369,8 @@ public class EffectiveStatementTypeTest { public void testUnion() { currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-union")); assertNotNull(currentLeaf.getType()); - final UnionTypeDefinition unionEff = ((UnionSpecificationEffectiveStatementImpl) - ((LeafEffectiveStatementImpl) currentLeaf).effectiveSubstatements().iterator().next()) + final UnionTypeDefinition unionEff = ((UnionSpecificationEffectiveStatement) + ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next()) .getTypeDefinition(); assertEquals(2, unionEff.getTypes().size()); @@ -424,15 +424,15 @@ public class EffectiveStatementTypeTest { currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-length-pattern")); assertNotNull(currentLeaf.getType()); - final PatternConstraintEffectiveImpl patternConstraint = (PatternConstraintEffectiveImpl) - ((StringTypeDefinition) currentLeaf.getType()).getPatternConstraints().get(0); - final PatternConstraintEffectiveImpl patternConstraintThird = (PatternConstraintEffectiveImpl) - ((StringTypeDefinition) currentLeaf.getType()).getPatternConstraints().get(0); + final PatternConstraint patternConstraint = ((StringTypeDefinition) currentLeaf.getType()) + .getPatternConstraints().get(0); + final PatternConstraint patternConstraintThird = ((StringTypeDefinition) currentLeaf.getType()) + .getPatternConstraints().get(0); currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-length-pattern-second")); assertNotNull(currentLeaf.getType()); - final PatternConstraintEffectiveImpl patternConstraintSecond = (PatternConstraintEffectiveImpl) - ((StringTypeDefinition) currentLeaf.getType()).getPatternConstraints().get(0); + final PatternConstraint patternConstraintSecond = ((StringTypeDefinition) currentLeaf.getType()) + .getPatternConstraints().get(0); assertEquals("^[0-9a-fA-F]*$", patternConstraint.getJavaPatternString()); assertFalse(patternConstraint.getReference().isPresent()); @@ -453,7 +453,7 @@ public class EffectiveStatementTypeTest { currentLeaf = (LeafSchemaNode) types.getDataChildByName(QName.create(types.getQNameModule(), "leaf-string")); assertNotNull(currentLeaf.getType()); final StringTypeDefinition stringEff = (StringTypeDefinition) ((TypeEffectiveStatement) - ((LeafEffectiveStatementImpl) currentLeaf).effectiveSubstatements().iterator().next()) + ((LeafEffectiveStatement) currentLeaf).effectiveSubstatements().iterator().next()) .getTypeDefinition(); assertEquals("string", stringEff.getQName().getLocalName()); diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionEffectiveStatementImpl.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionEffectiveStatementImpl.java index 2215dd0e41..33551cd78f 100644 --- a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionEffectiveStatementImpl.java @@ -12,7 +12,7 @@ import java.util.Objects; import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaPath; -import org.opendaylight.yangtools.yang.parser.rfc6020.util.UnknownEffectiveStatementBase; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; final class ThirdPartyExtensionEffectiveStatementImpl -- 2.36.6