package org.opendaylight.netconf.nettyutil.handler.exi;
-import com.google.common.collect.Lists;
+import com.google.common.annotations.VisibleForTesting;
+import java.util.ArrayList;
import java.util.List;
-import org.opendaylight.controller.config.util.xml.XmlUtil;
import org.opendaylight.netconf.api.NetconfMessage;
import org.opendaylight.netconf.api.xml.XmlNetconfConstants;
-import org.openexi.proc.common.EXIOptions;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.opendaylight.netconf.api.xml.XmlUtil;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
* Start-exi netconf message.
*/
public final class NetconfStartExiMessage extends NetconfMessage {
-
+ @VisibleForTesting
public static final String START_EXI = "start-exi";
- public static final String ALIGNMENT_KEY = "alignment";
- public static final String FIDELITY_KEY = "fidelity";
- public static final String COMMENTS_KEY = "comments";
- public static final String DTD_KEY = "dtd";
- public static final String LEXICAL_VALUES_KEY = "lexical-values";
- public static final String PIS_KEY = "pis";
- public static final String PREFIXES_KEY = "prefixes";
- private static final Logger LOG = LoggerFactory.getLogger(NetconfStartExiMessage.class);
+
private NetconfStartExiMessage(final Document doc) {
super(doc);
}
- public static NetconfStartExiMessage create(final EXIOptions exiOptions, final String messageId) {
+ public static NetconfStartExiMessage create(final EXIParameters exiOptions, final String messageId) {
final Document doc = XmlUtil.newDocument();
final Element rpcElement = doc.createElementNS(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0,
XmlNetconfConstants.RPC_KEY);
rpcElement.setAttributeNS(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0,
XmlNetconfConstants.MESSAGE_ID, messageId);
- // TODO draft http://tools.ietf.org/html/draft-varga-netconf-exi-capability-02#section-3.5.1 has no namespace for start-exi element in xml
+ // TODO draft http://tools.ietf.org/html/draft-varga-netconf-exi-capability-02#section-3.5.1 has no namespace
+ // for start-exi element in xml
final Element startExiElement = doc.createElementNS(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_EXI_1_0,
START_EXI);
return new NetconfStartExiMessage(doc);
}
- private static void addFidelity(final EXIOptions exiOptions, final Document doc, final Element startExiElement) {
- final List<Element> fidelityElements = Lists.newArrayList();
- createFidelityElement(doc, fidelityElements, exiOptions.getPreserveComments(), COMMENTS_KEY);
- createFidelityElement(doc, fidelityElements, exiOptions.getPreserveDTD(), DTD_KEY);
- createFidelityElement(doc, fidelityElements, exiOptions.getPreserveLexicalValues(), LEXICAL_VALUES_KEY);
- createFidelityElement(doc, fidelityElements, exiOptions.getPreservePIs(), PIS_KEY);
- createFidelityElement(doc, fidelityElements, exiOptions.getPreserveNS(), PREFIXES_KEY);
+ private static void addFidelity(final EXIParameters exiOptions, final Document doc, final Element startExiElement) {
+ final List<Element> fidelityElements = new ArrayList<>(5);
+ createFidelityElement(doc, fidelityElements, exiOptions.getPreserveComments());
+ createFidelityElement(doc, fidelityElements, exiOptions.getPreserveDTD());
+ createFidelityElement(doc, fidelityElements, exiOptions.getPreserveLexicalValues());
+ createFidelityElement(doc, fidelityElements, exiOptions.getPreservePIs());
+ createFidelityElement(doc, fidelityElements, exiOptions.getPreservePrefixes());
- if (fidelityElements.isEmpty() == false) {
+ if (!fidelityElements.isEmpty()) {
final Element fidelityElement = doc.createElementNS(
- XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_EXI_1_0, FIDELITY_KEY);
+ XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_EXI_1_0, EXIParameters.EXI_PARAMETER_FIDELITY);
for (final Element element : fidelityElements) {
fidelityElement.appendChild(element);
}
}
}
- @SuppressWarnings("checkstyle:FallThrough")
- private static void addAlignment(final EXIOptions exiOptions, final Document doc, final Element startExiElement) {
+ private static void addAlignment(final EXIParameters exiOptions, final Document doc,
+ final Element startExiElement) {
final Element alignmentElement = doc.createElementNS(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_EXI_1_0,
- ALIGNMENT_KEY);
-
- String alignmentString;
- switch (exiOptions.getAlignmentType()) {
- case byteAligned: {
- alignmentString = EXIParameters.EXI_PARAMETER_BYTE_ALIGNED;
- break;
- }
- case compress: {
- alignmentString = EXIParameters.EXI_PARAMETER_COMPRESSED;
- break;
- }
- case preCompress: {
- alignmentString = EXIParameters.EXI_PARAMETER_PRE_COMPRESSION;
- break;
- }
- default:
- LOG.warn("Unexpected value in EXI alignment type: {} , using default value",
- exiOptions.getAlignmentType());
- case bitPacked: {
- alignmentString = EXIParameters.EXI_PARAMETER_BIT_PACKED;
- break;
- }
- }
+ EXIParameters.EXI_PARAMETER_ALIGNMENT);
- alignmentElement.setTextContent(alignmentString);
+ alignmentElement.setTextContent(exiOptions.getAlignment());
startExiElement.appendChild(alignmentElement);
}
- private static void createFidelityElement(final Document doc, final List<Element> fidelityElements,
- final boolean fidelity, final String fidelityName) {
-
- if (fidelity) {
- fidelityElements.add(doc.createElementNS(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_EXI_1_0,
- fidelityName));
+ private static void createFidelityElement(final Document doc, final List<Element> elements,
+ final String fidelity) {
+ if (fidelity != null) {
+ elements.add(doc.createElementNS(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_EXI_1_0, fidelity));
}
-
}
}