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.opendaylight.yangtools.rfc6241.model.api.GetFilterElementAttributesEffectiveStatement;
13 import org.opendaylight.yangtools.rfc6241.model.api.GetFilterElementAttributesStatement;
14 import org.opendaylight.yangtools.rfc6241.model.api.NetconfStatements;
15 import org.opendaylight.yangtools.yang.common.Empty;
16 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
17 import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
18 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
19 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
20 import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
21 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractEmptyStatementSupport;
22 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
23 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
24 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
25 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
30 public final class GetFilterElementAttributesStatementSupport extends AbstractEmptyStatementSupport<
31 GetFilterElementAttributesStatement, GetFilterElementAttributesEffectiveStatement> {
32 private static final Logger LOG = LoggerFactory.getLogger(GetFilterElementAttributesStatementSupport.class);
33 private static final SubstatementValidator VALIDATOR =
34 SubstatementValidator.builder(NetconfStatements.GET_FILTER_ELEMENT_ATTRIBUTES).build();
36 public GetFilterElementAttributesStatementSupport(final YangParserConfiguration config) {
37 super(NetconfStatements.GET_FILTER_ELEMENT_ATTRIBUTES, StatementPolicy.reject(), config, VALIDATOR);
41 public void onFullDefinitionDeclared(final Mutable<Empty, GetFilterElementAttributesStatement,
42 GetFilterElementAttributesEffectiveStatement> stmt) {
43 super.onFullDefinitionDeclared(stmt);
44 if (!computeSupported(stmt)) {
45 stmt.setUnsupported();
50 protected GetFilterElementAttributesStatement createDeclared(
51 final StmtContext<Empty, GetFilterElementAttributesStatement, ?> ctx,
52 final ImmutableList<? extends DeclaredStatement<?>> substatements) {
53 return substatements.isEmpty() ? GetFilterElementAttributesStatementImpl.EMPTY
54 : new GetFilterElementAttributesStatementImpl(substatements);
58 protected GetFilterElementAttributesStatement attachDeclarationReference(
59 final GetFilterElementAttributesStatement stmt, final DeclarationReference reference) {
60 return new RefGetFilterElementAttributesStatement(stmt, reference);
64 protected GetFilterElementAttributesEffectiveStatement createEffective(
65 final Current<Empty, GetFilterElementAttributesStatement> stmt,
66 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
67 return new GetFilterElementAttributesEffectiveStatementImpl(stmt, substatements);
70 private static boolean computeSupported(final StmtContext<?, ?, ?> stmt) {
71 final StmtContext<?, ?, ?> parent = stmt.getParentContext();
73 LOG.debug("No parent, ignoring get-filter-element-attributes statement");
76 if (parent.publicDefinition() != YangStmtMapping.ANYXML) {
77 LOG.debug("Parent is not an anyxml node, ignoring get-filter-element-attributes statement");
80 if (!"filter".equals(parent.rawArgument())) {
81 LOG.debug("Parent is not named 'filter', ignoring get-filter-element-attributes statement");
85 final StmtContext<?, ?, ?> grandParent = parent.getParentContext();
86 if (grandParent == null) {
87 LOG.debug("No grandparent, ignoring get-filter-element-attributes statement");
90 if (grandParent.publicDefinition() != YangStmtMapping.INPUT) {
91 LOG.debug("Grandparent is not an input node, ignoring get-filter-element-attributes statement");
95 final StmtContext<?, ?, ?> greatGrandParent = grandParent.getParentContext();
96 if (greatGrandParent == null) {
97 LOG.debug("No grandparent, ignoring get-filter-element-attributes statement");
100 if (greatGrandParent.publicDefinition() != YangStmtMapping.RPC) {
101 LOG.debug("Grandparent is not an RPC node, ignoring get-filter-element-attributes statement");
105 switch (greatGrandParent.getRawArgument()) {
110 LOG.debug("Great-grandparent is not named 'get' nor 'get-config, ignoring get-filter-element-attributes"