2 * Copyright (c) 2022 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.mdsal.binding.generator.impl.reactor;
10 import static com.google.common.base.Verify.verify;
11 import static java.util.Objects.requireNonNull;
13 import com.google.common.base.MoreObjects;
14 import com.google.common.collect.Collections2;
15 import com.google.common.collect.ImmutableList;
16 import java.util.Collection;
17 import java.util.List;
19 import java.util.Optional;
20 import org.eclipse.jdt.annotation.NonNull;
21 import org.opendaylight.yangtools.yang.common.QName;
22 import org.opendaylight.yangtools.yang.model.api.ActionDefinition;
23 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
24 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
25 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
26 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
27 import org.opendaylight.yangtools.yang.model.api.Status;
28 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
29 import org.opendaylight.yangtools.yang.model.api.UsesNode;
30 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
31 import org.opendaylight.yangtools.yang.model.api.meta.IdentifierNamespace;
32 import org.opendaylight.yangtools.yang.model.api.meta.StatementOrigin;
33 import org.opendaylight.yangtools.yang.model.api.stmt.AugmentEffectiveStatement;
34 import org.opendaylight.yangtools.yang.model.api.stmt.AugmentStatement;
35 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
36 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeAwareEffectiveStatement;
37 import org.opendaylight.yangtools.yang.xpath.api.YangXPathExpression.QualifiedBound;
39 final class TargetAugmentEffectiveStatement implements AugmentEffectiveStatement, AugmentationSchemaNode {
40 private final @NonNull List<EffectiveStatement<?, ?>> substatements;
41 private final @NonNull AugmentEffectiveStatement delegate;
42 private final @NonNull AugmentationSchemaNode schemaDelegate;
44 TargetAugmentEffectiveStatement(final AugmentEffectiveStatement augment,
45 final SchemaTreeAwareEffectiveStatement<?, ?> target,
46 final ImmutableList<EffectiveStatement<?, ?>> substatements) {
47 delegate = requireNonNull(augment);
48 verify(augment instanceof AugmentationSchemaNode, "Unsupported augment implementation %s", augment);
49 schemaDelegate = (AugmentationSchemaNode) augment;
50 this.substatements = requireNonNull(substatements);
53 @NonNull AugmentEffectiveStatement delegate() {
58 public AugmentStatement getDeclared() {
59 return delegate.getDeclared();
63 public SchemaNodeIdentifier argument() {
64 return delegate.argument();
68 public StatementOrigin statementOrigin() {
69 return delegate.statementOrigin();
73 public <K, V, N extends IdentifierNamespace<K, V>> Optional<V> get(final Class<N> namespace, final K identifier) {
74 return Optional.empty();
78 public <K, V, N extends IdentifierNamespace<K, V>> Map<K, V> getAll(final Class<N> namespace) {
83 public List<? extends EffectiveStatement<?, ?>> effectiveSubstatements() {
88 public Collection<? extends TypeDefinition<?>> getTypeDefinitions() {
89 return schemaDelegate.getTypeDefinitions();
93 @SuppressWarnings("unchecked")
94 public Collection<? extends DataSchemaNode> getChildNodes() {
95 return (Collection) Collections2.filter(substatements, DataSchemaNode.class::isInstance);
99 public Collection<? extends GroupingDefinition> getGroupings() {
100 return schemaDelegate.getGroupings();
104 public DataSchemaNode dataChildByName(final QName name) {
105 return getChildNodes().stream().filter(child -> name.equals(child.getQName())).findFirst().orElse(null);
109 public Collection<? extends UsesNode> getUses() {
110 return schemaDelegate.getUses();
114 @SuppressWarnings("unchecked")
115 public Collection<? extends NotificationDefinition> getNotifications() {
116 return (Collection) Collections2.filter(substatements, NotificationDefinition.class::isInstance);
120 @SuppressWarnings("unchecked")
121 public Collection<? extends ActionDefinition> getActions() {
122 return (Collection) Collections2.filter(substatements, ActionDefinition.class::isInstance);
126 public Optional<? extends QualifiedBound> getWhenCondition() {
127 return schemaDelegate.getWhenCondition();
131 public @NonNull Status getStatus() {
132 return schemaDelegate.getStatus();
136 public Optional<String> getDescription() {
137 return schemaDelegate.getDescription();
141 public Optional<String> getReference() {
142 return schemaDelegate.getReference();
146 public AugmentEffectiveStatement asEffectiveStatement() {
151 public String toString() {
152 return MoreObjects.toStringHelper(this)
153 .add("delegate", delegate)
154 .add("substatements", substatements.size())