+ public static DOMResult prepareDomResultForActionRequest(DOMDataTreeIdentifier domDataTreeIdentifier,
+ final SchemaPath actionSchemaPath, final MessageCounter counter, String action) {
+ final Document document = XmlUtil.newDocument();
+ final Element rpcNS =
+ document.createElementNS(NETCONF_RPC_QNAME.getNamespace().toString(), NETCONF_RPC_QNAME.getLocalName());
+ // set msg id
+ rpcNS.setAttribute(MESSAGE_ID_ATTR, counter.getNewMessageId(MESSAGE_ID_PREFIX));
+
+ final Element actionNS = document.createElementNS(NETCONF_ACTION_NAMESPACE.toString(), NETCONF_ACTION);
+
+ final Element actionData = prepareActionData(actionNS,
+ domDataTreeIdentifier.getRootIdentifier().getPathArguments().iterator(), document);
+
+ Element specificActionElement = document.createElement(action);
+ actionData.appendChild(specificActionElement);
+ rpcNS.appendChild(actionNS);
+ document.appendChild(rpcNS);
+ return new DOMResult(specificActionElement);
+ }
+
+ private static Element prepareActionData(Element actionNS, Iterator<PathArgument> iterator, Document document) {
+ if (iterator.hasNext()) {
+ PathArgument next = iterator.next();
+ final QName actualNS = next.getNodeType();
+
+ final Element actualElement = document.createElementNS(actualNS.getNamespace().toString(),
+ actualNS.getLocalName());
+ if (next instanceof NodeWithValue) {
+ actualElement.setNodeValue(((NodeWithValue) next).getValue().toString());
+ } else if (next instanceof NodeIdentifierWithPredicates) {
+ for (Entry<QName, Object> entry : ((NodeIdentifierWithPredicates) next).getKeyValues().entrySet()) {
+ final Element entryElement = document.createElementNS(entry.getKey().getNamespace().toString(),
+ entry.getKey().getLocalName());
+ entryElement.setTextContent(entry.getValue().toString());
+ entryElement.setNodeValue(entry.getValue().toString());
+ actualElement.appendChild(entryElement);
+ }
+ }
+ actionNS.appendChild(actualElement);
+ return prepareActionData(actualElement, iterator, document);
+ } else {
+ return actionNS;
+ }
+ }
+
+ @SuppressWarnings("checkstyle:IllegalCatch")