Development of NETCONF RPCs for tr-069 adapter to
[oam/tr069-adapter.git] / ves-agent / src / main / java / org / commscope / tr069adapter / vesagent / async / AsyncRequestHandler.java
index aeb8c03..beb3019 100644 (file)
  * ===============LICENSE_END=======================================================================
  */
 
-package org.commscope.tr069adapter.vesagent.async;\r
-\r
-import java.util.concurrent.Future;\r
-\r
-import org.commscope.tr069adapter.acs.common.DeviceDetails;\r
-import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
-import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
-import org.commscope.tr069adapter.acs.common.OperationCode;\r
-import org.commscope.tr069adapter.acs.common.OperationOptions;\r
-import org.commscope.tr069adapter.acs.common.dto.CustomOperationCode;\r
-import org.commscope.tr069adapter.acs.common.dto.TR069OperationDetails;\r
-import org.commscope.tr069adapter.vesagent.VesConfiguration;\r
-import org.commscope.tr069adapter.vesagent.controller.HeartBeatMessageHandler;\r
-import org.commscope.tr069adapter.vesagent.entity.DeviceDataEntity;\r
-import org.commscope.tr069adapter.vesagent.mapper.MapperRequestSender;\r
-import org.commscope.tr069adapter.vesagent.util.VesAgentConstants;\r
-import org.commscope.tr069adapter.vesagent.util.VesAgentUtils;\r
-import org.slf4j.Logger;\r
-import org.slf4j.LoggerFactory;\r
-import org.springframework.beans.factory.annotation.Autowired;\r
-import org.springframework.scheduling.annotation.Async;\r
-import org.springframework.stereotype.Component;\r
-\r
-/**\r
- * \r
- * @version 1.0\r
- * @since June 12, 2020\r
- * @author Prashant Kumar\r
- */\r
-@Component\r
-public class AsyncRequestHandler {\r
-\r
-  private static final Logger LOG = LoggerFactory.getLogger(AsyncRequestHandler.class);\r
-\r
-  @Autowired\r
-  MapperRequestSender mapperRequestSender;\r
-\r
-  @Autowired\r
-  WaitForNotifications waitForNotifications;\r
-\r
-  @Autowired\r
-  HeartBeatMessageHandler heartBeatMessageHandler;\r
-\r
-  @Autowired\r
-  VesConfiguration config;\r
-\r
-  public DeviceRPCResponse performDeviceOperation(DeviceRPCRequest deviceRPCRequest) {\r
-    LOG.info("Initiating device connectivity request to ACS for device {}",\r
-        deviceRPCRequest.getDeviceDetails().getDeviceId());\r
-\r
-    Future<DeviceRPCResponse> futureResponse = mapperRequestSender.sendRequest(deviceRPCRequest);\r
-    if (null == futureResponse) {\r
-      LOG.error("Request could not be sent. response is null");\r
-      return null;\r
-    }\r
-\r
-    boolean isSuccess = false;\r
-    DeviceRPCResponse response = null;\r
-\r
-    OperationCode opCode = deviceRPCRequest.getOpDetails().getOpCode();\r
-    String deviceId = deviceRPCRequest.getDeviceDetails().getDeviceId();\r
-    long timeOut = getOperationTimeOut(deviceRPCRequest.getOptions().getExecutionTimeout());\r
-\r
-    try {\r
-      waitForNotifications.waitForResult(deviceId, opCode, futureResponse, timeOut);\r
-      response = waitForNotifications.getOperationResult(deviceId, opCode);\r
-\r
-      if (null == response) {\r
-        LOG.error("Request got timed out.");\r
-      } else {\r
-        LOG.debug("Received operation result for device : {}, operation = {} as {}", deviceId,\r
-            opCode, response);\r
-      }\r
-      waitForNotifications.stopOperation(deviceId, opCode);\r
-\r
-      // if(isSuccess) {\r
-      // response = waitForNotifications.getOperationResult(deviceId, opCode);\r
-      // LOG.debug("Received operation result for device : {}, operation = {} as {}",deviceId,\r
-      // opCode,response);\r
-      //\r
-      // waitForNotifications.stopOperation(deviceId, opCode);\r
-      // }else {\r
-      // LOG.error("Request got timed out.");\r
-      // }\r
-    } catch (InterruptedException e) {\r
-      LOG.debug(\r
-          "InterruptedException while waiting for mapper operation result for device : {}, operation : {} request.",\r
-          deviceId, opCode);\r
-    }\r
-\r
-    return response;\r
-  }\r
-\r
-  private long getOperationTimeOut(long timeOut) {\r
-    if (timeOut > 0) {\r
-      return timeOut;\r
-    }\r
-\r
-    if (null != config.getRequestTimeout()) {\r
-      timeOut = Long.valueOf(config.getRequestTimeout());\r
-    }\r
-\r
-    return timeOut;\r
-  }\r
-\r
-  @Async("threadPoolTaskExecutor1")\r
+package org.commscope.tr069adapter.vesagent.async;
+
+import java.util.concurrent.Future;
+
+import org.commscope.tr069adapter.acs.common.DeviceDetails;
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;
+import org.commscope.tr069adapter.acs.common.OperationCode;
+import org.commscope.tr069adapter.acs.common.OperationOptions;
+import org.commscope.tr069adapter.acs.common.dto.CustomOperationCode;
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationDetails;
+import org.commscope.tr069adapter.vesagent.VesConfiguration;
+import org.commscope.tr069adapter.vesagent.controller.HeartBeatMessageHandler;
+import org.commscope.tr069adapter.vesagent.entity.DeviceDataEntity;
+import org.commscope.tr069adapter.vesagent.mapper.MapperRequestSender;
+import org.commscope.tr069adapter.vesagent.util.VesAgentConstants;
+import org.commscope.tr069adapter.vesagent.util.VesAgentUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+/**
+ * 
+ * @version 1.0
+ * @since June 12, 2020
+ * @author Prashant Kumar
+ */
+@Component
+public class AsyncRequestHandler {
+
+  private static final Logger LOG = LoggerFactory.getLogger(AsyncRequestHandler.class);
+
+  @Autowired
+  MapperRequestSender mapperRequestSender;
+
+  @Autowired
+  WaitForNotifications waitForNotifications;
+
+  @Autowired
+  HeartBeatMessageHandler heartBeatMessageHandler;
+
+  @Autowired
+  VesConfiguration config;
+
+  public DeviceRPCResponse performDeviceOperation(DeviceRPCRequest deviceRPCRequest) {
+    LOG.info("Initiating device connectivity request to ACS for device {}",
+        deviceRPCRequest.getDeviceDetails().getDeviceId());
+
+    Future<DeviceRPCResponse> futureResponse = mapperRequestSender.sendRequest(deviceRPCRequest);
+    if (null == futureResponse) {
+      LOG.error("Request could not be sent. response is null");
+      return null;
+    }
+
+    DeviceRPCResponse response = null;
+
+    OperationCode opCode = deviceRPCRequest.getOpDetails().getOpCode();
+    String deviceId = deviceRPCRequest.getDeviceDetails().getDeviceId();
+    long timeOut = getOperationTimeOut(deviceRPCRequest.getOptions().getExecutionTimeout());
+
+    try {
+      waitForNotifications.waitForResult(deviceId, opCode, futureResponse, timeOut);
+      response = waitForNotifications.getOperationResult(deviceId, opCode);
+
+      if (null == response) {
+        LOG.error("Request got timed out.");
+      } else {
+        LOG.debug("Received operation result for device : {}, operation = {} as {}", deviceId,
+            opCode, response);
+      }
+      waitForNotifications.stopOperation(deviceId, opCode);
+
+    } catch (InterruptedException e) {
+      LOG.debug(
+          "InterruptedException while waiting for mapper operation result for device : {}, operation : {} request.",
+          deviceId, opCode);
+      Thread.currentThread().interrupt();
+    }
+
+    return response;
+  }
+
+  private long getOperationTimeOut(long timeOut) {
+    if (timeOut > 0) {
+      return timeOut;
+    }
+
+    if (null != config.getRequestTimeout()) {
+      timeOut = Long.valueOf(config.getRequestTimeout());
+    }
+
+    return timeOut;
+  }
+
+  @Async("threadPoolTaskExecutor1")
   public void initiateDeviceReachabilityCheck(DeviceDataEntity deviceDataEntity) {
-    deviceDataEntity.setStartEpochMicrosec(VesAgentUtils.getStartEpochTime()*1000);\r
-    DeviceDetails deviceDetails = new DeviceDetails();\r
-    deviceDetails.setDeviceId(deviceDataEntity.getDeviceId());\r
-    deviceDetails.setOui(deviceDataEntity.getOui());\r
-    deviceDetails.setProductClass(deviceDataEntity.getProductClass());\r
-\r
-    TR069OperationDetails operationDetails = new TR069OperationDetails();\r
-    operationDetails.setOpCode(CustomOperationCode.CONNECT);\r
-\r
-    DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();\r
-\r
-    deviceRPCRequest.setDeviceDetails(deviceDetails);\r
-    deviceRPCRequest.setOpDetails(operationDetails);\r
-\r
-    OperationOptions options = new OperationOptions();\r
-    if (null != config.getRequestTimeout()) {\r
-      options.setExecutionTimeout(Integer.valueOf(config.getRequestTimeout()));\r
-    }\r
-\r
-    deviceRPCRequest.setOptions(options);\r
-\r
-    DeviceRPCResponse deviceRPCResponse = performDeviceOperation(deviceRPCRequest);\r
-\r
-    if (VesAgentUtils.isDeviceReachable(deviceRPCResponse)) {\r
-      LOG.debug("Device {} is reachable.", deviceDataEntity.getDeviceId());\r
-      try {\r
-        LOG.debug("Sending heatbeat event for device {}.", deviceDataEntity.getDeviceId());\r
-        heartBeatMessageHandler.sendHeartBeatEvent(deviceDataEntity, Integer.parseInt(\r
-            deviceDataEntity.getAttributesMap().get(VesAgentConstants.HEART_BEAT_PERIOD)));\r
-      } catch (NumberFormatException e) {\r
-        LOG.error("heartBeatPeriod doesn't have numeric value. ErrorMsg: {}", e.getMessage());\r
-      } catch (Exception e) {\r
-        LOG.error("Error while sending heart beat ves event. ErrorMsg: {}", e.getMessage());\r
-      }\r
-    }\r
-  }\r
-}\r
+    deviceDataEntity.setStartEpochMicrosec(VesAgentUtils.getStartEpochTime() * 1000);
+    DeviceDetails deviceDetails = new DeviceDetails();
+    deviceDetails.setDeviceId(deviceDataEntity.getDeviceId());
+    deviceDetails.setOui(deviceDataEntity.getOui());
+    deviceDetails.setProductClass(deviceDataEntity.getProductClass());
+
+    TR069OperationDetails operationDetails = new TR069OperationDetails();
+    operationDetails.setOpCode(CustomOperationCode.CONNECT);
+
+    DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();
+
+    deviceRPCRequest.setDeviceDetails(deviceDetails);
+    deviceRPCRequest.setOpDetails(operationDetails);
+
+    OperationOptions options = new OperationOptions();
+    if (null != config.getRequestTimeout()) {
+      options.setExecutionTimeout(Integer.valueOf(config.getRequestTimeout()));
+    }
+
+    deviceRPCRequest.setOptions(options);
+
+    DeviceRPCResponse deviceRPCResponse = performDeviceOperation(deviceRPCRequest);
+
+    if (VesAgentUtils.isDeviceReachable(deviceRPCResponse)) {
+      LOG.debug("Device {} is reachable.", deviceDataEntity.getDeviceId());
+      try {
+        LOG.debug("Sending heatbeat event for device {}.", deviceDataEntity.getDeviceId());
+        heartBeatMessageHandler.sendHeartBeatEvent(deviceDataEntity, Integer.parseInt(
+            deviceDataEntity.getAttributesMap().get(VesAgentConstants.HEART_BEAT_PERIOD)));
+      } catch (NumberFormatException e) {
+        LOG.error("heartBeatPeriod doesn't have numeric value. ErrorMsg: {}", e.getMessage());
+      } catch (Exception e) {
+        LOG.error("Error while sending heart beat ves event. ErrorMsg: {}", e.getMessage());
+      }
+    }
+  }
+}