2 * Copyright (c) 2020 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.yang.parser.stmt.reactor;
10 import static java.util.Objects.requireNonNull;
13 import java.util.Optional;
14 import org.eclipse.jdt.annotation.NonNull;
15 import org.eclipse.jdt.annotation.Nullable;
16 import org.opendaylight.yangtools.yang.common.YangVersion;
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.IdentifierNamespace;
21 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
22 import org.opendaylight.yangtools.yang.parser.spi.meta.CopyHistory;
23 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx;
24 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
25 import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference;
27 // FIXME: YANGTOOLS-1185: integrate this into StatementContextBase
28 final class BaseCurrentEffectiveStmtCtx<A, D extends DeclaredStatement<A>> implements EffectiveStmtCtx.Current<A, D> {
29 static final Object NULL_OBJ = new Object();
31 private final @NonNull StmtContext<A, D, ?> delegate;
33 private @Nullable Object parent;
35 BaseCurrentEffectiveStmtCtx(final StmtContext<A, D, ?> delegate) {
36 this.delegate = requireNonNull(delegate);
40 BaseCurrentEffectiveStmtCtx(final StmtContext<A, D, ?> delegate, final Parent parent) {
41 this.delegate = requireNonNull(delegate);
42 this.parent = requireNonNull(parent);
46 public StatementSourceReference sourceReference() {
47 return delegate.getStatementSourceReference();
51 public CopyHistory history() {
52 return delegate.getCopyHistory();
57 return delegate.buildDeclared();
61 public <K, V, T extends K, N extends IdentifierNamespace<K, V>> V getFromNamespace(
62 final Class<@NonNull N> type, final T key) {
63 return delegate.getFromNamespace(type, key);
67 public boolean effectiveConfig() {
68 return delegate.isConfiguration();
73 public Optional<SchemaPath> schemaPath() {
74 return delegate.getSchemaPath();
78 public StatementDefinition publicDefinition() {
79 return delegate.getPublicDefinition();
83 public Parent parent() {
84 final Object local = parent;
85 if (local instanceof Parent) {
86 return (Parent) local;
87 } else if (NULL_OBJ.equals(local)) {
94 // FIXME: YANGTOOLS-1185: this should be rendered unnecessary
95 private Parent loadParent() {
96 final StmtContext<?, ?, ?> parentDelegate = delegate.getParentContext();
97 if (parentDelegate == null) {
102 final Parent ret = new BaseCurrentEffectiveStmtCtx<>(parentDelegate);
108 public <K, V, N extends IdentifierNamespace<K, V>> Map<K, V>
109 getAllFromCurrentStmtCtxNamespace(final Class<N> type) {
110 return delegate.getAllFromCurrentStmtCtxNamespace(type);
114 public A argument() {
115 return delegate.getStatementArgument();
119 public String rawArgument() {
120 return delegate.rawStatementArgument();
124 public EffectiveStatement<?, ?> original() {
125 return delegate.getOriginalCtx().map(StmtContext::buildEffective).orElse(null);
129 public YangVersion yangVersion() {
130 return delegate.getRootVersion();
135 @SuppressWarnings("unchecked")
136 public <Z extends EffectiveStatement<A, D>> StmtContext<A, D, Z> caerbannog() {
137 return (StmtContext<A, D, Z>) delegate;