X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fnetconf-util%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Futil%2Fmessages%2FNetconfMessageUtil.java;h=61b23202c3a134c27d975279e2f29f7d7eefefa0;hb=3a71a222b896b9d07e638af62300180799bdac67;hp=91eb86908b169ca9ecff8a77fb803b2d7ee60184;hpb=13a76258537f64367e3036925a0331522a571705;p=controller.git diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageUtil.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageUtil.java index 91eb86908b..61b23202c3 100644 --- a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageUtil.java +++ b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageUtil.java @@ -8,37 +8,73 @@ package org.opendaylight.controller.netconf.util.messages; +import com.google.common.base.Function; +import com.google.common.collect.Collections2; +import java.util.Collection; +import java.util.List; +import javax.annotation.Nonnull; +import org.opendaylight.controller.netconf.api.NetconfDocumentedException; import org.opendaylight.controller.netconf.api.NetconfMessage; +import org.opendaylight.controller.netconf.api.xml.XmlNetconfConstants; import org.opendaylight.controller.netconf.util.xml.XmlElement; -import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.w3c.dom.Document; public final class NetconfMessageUtil { + private static final Logger LOG = LoggerFactory.getLogger(NetconfMessageUtil.class); + private NetconfMessageUtil() {} - public static boolean isOKMessage(NetconfMessage message) { + public static boolean isOKMessage(NetconfMessage message) throws NetconfDocumentedException { return isOKMessage(message.getDocument()); } - public static boolean isOKMessage(Document document) { + public static boolean isOKMessage(Document document) throws NetconfDocumentedException { return isOKMessage(XmlElement.fromDomDocument(document)); } - public static boolean isOKMessage(XmlElement xmlElement) { + public static boolean isOKMessage(XmlElement xmlElement) throws NetconfDocumentedException { + if(xmlElement.getChildElements().size() != 1) { + return false; + } return xmlElement.getOnlyChildElement().getName().equals(XmlNetconfConstants.OK); } - public static boolean isErrorMEssage(NetconfMessage message) { + public static boolean isErrorMessage(NetconfMessage message) throws NetconfDocumentedException { return isErrorMessage(message.getDocument()); } - public static boolean isErrorMessage(Document document) { + public static boolean isErrorMessage(Document document) throws NetconfDocumentedException { return isErrorMessage(XmlElement.fromDomDocument(document)); } - public static boolean isErrorMessage(XmlElement xmlElement) { + public static boolean isErrorMessage(XmlElement xmlElement) throws NetconfDocumentedException { + if(xmlElement.getChildElements().size() != 1) { + return false; + } return xmlElement.getOnlyChildElement().getName().equals(XmlNetconfConstants.RPC_ERROR); + } + + public static Collection extractCapabilitiesFromHello(Document doc) throws NetconfDocumentedException { + XmlElement responseElement = XmlElement.fromDomDocument(doc); + XmlElement capabilitiesElement = responseElement + .getOnlyChildElementWithSameNamespace(XmlNetconfConstants.CAPABILITIES); + List caps = capabilitiesElement.getChildElements(XmlNetconfConstants.CAPABILITY); + return Collections2.transform(caps, new Function() { + + @Override + public String apply(@Nonnull XmlElement input) { + // Trim possible leading/tailing whitespace + try { + return input.getTextContent().trim(); + } catch (NetconfDocumentedException e) { + LOG.trace("Error fetching input text content",e); + return null; + } + } + }); } }