X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-model-util%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fmodel%2Futil%2FEffectiveAugmentationSchema.java;h=d7926e0547ae3109447ab3bae479ab093c5edc59;hb=0ce2b2fa5a3240324890b6092f3f882ea5f23ba1;hp=88d356ee9772a34dc633fdf131ca776526e7c81f;hpb=052bd27d118a2addb3eae2253515890369a60182;p=yangtools.git diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/EffectiveAugmentationSchema.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/EffectiveAugmentationSchema.java index 88d356ee97..d7926e0547 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/EffectiveAugmentationSchema.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/EffectiveAugmentationSchema.java @@ -7,36 +7,42 @@ */ package org.opendaylight.yangtools.yang.model.util; -import com.google.common.base.Optional; +import static java.util.Objects.requireNonNull; + import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import java.util.Collection; import java.util.HashMap; -import java.util.List; +import java.util.HashSet; import java.util.Map; +import java.util.Optional; import java.util.Set; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; +import org.opendaylight.yangtools.yang.model.api.ActionDefinition; +import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode; +import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.GroupingDefinition; +import org.opendaylight.yangtools.yang.model.api.NotificationDefinition; import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; -import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.Status; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; import org.opendaylight.yangtools.yang.model.api.UsesNode; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; /** * Proxy for AugmentationSchema. Child node schemas are replaced with actual schemas from parent. - * - * FIXME: Make this class final, once derived deprecated class is removed. */ -public class EffectiveAugmentationSchema implements AugmentationSchema { - private final AugmentationSchema delegate; - private final Set realChildSchemas; - private final Map mappedChildSchemas; +public final class EffectiveAugmentationSchema implements AugmentationSchemaNode { + private final AugmentationSchemaNode delegate; + private final ImmutableSet realChildSchemas; + private final ImmutableMap mappedChildSchemas; - public EffectiveAugmentationSchema(final AugmentationSchema augmentSchema, final Set realChildSchemas) { - this.delegate = augmentSchema; - this.realChildSchemas = realChildSchemas; + public EffectiveAugmentationSchema(final AugmentationSchemaNode augmentSchema, + final Collection realChildSchemas) { + this.delegate = requireNonNull(augmentSchema); + this.realChildSchemas = ImmutableSet.copyOf(realChildSchemas); final Map m = new HashMap<>(realChildSchemas.size()); for (DataSchemaNode realChildSchema : realChildSchemas) { @@ -46,18 +52,34 @@ public class EffectiveAugmentationSchema implements AugmentationSchema { this.mappedChildSchemas = ImmutableMap.copyOf(m); } + /** + * Returns an AugmentationSchemaNode as effective in a parent node. + * + * @param schema Augmentation schema + * @param parent Parent schema + * @return Adjusted Augmentation schema + * @throws NullPointerException if any of the arguments is null + */ + public static AugmentationSchemaNode create(final AugmentationSchemaNode schema, final DataNodeContainer parent) { + Set children = new HashSet<>(); + for (DataSchemaNode augNode : schema.getChildNodes()) { + children.add(parent.getDataChildByName(augNode.getQName())); + } + return new EffectiveAugmentationSchema(schema, children); + } + @Override - public RevisionAwareXPath getWhenCondition() { + public Optional getWhenCondition() { return delegate.getWhenCondition(); } @Override - public String getDescription() { + public Optional getDescription() { return delegate.getDescription(); } @Override - public String getReference() { + public Optional getReference() { return delegate.getReference(); } @@ -67,48 +89,62 @@ public class EffectiveAugmentationSchema implements AugmentationSchema { } @Override - public SchemaPath getTargetPath() { + public SchemaNodeIdentifier getTargetPath() { return delegate.getTargetPath(); } @Override - public List getUnknownSchemaNodes() { + public Collection getUnknownSchemaNodes() { return delegate.getUnknownSchemaNodes(); } @Override - public Set> getTypeDefinitions() { + public Collection> getTypeDefinitions() { return delegate.getTypeDefinitions(); } @Override - public Set getChildNodes() { + public Collection getChildNodes() { return realChildSchemas; } @Override - public Set getGroupings() { + public Collection getGroupings() { return delegate.getGroupings(); } @Override - public DataSchemaNode getDataChildByName(final QName name) { - return mappedChildSchemas.get(name); + public Optional findDataChildByName(final QName name) { + return Optional.ofNullable(mappedChildSchemas.get(requireNonNull(name))); } @Override - public DataSchemaNode getDataChildByName(final String name) { - // Unused - throw new UnsupportedOperationException("Unable to retrieve child node by name"); + public Collection getUses() { + return delegate.getUses(); } @Override - public Set getUses() { - return delegate.getUses(); + public Optional getOriginalDefinition() { + return delegate.getOriginalDefinition(); } @Override - public Optional getOriginalDefinition() { - return delegate.getOriginalDefinition(); + public Collection getActions() { + return delegate.getActions(); + } + + @Override + public Optional findAction(final QName qname) { + return delegate.findAction(qname); + } + + @Override + public Collection getNotifications() { + return delegate.getNotifications(); + } + + @Override + public Optional findNotification(final QName qname) { + return delegate.findNotification(qname); } }