Merge "Bug 1354: Added rpcReplyToDomNodes method."
[yangtools.git] / yang / yang-data-impl / src / main / java / org / opendaylight / yangtools / yang / data / impl / schema / builder / impl / ImmutableMapEntryNodeSchemaAwareBuilder.java
index 44959104390f0eaf8eca1a921d1503439b281b60..c2f81c14a460e0ad753eae1bd98f29fb2ecd2c60 100644 (file)
@@ -11,11 +11,12 @@ import java.util.Collection;
 import java.util.Map;
 
 import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 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.api.DataContainerNodeAttrBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.valid.DataNodeContainerValidator;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.valid.DataValidationException;
 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
 
 import com.google.common.base.Preconditions;
@@ -26,18 +27,18 @@ public final class ImmutableMapEntryNodeSchemaAwareBuilder extends ImmutableMapE
     private final ListSchemaNode schema;
     private final DataNodeContainerValidator validator;
 
-    protected ImmutableMapEntryNodeSchemaAwareBuilder(ListSchemaNode schema) {
-        this.schema = schema;
+    protected ImmutableMapEntryNodeSchemaAwareBuilder(final ListSchemaNode schema) {
+        this.schema = Preconditions.checkNotNull(schema);
         this.validator = new DataNodeContainerValidator(schema);
     }
 
     @Override
-    public ImmutableMapEntryNodeBuilder withNodeIdentifier(InstanceIdentifier.NodeIdentifierWithPredicates nodeIdentifier) {
+    public ImmutableMapEntryNodeBuilder withNodeIdentifier(final YangInstanceIdentifier.NodeIdentifierWithPredicates nodeIdentifier) {
         throw new UnsupportedOperationException("Node identifier created from schema");
     }
 
     @Override
-    public DataContainerNodeBuilder<InstanceIdentifier.NodeIdentifierWithPredicates, MapEntryNode> withChild(DataContainerChild<?, ?> child) {
+    public DataContainerNodeAttrBuilder<YangInstanceIdentifier.NodeIdentifierWithPredicates, MapEntryNode> withChild(final DataContainerChild<?, ?> child) {
         validator.validateChild(child.getIdentifier());
         return super.withChild(child);
     }
@@ -51,27 +52,25 @@ public final class ImmutableMapEntryNodeSchemaAwareBuilder extends ImmutableMapE
     /**
      * Build map entry node identifier from schema, and provided children
      */
-    private InstanceIdentifier.NodeIdentifierWithPredicates constructNodeIdentifier() {
+    private YangInstanceIdentifier.NodeIdentifierWithPredicates constructNodeIdentifier() {
         Collection<QName> keys = schema.getKeyDefinition();
 
-        // If no keys defined, add all child elements as key
-        // FIXME should be all PRESENT child nodes, not all from schema
         if(keys.isEmpty()) {
             keys = childrenQNamesToPaths.keySet();
         }
 
-        Map<QName, Object> keysToValues = Maps.newHashMap();
+        final Map<QName, Object> keysToValues = Maps.newHashMap();
         for (QName key : keys) {
-            // TODO two maps ? find better solution
-            DataContainerChild<?, ?> valueForKey = value.get(childrenQNamesToPaths.get(key));
-            Preconditions.checkState(valueForKey != null, "Key value: %s cannot be empty for: %s", key, schema.getQName());
+        final DataContainerChild<?, ?> valueForKey = getChild(childrenQNamesToPaths.get(key));
+            DataValidationException.checkListKey(valueForKey, key, new YangInstanceIdentifier.NodeIdentifierWithPredicates(
+                    schema.getQName(), keysToValues));
             keysToValues.put(key, valueForKey.getValue());
         }
 
-        return new InstanceIdentifier.NodeIdentifierWithPredicates(schema.getQName(), keysToValues);
+        return new YangInstanceIdentifier.NodeIdentifierWithPredicates(schema.getQName(), keysToValues);
     }
 
-    public static ImmutableMapEntryNodeSchemaAwareBuilder create(ListSchemaNode schema) {
+    public static DataContainerNodeAttrBuilder<YangInstanceIdentifier.NodeIdentifierWithPredicates, MapEntryNode> create(final ListSchemaNode schema) {
         return new ImmutableMapEntryNodeSchemaAwareBuilder(schema);
     }