2 * Copyright (c) 2015 Cisco Systems, Inc. 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.model.util;
10 import static java.util.Objects.requireNonNull;
12 import com.google.common.collect.ImmutableMap;
13 import com.google.common.collect.ImmutableSet;
14 import java.util.HashMap;
15 import java.util.List;
17 import java.util.Optional;
19 import org.opendaylight.yangtools.yang.common.QName;
20 import org.opendaylight.yangtools.yang.model.api.ActionDefinition;
21 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
22 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
23 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
24 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
25 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
26 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
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.UnknownSchemaNode;
30 import org.opendaylight.yangtools.yang.model.api.UsesNode;
33 * Proxy for AugmentationSchema. Child node schemas are replaced with actual schemas from parent.
35 public final class EffectiveAugmentationSchema implements AugmentationSchemaNode {
36 private final AugmentationSchemaNode delegate;
37 private final Set<DataSchemaNode> realChildSchemas;
38 private final Map<QName, DataSchemaNode> mappedChildSchemas;
40 public EffectiveAugmentationSchema(final AugmentationSchemaNode augmentSchema,
41 final Set<DataSchemaNode> realChildSchemas) {
42 this.delegate = requireNonNull(augmentSchema);
43 this.realChildSchemas = ImmutableSet.copyOf(realChildSchemas);
45 final Map<QName, DataSchemaNode> m = new HashMap<>(realChildSchemas.size());
46 for (DataSchemaNode realChildSchema : realChildSchemas) {
47 m.put(realChildSchema.getQName(), realChildSchema);
50 this.mappedChildSchemas = ImmutableMap.copyOf(m);
54 public Optional<RevisionAwareXPath> getWhenCondition() {
55 return delegate.getWhenCondition();
59 public Optional<String> getDescription() {
60 return delegate.getDescription();
64 public Optional<String> getReference() {
65 return delegate.getReference();
69 public Status getStatus() {
70 return delegate.getStatus();
74 public SchemaPath getTargetPath() {
75 return delegate.getTargetPath();
79 public List<UnknownSchemaNode> getUnknownSchemaNodes() {
80 return delegate.getUnknownSchemaNodes();
84 public Set<TypeDefinition<?>> getTypeDefinitions() {
85 return delegate.getTypeDefinitions();
89 public Set<DataSchemaNode> getChildNodes() {
90 return realChildSchemas;
94 public Set<GroupingDefinition> getGroupings() {
95 return delegate.getGroupings();
99 public Optional<DataSchemaNode> findDataChildByName(final QName name) {
100 return Optional.ofNullable(mappedChildSchemas.get(requireNonNull(name)));
104 public Set<UsesNode> getUses() {
105 return delegate.getUses();
109 public Optional<AugmentationSchemaNode> getOriginalDefinition() {
110 return delegate.getOriginalDefinition();
114 public Set<ActionDefinition> getActions() {
115 return delegate.getActions();
119 public Set<NotificationDefinition> getNotifications() {
120 return delegate.getNotifications();