2 * Copyright (c) 2019 PANTHEON.tech, s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.rfc6241.parser;
10 import com.google.common.annotations.Beta;
11 import com.google.common.collect.ImmutableList;
12 import org.eclipse.jdt.annotation.NonNull;
13 import org.eclipse.jdt.annotation.Nullable;
14 import org.opendaylight.yangtools.rfc6241.model.api.GetFilterElementAttributesEffectiveStatement;
15 import org.opendaylight.yangtools.rfc6241.model.api.GetFilterElementAttributesSchemaNode;
16 import org.opendaylight.yangtools.rfc6241.model.api.GetFilterElementAttributesStatement;
17 import org.opendaylight.yangtools.rfc6241.model.api.NetconfStatements;
18 import org.opendaylight.yangtools.yang.common.QName;
19 import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
20 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
21 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
22 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
23 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
24 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
25 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithoutArgument.WithSubstatements;
26 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseVoidStatementSupport;
27 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
28 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
29 import org.opendaylight.yangtools.yang.parser.spi.meta.SchemaPathSupport;
30 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
31 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
32 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
33 import org.slf4j.Logger;
34 import org.slf4j.LoggerFactory;
37 public final class GetFilterElementAttributesStatementSupport extends BaseVoidStatementSupport<
38 GetFilterElementAttributesStatement, GetFilterElementAttributesEffectiveStatement> {
40 private static final class Declared extends WithSubstatements implements GetFilterElementAttributesStatement {
41 static final @NonNull Declared EMPTY = new Declared(ImmutableList.of());
43 Declared(final ImmutableList<? extends DeclaredStatement<?>> substatements) {
48 private static final class Effective
49 extends UnknownEffectiveStatementBase<Void, GetFilterElementAttributesStatement>
50 implements GetFilterElementAttributesEffectiveStatement, GetFilterElementAttributesSchemaNode {
51 private final @Nullable SchemaPath path;
53 Effective(final Current<Void, GetFilterElementAttributesStatement> stmt,
54 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
55 super(stmt, substatements);
56 path = SchemaPathSupport.wrap(stmt.getEffectiveParent().getSchemaPath()
57 .createChild(stmt.publicDefinition().getStatementName()));
61 public QName getQName() {
62 return path.getLastComponent();
67 public SchemaPath getPath() {
68 return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
72 public GetFilterElementAttributesEffectiveStatement asEffectiveStatement() {
77 private static final Logger LOG = LoggerFactory.getLogger(GetFilterElementAttributesStatementSupport.class);
78 private static final GetFilterElementAttributesStatementSupport INSTANCE =
79 new GetFilterElementAttributesStatementSupport(NetconfStatements.GET_FILTER_ELEMENT_ATTRIBUTES);
81 private final SubstatementValidator validator;
83 GetFilterElementAttributesStatementSupport(final StatementDefinition definition) {
84 super(definition, StatementPolicy.reject());
85 this.validator = SubstatementValidator.builder(definition).build();
88 public static GetFilterElementAttributesStatementSupport getInstance() {
93 public void onFullDefinitionDeclared(final Mutable<Void, GetFilterElementAttributesStatement,
94 GetFilterElementAttributesEffectiveStatement> stmt) {
95 super.onFullDefinitionDeclared(stmt);
96 stmt.setIsSupportedToBuildEffective(computeSupported(stmt));
100 protected SubstatementValidator getSubstatementValidator() {
105 protected GetFilterElementAttributesStatement createDeclared(
106 final StmtContext<Void, GetFilterElementAttributesStatement, ?> ctx,
107 final ImmutableList<? extends DeclaredStatement<?>> substatements) {
108 return new Declared(substatements);
112 protected GetFilterElementAttributesStatement createEmptyDeclared(
113 final StmtContext<Void, GetFilterElementAttributesStatement, ?> ctx) {
114 return Declared.EMPTY;
118 protected GetFilterElementAttributesEffectiveStatement createEffective(
119 final Current<Void, GetFilterElementAttributesStatement> stmt,
120 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
121 return new Effective(stmt, substatements);
124 private static boolean computeSupported(final StmtContext<?, ?, ?> stmt) {
125 final StmtContext<?, ?, ?> parent = stmt.getParentContext();
126 if (parent == null) {
127 LOG.debug("No parent, ignoring get-filter-element-attributes statement");
130 if (parent.publicDefinition() != YangStmtMapping.ANYXML) {
131 LOG.debug("Parent is not an anyxml node, ignoring get-filter-element-attributes statement");
134 if (!"filter".equals(parent.rawArgument())) {
135 LOG.debug("Parent is not named 'filter', ignoring get-filter-element-attributes statement");
139 final StmtContext<?, ?, ?> grandParent = parent.getParentContext();
140 if (grandParent == null) {
141 LOG.debug("No grandparent, ignoring get-filter-element-attributes statement");
144 if (grandParent.publicDefinition() != YangStmtMapping.INPUT) {
145 LOG.debug("Grandparent is not an input node, ignoring get-filter-element-attributes statement");
149 final StmtContext<?, ?, ?> greatGrandParent = grandParent.getParentContext();
150 if (greatGrandParent == null) {
151 LOG.debug("No grandparent, ignoring get-filter-element-attributes statement");
154 if (greatGrandParent.publicDefinition() != YangStmtMapping.RPC) {
155 LOG.debug("Grandparent is not an RPC node, ignoring get-filter-element-attributes statement");
159 switch (greatGrandParent.getRawArgument()) {
164 LOG.debug("Great-grandparent is not named 'get' nor 'get-config, ignoring get-filter-element-attributes"