import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.valid.DataNodeContainerValidator;
-import org.opendaylight.yangtools.yang.data.impl.schema.nodes.AbstractImmutableDataContainerNode;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.nodes.AbstractImmutableDataContainerAttrNode;
import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
public class ImmutableMapEntryNodeBuilder
- extends AbstractImmutableDataContainerNodeBuilder<InstanceIdentifier.NodeIdentifierWithPredicates, MapEntryNode> {
+ extends AbstractImmutableDataContainerNodeAttrBuilder<InstanceIdentifier.NodeIdentifierWithPredicates, MapEntryNode> {
protected final Map<QName, InstanceIdentifier.PathArgument> childrenQNamesToPaths;
this.childrenQNamesToPaths = Maps.newLinkedHashMap();
}
- public static DataContainerNodeBuilder<InstanceIdentifier.NodeIdentifierWithPredicates, MapEntryNode> create() {
+ public static DataContainerNodeAttrBuilder<InstanceIdentifier.NodeIdentifierWithPredicates, MapEntryNode> create() {
return new ImmutableMapEntryNodeBuilder();
}
// FIXME, find better solution than 2 maps (map from QName to Child ?)
@Override
- public DataContainerNodeBuilder<InstanceIdentifier.NodeIdentifierWithPredicates, MapEntryNode> withValue(List<DataContainerChild<? extends InstanceIdentifier.PathArgument, ?>> value) {
- for (DataContainerChild<? extends InstanceIdentifier.PathArgument, ?> childId : value) {
- this.childrenQNamesToPaths.put(childId.getNodeType(), childId.getIdentifier());
+ public DataContainerNodeAttrBuilder<InstanceIdentifier.NodeIdentifierWithPredicates, MapEntryNode> withValue(final List<DataContainerChild<? extends InstanceIdentifier.PathArgument, ?>> value) {
+ for (final DataContainerChild<? extends InstanceIdentifier.PathArgument, ?> childId : value) {
+ final InstanceIdentifier.PathArgument identifier = childId.getIdentifier();
+
+ // Augmentation nodes cannot be keys, and do not have to be present in childrenQNamesToPaths map
+ if(identifier instanceof InstanceIdentifier.AugmentationIdentifier) {
+ continue;
+ }
+
+ this.childrenQNamesToPaths.put(childId.getNodeType(), identifier);
}
return super.withValue(value);
}
@Override
- public DataContainerNodeBuilder<InstanceIdentifier.NodeIdentifierWithPredicates, MapEntryNode> withChild(DataContainerChild<?, ?> child) {
- childrenQNamesToPaths.put(child.getNodeType(), child.getIdentifier());
+ public DataContainerNodeAttrBuilder<InstanceIdentifier.NodeIdentifierWithPredicates, MapEntryNode> withChild(final DataContainerChild<?, ?> child) {
+ // Augmentation nodes cannot be keys, and do not have to be present in childrenQNamesToPaths map
+ if(child.getIdentifier() instanceof InstanceIdentifier.AugmentationIdentifier == false) {
+ childrenQNamesToPaths.put(child.getNodeType(), child.getIdentifier());
+ }
return super.withChild(child);
}
+ @Override
public MapEntryNode build() {
checkKeys();
- return new ImmutableMapEntryNode(nodeIdentifier, value);
+ return new ImmutableMapEntryNode(nodeIdentifier, value, attributes);
}
private void checkKeys() {
- for (QName keyQName : nodeIdentifier.getKeyValues().keySet()) {
+ for (final QName keyQName : nodeIdentifier.getKeyValues().keySet()) {
- InstanceIdentifier.PathArgument childNodePath = childrenQNamesToPaths.get(keyQName);
- DataContainerChild<?, ?> childNode = value.get(childNodePath);
+ final InstanceIdentifier.PathArgument childNodePath = childrenQNamesToPaths.get(keyQName);
+ final DataContainerChild<?, ?> childNode = value.get(childNodePath);
Preconditions.checkNotNull(childNode, "Key child node: %s, not present", keyQName);
- Object actualValue = nodeIdentifier.getKeyValues().get(keyQName);
- Object expectedValue = childNode.getValue();
+ final Object actualValue = nodeIdentifier.getKeyValues().get(keyQName);
+ final Object expectedValue = childNode.getValue();
Preconditions.checkArgument(expectedValue.equals(actualValue),
"Key child node with unexpected value, is: %s, should be: %s", actualValue, expectedValue);
}
}
- static final class ImmutableMapEntryNode extends AbstractImmutableDataContainerNode<InstanceIdentifier.NodeIdentifierWithPredicates> implements MapEntryNode {
+ static final class ImmutableMapEntryNode extends AbstractImmutableDataContainerAttrNode<InstanceIdentifier.NodeIdentifierWithPredicates> implements MapEntryNode {
- ImmutableMapEntryNode(InstanceIdentifier.NodeIdentifierWithPredicates nodeIdentifier,
- Map<InstanceIdentifier.PathArgument, DataContainerChild<? extends InstanceIdentifier.PathArgument, ?>> children) {
- super(children, nodeIdentifier);
+ ImmutableMapEntryNode(final InstanceIdentifier.NodeIdentifierWithPredicates nodeIdentifier,
+ final Map<InstanceIdentifier.PathArgument, DataContainerChild<? extends InstanceIdentifier.PathArgument, ?>> children, final Map<QName, String> attributes) {
+ super(ImmutableMap.copyOf(children), nodeIdentifier, attributes);
}
}
}