import java.util.Objects;
import org.opendaylight.yangtools.util.HashCodeBuilder;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.IdentifiableItem;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.Item;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument;
-final class InstanceIdentifierBuilderImpl<T extends DataObject> implements InstanceIdentifier.InstanceIdentifierBuilder<T> {
+final class InstanceIdentifierBuilderImpl<T extends DataObject> implements InstanceIdentifierBuilder<T> {
private final ImmutableList.Builder<PathArgument> pathBuilder = ImmutableList.builder();
private final HashCodeBuilder<PathArgument> hashBuilder;
private final Iterable<? extends PathArgument> basePath;
this.basePath = null;
}
- InstanceIdentifierBuilderImpl(final PathArgument item, final Iterable<? extends PathArgument> pathArguments, final int hash, final boolean wildcard) {
+ InstanceIdentifierBuilderImpl(final PathArgument item, final Iterable<? extends PathArgument> pathArguments,
+ final int hash, final boolean wildcard) {
this.hashBuilder = new HashCodeBuilder<>(hash);
this.basePath = pathArguments;
this.wildcard = wildcard;
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(final Object obj) {
if (this == obj) {
return true;
}
if (obj instanceof InstanceIdentifierBuilderImpl) {
- InstanceIdentifierBuilderImpl<T> otherBuilder = (InstanceIdentifierBuilderImpl<T>) obj;
- return wildcard == otherBuilder.wildcard &&
- Objects.equals(basePath, otherBuilder.basePath) &&
- Objects.equals(arg, otherBuilder.arg) &&
- Objects.equals(hashBuilder.build(), otherBuilder.hashBuilder.build());
+ @SuppressWarnings("unchecked")
+ final InstanceIdentifierBuilderImpl<T> otherBuilder = (InstanceIdentifierBuilderImpl<T>) obj;
+ return wildcard == otherBuilder.wildcard && Objects.equals(basePath, otherBuilder.basePath)
+ && Objects.equals(arg, otherBuilder.arg)
+ && Objects.equals(hashBuilder.build(), otherBuilder.hashBuilder.build());
}
return false;
}
- @SuppressWarnings("unchecked")
- <N extends DataObject> InstanceIdentifierBuilderImpl<N> addNode(final Class<N> container) {
- arg = new Item<N>(container);
- hashBuilder.addArgument(arg);
- pathBuilder.add(arg);
-
- if (Identifiable.class.isAssignableFrom(container)) {
- wildcard = true;
- }
-
- return (InstanceIdentifierBuilderImpl<N>) this;
+ @Override
+ public <N extends ChildOf<? super T>> InstanceIdentifierBuilderImpl<N> child(final Class<N> container) {
+ return addNode(container);
}
- @SuppressWarnings("unchecked")
- <N extends DataObject & Identifiable<K>, K extends Identifier<N>> InstanceIdentifierBuilderImpl<N> addNode(final Class<N> listItem, final K listKey) {
- arg = new IdentifiableItem<N, K>(listItem, listKey);
- hashBuilder.addArgument(arg);
- pathBuilder.add(arg);
- return (InstanceIdentifierBuilderImpl<N>) this;
+ @Override
+ public <C extends ChoiceIn<? super T> & DataObject, N extends ChildOf<? super C>> InstanceIdentifierBuilder<N>
+ child(final Class<C> caze, final Class<N> container) {
+ return addWildNode(Item.of(caze, container));
}
@Override
- public <N extends ChildOf<? super T>> InstanceIdentifierBuilderImpl<N> child(final Class<N> container) {
- return addNode(container);
+ public <N extends Identifiable<K> & ChildOf<? super T>, K extends Identifier<N>> InstanceIdentifierBuilderImpl<N>
+ child(final Class<N> listItem, final K listKey) {
+ return addNode(IdentifiableItem.of(listItem, listKey));
}
@Override
- public <N extends Identifiable<K> & ChildOf<? super T>, K extends Identifier<N>> InstanceIdentifierBuilderImpl<N> child(final Class<N> listItem, final K listKey) {
- return addNode(listItem, listKey);
+ public <C extends ChoiceIn<? super T> & DataObject, K extends Identifier<N>,
+ N extends Identifiable<K> & ChildOf<? super C>> InstanceIdentifierBuilder<N> child(final Class<C> caze,
+ final Class<N> listItem, final K listKey) {
+ return addNode(IdentifiableItem.of(caze, listItem, listKey));
}
/**
* Build an identifier which refers to a specific augmentation of the current InstanceIdentifier referenced by
- * the builder
+ * the builder.
*
- * @param container
- * @param <N>
- * @return
+ * @param container Augmentation to be added
+ * @param <N> Augmentation type
+ * @return This builder
*/
@Override
- public <N extends DataObject & Augmentation<? super T>> InstanceIdentifierBuilderImpl<N> augmentation(final Class<N> container) {
+ public <N extends DataObject & Augmentation<? super T>> InstanceIdentifierBuilderImpl<N> augmentation(
+ final Class<N> container) {
return addNode(container);
}
pathArguments = Iterables.concat(basePath, pathBuilder.build());
}
- @SuppressWarnings("unchecked")
- final InstanceIdentifier<T> ret = (InstanceIdentifier<T>) InstanceIdentifier.trustedCreate(arg, pathArguments, hashBuilder.build(), wildcard);
- return ret;
+ return InstanceIdentifier.trustedCreate(arg, pathArguments, hashBuilder.build(), wildcard);
}
- /*
- * @deprecated Use #build() instead.
- */
- @Override
- @Deprecated
- public InstanceIdentifier<T> toInstance() {
- return build();
+ <N extends DataObject> InstanceIdentifierBuilderImpl<N> addWildNode(final PathArgument newArg) {
+ if (Identifiable.class.isAssignableFrom(newArg.getType())) {
+ wildcard = true;
+ }
+ return addNode(newArg);
+ }
+
+ @SuppressWarnings("unchecked")
+ <N extends DataObject> InstanceIdentifierBuilderImpl<N> addNode(final PathArgument newArg) {
+ arg = newArg;
+ hashBuilder.addArgument(newArg);
+ pathBuilder.add(newArg);
+ return (InstanceIdentifierBuilderImpl<N>) this;
+ }
+
+ private <N extends DataObject> InstanceIdentifierBuilderImpl<N> addNode(final Class<N> container) {
+ return addWildNode(Item.of(container));
}
}