NETCONF-608 - Change Netconf keepalives to not send during large payload replies
[netconf.git] / netconf / sal-netconf-connector / src / main / java / org / opendaylight / netconf / sal / connect / netconf / util / SchemalessRpcStructureTransformer.java
index 099d2f2dde991c7f7150d1cf57954e735ea48eba..e509fe5389a187e278f5bd303e4f5eaa775eb6e6 100644 (file)
@@ -7,17 +7,22 @@
  */
 package org.opendaylight.netconf.sal.connect.netconf.util;
 
+import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_CONFIG_NODEID;
 import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_CONFIG_QNAME;
+import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_DATA_NODEID;
+import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_DATA_QNAME;
 
-import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import java.util.Collections;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Optional;
 import javax.xml.transform.dom.DOMSource;
-import org.opendaylight.controller.config.util.xml.DocumentedException;
-import org.opendaylight.controller.config.util.xml.XmlElement;
-import org.opendaylight.controller.config.util.xml.XmlUtil;
+import org.opendaylight.netconf.api.DocumentedException;
+import org.opendaylight.netconf.api.xml.XmlElement;
+import org.opendaylight.netconf.api.xml.XmlUtil;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.ModifyAction;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
@@ -49,15 +54,14 @@ class SchemalessRpcStructureTransformer implements RpcStructureTransformer {
         Preconditions.checkArgument(data instanceof AnyXmlNode);
         final List<XmlElement> xmlElements = selectMatchingNodes(getSourceElement(((AnyXmlNode)data).getValue()), path);
         final Document result = XmlUtil.newDocument();
-        final QName dataQName = NetconfMessageTransformUtil.NETCONF_DATA_QNAME;
         final Element dataElement =
-                result.createElementNS(dataQName.getNamespace().toString(), dataQName.getLocalName());
+                result.createElementNS(NETCONF_DATA_QNAME.getNamespace().toString(), NETCONF_DATA_QNAME.getLocalName());
         result.appendChild(dataElement);
         for (XmlElement xmlElement : xmlElements) {
             dataElement.appendChild(result.importNode(xmlElement.getDomElement(), true));
         }
         final AnyXmlNode resultAnyxml = Builders.anyXmlBuilder()
-                .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(dataQName))
+                .withNodeIdentifier(NETCONF_DATA_NODEID)
                 .withValue(new DOMSource(result))
                 .build();
         return Optional.of(resultAnyxml);
@@ -103,8 +107,7 @@ class SchemalessRpcStructureTransformer implements RpcStructureTransformer {
         }
         //append data
         parentXmlStructure.appendChild(document.importNode(dataNode, true));
-        return Builders.anyXmlBuilder()
-                .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(NETCONF_CONFIG_QNAME))
+        return Builders.anyXmlBuilder().withNodeIdentifier(NETCONF_CONFIG_NODEID)
                 .withValue(new DOMSource(document.getDocumentElement()))
                 .build();
     }
@@ -156,7 +159,8 @@ class SchemalessRpcStructureTransformer implements RpcStructureTransformer {
         final YangInstanceIdentifier.NodeIdentifierWithPredicates keyedId =
                 (YangInstanceIdentifier.NodeIdentifierWithPredicates) lastPathArgument;
         final Map<QName, Object> keyValues = keyedId.getKeyValues();
-        for (QName qualifiedName : keyValues.keySet()) {
+        for (Entry<QName, Object> entry : keyValues.entrySet()) {
+            QName qualifiedName = entry.getKey();
             final List<XmlElement> key =
                     dataElement.getChildElementsWithinNamespace(qualifiedName.getLocalName(),
                             qualifiedName.getNamespace().toString());
@@ -170,9 +174,9 @@ class SchemalessRpcStructureTransformer implements RpcStructureTransformer {
             try {
                 textContent = key.get(0).getTextContent();
             } catch (DocumentedException e) {
-                throw new IllegalStateException("Key value not present in key element");
+                throw new IllegalStateException("Key value not present in key element", e);
             }
-            if (!keyValues.get(qualifiedName).equals(textContent)) {
+            if (!entry.getValue().equals(textContent)) {
                 throw new IllegalStateException("Key value in path not equal to key value in xml");
             }
         }
@@ -225,7 +229,7 @@ class SchemalessRpcStructureTransformer implements RpcStructureTransformer {
     }
 
     private static String toOperationString(final ModifyAction operation) {
-        return operation.name().toLowerCase();
+        return operation.name().toLowerCase(Locale.ROOT);
     }
 
     private static Element getSourceElement(final DOMSource source) {