SDN-R Sodium compliant netconfnode-state-service and devicemanager
[ccsdk/features.git] / sdnr / wt / devicemanager / provider / src / main / java / org / onap / ccsdk / features / sdnr / wt / devicemanager / impl / DeviceManagerNetconfNotConnectHandler.java
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerNetconfNotConnectHandler.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerNetconfNotConnectHandler.java
new file mode 100644 (file)
index 0000000..df83301
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ */
+
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl;
+
+import java.util.List;
+import java.util.Objects;
+import org.eclipse.jdt.annotation.NonNull;
+import org.onap.ccsdk.features.sdnr.wt.common.HtAssert;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.devicemonitor.impl.DeviceMonitor;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.eventdatahandler.ODLEventListenerHandler;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.util.OdlClusterSingleton;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.factory.NetworkElementFactory;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerServiceProvider;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfNodeStateListener;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfNodeStateService;
+import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DeviceManagerNetconfNotConnectHandler implements NetconfNodeStateListener {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DeviceManagerNetconfNotConnectHandler.class);
+
+    private final @NonNull ListenerRegistration<NetconfNodeStateListener> registerNetconfNodeStateListener;
+
+    private final @NonNull ODLEventListenerHandler odlEventListenerHandler;
+    private final @NonNull DeviceMonitor deviceMonitor;
+    private final @NonNull List<NetworkElementFactory> factoryList;
+    private final @NonNull DeviceManagerServiceProvider serviceProvider;
+
+
+    private final boolean odlEventListenerHandlerEnabled;
+    private final boolean deviceMonitorEnabled;
+
+    private final OdlClusterSingleton singleton;
+
+    public DeviceManagerNetconfNotConnectHandler(@NonNull NetconfNodeStateService netconfNodeStateService,
+            @NonNull ClusterSingletonServiceProvider clusterSingletonServiceProvider,
+            @NonNull ODLEventListenerHandler odlEventListenerHandler, @NonNull DeviceMonitor deviceMonitor,
+            @NonNull DeviceManagerServiceProvider serviceProvider, @NonNull List<NetworkElementFactory> factoryList) {
+
+        HtAssert.nonnull(netconfNodeStateService, this.odlEventListenerHandler = odlEventListenerHandler,
+                this.deviceMonitor = deviceMonitor, this.serviceProvider = serviceProvider,
+                this.factoryList = factoryList, odlEventListenerHandler);
+
+        /* Used for debug purpose */
+        this.odlEventListenerHandlerEnabled = true;
+        this.deviceMonitorEnabled = false;
+
+        this.singleton = new OdlClusterSingleton(clusterSingletonServiceProvider);
+        this.registerNetconfNodeStateListener = netconfNodeStateService.registerNetconfNodeStateListener(this);
+
+    }
+
+    @Override
+    public void onCreated(NodeId nNodeId, NetconfNode netconfNode) {
+        LOG.info("onCreated {}", nNodeId);
+        if (isOdlEventListenerHandlerMaster()) {
+            odlEventListenerHandler.registration(nNodeId.getValue(), netconfNode);
+        }
+        if (deviceMonitorEnabled) {
+            deviceMonitor.deviceDisconnectIndication(nNodeId.getValue());
+        }
+    }
+
+    @Override
+    public void onStateChange(NodeId nNodeId, NetconfNode netconfNode) {
+        LOG.info("onStateChange {}", nNodeId);
+        if (isOdlEventListenerHandlerMaster()) {
+            odlEventListenerHandler.onStateChangeIndication(nNodeId.getValue(), netconfNode);
+        }
+    }
+
+    @Override
+    public void onRemoved(NodeId nNodeId) {
+        String mountPointNodeName = nNodeId.getValue();
+        LOG.info("mountpointNodeRemoved {}", nNodeId.getValue());
+
+        if (deviceMonitorEnabled) {
+            deviceMonitor.removeMountpointIndication(mountPointNodeName);
+        }
+        if (isOdlEventListenerHandlerMaster()) {
+            odlEventListenerHandler.deRegistration(mountPointNodeName); //Additional indication for log
+        }
+    }
+
+    @Override
+    public void close() {
+        if (Objects.nonNull(registerNetconfNodeStateListener)) {
+            registerNetconfNodeStateListener.close();
+        }
+    }
+
+    /*--------------------------------------------
+     * Private functions
+     */
+
+    private boolean isOdlEventListenerHandlerMaster() {
+        return odlEventListenerHandlerEnabled && singleton.isMaster();
+    }
+
+    protected @NonNull DeviceManagerServiceProvider getServiceProvider() {
+        return serviceProvider;
+    }
+
+    protected @NonNull List<NetworkElementFactory> getFactoryList() {
+        return factoryList;
+    }
+
+
+    protected boolean isDeviceMonitorEnabled() {
+        return deviceMonitorEnabled;
+    }
+
+    protected @NonNull DeviceMonitor getDeviceMonitor() {
+        return deviceMonitor;
+    }
+
+    protected boolean isOdlEventListenerHandlerEnabled() {
+        return odlEventListenerHandlerEnabled;
+    }
+
+    protected @NonNull ODLEventListenerHandler getOdlEventListenerHandler() {
+        return odlEventListenerHandler;
+    }
+
+}