*/
package org.opendaylight.yangtools.yang.data.impl.schema.builder.impl;
-import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
+import static java.util.Objects.requireNonNull;
+
+import java.util.Optional;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
+import org.opendaylight.yangtools.yang.data.impl.schema.SchemaUtils;
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.transform.base.SchemaUtils;
-import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode;
-
-import com.google.common.base.Preconditions;
-import com.google.common.base.Supplier;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.valid.DataValidationException;
+import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
public class ImmutableChoiceNodeSchemaAwareBuilder extends ImmutableChoiceNodeBuilder {
+ private final ChoiceSchemaNode schema;
- private final org.opendaylight.yangtools.yang.model.api.ChoiceNode schema;
- private ChoiceCaseNode detectedCase;
- private DataNodeContainerValidator validator;
+ private @Nullable DataNodeContainerValidator validator = null;
- protected ImmutableChoiceNodeSchemaAwareBuilder(org.opendaylight.yangtools.yang.model.api.ChoiceNode schema) {
- this.schema = Preconditions.checkNotNull(schema);
- super.withNodeIdentifier(new InstanceIdentifier.NodeIdentifier(schema.getQName()));
+ protected ImmutableChoiceNodeSchemaAwareBuilder(final ChoiceSchemaNode schema) {
+ this.schema = requireNonNull(schema, "Schema was null");
+ super.withNodeIdentifier(NodeIdentifier.create(schema.getQName()));
}
@Override
- public DataContainerNodeBuilder<InstanceIdentifier.NodeIdentifier, ChoiceNode> withNodeIdentifier(InstanceIdentifier.NodeIdentifier nodeIdentifier) {
+ public DataContainerNodeBuilder<NodeIdentifier, ChoiceNode> withNodeIdentifier(
+ final NodeIdentifier withNodeIdentifier) {
throw new UnsupportedOperationException("Node identifier created from schema");
}
@Override
- public DataContainerNodeBuilder<InstanceIdentifier.NodeIdentifier, ChoiceNode> withChild(final DataContainerChild<?, ?> child) {
- if(detectedCase == null) {
- detectedCase = SchemaUtils.detectCase(schema, child).or(new Supplier<ChoiceCaseNode>() {
- @Override
- public ChoiceCaseNode get() {
- throw new IllegalArgumentException(String.format("Unknown child node: %s, for choice: %s", child.getNodeType(),
- schema.getQName()));
- }
- });
- validator = new DataNodeContainerValidator(detectedCase);
+ public DataContainerNodeBuilder<NodeIdentifier, ChoiceNode> withChild(final DataContainerChild child) {
+ if (validator == null) {
+ Optional<CaseSchemaNode> detectedCaseOpt = SchemaUtils.detectCase(schema, child);
+ DataValidationException.checkLegalChild(detectedCaseOpt.isPresent(), child.getIdentifier(), schema);
+ validator = new DataNodeContainerValidator(detectedCaseOpt.get());
}
- validator.validateChild(child.getIdentifier());
-
- return super.withChild(child);
+ return super.withChild(validator.validateChild(child));
}
@Override
return super.build();
}
- public static DataContainerNodeBuilder<InstanceIdentifier.NodeIdentifier, ChoiceNode> create(org.opendaylight.yangtools.yang.model.api.ChoiceNode schema) {
+ public static DataContainerNodeBuilder<NodeIdentifier, ChoiceNode> create(final ChoiceSchemaNode schema) {
return new ImmutableChoiceNodeSchemaAwareBuilder(schema);
}
}