import java.util.Iterator;\r
import java.util.List;\r
import java.util.Map;\r
-\r
import org.commscope.tr069adapter.acs.common.DeviceInform;\r
import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
import org.slf4j.LoggerFactory;\r
import org.slf4j.MDC;\r
import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.http.HttpEntity;\r
+import org.springframework.http.HttpHeaders;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.http.ResponseEntity;\r
import org.springframework.stereotype.Component;\r
+import org.springframework.util.LinkedMultiValueMap;\r
+import org.springframework.util.MultiValueMap;\r
import org.springframework.util.StringUtils;\r
import org.springframework.web.client.RestTemplate;\r
\r
deviceId = bootstrapNotification.getDeviceDetails().getDeviceId();\r
MDC.put(clientString, deviceId);\r
logger.info("Bootstrap notification received");\r
- performPreProvisioning(deviceId, false);\r
+ performPreProvisioning(deviceId,\r
+ bootstrapNotification.getDeviceDetails().getSoftwareVersion(),\r
+ bootstrapNotification.getDeviceDetails().getHardwareVersion(), false);\r
\r
} else if (notification instanceof BootInform) {\r
BootInform bootNotification = (BootInform) notification;\r
MDC.put(clientString, deviceId);\r
logger.info("Boot notification received");\r
\r
- performPreProvisioning(deviceId, true);\r
+ performPreProvisioning(deviceId, bootNotification.getDeviceDetails().getSoftwareVersion(),\r
+ bootNotification.getDeviceDetails().getHardwareVersion(), true);\r
}\r
\r
logger.debug("Successfully completed provisioning of PnP mandatory parameters");\r
* @param deviceId\r
* @param isBoot\r
*/\r
- private void performPreProvisioning(String deviceId, boolean isBoot) {\r
+ private void performPreProvisioning(String deviceId, String swVersion, String hwVersion,\r
+ boolean isBoot) {\r
List<DeviceRPCRequest> deviceRPCRequestList =\r
- prepareNBIDeviceOperationrequest(deviceId, isBoot);\r
+ prepareNBIDeviceOperationrequest(deviceId, swVersion, hwVersion, isBoot);\r
if (deviceRPCRequestList.isEmpty()) {\r
logger.debug("No Operation requests exists to perform pre provision on the device");\r
return;\r
DeviceRPCResponse deviceRPCResponse = syncHandler.performDeviceOperation(deviceRPCRequest);\r
logger.debug("Received Provisioning Operation result");\r
if (deviceRPCResponse == null || !StringUtils.isEmpty(deviceRPCResponse.getFaultString())) {\r
- logger.error("Device operation failed, Reason: {}",\r
- ((deviceRPCResponse == null) ? "Null Operation result"\r
- : deviceRPCResponse.getFaultString()));\r
+ logger.error("Device operation failed, Reason: {}", ((deviceRPCResponse == null)\r
+ ? "Null Operation result" : deviceRPCResponse.getFaultString()));\r
isMandatoryProvFailed = true;\r
break;\r
}\r
}\r
DeviceRPCResponse deviceRPCResponse = syncHandler.performDeviceOperation(adminDownOpRequest);\r
if (deviceRPCResponse == null || !StringUtils.isEmpty(deviceRPCResponse.getFaultString())) {\r
- logger.error("Device operation failed, Reason: {}",\r
- ((deviceRPCResponse == null) ? "Null Operation result"\r
- : deviceRPCResponse.getFaultString()));\r
+ logger.error("Device operation failed, Reason: {}", ((deviceRPCResponse == null)\r
+ ? "Null Operation result" : deviceRPCResponse.getFaultString()));\r
}\r
}\r
}\r
* @param isBoot\r
* @return\r
*/\r
- private List<DeviceRPCRequest> prepareNBIDeviceOperationrequest(String deviceId, boolean isBoot) {\r
+ private List<DeviceRPCRequest> prepareNBIDeviceOperationrequest(String deviceId, String swVersion,\r
+ String hwVersion, boolean isBoot) {\r
logger.debug("Preparing the NBI Device Operation Request");\r
List<DeviceRPCRequest> deviceRPCRequestList = new ArrayList<>();\r
\r
- ConfigurationData configData = getDeviceConfigurationData(deviceId);\r
+ ConfigurationData configData = getDeviceConfigurationData(deviceId, swVersion, hwVersion);\r
if (configData == null || configData.getParameterMONameValueMap().isEmpty()) {\r
logger.debug("No configuration exists for the device");\r
return deviceRPCRequestList;\r
while (iter.hasNext()) {\r
String paramName = iter.next();\r
String paramValue = paramNameValueMap.get(paramName);\r
- MOMetaData moMetaData = moMetaDataUtil.getMetaDataByTR69Name(paramName);\r
+ MOMetaData moMetaData = moMetaDataUtil.getMetaDataByTR69Name(paramName, swVersion, hwVersion);\r
if ((isBoot && !paramName.endsWith(ADMIN_STATE)) || moMetaData == null)\r
continue;\r
ParameterDTO parameterDTO = getParameterDTO(paramName, paramValue, moMetaData);\r
* @param deviceId\r
* @return\r
*/\r
- private ConfigurationData getDeviceConfigurationData(String deviceId) {\r
+ private ConfigurationData getDeviceConfigurationData(String deviceId, String swVersion,\r
+ String hwVersion) {\r
String configDBURI = getConfigDBURI();\r
- logger.debug("Device Configuration to be fetched from Config DB URI: {}", configDBURI);\r
+ logger.debug(\r
+ "Device Configuration to be fetched from Config DB URI: {}, macId {}, swVersion {}, hwVersion {}",\r
+ configDBURI, deviceId, swVersion, hwVersion);\r
ConfigurationData configData = null;\r
try {\r
- configData = restTemplate.getForObject(configDBURI + deviceId, ConfigurationData.class);\r
+\r
+ MultiValueMap<String, String> uriParams = new LinkedMultiValueMap<>();\r
+ uriParams.add("macId", deviceId);\r
+ uriParams.add("swVersion", swVersion);\r
+ uriParams.add("hwVersion", hwVersion);\r
+ HttpHeaders headers = new HttpHeaders();\r
+ headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);\r
+ final HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<>(uriParams, headers);\r
+\r
+ ResponseEntity<ConfigurationData> res =\r
+ restTemplate.postForEntity(configDBURI, entity, ConfigurationData.class);\r
+ configData = res.getBody();\r
+ logger.debug("Successfully retrived config data for device id{} data {}", deviceId,\r
+ configData);\r
} catch (Exception e) {\r
logger.error("An exception occurred to get the initial device configuration, Reason: {}",\r
e.getMessage());\r
* \r
* @return String\r
*/\r
- public String getEnodeBName(String deviceId) {\r
+ public String getEnodeBName(String deviceId, String swVersion, String hwVersion) {\r
String eNodeBName = null;\r
if (isPreConfigureOnPnPEnabled()) {\r
- ConfigurationData configData = getDeviceConfigurationData(deviceId);\r
+ ConfigurationData configData = getDeviceConfigurationData(deviceId, swVersion, hwVersion);\r
if (configData == null || configData.getParameterMONameValueMap().isEmpty()) {\r
logger.debug("No configuration exists for the device");\r
return eNodeBName;\r