* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
-
package org.opendaylight.yangtools.yang.model.api;
-import com.google.common.collect.ImmutableSet;
-import java.util.Set;
-import javax.annotation.Nonnull;
+import static java.util.Objects.requireNonNull;
+
+import java.util.Collection;
+import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.common.QName;
public interface NotificationNodeContainer {
+ /**
+ * Return the set of notifications in this container, keyed by QName. RFC7950 specifies that
+ * {@link AugmentationSchemaNode}s, {@link GroupingDefinition}s, {@link ListSchemaNode}s and
+ * {@link ContainerSchemaNode}s can also contain {@link NotificationDefinition}s.
+ *
+ * @return set of notification nodes
+ */
+ @NonNull Collection<? extends NotificationDefinition> getNotifications();
/**
- * All implementations should override this method.
- * The default definition of this method is used in YANG 1.0 (RFC6020) implementations of
- * AugmentationSchema, GroupingDefinition, ListSchemaNode and ContainerSchemaNode
- * which do not allow action statements.
- * These YANG statements have been changed in YANG 1.1 (RFC7950) and can now contain notification statements.
- *
- * The default definition is also used by implementations of ContainerSchemaNode which do not support
- * notification statements such as InputEffectiveStatementImpl and OutputEffectiveStatementImpl.
+ * Find a notification based on its QName. Default implementation searches the set returned by
+ * {@link #getNotifications()}.
*
- * @return set of notification nodes
+ * @param qname Notification QName
+ * @return Notification definition, if found
+ * @throws NullPointerException if qname is null
*/
- @Nonnull default Set<NotificationDefinition> getNotifications() {
- return ImmutableSet.of();
+ default Optional<NotificationDefinition> findNotification(final QName qname) {
+ requireNonNull(qname);
+ for (NotificationDefinition notif : getNotifications()) {
+ if (qname.equals(notif.getQName())) {
+ return Optional.of(notif);
+ }
+ }
+ return Optional.empty();
}
}