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.rfc6536.parser;
10 import com.google.common.collect.ImmutableList;
11 import org.eclipse.jdt.annotation.NonNull;
12 import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyWriteEffectiveStatement;
13 import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyWriteSchemaNode;
14 import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyWriteStatement;
15 import org.opendaylight.yangtools.rfc6536.model.api.NACMStatements;
16 import org.opendaylight.yangtools.yang.common.QName;
17 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
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.StatementDefinition;
21 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithoutArgument.WithSubstatements;
22 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseVoidStatementSupport;
23 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
24 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
25 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
27 public final class DefaultDenyWriteStatementSupport
28 extends BaseVoidStatementSupport<DefaultDenyWriteStatement, DefaultDenyWriteEffectiveStatement> {
29 private static final class Declared extends WithSubstatements implements DefaultDenyWriteStatement {
30 static final @NonNull Declared EMPTY = new Declared(ImmutableList.of());
32 Declared(final ImmutableList<? extends DeclaredStatement<?>> substatements) {
37 private static final class Effective extends UnknownEffectiveStatementBase<Void, DefaultDenyWriteStatement>
38 implements DefaultDenyWriteEffectiveStatement, DefaultDenyWriteSchemaNode {
39 private final @NonNull SchemaPath path;
41 Effective(final DefaultDenyWriteStatement declared,
42 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
43 final StmtContext<Void, DefaultDenyWriteStatement, ?> ctx) {
44 super(declared.argument(), declared, substatements, ctx);
45 path = ctx.coerceParentContext().getSchemaPath().get().createChild(
46 ctx.getPublicDefinition().getStatementName());
50 public QName getQName() {
51 return path.getLastComponent();
56 public SchemaPath getPath() {
61 public DefaultDenyWriteEffectiveStatement asEffectiveStatement() {
66 private static final DefaultDenyWriteStatementSupport INSTANCE =
67 new DefaultDenyWriteStatementSupport(NACMStatements.DEFAULT_DENY_WRITE);
69 private final SubstatementValidator validator;
71 DefaultDenyWriteStatementSupport(final StatementDefinition definition) {
73 this.validator = SubstatementValidator.builder(definition).build();
76 public static DefaultDenyWriteStatementSupport getInstance() {
81 protected SubstatementValidator getSubstatementValidator() {
86 protected DefaultDenyWriteStatement createDeclared(final StmtContext<Void, DefaultDenyWriteStatement, ?> ctx,
87 final ImmutableList<? extends DeclaredStatement<?>> substatements) {
88 return new Declared(substatements);
92 protected DefaultDenyWriteStatement createEmptyDeclared(final StmtContext<Void, DefaultDenyWriteStatement, ?> ctx) {
93 return Declared.EMPTY;
97 protected DefaultDenyWriteEffectiveStatement createEffective(
98 final StmtContext<Void, DefaultDenyWriteStatement, DefaultDenyWriteEffectiveStatement> ctx,
99 final DefaultDenyWriteStatement declared,
100 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
101 return new Effective(declared, substatements, ctx);
105 protected DefaultDenyWriteEffectiveStatement createEmptyEffective(
106 final StmtContext<Void, DefaultDenyWriteStatement, DefaultDenyWriteEffectiveStatement> ctx,
107 final DefaultDenyWriteStatement declared) {
108 return createEffective(ctx, declared, ImmutableList.of());