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.eclipse.jdt.annotation.Nullable;
13 import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyWriteEffectiveStatement;
14 import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyWriteSchemaNode;
15 import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyWriteStatement;
16 import org.opendaylight.yangtools.rfc6536.model.api.NACMStatements;
17 import org.opendaylight.yangtools.yang.common.QName;
18 import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
19 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
20 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
21 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
22 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
23 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithoutArgument.WithSubstatements;
24 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseVoidStatementSupport;
25 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
26 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
27 import org.opendaylight.yangtools.yang.parser.spi.meta.SchemaPathSupport;
28 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
29 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
31 public final class DefaultDenyWriteStatementSupport
32 extends BaseVoidStatementSupport<DefaultDenyWriteStatement, DefaultDenyWriteEffectiveStatement> {
33 private static final class Declared extends WithSubstatements implements DefaultDenyWriteStatement {
34 static final @NonNull Declared EMPTY = new Declared(ImmutableList.of());
36 Declared(final ImmutableList<? extends DeclaredStatement<?>> substatements) {
41 private static final class Effective extends UnknownEffectiveStatementBase<Void, DefaultDenyWriteStatement>
42 implements DefaultDenyWriteEffectiveStatement, DefaultDenyWriteSchemaNode {
43 private final @Nullable SchemaPath path;
45 Effective(final Current<Void, DefaultDenyWriteStatement> stmt,
46 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
47 super(stmt, substatements);
48 path = SchemaPathSupport.wrap(stmt.getEffectiveParent().getSchemaPath()
49 .createChild(stmt.publicDefinition().getStatementName()));
53 public QName getQName() {
54 return path.getLastComponent();
59 public SchemaPath getPath() {
60 return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
64 public DefaultDenyWriteEffectiveStatement asEffectiveStatement() {
69 private static final DefaultDenyWriteStatementSupport INSTANCE =
70 new DefaultDenyWriteStatementSupport(NACMStatements.DEFAULT_DENY_WRITE);
72 private final SubstatementValidator validator;
74 DefaultDenyWriteStatementSupport(final StatementDefinition definition) {
75 super(definition, CopyPolicy.CONTEXT_INDEPENDENT);
76 this.validator = SubstatementValidator.builder(definition).build();
79 public static DefaultDenyWriteStatementSupport getInstance() {
84 protected SubstatementValidator getSubstatementValidator() {
89 protected DefaultDenyWriteStatement createDeclared(final StmtContext<Void, DefaultDenyWriteStatement, ?> ctx,
90 final ImmutableList<? extends DeclaredStatement<?>> substatements) {
91 return new Declared(substatements);
95 protected DefaultDenyWriteStatement createEmptyDeclared(final StmtContext<Void, DefaultDenyWriteStatement, ?> ctx) {
96 return Declared.EMPTY;
100 protected DefaultDenyWriteEffectiveStatement createEffective(final Current<Void, DefaultDenyWriteStatement> stmt,
101 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
102 return new Effective(stmt, substatements);