Propagate @NonNull collection annotations
[yangtools.git] / yang / yang-model-api / src / main / java / org / opendaylight / yangtools / yang / model / api / ActionNodeContainer.java
index 7a9a4ebac58401c4c38c2f55415e9482b8c329b9..c258c38d75ef3bc46d7495ee3a4cb786f7b3beb8 100644 (file)
@@ -5,11 +5,15 @@
  * 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 static java.util.Objects.requireNonNull;
+
 import com.google.common.annotations.Beta;
-import java.util.Set;
+import java.util.Collection;
+import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.common.QName;
 
 /**
  * Node which can contain action nodes.
@@ -21,5 +25,22 @@ public interface ActionNodeContainer {
      *
      * @return set of action nodes
      */
-    Set<ActionDefinition> getActions();
+    @NonNull Collection<? extends @NonNull ActionDefinition> getActions();
+
+    /**
+     * Find an action based on its QName. Default implementation searches the set returned by {@link #getActions()}.
+     *
+     * @param qname Action's QName
+     * @return Action definition, if found
+     * @throws NullPointerException if qname is null
+     */
+    default Optional<ActionDefinition> findAction(final QName qname) {
+        requireNonNull(qname);
+        for (ActionDefinition action : getActions()) {
+            if (qname.equals(action.getQName())) {
+                return Optional.of(action);
+            }
+        }
+        return Optional.empty();
+    }
 }