2 * Copyright (c) 2019 Pantheon Technologies, s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.yang.data.impl.schema.tree;
10 import static com.google.common.base.Preconditions.checkArgument;
11 import static java.util.Objects.requireNonNull;
13 import com.google.common.base.MoreObjects;
14 import java.util.function.Function;
15 import java.util.function.Supplier;
16 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
17 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
18 import org.opendaylight.yangtools.yang.data.api.schema.builder.NormalizedNodeContainerBuilder;
20 final class NormalizedNodeContainerSupport<K extends PathArgument, T extends NormalizedNode> {
21 final Function<T, NormalizedNodeContainerBuilder<K, ?, ?, T>> copyBuilder;
22 final Supplier<NormalizedNodeContainerBuilder<K, ?, ?, T>> emptyBuilder;
23 final ChildTrackingPolicy childPolicy;
24 final Class<T> requiredClass;
26 NormalizedNodeContainerSupport(final Class<T> requiredClass, final ChildTrackingPolicy childPolicy,
27 final Function<T, NormalizedNodeContainerBuilder<K, ?, ?, T>> copyBuilder,
28 final Supplier<NormalizedNodeContainerBuilder<K, ?, ?, T>> emptyBuilder) {
29 this.requiredClass = requireNonNull(requiredClass);
30 this.childPolicy = requireNonNull(childPolicy);
31 this.copyBuilder = requireNonNull(copyBuilder);
32 this.emptyBuilder = requireNonNull(emptyBuilder);
35 NormalizedNodeContainerSupport(final Class<T> requiredClass,
36 final Function<T, NormalizedNodeContainerBuilder<K, ?, ?, T>> copyBuilder,
37 final Supplier<NormalizedNodeContainerBuilder<K, ?, ?, T>> emptyBuilder) {
38 this(requiredClass, ChildTrackingPolicy.UNORDERED, copyBuilder, emptyBuilder);
41 NormalizedNodeContainerBuilder<?, ?, ?, T> createBuilder(final NormalizedNode original) {
42 return copyBuilder.apply(cast(original));
45 NormalizedNode createEmptyValue(final NormalizedNode original) {
46 return emptyBuilder.get().withNodeIdentifier((K) cast(original).getIdentifier()).build();
49 private T cast(final NormalizedNode original) {
50 checkArgument(requiredClass.isInstance(original), "Require %s, got %s", requiredClass, original);
51 return requiredClass.cast(original);
55 public String toString() {
56 return MoreObjects.toStringHelper(this).add("requiredClass", requiredClass).toString();