Optimize Status statement declarations
[yangtools.git] / yang / yang-model-api / src / main / java / org / opendaylight / yangtools / yang / model / api / NotificationNodeContainer.java
index a8b8ea5f4a6213afe54faaea39dd8dbe1a0c6786..f77caf9af80287b3db732767cd1f9d0364b0c7bd 100644 (file)
@@ -5,28 +5,40 @@
  * 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();
     }
 }