Make BitsTypeDefinition.Bit.position() return Uint32
[yangtools.git] / yang / yang-model-util / src / main / java / org / opendaylight / yangtools / yang / model / util / EffectiveAugmentationSchema.java
index 88d356ee9772a34dc633fdf131ca776526e7c81f..d7926e0547ae3109447ab3bae479ab093c5edc59 100644 (file)
@@ -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<DataSchemaNode> realChildSchemas;
-    private final Map<QName, DataSchemaNode> mappedChildSchemas;
+public final class EffectiveAugmentationSchema implements AugmentationSchemaNode {
+    private final AugmentationSchemaNode delegate;
+    private final ImmutableSet<DataSchemaNode> realChildSchemas;
+    private final ImmutableMap<QName, DataSchemaNode> mappedChildSchemas;
 
-    public EffectiveAugmentationSchema(final AugmentationSchema augmentSchema, final Set<DataSchemaNode> realChildSchemas) {
-        this.delegate = augmentSchema;
-        this.realChildSchemas = realChildSchemas;
+    public EffectiveAugmentationSchema(final AugmentationSchemaNode augmentSchema,
+            final Collection<? extends DataSchemaNode> realChildSchemas) {
+        this.delegate = requireNonNull(augmentSchema);
+        this.realChildSchemas = ImmutableSet.copyOf(realChildSchemas);
 
         final Map<QName, DataSchemaNode> 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<DataSchemaNode> 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<RevisionAwareXPath> getWhenCondition() {
         return delegate.getWhenCondition();
     }
 
     @Override
-    public String getDescription() {
+    public Optional<String> getDescription() {
         return delegate.getDescription();
     }
 
     @Override
-    public String getReference() {
+    public Optional<String> 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<UnknownSchemaNode> getUnknownSchemaNodes() {
+    public Collection<? extends UnknownSchemaNode> getUnknownSchemaNodes() {
         return delegate.getUnknownSchemaNodes();
     }
 
     @Override
-    public Set<TypeDefinition<?>> getTypeDefinitions() {
+    public Collection<? extends TypeDefinition<?>> getTypeDefinitions() {
         return delegate.getTypeDefinitions();
     }
 
     @Override
-    public Set<DataSchemaNode> getChildNodes() {
+    public Collection<? extends DataSchemaNode> getChildNodes() {
         return realChildSchemas;
     }
 
     @Override
-    public Set<GroupingDefinition> getGroupings() {
+    public Collection<? extends GroupingDefinition> getGroupings() {
         return delegate.getGroupings();
     }
 
     @Override
-    public DataSchemaNode getDataChildByName(final QName name) {
-        return mappedChildSchemas.get(name);
+    public Optional<DataSchemaNode> 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<? extends UsesNode> getUses() {
+        return delegate.getUses();
     }
 
     @Override
-    public Set<UsesNode> getUses() {
-        return delegate.getUses();
+    public Optional<AugmentationSchemaNode> getOriginalDefinition() {
+        return delegate.getOriginalDefinition();
     }
 
     @Override
-    public Optional<AugmentationSchema> getOriginalDefinition() {
-        return delegate.getOriginalDefinition();
+    public Collection<? extends ActionDefinition> getActions() {
+        return delegate.getActions();
+    }
+
+    @Override
+    public Optional<ActionDefinition> findAction(final QName qname) {
+        return delegate.findAction(qname);
+    }
+
+    @Override
+    public Collection<? extends NotificationDefinition> getNotifications() {
+        return delegate.getNotifications();
+    }
+
+    @Override
+    public Optional<NotificationDefinition> findNotification(final QName qname) {
+        return delegate.findNotification(qname);
     }
 }