Advertise :validate:1.0 capability if DOMDataTransactionValidator is supported
[netconf.git] / netconf / mdsal-netconf-connector / src / main / java / org / opendaylight / netconf / mdsal / connector / MdsalNetconfOperationServiceFactory.java
index d88e64ef15aba94bd1286493b04523ca4418425a..8a796bcaf6cff2f1a7b454abcdf9cdc990ae8a44 100644 (file)
@@ -14,6 +14,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.nio.charset.StandardCharsets;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.Optional;
 import java.util.Set;
@@ -21,6 +22,7 @@ import java.util.concurrent.ExecutionException;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
 import org.opendaylight.controller.md.sal.dom.api.DOMRpcService;
 import org.opendaylight.controller.sal.core.api.model.SchemaService;
+import org.opendaylight.netconf.api.capability.BasicCapability;
 import org.opendaylight.netconf.api.capability.Capability;
 import org.opendaylight.netconf.api.capability.YangModuleCapability;
 import org.opendaylight.netconf.api.monitoring.CapabilityListener;
@@ -38,6 +40,8 @@ import org.slf4j.LoggerFactory;
 public class MdsalNetconfOperationServiceFactory implements NetconfOperationServiceFactory, AutoCloseable {
 
     private static final Logger LOG = LoggerFactory.getLogger(MdsalNetconfOperationServiceFactory.class);
+    private static final BasicCapability VALIDATE_CAPABILITY =
+        new BasicCapability("urn:ietf:params:netconf:capability:validate:1.0");
 
     private final DOMDataBroker dataBroker;
     private final DOMRpcService rpcService;
@@ -148,6 +152,11 @@ public class MdsalNetconfOperationServiceFactory implements NetconfOperationServ
 
     @Override
     public AutoCloseable registerCapabilityListener(final CapabilityListener listener) {
+        // Advertise validate capability only if DOMDataBroker provides DOMDataTransactionValidator
+        if (dataBroker.getSupportedExtensions().get(DOMDataTransactionValidator.class) != null) {
+            listener.onCapabilitiesChanged(Collections.singleton(VALIDATE_CAPABILITY), Collections.emptySet());
+        }
+        // Advertise namespaces of supported YANG models as NETCONF capabilities
         return currentSchemaContext.registerCapabilityListener(listener);
     }
 }