Expose completion future from WriteOperations
[mdsal.git] / dom / mdsal-dom-broker / src / main / java / org / opendaylight / mdsal / dom / broker / DOMActionRoutingTable.java
index 6fdfc124a2d461a17883cca3a3381014bc9b2a9e..a118cfe5e853226c58712dc9e530722ad5f70f20 100644 (file)
@@ -14,43 +14,37 @@ import com.google.common.collect.ListMultimap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.opendaylight.mdsal.dom.api.DOMActionAvailabilityExtension.AvailabilityListener;
 import org.opendaylight.mdsal.dom.api.DOMActionImplementation;
 import org.opendaylight.mdsal.dom.api.DOMActionInstance;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
 import org.opendaylight.yangtools.yang.model.api.ActionDefinition;
-import org.opendaylight.yangtools.yang.model.api.ActionNodeContainer;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil;
-
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
 
 /**
  * Definition of Action routing table.
  */
 @Beta
-@NonNullByDefault
 final class DOMActionRoutingTable extends AbstractDOMRoutingTable<DOMActionInstance, DOMDataTreeIdentifier,
-        DOMActionImplementation, AvailabilityListener, DOMActionRoutingTableEntry> {
+        DOMActionImplementation, AvailabilityListener, Absolute, DOMActionRoutingTableEntry> {
     static final DOMActionRoutingTable EMPTY = new DOMActionRoutingTable(ImmutableMap.of(), null);
 
-    private DOMActionRoutingTable(final Map<SchemaPath, DOMActionRoutingTableEntry> actions,
-            final SchemaContext schemaContext) {
+    private DOMActionRoutingTable(final Map<Absolute, DOMActionRoutingTableEntry> actions,
+            final EffectiveModelContext schemaContext) {
         super(actions, schemaContext);
     }
 
     @Override
-    protected DOMActionRoutingTable newInstance(final Map<SchemaPath, DOMActionRoutingTableEntry> operations,
-            final SchemaContext schemaContext) {
+    protected DOMActionRoutingTable newInstance(final Map<Absolute, DOMActionRoutingTableEntry> operations,
+            final EffectiveModelContext schemaContext) {
         return new DOMActionRoutingTable(operations, schemaContext);
     }
 
     @Override
-    protected ListMultimap<SchemaPath, DOMDataTreeIdentifier> decomposeIdentifiers(
+    protected ListMultimap<Absolute, DOMDataTreeIdentifier> decomposeIdentifiers(
             final Set<DOMActionInstance> instances) {
-        final ListMultimap<SchemaPath, DOMDataTreeIdentifier> ret = LinkedListMultimap.create();
+        final ListMultimap<Absolute, DOMDataTreeIdentifier> ret = LinkedListMultimap.create();
         for (DOMActionInstance instance : instances) {
             instance.getDataTrees().forEach(id -> ret.put(instance.getType(), id));
         }
@@ -58,28 +52,10 @@ final class DOMActionRoutingTable extends AbstractDOMRoutingTable<DOMActionInsta
     }
 
     @Override
-    protected DOMActionRoutingTableEntry createOperationEntry(final SchemaContext context, final SchemaPath type,
-            final Map<DOMDataTreeIdentifier, List<DOMActionImplementation>> implementations) {
-        final ActionDefinition actionDef = findActionDefinition(context, type);
-        if (actionDef == null) {
-            //FIXME: return null directly instead of providing kind of unknown entry.
-            return null;
-        }
-
-        return new DOMActionRoutingTableEntry(type, implementations);
-    }
-
-    private static ActionDefinition findActionDefinition(final SchemaContext context, final SchemaPath path) {
-        final SchemaNode node = SchemaContextUtil.findDataSchemaNode(context, path.getParent());
-        if (node != null) {
-            if (node instanceof ActionNodeContainer) {
-                for (ActionDefinition action : ((ActionNodeContainer) node).getActions()) {
-                    if (action.getQName().equals(path.getLastComponent())) {
-                        return action;
-                    }
-                }
-            }
-        }
-        return null;
+    protected DOMActionRoutingTableEntry createOperationEntry(final EffectiveModelContext context,
+            final Absolute type, final Map<DOMDataTreeIdentifier, List<DOMActionImplementation>> implementations) {
+        return context.findSchemaTreeNode(ActionDefinition.class, type)
+            .map(dummy -> new DOMActionRoutingTableEntry(type, implementations))
+            .orElse(null);
     }
 }