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.meta;
10 import com.google.common.annotations.Beta;
11 import com.google.common.collect.ImmutableList;
12 import org.eclipse.jdt.annotation.NonNull;
13 import org.opendaylight.yangtools.yang.common.QName;
14 import org.opendaylight.yangtools.yang.common.YangConstants;
15 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
16 import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
17 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
18 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
19 import org.opendaylight.yangtools.yang.model.api.stmt.OutputEffectiveStatement;
20 import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement;
21 import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatementDecorators;
22 import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements;
23 import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements;
24 import org.opendaylight.yangtools.yang.model.ri.stmt.UndeclaredStatements;
25 import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingException;
26 import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
27 import org.opendaylight.yangtools.yang.parser.spi.meta.BoundStmtCtx;
28 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
29 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.UndeclaredCurrent;
30 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
31 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
34 public final class OutputStatementSupport
35 extends AbstractOperationContainerStatementSupport<OutputStatement, OutputEffectiveStatement> {
36 private static final SubstatementValidator RFC6020_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.OUTPUT)
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 SubstatementValidator RFC7950_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.OUTPUT)
48 .addAny(YangStmtMapping.ANYDATA)
49 .addAny(YangStmtMapping.ANYXML)
50 .addAny(YangStmtMapping.CHOICE)
51 .addAny(YangStmtMapping.CONTAINER)
52 .addAny(YangStmtMapping.GROUPING)
53 .addAny(YangStmtMapping.LEAF)
54 .addAny(YangStmtMapping.LEAF_LIST)
55 .addAny(YangStmtMapping.LIST)
56 .addAny(YangStmtMapping.MUST)
57 .addAny(YangStmtMapping.TYPEDEF)
58 .addAny(YangStmtMapping.USES)
61 private OutputStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator) {
62 super(YangStmtMapping.OUTPUT, config, validator, YangConstants::operationOutputQName);
65 public static @NonNull OutputStatementSupport rfc6020Instance(final YangParserConfiguration config) {
66 return new OutputStatementSupport(config, RFC6020_VALIDATOR);
69 public static @NonNull OutputStatementSupport rfc7950Instance(final YangParserConfiguration config) {
70 return new OutputStatementSupport(config, RFC7950_VALIDATOR);
74 protected OutputStatement createDeclared(final BoundStmtCtx<QName> ctx,
75 final ImmutableList<DeclaredStatement<?>> substatements) {
76 return DeclaredStatements.createOutput(ctx.getArgument(), substatements);
80 protected OutputStatement attachDeclarationReference(final OutputStatement stmt,
81 final DeclarationReference reference) {
82 return DeclaredStatementDecorators.decorateOutput(stmt, reference);
86 OutputEffectiveStatement copyEffective(final int flags, final Current<QName, OutputStatement> stmt,
87 final OutputEffectiveStatement original) {
88 return EffectiveStatements.copyOutput(original, stmt.getArgument(), flags);
92 OutputEffectiveStatement createEffective(final int flags, final Current<QName, OutputStatement> stmt,
93 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
95 return EffectiveStatements.createOutput(stmt.declared(), stmt.getArgument(), flags, substatements);
96 } catch (SubstatementIndexingException e) {
97 throw new SourceException(e.getMessage(), stmt, e);
102 OutputEffectiveStatement createUndeclaredEffective(final int flags,
103 final UndeclaredCurrent<QName, OutputStatement> stmt,
104 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
106 return UndeclaredStatements.createOutput(stmt.getArgument(), flags, substatements);
107 } catch (SubstatementIndexingException e) {
108 throw new SourceException(e.getMessage(), stmt, e);