import static java.util.Objects.requireNonNull;
import com.google.common.annotations.Beta;
-import com.google.common.collect.ImmutableMap;
import java.util.Collection;
import java.util.Map;
import java.util.Optional;
* @param <N> Namespace identifier type
* @param namespace Namespace type
* @param identifier Identifier of element.
- * @return Value if present, null otherwise.
+ * @return Value if present
*/
//<K, V, N extends IdentifierNamespace<? super K, ? extends V>> V
- // FIXME: 4.0.0: make this return an Optional, not a nullable
- <K, V, N extends IdentifierNamespace<K, V>> @Nullable V get(@NonNull Class<N> namespace, @NonNull K identifier);
+ <K, V, N extends IdentifierNamespace<K, V>> Optional<? extends V> get(@NonNull Class<N> namespace,
+ @NonNull K identifier);
/**
* Returns all local values from supplied namespace.
* @param <V> Value type
* @param <N> Namespace identifier type
* @param namespace Namespace type
- * @return Value if present, null otherwise.
+ * @return Key-value mappings, empty if the namespace does not exist.
+ * @throws NullPointerException if namespace is null
*/
- // FIXME: 4.0.0: make this contract return empty maps on non-presence
- <K, V, N extends IdentifierNamespace<K, V>> @Nullable Map<K, V> getAll(@NonNull Class<N> namespace);
+ <K, V, N extends IdentifierNamespace<K, V>> @NonNull Map<K, V> getAll(@NonNull Class<N> namespace);
/**
* Returns all local values from supplied namespace.
* @param <N> Namespace identifier type
* @param namespace Namespace type
* @return Key-value mappings, empty if the namespace does not exist.
+ * @throws NullPointerException if namespace is null
+ * @deprecated Use {@link #getAll(Class)} instead
*/
- // FIXME: 4.0.0: remove this in favor of fixed getAll()
+ @Deprecated(forRemoval = true)
default <K, V, N extends IdentifierNamespace<K, V>> @NonNull Map<K, V> findAll(final @NonNull Class<N> namespace) {
- final Map<K, V> map = getAll(requireNonNull(namespace));
- return map == null ? ImmutableMap.of() : map;
+ return getAll(requireNonNull(namespace));
}
/**
import com.google.common.collect.ForwardingObject;
import java.util.Collection;
import java.util.Map;
+import java.util.Optional;
/**
* Utility forwarding implementation of {@link EffectiveStatement} contract. This class is useful for implementing
}
@Override
- public <K, V, N extends IdentifierNamespace<K, V>> V get(final Class<N> namespace, final K identifier) {
+ public <K, V, N extends IdentifierNamespace<K, V>> Optional<? extends V> get(final Class<N> namespace,
+ final K identifier) {
return delegate().get(namespace, identifier);
}
*/
default <E extends DataTreeEffectiveStatement<?>> @NonNull Optional<E> findDataTreeNode(
final @NonNull QName qname) {
- @SuppressWarnings("unchecked")
- final E result = (E) get(Namespace.class, requireNonNull(qname));
- return Optional.ofNullable(result);
+ return get(Namespace.class, requireNonNull(qname));
}
}
*/
default <E extends SchemaTreeEffectiveStatement<?>> @NonNull Optional<E> findSchemaTreeNode(
final @NonNull QName qname) {
- @SuppressWarnings("unchecked")
- final E result = (E) get(Namespace.class, requireNonNull(qname));
- return Optional.ofNullable(result);
+ return get(Namespace.class, requireNonNull(qname));
}
}
default Optional<ActionDefinition> findAction(final QName qname) {
// 'action' identifier must never collide with another element, hence if we look it up and it ends up being
// an ActionDefinition, we have found a match.
- final Object child = get(Namespace.class, qname);
- return child instanceof ActionDefinition ? Optional.of((ActionDefinition) child) : Optional.empty();
+ return get(Namespace.class, qname)
+ .flatMap(child -> child instanceof ActionDefinition ? Optional.of(child) : Optional.empty());
}
}
default Optional<NotificationDefinition> findNotification(final QName qname) {
// 'notification' identifier must never collide with another element, hence if we look it up and it ends up
// being an NotificationDefinition, we have found a match.
- final Object child = get(Namespace.class, qname);
- return child instanceof NotificationDefinition ? Optional.of((NotificationDefinition) child) : Optional.empty();
+ return get(Namespace.class, qname)
+ .flatMap(child -> child instanceof NotificationDefinition ? Optional.of(child) : Optional.empty());
}
}
package org.opendaylight.yangtools.yang.model.api.meta;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertSame;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doCallRealMethod;
import static org.mockito.Mockito.doReturn;
import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
doCallRealMethod().when(stmt).findFirstEffectiveSubstatement(any());
doCallRealMethod().when(stmt).findFirstEffectiveSubstatementArgument(any());
doCallRealMethod().when(stmt).streamEffectiveSubstatements(any());
- doCallRealMethod().when(stmt).findAll(any());
}
@Test
assertEquals(ImmutableList.of(stmt2), stmt.streamEffectiveSubstatements(Effectivestatement2.class)
.collect(Collectors.toList()));
}
-
- @Test
- public void testFindAll() {
- doReturn(mockNamespace).when(stmt).getAll(any());
- assertSame(mockNamespace, stmt.findAll(IdentifierNamespace.class));
- }
-
- @Test
- public void testFindAllNone() {
- doReturn(null).when(stmt).getAll(any());
- assertEquals(ImmutableMap.of(), stmt.findAll(IdentifierNamespace.class));
- }
}
import com.google.common.annotations.Beta;
import com.google.common.collect.Collections2;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
}
@Override
- public final <K, V, N extends IdentifierNamespace<K, V>> V get(final Class<N> namespace, final K identifier) {
- return findAll(namespace).get(requireNonNull(identifier));
+ public final <K, V, N extends IdentifierNamespace<K, V>> Optional<? extends V> get(final Class<N> namespace,
+ final K identifier) {
+ return Optional.ofNullable(getAll(namespace).get(requireNonNull(identifier)));
}
@Override
public final <K, V, N extends IdentifierNamespace<K, V>> Map<K, V> getAll(final Class<N> namespace) {
- return getNamespaceContents(requireNonNull(namespace)).orElse(null);
+ final Optional<? extends Map<K, V>> ret = getNamespaceContents(requireNonNull(namespace));
+ return ret.isPresent() ? ret.get() : ImmutableMap.of();
}
/**
import com.google.common.collect.ImmutableList;
import java.util.Collection;
import java.util.Map;
+import java.util.Optional;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.meta.IdentifierNamespace;
}
@Override
- public final <K, V, N extends IdentifierNamespace<K, V>> V get(final Class<N> namespace, final K identifier) {
+ public final <K, V, N extends IdentifierNamespace<K, V>> Optional<? extends V> get(final Class<N> namespace,
+ final K identifier) {
throw new UnsupportedOperationException("Not implemented yet.");
}
import com.google.common.collect.ImmutableList;
import java.util.Collection;
import java.util.Map;
+import java.util.Optional;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.meta.IdentifierNamespace;
}
@Override
- public final <K, V, N extends IdentifierNamespace<K, V>> V get(final Class<N> namespace, final K identifier) {
+ public final <K, V, N extends IdentifierNamespace<K, V>> Optional<? extends V> get(final Class<N> namespace,
+ final K identifier) {
throw new UnsupportedOperationException("Not implemented yet.");
}
import static java.util.Objects.requireNonNull;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
import java.util.Collection;
import java.util.Map;
+import java.util.Optional;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
}
@Override
- public final <K, V, N extends IdentifierNamespace<K, V>> V get(final Class<N> namespace, final K identifier) {
- // TODO Auto-generated method stub
- return null;
+ public final <K, V, N extends IdentifierNamespace<K, V>> Optional<? extends V> get(final Class<N> namespace,
+ final K identifier) {
+ // FIXME: 5.0.0: implement this
+ return Optional.empty();
}
@Override
public final <K, V, N extends IdentifierNamespace<K, V>> Map<K, V> getAll(final Class<N> namespace) {
- // TODO Auto-generated method stub
- return null;
+ // FIXME: 5.0.0: implement this
+ return ImmutableMap.of();
}
@Override
import java.util.Collection;
import java.util.Map;
+import java.util.Optional;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
}
@Override
- public <K, V, N extends IdentifierNamespace<K, V>> V get(final Class<N> namespace, final K identifier) {
+ public <K, V, N extends IdentifierNamespace<K, V>> Optional<? extends V> get(final Class<N> namespace,
+ final K identifier) {
return TypedefEffectiveStatementImpl.this.get(namespace, identifier);
}