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