@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; }
/** * Transform a keyed instance identifier into a wildcarded one, keeping keys except the last item. */ @SuppressWarnings("unchecked") public static <D extends DataObject> InstanceIdentifier<D> makeIidLastWildcarded(final InstanceIdentifier<D> id) { final InstanceIdentifier.Item<D> wildcardedItem = new InstanceIdentifier.Item<>(id.getTargetType()); final Iterable<InstanceIdentifier.PathArgument> pathArguments = id.getPathArguments(); return (InstanceIdentifier<D>) InstanceIdentifier.create( Iterables.concat( Iterables.limit(pathArguments, Iterables.size(pathArguments) - 1), Collections.singleton(wildcardedItem))); }
@SuppressWarnings("unchecked") public static <D extends DataObject> InstanceIdentifier<D> appendTypeToId( final InstanceIdentifier<? extends DataObject> parentId, final InstanceIdentifier<D> type) { final InstanceIdentifier.PathArgument t = new InstanceIdentifier.Item<>(type.getTargetType()); return (InstanceIdentifier<D>) InstanceIdentifier.create(Iterables.concat( parentId.getPathArguments(), Collections.singleton(t))); }
/** * Create an instance identifier for a very specific object type. * * For example * <pre> * new InstanceIdentifier(Nodes.class) * </pre> * would create an InstanceIdentifier for an object of type Nodes * * @param type The type of the object which this instance identifier represents * @return InstanceIdentifier instance */ @SuppressWarnings("unchecked") public static <T extends DataObject> InstanceIdentifier<T> create(final Class<T> type) { return (InstanceIdentifier<T>) create(Collections.<PathArgument> singletonList(new Item<>(type))); }
@SuppressWarnings("unchecked") public final <N extends ChildOf<? super T>> InstanceIdentifier<N> child(final Class<N> container) { final PathArgument arg = new Item<>(container); return (InstanceIdentifier<N>) childIdentifier(arg); }
/** * Create a builder rooted at this key. * * @return A builder instance */ public InstanceIdentifierBuilder<T> builder() { return new InstanceIdentifierBuilderImpl<T>(new Item<T>(targetType), pathArguments, hash, isWildcarded()); }
@Override @SuppressWarnings("unchecked") public <C extends ChildOf<? super T>> DataObjectModification<C> getModifiedChildContainer(final Class<C> arg) { return (DataObjectModification<C>) getModifiedChild(new InstanceIdentifier.Item<>(arg)); }
private static InstanceIdentifier.PathArgument cleanPathArgumentFromKeys(final InstanceIdentifier.PathArgument pathArgument) { return pathArgument instanceof InstanceIdentifier.IdentifiableItem<?, ?> ? new InstanceIdentifier.Item<>(pathArgument.getType()) : pathArgument; } }
@Override @SuppressWarnings("unchecked") public <C extends Augmentation<T> & DataObject> DataObjectModification<C> getModifiedAugmentation( final Class<C> augmentation) { return (DataObjectModification<C>) getModifiedChild(new InstanceIdentifier.Item<>(augmentation)); }
/** * Return a PathArgument instance backed by the specified class. * * @param type Backing class * @param <T> Item type * @return A new PathArgument * @throws NullPointerException if {@code} is null. */ public static <T extends DataObject> Item<T> of(final Class<T> type) { return new Item<>(type); }
@SuppressWarnings("unchecked") public final <N extends DataObject & Augmentation<? super T>> InstanceIdentifier<N> augmentation( final Class<N> container) { final PathArgument arg = new Item<>(container); return (InstanceIdentifier<N>) childIdentifier(arg); }