*/
package org.opendaylight.yangtools.yang.model.util;
-import com.google.common.base.Preconditions;
+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.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;
/**
* Proxy for AugmentationSchema. Child node schemas are replaced with actual schemas from parent.
- *
*/
public final class EffectiveAugmentationSchema implements AugmentationSchemaNode {
private final AugmentationSchemaNode delegate;
- private final Set<DataSchemaNode> realChildSchemas;
- private final Map<QName, DataSchemaNode> mappedChildSchemas;
+ private final ImmutableSet<DataSchemaNode> realChildSchemas;
+ private final ImmutableMap<QName, DataSchemaNode> mappedChildSchemas;
public EffectiveAugmentationSchema(final AugmentationSchemaNode augmentSchema,
- final Set<DataSchemaNode> realChildSchemas) {
- this.delegate = Preconditions.checkNotNull(augmentSchema);
+ final Collection<? extends DataSchemaNode> realChildSchemas) {
+ this.delegate = requireNonNull(augmentSchema);
this.realChildSchemas = ImmutableSet.copyOf(realChildSchemas);
final Map<QName, DataSchemaNode> m = new HashMap<>(realChildSchemas.size());
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();
}
}
@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 Set<UsesNode> getUses() {
+ public Collection<? extends UsesNode> getUses() {
return delegate.getUses();
}
}
@Override
- public Set<ActionDefinition> getActions() {
+ 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);
+ }
}