9ae119654827734566ede7d5468ae221f7e8d15d
[oam/tr069-adapter.git] / mapper / src / main / java / org / commscope / tr069adapter / mapper / netconf / impl / NetConfRequestHandlerImpl.java
1 /*\r
2  * ============LICENSE_START========================================================================\r
3  * ONAP : tr-069-adapter\r
4  * =================================================================================================\r
5  * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
6  * =================================================================================================\r
7  * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
8  * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
9  * may obtain a copy of the License at\r
10  *\r
11  * http://www.apache.org/licenses/LICENSE-2.0\r
12  *\r
13  * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
14  * either express or implied. See the License for the specific language governing permissions and\r
15  * limitations under the License.\r
16  * ===============LICENSE_END=======================================================================\r
17  */\r
18 \r
19 package org.commscope.tr069adapter.mapper.netconf.impl;\r
20 \r
21 import java.util.ArrayList;\r
22 import java.util.List;\r
23 import java.util.Map;\r
24 import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
25 import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
26 import org.commscope.tr069adapter.acs.common.OperationOptions;\r
27 import org.commscope.tr069adapter.acs.common.OperationResponse;\r
28 import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
29 import org.commscope.tr069adapter.acs.common.dto.CustomOperationCode;\r
30 import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
31 import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
32 import org.commscope.tr069adapter.acs.common.dto.TR069OperationDetails;\r
33 import org.commscope.tr069adapter.acs.common.response.SetParameterValueResponse;\r
34 import org.commscope.tr069adapter.mapper.MOMetaData;\r
35 import org.commscope.tr069adapter.mapper.dao.DeviceOperationsDAO;\r
36 import org.commscope.tr069adapter.mapper.entity.DeviceOperationDetails;\r
37 import org.commscope.tr069adapter.mapper.model.ErrorCodeDetails;\r
38 import org.commscope.tr069adapter.mapper.model.NetConfRequest;\r
39 import org.commscope.tr069adapter.mapper.model.NetConfResponse;\r
40 import org.commscope.tr069adapter.mapper.model.NetConfServerDetails;\r
41 import org.commscope.tr069adapter.mapper.model.VESNotificationResponse;\r
42 import org.commscope.tr069adapter.mapper.netconf.NetConfRequestHandler;\r
43 import org.commscope.tr069adapter.mapper.sync.SynchronizedRequestHandler;\r
44 import org.commscope.tr069adapter.mapper.util.ErrorCodeUtil;\r
45 import org.commscope.tr069adapter.mapper.util.FirwareUpgradeStatus;\r
46 import org.commscope.tr069adapter.mapper.util.MOMetaDataUtil;\r
47 import org.commscope.tr069adapter.mapper.util.MapperConstants;\r
48 import org.commscope.tr069adapter.mapper.util.MapperValidator;\r
49 import org.commscope.tr069adapter.mapper.util.NetconfToTr069MapperUtil;\r
50 import org.commscope.tr069adapter.mapper.ves.VESNotificationSender;\r
51 import org.slf4j.Logger;\r
52 import org.slf4j.LoggerFactory;\r
53 import org.springframework.beans.factory.annotation.Autowired;\r
54 import org.springframework.http.HttpStatus;\r
55 import org.springframework.stereotype.Component;\r
56 import org.springframework.util.StringUtils;\r
57 import org.w3c.dom.Document;\r
58 import org.w3c.dom.Element;\r
59 \r
60 @Component\r
61 public class NetConfRequestHandlerImpl implements NetConfRequestHandler {\r
62 \r
63   private static final Logger LOG = LoggerFactory.getLogger(NetConfRequestHandlerImpl.class);\r
64   private static final String BOOLEAN_TRUE_VALUE = "1";\r
65   private static final String BOOLEAN_FALSE_VALUE = "0";\r
66   private static final String BOOLEAN_DATA_TYPE = "boolean";\r
67 \r
68   @Autowired\r
69   SynchronizedRequestHandler syncHandler;\r
70 \r
71   @Autowired\r
72   NetconfToTr069MapperUtil mapperUtil;\r
73 \r
74   @Autowired\r
75   MOMetaDataUtil metaDataUtil;\r
76 \r
77   @Autowired\r
78   ErrorCodeUtil errorCodeUtil;\r
79 \r
80   @Autowired\r
81   VESNotificationSender vesnotiSender;\r
82 \r
83   @Autowired\r
84   DeviceOperationsDAO deviceOperDAO;\r
85 \r
86   @Override\r
87   public NetConfResponse handleSetConfigRequest(NetConfRequest netConfRequest) {\r
88     Element el = NetconfToTr069MapperUtil.convertStringToDocument(netConfRequest.getRequestXml());\r
89     NetConfResponse response = null;\r
90     DeviceRPCRequest deviceRPCRequest = NetconfToTr069MapperUtil.prepareTR069Request(\r
91         netConfRequest.getDeviceId(), el, "config", TR069OperationCode.SET_PARAMETER_VALUES);\r
92 \r
93     if (deviceRPCRequest == null) {\r
94       LOG.debug("There are no supported device parameters found for edit-config.");\r
95       return getEmptyResponse();\r
96     }\r
97     List<ParameterDTO> requestParams = deviceRPCRequest.getOpDetails().getParmeters();\r
98     List<ParameterDTO> filteredParams = new ArrayList<>();\r
99     List<ParameterDTO> vesRequestParams = new ArrayList<>();\r
100 \r
101     if (null != requestParams) {\r
102       for (ParameterDTO param : requestParams) {\r
103         if (null == param.getParamValue() || StringUtils.isEmpty(param.getParamValue())) {\r
104           continue;\r
105         }\r
106         if (isVesNotificationRequest(param)) {\r
107           vesRequestParams.add(param);\r
108         }\r
109         filteredParams.add(param);\r
110       }\r
111       deviceRPCRequest.getOpDetails().setParmeters(filteredParams);\r
112     }\r
113 \r
114     if (deviceRPCRequest.getOpDetails() == null\r
115         || deviceRPCRequest.getOpDetails().getParmeters().isEmpty()) {\r
116       LOG.debug("There are no device parameters found for edit-config.");\r
117       return getEmptyResponse();\r
118     } else if (deviceRPCRequest.getOpDetails() != null) {\r
119       deviceRPCRequest.getOpDetails()\r
120           .setParmeters(filteredSetParameters(deviceRPCRequest.getOpDetails().getParmeters(),\r
121               netConfRequest.getSwVersion(), netConfRequest.getHwVersion()));\r
122       if (deviceRPCRequest.getOpDetails().getParmeters().isEmpty()) {\r
123         LOG.debug("There are no supported device parameters found for edit-config.");\r
124         return getEmptyResponse();\r
125       }\r
126     }\r
127 \r
128     handleBooleanParametersReverse(deviceRPCRequest.getOpDetails().getParmeters(),\r
129         netConfRequest.getSwVersion(), netConfRequest.getHwVersion());\r
130     LOG.debug("Prepared NBI request for edit-config {}", deviceRPCRequest);\r
131 \r
132     DeviceRPCResponse deviceRPCResponseVes = null;\r
133     List<ParameterDTO> allParamList = deviceRPCRequest.getOpDetails().getParmeters();\r
134 \r
135     if (!vesRequestParams.isEmpty()) {\r
136       if (!MapperValidator.isCountDownTimerValid(vesRequestParams)) {\r
137         return getErrorResponse(MapperConstants.INVALID_PARAM_VAL_ERROR_CODE,\r
138             MapperConstants.INVALID_COUNT_DOWN_TIMER_MSG);\r
139       }\r
140 \r
141       deviceRPCRequest.getOpDetails().setParmeters(vesRequestParams);\r
142       deviceRPCResponseVes = vesnotiSender.sendEditConfigNotification(deviceRPCRequest);\r
143 \r
144       if (null == deviceRPCResponseVes) {\r
145         return getTimeOutResponse();\r
146       }\r
147     }\r
148 \r
149     allParamList.removeAll(vesRequestParams);\r
150 \r
151     DeviceRPCResponse deviceRPCResponseDevice = null;\r
152     if (null != allParamList && !allParamList.isEmpty()) {\r
153       deviceRPCRequest.getOpDetails().setParmeters(allParamList);\r
154       if (isAdminStateOverriden(allParamList)) {\r
155         deviceRPCRequest.getOpDetails().setOpCode(CustomOperationCode.CONFIGURE_MULTIPLE_OBJECTS);\r
156         TR069OperationDetails tr069OperationDetails =\r
157             (TR069OperationDetails) deviceRPCRequest.getOpDetails();\r
158         tr069OperationDetails.setModifyParamList(allParamList);\r
159         tr069OperationDetails.setSetParamList(null);\r
160 \r
161         deviceRPCResponseDevice = syncHandler.performDeviceOperation(deviceRPCRequest);\r
162         convertResposeToSPVResponse(deviceRPCResponseDevice);\r
163       } else {\r
164         deviceRPCResponseDevice = syncHandler.performDeviceOperation(deviceRPCRequest);\r
165       }\r
166 \r
167       if (null == deviceRPCResponseDevice) {\r
168         return getTimeOutResponse();\r
169       }\r
170     }\r
171 \r
172     DeviceRPCResponse deviceRPCResponse =\r
173         mergeSetConfigDeviceRPCResponse(deviceRPCResponseVes, deviceRPCResponseDevice);\r
174     if (null == deviceRPCResponse) {\r
175       return getTimeOutResponse();\r
176     }\r
177     response = mapperUtil.getNetconfResponse(deviceRPCResponse, netConfRequest.getSwVersion(),\r
178         netConfRequest.getHwVersion(), false);\r
179     return response;\r
180   }\r
181 \r
182   @Override\r
183   public NetConfResponse handleDelConfigRequest(NetConfRequest netConfRequest) {\r
184     Element el = NetconfToTr069MapperUtil.convertStringToDocument(netConfRequest.getRequestXml());\r
185     NetConfResponse response = null;\r
186     DeviceRPCRequest request = NetconfToTr069MapperUtil.prepareTR069Request(\r
187         netConfRequest.getDeviceId(), el, "config", TR069OperationCode.DELETE_OBJECT);\r
188 \r
189     if (request == null) {\r
190       LOG.debug("There are no supported device parameters found for delete-config.");\r
191       return getEmptyResponse();\r
192     }\r
193 \r
194     List<ParameterDTO> requestParams = request.getOpDetails().getParmeters();\r
195     List<ParameterDTO> filteredParams = new ArrayList<>();\r
196     if (null != requestParams) {\r
197       for (ParameterDTO param : requestParams) {\r
198         filteredParams.add(param);\r
199       }\r
200       request.getOpDetails().setParmeters(filteredParams);\r
201     }\r
202 \r
203     if (request.getOpDetails() == null || request.getOpDetails().getParmeters().isEmpty()) {\r
204       LOG.debug("There are no device parameters found for delete-config.");\r
205       return getEmptyResponse();\r
206     } else if (request.getOpDetails() != null) {\r
207       request.getOpDetails()\r
208           .setParmeters(filteredSetParameters(request.getOpDetails().getParmeters(),\r
209               netConfRequest.getSwVersion(), netConfRequest.getHwVersion()));\r
210       if (request.getOpDetails().getParmeters().isEmpty()) {\r
211         LOG.debug("There are no supported device parameters found for delete-config.");\r
212         return getEmptyResponse();\r
213       }\r
214     }\r
215     LOG.debug("Prepared NBI request for delete-config {}", request);\r
216 \r
217     DeviceRPCResponse opResult;\r
218     opResult = syncHandler.performDeviceOperation(request);\r
219     if (null == opResult) {\r
220       return getTimeOutResponse();\r
221     }\r
222     response = mapperUtil.getNetconfResponse(opResult, netConfRequest.getSwVersion(),\r
223         netConfRequest.getHwVersion(), false);\r
224     return response;\r
225   }\r
226 \r
227   @Override\r
228   public NetConfResponse handleGetRequest(NetConfRequest netConfRequest) {\r
229     Element el = NetconfToTr069MapperUtil.convertStringToDocument(netConfRequest.getRequestXml());\r
230     NetConfResponse response = null;\r
231     DeviceRPCRequest request = NetconfToTr069MapperUtil.prepareTR069Request(\r
232         netConfRequest.getDeviceId(), el, "filter", TR069OperationCode.GET_PARAMETER_VALUES);\r
233 \r
234     if (request == null || request.getOpDetails() == null\r
235         || request.getOpDetails().getParmeters().isEmpty()) {\r
236       LOG.debug("There are no device parameters found for get.");\r
237       return getEmptyResponse();\r
238     } else if (request.getOpDetails() != null) {\r
239 \r
240       request.getOpDetails()\r
241           .setParmeters(filteredGetParameters(request.getOpDetails().getParmeters(),\r
242               netConfRequest.getSwVersion(), netConfRequest.getHwVersion()));\r
243 \r
244       if (request.getOpDetails().getParmeters().isEmpty()) {\r
245         LOG.debug("There are no supported device parameters found for get.");\r
246         return getEmptyResponse();\r
247       }\r
248     }\r
249     LOG.debug("Prepared NBI request for get {}", request);\r
250 \r
251     DeviceRPCResponse opResult;\r
252     opResult = syncHandler.performDeviceOperation(request);\r
253     if (null == opResult) {\r
254       return getTimeOutResponse();\r
255     }\r
256     response = mapperUtil.getNetconfResponse(opResult, netConfRequest.getSwVersion(),\r
257         netConfRequest.getHwVersion(), false);\r
258     return response;\r
259   }\r
260 \r
261   @Override\r
262   public NetConfResponse handleGetConfigRequest(NetConfRequest netConfRequest) {\r
263     Element el = NetconfToTr069MapperUtil.convertStringToDocument(netConfRequest.getRequestXml());\r
264     NetConfResponse response = null;\r
265     List<ParameterDTO> vesRequestParams = new ArrayList<>();\r
266 \r
267     boolean isSoftwareInventory = false;\r
268     if (netConfRequest.getRequestXml().contains("software-inventory")) {\r
269       LOG.info("XML Contains software-inventory");\r
270       isSoftwareInventory = true;\r
271     }\r
272 \r
273     DeviceRPCRequest request = NetconfToTr069MapperUtil.prepareTR069Request(\r
274         netConfRequest.getDeviceId(), el, "filter", TR069OperationCode.GET_PARAMETER_VALUES);\r
275 \r
276     if (request == null || request.getOpDetails() == null\r
277         || request.getOpDetails().getParmeters().isEmpty()) {\r
278       LOG.debug("There are no device parameters found for get-config.");\r
279       return getEmptyResponse();\r
280     } else if (request.getOpDetails() != null) {\r
281       request.getOpDetails()\r
282           .setParmeters(filteredGetParameters(request.getOpDetails().getParmeters(),\r
283               netConfRequest.getSwVersion(), netConfRequest.getHwVersion()));\r
284 \r
285       if (request.getOpDetails().getParmeters().isEmpty()) {\r
286         LOG.debug("There are no supported device parameters found for get-config.");\r
287         return getEmptyResponse();\r
288       }\r
289       for (ParameterDTO param : request.getOpDetails().getParmeters()) {\r
290         if (isVesNotificationRequest(param)) {\r
291           vesRequestParams.add(param);\r
292         }\r
293       }\r
294     }\r
295     LOG.debug("Prepared NBI request for get-config {}", request);\r
296 \r
297     DeviceRPCResponse opResultVes = null;\r
298     List<ParameterDTO> allParamList = request.getOpDetails().getParmeters();\r
299 \r
300     if (!vesRequestParams.isEmpty()) {\r
301       request.getOpDetails().setParmeters(vesRequestParams);\r
302       opResultVes = vesnotiSender.sendGetConfigNotification(request);\r
303 \r
304       if (null == opResultVes) {\r
305         return getTimeOutResponse();\r
306       }\r
307     }\r
308 \r
309 \r
310     allParamList.removeAll(vesRequestParams);\r
311 \r
312     DeviceRPCResponse opResultDevice = null;\r
313     if (!allParamList.isEmpty()) {\r
314       request.getOpDetails().setParmeters(allParamList);\r
315       opResultDevice = syncHandler.performDeviceOperation(request);\r
316 \r
317       if (null == opResultDevice) {\r
318         return getTimeOutResponse();\r
319       }\r
320     }\r
321 \r
322     DeviceRPCResponse opResult = mergeGetConfigDeviceRPCResponse(opResultVes, opResultDevice);\r
323 \r
324     if (null == opResult) {\r
325       return getTimeOutResponse();\r
326     }\r
327     LOG.debug("Received GPV response : FaultKey = " + opResult.getFaultKey() + ", FaultString = "\r
328         + opResult.getFaultString() + ", Parameters :"\r
329         + opResult.getOperationResponse().getParameterDTOs());\r
330     if (null != opResult.getOperationResponse().getParameterDTOs())\r
331       handleBooleanParameters(opResult.getOperationResponse().getParameterDTOs(),\r
332           netConfRequest.getSwVersion(), netConfRequest.getHwVersion());\r
333 \r
334     if (isSoftwareInventory) {\r
335       response = mapperUtil.getNetconfResponseForSoftwareInventory(opResult,\r
336           netConfRequest.getSwVersion(), netConfRequest.getHwVersion());\r
337     } else {\r
338       response = mapperUtil.getNetconfResponse(opResult, netConfRequest.getSwVersion(),\r
339           netConfRequest.getHwVersion(), false);\r
340     }\r
341 \r
342     if (opResult.getFaultKey() != null && opResult.getFaultKey().equalsIgnoreCase("9005")) {\r
343       // check for tabular\r
344       LOG.debug("Tabualr Entry not exist in the device; we need to add it now");\r
345       MOMetaData data = metaDataUtil.getMetaDataByTR69Name(\r
346           request.getOpDetails().getParmeters().get(0).getParamName(),\r
347           netConfRequest.getSwVersion(), netConfRequest.getHwVersion());\r
348       if (data.isTabluarObj()) {\r
349         return getEmptyResponse();\r
350       }\r
351     }\r
352 \r
353     return response;\r
354   }\r
355 \r
356   @Override\r
357   public NetConfResponse handleSWDownloadRequest(NetConfRequest request) {\r
358     LOG.debug("request received fro sw-download");\r
359     Document d1 = NetconfToTr069MapperUtil.convertStringToDocumentXml(request.getRequestXml());\r
360     NetConfResponse response = null;\r
361     Map<String, String> map =\r
362         NetconfToTr069MapperUtil.extractRequestParamters(d1, "rpc", "software-download");\r
363     if (map == null || map.size() <= 0) {\r
364       LOG.debug("There are no device parameters found for get.");\r
365       return getEmptyResponse();\r
366     }\r
367 \r
368     TR069OperationDetails opDetails = new TR069OperationDetails();\r
369     DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();\r
370     TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();\r
371     tr069DeviceDetails.setDeviceId(request.getDeviceId());\r
372     deviceRPCRequest.setOpDetails(opDetails);\r
373     deviceRPCRequest.setDeviceDetails(tr069DeviceDetails);\r
374     OperationOptions options = new OperationOptions();\r
375     options.setExecutionTimeout(60l);\r
376     deviceRPCRequest.setOptions(options);\r
377     String fileName = map.get("rpc.software-download.remote-file-path");\r
378     String password = map.get("rpc.software-download.password.password");\r
379 \r
380     if (fileName == null || password == null || getDownloadFileURI(fileName) == null\r
381         || getDownloadUserName(fileName) == null) {\r
382       LOG.error(\r
383           "remote-file-path value is not as per yang model reference. Allowed pattern sftp://<username>@<host>[:<port>]/path");\r
384       return getOperationAbortedResponse(\r
385           "remote-file-path value is not as per yang model reference. Allowed pattern sftp://<username>@<host>[:<port>]/path");\r
386     }\r
387 \r
388     List<ParameterDTO> paramDTOList = new ArrayList<>();\r
389     paramDTOList.add(new ParameterDTO("FileType", "1 Firmware Upgrade Image"));\r
390     paramDTOList.add(new ParameterDTO("URL", getDownloadFileURI(fileName)));\r
391     paramDTOList.add(new ParameterDTO("Username", getDownloadUserName(fileName)));\r
392     paramDTOList.add(new ParameterDTO("Password", password));\r
393     paramDTOList.add(new ParameterDTO("FileSize", "0"));\r
394     paramDTOList.add(new ParameterDTO("TargetFileName", ""));\r
395     paramDTOList.add(new ParameterDTO("DelaySeconds", "1"));\r
396     paramDTOList.add(new ParameterDTO("SuccessURL", ""));\r
397     paramDTOList.add(new ParameterDTO("FailureURL", ""));\r
398 \r
399     deviceRPCRequest.getOpDetails().setParmeters(paramDTOList);\r
400     deviceRPCRequest.getOpDetails().setOpCode(TR069OperationCode.DOWNLOAD);\r
401 \r
402     LOG.debug("Prepared NBI request for download " + deviceRPCRequest);\r
403 \r
404     DeviceOperationDetails fwDetails = deviceOperDAO.findByDeviceId(request.getDeviceId());\r
405     if (fwDetails == null) {\r
406       String errorMsg = "TR069 device request has been aborted,due to device not identified";\r
407       return getOperationAbortedResponse(errorMsg);\r
408     }\r
409 \r
410     if (fwDetails.getDownLoadStatus() != FirwareUpgradeStatus.DOWNLOAD_INTIATED.getStatus()\r
411         && fwDetails.getDownLoadStatus() != FirwareUpgradeStatus.DOWNLOAD_COMPLETED.getStatus()) {\r
412 \r
413       LOG.debug("persisting the fw details " + fwDetails.toString());\r
414 \r
415       DeviceRPCResponse opResult;\r
416       opResult = syncHandler.performDeviceOperation(deviceRPCRequest);\r
417       if (null == opResult) {\r
418         return getTimeOutResponse();\r
419       }\r
420       fwDetails.setFileName(fileName);\r
421       fwDetails.setDownLoadStatus(FirwareUpgradeStatus.DOWNLOAD_INTIATED.getStatus());\r
422       deviceOperDAO.save(fwDetails);\r
423       ArrayList<ParameterDTO> responseParamDTOList = new ArrayList<>();\r
424 \r
425       if (opResult.getOperationResponse().getStatus() == 1) {\r
426         responseParamDTOList.add(new ParameterDTO("rpc-reply.ns1:status", "STARTED"));\r
427       } else {\r
428         responseParamDTOList.add(new ParameterDTO("rpc-reply.ns1:status", "FAILED"));\r
429         responseParamDTOList\r
430             .add(new ParameterDTO("rpc-reply.ns1:error-message", opResult.getFaultString()));\r
431       }\r
432       responseParamDTOList.add(new ParameterDTO("rpc-reply.ns1:notification-timeout", "1200"));\r
433 \r
434       opResult.getOperationResponse().setParameterDTOs(responseParamDTOList);\r
435       response = mapperUtil.getNetconfResponse(opResult, request.getSwVersion(),\r
436           request.getHwVersion(), true);\r
437 \r
438       LOG.debug("update the status for fw details " + fwDetails.toString());\r
439     } else {\r
440       LOG.debug("FirmWare Upgrade is in progress");\r
441       String errorMsg = "TR069 device request has been aborted as Firmware Upgrade is inProgress";\r
442       return getOperationAbortedResponse(errorMsg);\r
443     }\r
444 \r
445     return response;\r
446   }\r
447 \r
448   protected DeviceRPCResponse mergeGetConfigDeviceRPCResponse(DeviceRPCResponse opResultVes,\r
449       DeviceRPCResponse opResultDevice) {\r
450     if (null == opResultVes) {\r
451       return opResultDevice;\r
452     }\r
453 \r
454     if (null == opResultDevice) {\r
455       return opResultVes;\r
456     }\r
457 \r
458     if (null != opResultVes.getFaultKey()\r
459         && !opResultVes.getFaultKey().equals(MapperConstants.RPC_SUCCESS)) {\r
460       return opResultVes;\r
461     } else if (null != opResultDevice.getFaultKey()\r
462         && !opResultDevice.getFaultKey().equals(MapperConstants.RPC_SUCCESS)) {\r
463       return opResultDevice;\r
464     }\r
465 \r
466     opResultDevice.getOperationResponse().getParameterDTOs()\r
467         .addAll(opResultVes.getOperationResponse().getParameterDTOs());\r
468     return opResultDevice;\r
469   }\r
470 \r
471   protected DeviceRPCResponse mergeSetConfigDeviceRPCResponse(DeviceRPCResponse opResultVes,\r
472       DeviceRPCResponse opResultDevice) {\r
473     if (null == opResultVes) {\r
474       return opResultDevice;\r
475     }\r
476 \r
477     if (null == opResultDevice) {\r
478       return opResultVes;\r
479     }\r
480 \r
481     return opResultDevice;\r
482   }\r
483 \r
484   protected boolean isVesNotificationRequest(ParameterDTO param) {\r
485     if (null == param.getParamName() || param.getParamName().isEmpty()) {\r
486       return false;\r
487     }\r
488 \r
489     if (param.getParamName().toLowerCase().contains(MapperConstants.HEART_BEAT_PERIOD.toLowerCase())\r
490         || param.getParamName().toLowerCase()\r
491             .contains(MapperConstants.COUNT_DOWN_TIMER.toLowerCase())\r
492         || param.getParamName().toLowerCase().contains(MapperConstants.HEART_BEAT.toLowerCase())) {\r
493       return true;\r
494     }\r
495 \r
496     return false;\r
497   }\r
498 \r
499   protected void handleBooleanParameters(List<ParameterDTO> parameterDTOs, String swVersion,\r
500       String hwVersion) {\r
501 \r
502     for (ParameterDTO param : parameterDTOs) {\r
503       MOMetaData metaData =\r
504           metaDataUtil.getMetaDataByTR69Name(param.getParamName(), swVersion, hwVersion);\r
505       if (null != metaData && BOOLEAN_DATA_TYPE.equalsIgnoreCase(metaData.getDataType())) {\r
506         if (BOOLEAN_TRUE_VALUE.equalsIgnoreCase(param.getParamValue().trim())) {\r
507           param.setParamValue(Boolean.TRUE.toString());\r
508         } else if (BOOLEAN_FALSE_VALUE.equalsIgnoreCase(param.getParamValue().trim())) {\r
509           param.setParamValue(Boolean.FALSE.toString());\r
510         }\r
511       }\r
512     }\r
513   }\r
514 \r
515   protected void handleBooleanParametersReverse(List<ParameterDTO> parameterDTOs, String swVersion,\r
516       String hwVersion) {\r
517 \r
518     for (ParameterDTO param : parameterDTOs) {\r
519       MOMetaData metaData =\r
520           metaDataUtil.getMetaDataByTR69Name(param.getParamName(), swVersion, hwVersion);\r
521       if (null != metaData && BOOLEAN_DATA_TYPE.equalsIgnoreCase(metaData.getDataType())) {\r
522         if (Boolean.TRUE.toString().equalsIgnoreCase(param.getParamValue().trim())) {\r
523           param.setParamValue(BOOLEAN_TRUE_VALUE);\r
524         } else if (Boolean.FALSE.toString().equalsIgnoreCase(param.getParamValue().trim())) {\r
525           param.setParamValue(BOOLEAN_FALSE_VALUE);\r
526         }\r
527       }\r
528     }\r
529   }\r
530 \r
531   protected NetConfResponse getEmptyResponse() {\r
532     NetConfResponse response = new NetConfResponse();\r
533     ErrorCodeDetails errorCodeMetaData = errorCodeUtil.getErrorCodeMetaData("0");\r
534     ErrorCodeDetails errorCode = new ErrorCodeDetails();\r
535     errorCode.setFaultCode("0");\r
536     errorCode.setErrorMessage(errorCodeMetaData.getErrorMessage());\r
537     errorCode.setErrorType(errorCodeMetaData.getErrorType());\r
538     errorCode.setErrorTag(errorCodeMetaData.getErrorTag());\r
539     errorCode.setErrorSeverity(errorCodeMetaData.getErrorSeverity());\r
540     response.setErrorCode(errorCode);\r
541     return response;\r
542   }\r
543 \r
544   protected NetConfResponse getTimeOutResponse() {\r
545     // prepare timeout error response\r
546     NetConfResponse timeOutErrorResponse = new NetConfResponse();\r
547     ErrorCodeDetails errorCode = new ErrorCodeDetails();\r
548     ErrorCodeDetails errorCodeMetaData = errorCodeUtil.getErrorCodeMetaData("8006");\r
549 \r
550     errorCode.setFaultCode("8006");\r
551     errorCode.setErrorMessage(errorCodeMetaData.getErrorMessage());\r
552     errorCode.setErrorType(errorCodeMetaData.getErrorType());\r
553     errorCode.setErrorTag(errorCodeMetaData.getErrorTag());\r
554     errorCode.setErrorSeverity(errorCodeMetaData.getErrorSeverity());\r
555     timeOutErrorResponse.setErrorCode(errorCode);\r
556     timeOutErrorResponse.setErrorMessage("TR069 device request has been timed out.");\r
557     return timeOutErrorResponse;\r
558   }\r
559 \r
560   protected NetConfResponse getErrorResponse(String errCode, String errorMsg) {\r
561     NetConfResponse errorResponse = new NetConfResponse();\r
562     ErrorCodeDetails errorCode = new ErrorCodeDetails();\r
563     ErrorCodeDetails errorCodeMetaData = errorCodeUtil.getErrorCodeMetaData("8006");\r
564     if (errorCodeMetaData != null) {\r
565       errorCode.setFaultCode(errCode);\r
566       errorCode.setErrorMessage(errorCodeMetaData.getErrorMessage());\r
567       errorCode.setErrorType(errorCodeMetaData.getErrorType());\r
568       errorCode.setErrorTag(errorCodeMetaData.getErrorTag());\r
569       errorCode.setErrorSeverity(errorCodeMetaData.getErrorSeverity());\r
570     }\r
571     errorResponse.setErrorCode(errorCode);\r
572     errorResponse.setErrorMessage(errorMsg);\r
573     return errorResponse;\r
574   }\r
575 \r
576   protected NetConfResponse getOperationAbortedResponse(String errorMessage) {\r
577     // prepare timeout error response\r
578     NetConfResponse timeOutErrorResponse = new NetConfResponse();\r
579     ErrorCodeDetails errorCode = new ErrorCodeDetails();\r
580     ErrorCodeDetails errorCodeMetaData = errorCodeUtil.getErrorCodeMetaData("8006");\r
581     if (errorCodeMetaData != null) {\r
582       errorCode.setFaultCode("8002");\r
583       errorCode.setErrorMessage(errorCodeMetaData.getErrorMessage());\r
584       errorCode.setErrorType(errorCodeMetaData.getErrorType());\r
585       errorCode.setErrorTag(errorCodeMetaData.getErrorTag());\r
586       errorCode.setErrorSeverity(errorCodeMetaData.getErrorSeverity());\r
587     }\r
588     timeOutErrorResponse.setErrorCode(errorCode);\r
589     timeOutErrorResponse.setErrorMessage(errorMessage);\r
590     return timeOutErrorResponse;\r
591   }\r
592 \r
593   public List<ParameterDTO> filteredSetParameters(List<ParameterDTO> parameters, String swVersion,\r
594       String hwVersion) {\r
595     List<ParameterDTO> result = new ArrayList<>();\r
596     for (ParameterDTO param : parameters) {\r
597       MOMetaData metaData =\r
598           metaDataUtil.getMetaDataByNetConfName(param.getParamName(), swVersion, hwVersion);\r
599       if (null != metaData && !metaData.isReadOnly()) {\r
600         String tr069MoName =\r
601             MOMetaDataUtil.getTR69MOByReplacingIndexes(param.getParamName(), metaData.getMoName());\r
602         param.setDataType(metaData.getDataType());\r
603         param.setParamName(tr069MoName);\r
604         result.add(param);\r
605       }\r
606     }\r
607     return result;\r
608   }\r
609 \r
610   protected List<ParameterDTO> filteredGetParameters(List<ParameterDTO> parameters,\r
611       String swVersion, String hwVersion) {\r
612     return metaDataUtil.getSupportedChildParameters(parameters, swVersion, hwVersion);\r
613   }\r
614 \r
615   @Override\r
616   public boolean handelRegisterEvent(NetConfServerDetails request) {\r
617     LOG.debug("processing the handelRegisterEvent started");\r
618     try {\r
619       VESNotificationResponse vesRsponse = vesnotiSender.sendNotification(null, request);\r
620       if (HttpStatus.valueOf(vesRsponse.getStatusCode()).is2xxSuccessful()) {\r
621         LOG.debug("processing the handelRegisterEvent completed");\r
622         return true;\r
623       } else {\r
624         LOG.error("processing the handelRegisterEvent error code recevived: {}",\r
625             vesRsponse.getStatusCode());\r
626         return false;\r
627       }\r
628     } catch (Exception e) {\r
629       LOG.error("processing the handelRegisterEvent exception occurred");\r
630       return false;\r
631     }\r
632   }\r
633 \r
634   protected static String getDownloadFileURI(String filepath) {\r
635 \r
636     if (filepath.contains("@") && filepath.contains("//")) {\r
637       String[] str = filepath.split("@");\r
638       String[] strForUserName = str[0].split("//");\r
639       if (str.length > 1) {\r
640         String Url = strForUserName[0] + "//" + str[1];\r
641         return Url;\r
642       }\r
643     }\r
644     return null;\r
645   }\r
646 \r
647   protected static String getDownloadUserName(String filepath) {\r
648 \r
649     if (filepath.contains("@") && filepath.contains("//")) {\r
650       String[] str = filepath.split("@");\r
651       String[] strForUserName = str[0].split("//");\r
652       if (strForUserName.length > 1)\r
653         return strForUserName[1];\r
654     }\r
655     return null;\r
656   }\r
657 \r
658   protected boolean isAdminStateOverriden(List<ParameterDTO> paramList) {\r
659     for (ParameterDTO paramDTO : paramList) {\r
660       if (paramDTO.getParamName().contains(MapperConstants.ADMIN_STATE)\r
661           || paramDTO.getParamName().contains(MapperConstants.ADMIN_STATUS)) {\r
662         return true;\r
663       }\r
664     }\r
665     return false;\r
666   }\r
667 \r
668   protected void convertResposeToSPVResponse(DeviceRPCResponse deviceRPCResponse) {\r
669     if (null == deviceRPCResponse) {\r
670       return;\r
671     }\r
672 \r
673     OperationResponse operationResponse = new SetParameterValueResponse();\r
674     operationResponse.setParameterDTOs(new ArrayList<ParameterDTO>());\r
675 \r
676     if (null == deviceRPCResponse.getFaultKey()) {\r
677       operationResponse.setStatus(MapperConstants.RPC_SUCCESS_CODE);\r
678     } else {\r
679       operationResponse.setStatus(MapperConstants.RPC_FAILED_CODE);\r
680     }\r
681 \r
682     deviceRPCResponse.setOperationResponse(operationResponse);\r
683   }\r
684 }\r