+ @Override
+ public NetconfMessage toActionRequest(final SchemaPath action, final DOMDataTreeIdentifier domDataTreeIdentifier,
+ final NormalizedNode<?, ?> payload) {
+ ActionDefinition actionDefinition = null;
+ for (ActionDefinition actionDef : actions) {
+ if (actionDef.getPath().getLastComponent().equals(action.getLastComponent())) {
+ actionDefinition = actionDef;
+ }
+ }
+ Preconditions.checkNotNull(actionDefinition, "Action does not exist: %s", action.getLastComponent());
+
+ final ContainerSchemaNode inputDef = actionDefinition.getInput();
+ if (inputDef.getChildNodes().isEmpty()) {
+ return new NetconfMessage(NetconfMessageTransformUtil.prepareDomResultForActionRequest(
+ DataSchemaContextTree.from(schemaContext), domDataTreeIdentifier, action, counter,
+ actionDefinition.getQName().getLocalName()).getNode().getOwnerDocument());
+ }
+
+ Preconditions.checkNotNull(payload, "Transforming an action with input: %s, payload cannot be null",
+ action.getLastComponent());
+ Preconditions.checkArgument(payload instanceof ContainerNode,
+ "Transforming an rpc with input: %s, payload has to be a container, but was: %s",
+ action.getLastComponent(), payload);
+
+ // Set the path to the input of action for the node stream writer
+ final DOMResult result = NetconfMessageTransformUtil.prepareDomResultForActionRequest(
+ DataSchemaContextTree.from(schemaContext), domDataTreeIdentifier, inputDef.getPath(), counter,
+ actionDefinition.getQName().getLocalName());
+
+ try {
+ NetconfMessageTransformUtil.writeNormalizedRpc((ContainerNode) payload, result, inputDef.getPath(),
+ schemaContext);
+ } catch (final XMLStreamException | IOException | IllegalStateException e) {
+ throw new IllegalStateException("Unable to serialize " + action, e);
+ }
+
+ final Document node = result.getNode().getOwnerDocument();
+
+ return new NetconfMessage(node);