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
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));
}
}
@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);
}
}