2 * Copyright (c) 2017 Pantheon Technologies, 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.yang.parser.rfc7950.stmt.input;
10 import static java.util.Objects.requireNonNull;
12 import com.google.common.annotations.Beta;
13 import com.google.common.collect.ImmutableList;
14 import org.eclipse.jdt.annotation.NonNull;
15 import org.opendaylight.yangtools.yang.common.QName;
16 import org.opendaylight.yangtools.yang.common.YangConstants;
17 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
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.model.api.meta.StatementSource;
21 import org.opendaylight.yangtools.yang.model.api.stmt.InputEffectiveStatement;
22 import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement;
23 import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingException;
24 import org.opendaylight.yangtools.yang.model.spi.stmt.DeclaredStatements;
25 import org.opendaylight.yangtools.yang.model.spi.stmt.UndeclaredStatements;
26 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseOperationContainerStatementSupport;
27 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
28 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
29 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
30 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
33 public final class InputStatementSupport
34 extends BaseOperationContainerStatementSupport<InputStatement, InputEffectiveStatement> {
35 private static final @NonNull InputStatementSupport RFC6020_INSTANCE = new InputStatementSupport(
36 SubstatementValidator.builder(YangStmtMapping.INPUT)
37 .addAny(YangStmtMapping.ANYXML)
38 .addAny(YangStmtMapping.CHOICE)
39 .addAny(YangStmtMapping.CONTAINER)
40 .addAny(YangStmtMapping.GROUPING)
41 .addAny(YangStmtMapping.LEAF)
42 .addAny(YangStmtMapping.LEAF_LIST)
43 .addAny(YangStmtMapping.LIST)
44 .addAny(YangStmtMapping.TYPEDEF)
45 .addAny(YangStmtMapping.USES)
47 private static final @NonNull InputStatementSupport RFC7950_INSTANCE = new InputStatementSupport(
48 SubstatementValidator.builder(YangStmtMapping.INPUT)
49 .addAny(YangStmtMapping.ANYDATA)
50 .addAny(YangStmtMapping.ANYXML)
51 .addAny(YangStmtMapping.CHOICE)
52 .addAny(YangStmtMapping.CONTAINER)
53 .addAny(YangStmtMapping.GROUPING)
54 .addAny(YangStmtMapping.LEAF)
55 .addAny(YangStmtMapping.LEAF_LIST)
56 .addAny(YangStmtMapping.LIST)
57 .addAny(YangStmtMapping.MUST)
58 .addAny(YangStmtMapping.TYPEDEF)
59 .addAny(YangStmtMapping.USES)
62 private final SubstatementValidator validator;
64 private InputStatementSupport(final SubstatementValidator validator) {
65 super(YangStmtMapping.INPUT, YangConstants::operationInputQName);
66 this.validator = requireNonNull(validator);
69 public static @NonNull InputStatementSupport rfc6020Instance() {
70 return RFC6020_INSTANCE;
73 public static @NonNull InputStatementSupport rfc7950Instance() {
74 return RFC7950_INSTANCE;
78 protected SubstatementValidator getSubstatementValidator() {
83 protected InputStatement createDeclared(final StmtContext<QName, InputStatement, ?> ctx,
84 final ImmutableList<? extends DeclaredStatement<?>> substatements) {
85 final StatementSource source = ctx.source();
88 return UndeclaredStatements.createInput(ctx.getArgument(), substatements);
90 return DeclaredStatements.createInput(ctx.getArgument(), substatements);
92 throw new IllegalStateException("Unhandled statement source " + source);
97 protected InputStatement createEmptyDeclared(final StmtContext<QName, InputStatement, ?> ctx) {
98 final StatementSource source = ctx.source();
101 return UndeclaredStatements.createInput(ctx.getArgument());
103 return DeclaredStatements.createInput(ctx.getArgument());
105 throw new IllegalStateException("Unhandled statement source " + source);
110 protected InputEffectiveStatement copyDeclaredEffective(final int flags,
111 final Current<QName, InputStatement> stmt, final InputEffectiveStatement original) {
112 return new DeclaredInputEffectiveStatement((DeclaredInputEffectiveStatement) original, stmt.effectivePath(),
117 protected InputEffectiveStatement copyUndeclaredEffective(final int flags,
118 final Current<QName, InputStatement> stmt, final InputEffectiveStatement original) {
119 return new UndeclaredInputEffectiveStatement((UndeclaredInputEffectiveStatement) original, stmt.effectivePath(),
124 protected InputEffectiveStatement createDeclaredEffective(final int flags,
125 final Current<QName, InputStatement> stmt,
126 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
127 return new DeclaredInputEffectiveStatement(stmt.declared(), substatements, stmt.effectivePath(), flags);
131 protected InputEffectiveStatement createUndeclaredEffective(final int flags,
132 final Current<QName, InputStatement> stmt,
133 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
135 return new UndeclaredInputEffectiveStatement(substatements, stmt.effectivePath(), flags);
136 } catch (SubstatementIndexingException e) {
137 throw new SourceException(e.getMessage(), stmt, e);