Development of NETCONF RPCs for tr-069 adapter to
[oam/tr069-adapter.git] / mapper / src / main / java / org / commscope / tr069adapter / mapper / netconf / impl / NetConfRequestHandlerImpl.java
1 /*
2  * ============LICENSE_START========================================================================
3  * ONAP : tr-069-adapter
4  * =================================================================================================
5  * Copyright (C) 2020 CommScope Inc Intellectual Property.
6  * =================================================================================================
7  * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,
8  * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You
9  * may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
14  * either express or implied. See the License for the specific language governing permissions and
15  * limitations under the License.
16  * ===============LICENSE_END=======================================================================
17  */
18
19 package org.commscope.tr069adapter.mapper.netconf.impl;
20
21 import java.text.DateFormat;
22 import java.text.SimpleDateFormat;
23 import java.util.ArrayList;
24 import java.util.List;
25 import java.util.Map;
26
27 import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;
28 import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;
29 import org.commscope.tr069adapter.acs.common.OperationOptions;
30 import org.commscope.tr069adapter.acs.common.OperationResponse;
31 import org.commscope.tr069adapter.acs.common.ParameterDTO;
32 import org.commscope.tr069adapter.acs.common.dto.CustomOperationCode;
33 import org.commscope.tr069adapter.acs.common.dto.ParameterAttributeDTO;
34 import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;
35 import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;
36 import org.commscope.tr069adapter.acs.common.dto.TR069OperationDetails;
37 import org.commscope.tr069adapter.acs.common.response.AddObjectResponse;
38 import org.commscope.tr069adapter.acs.common.response.SetParameterValueResponse;
39 import org.commscope.tr069adapter.acs.common.utils.ConnectionStatusPOJO;
40 import org.commscope.tr069adapter.mapper.MOMetaData;
41 import org.commscope.tr069adapter.mapper.acs.ACSRequestSender;
42 import org.commscope.tr069adapter.mapper.dao.DeviceOperationsDAO;
43 import org.commscope.tr069adapter.mapper.entity.DeviceOperationDetails;
44 import org.commscope.tr069adapter.mapper.model.ErrorCodeDetails;
45 import org.commscope.tr069adapter.mapper.model.NetConfRequest;
46 import org.commscope.tr069adapter.mapper.model.NetConfResponse;
47 import org.commscope.tr069adapter.mapper.model.NetConfServerDetails;
48 import org.commscope.tr069adapter.mapper.model.VESNotificationResponse;
49 import org.commscope.tr069adapter.mapper.netconf.NetConfRequestHandler;
50 import org.commscope.tr069adapter.mapper.sync.SynchronizedRequestHandler;
51 import org.commscope.tr069adapter.mapper.util.ErrorCodeUtil;
52 import org.commscope.tr069adapter.mapper.util.FirwareUpgradeStatus;
53 import org.commscope.tr069adapter.mapper.util.MOMetaDataUtil;
54 import org.commscope.tr069adapter.mapper.util.MapperConstants;
55 import org.commscope.tr069adapter.mapper.util.NetconfToTr069MapperUtil;
56 import org.commscope.tr069adapter.mapper.ves.VESNotificationSender;
57 import org.slf4j.Logger;
58 import org.slf4j.LoggerFactory;
59 import org.springframework.beans.factory.annotation.Autowired;
60 import org.springframework.http.HttpStatus;
61 import org.springframework.stereotype.Component;
62 import org.springframework.util.StringUtils;
63 import org.w3c.dom.Document;
64 import org.w3c.dom.Element;
65 import org.w3c.dom.NodeList;
66
67 @Component
68 public class NetConfRequestHandlerImpl implements NetConfRequestHandler {
69
70   private static final Logger LOG = LoggerFactory.getLogger(NetConfRequestHandlerImpl.class);
71   private static final String BOOLEAN_TRUE_VALUE = "1";
72   private static final String BOOLEAN_FALSE_VALUE = "0";
73   private static final String BOOLEAN_DATA_TYPE = "boolean";
74   private static final String CONFIG = "config";
75   private static final String FILTER = "filter";
76   private static final String NO_DEVICE_PARAM_FOUND =
77       "There are no device parameters found for get.";
78   private static final String RPC_REPLY_STATUS = "rpc-reply.ns1:status";
79   private static final String RPC_REPLY_ERROR = "rpc-reply.ns1:error-message";
80   private static final String FAILED = "FAILED";
81   private static final String PARAMETER = "parameter";
82
83   @Autowired
84   SynchronizedRequestHandler syncHandler;
85
86   @Autowired
87   NetconfToTr069MapperUtil mapperUtil;
88
89   @Autowired
90   MOMetaDataUtil metaDataUtil;
91
92   @Autowired
93   ErrorCodeUtil errorCodeUtil;
94
95   @Autowired
96   VESNotificationSender vesnotiSender;
97
98   @Autowired
99   DeviceOperationsDAO deviceOperDAO;
100
101   @Autowired
102   ACSRequestSender tr069ReqSender;
103
104   @Override
105   public NetConfResponse handleSetConfigRequest(NetConfRequest netConfRequest) {
106     Element el = NetconfToTr069MapperUtil.convertStringToDocument(netConfRequest.getRequestXml());
107     NetConfResponse response = null;
108     DeviceRPCRequest deviceRPCRequest = NetconfToTr069MapperUtil.prepareTR069Request(
109         netConfRequest.getDeviceId(), el, CONFIG, TR069OperationCode.SET_PARAMETER_VALUES);
110
111     if (deviceRPCRequest == null) {
112       LOG.debug("There are no supported device parameters found for edit-config.");
113       return getEmptyResponse();
114     }
115     List<ParameterDTO> requestParams = deviceRPCRequest.getOpDetails().getParmeters();
116     List<ParameterDTO> filteredParams = new ArrayList<>();
117     List<ParameterDTO> vesRequestParams = new ArrayList<>();
118
119     if (null != requestParams) {
120       for (ParameterDTO param : requestParams) {
121         if (null == param.getParamValue() || StringUtils.isEmpty(param.getParamValue())) {
122           continue;
123         }
124         if (isVesNotificationRequest(param)) {
125           vesRequestParams.add(param);
126         }
127         filteredParams.add(param);
128       }
129       deviceRPCRequest.getOpDetails().setParmeters(filteredParams);
130     }
131
132     if (deviceRPCRequest.getOpDetails() == null
133         || deviceRPCRequest.getOpDetails().getParmeters().isEmpty()) {
134       LOG.debug("There are no device parameters found for edit-config.");
135       return getEmptyResponse();
136     } else if (deviceRPCRequest.getOpDetails() != null) {
137       deviceRPCRequest.getOpDetails()
138           .setParmeters(filteredSetParameters(deviceRPCRequest.getOpDetails().getParmeters(),
139               netConfRequest.getSwVersion(), netConfRequest.getHwVersion()));
140       if (deviceRPCRequest.getOpDetails().getParmeters().isEmpty()) {
141         LOG.debug("There are no supported device parameters found for edit-config.");
142         return getEmptyResponse();
143       }
144     }
145
146     handleBooleanParametersReverse(deviceRPCRequest.getOpDetails().getParmeters(),
147         netConfRequest.getSwVersion(), netConfRequest.getHwVersion());
148     LOG.debug("Prepared NBI request for edit-config {}", deviceRPCRequest);
149
150     DeviceRPCResponse deviceRPCResponseVes = null;
151     List<ParameterDTO> allParamList = deviceRPCRequest.getOpDetails().getParmeters();
152
153     if (!vesRequestParams.isEmpty()) {
154       deviceRPCRequest.getOpDetails().setParmeters(vesRequestParams);
155       deviceRPCResponseVes = vesnotiSender.sendEditConfigNotification(deviceRPCRequest);
156
157       if (null == deviceRPCResponseVes) {
158         return getTimeOutResponse();
159       }
160     }
161
162     allParamList.removeAll(vesRequestParams);
163
164     DeviceRPCResponse deviceRPCResponseDevice = null;
165     if (null != allParamList && !allParamList.isEmpty()) {
166       deviceRPCRequest.getOpDetails().setParmeters(allParamList);
167       if (isAdminStateOverriden(allParamList)) {
168         deviceRPCRequest.getOpDetails().setOpCode(CustomOperationCode.CONFIGURE_MULTIPLE_OBJECTS);
169         TR069OperationDetails tr069OperationDetails =
170             (TR069OperationDetails) deviceRPCRequest.getOpDetails();
171         tr069OperationDetails.setModifyParamList(allParamList);
172         tr069OperationDetails.setSetParamList(null);
173
174         deviceRPCResponseDevice = syncHandler.performDeviceOperation(deviceRPCRequest);
175         convertResposeToSPVResponse(deviceRPCResponseDevice);
176       } else {
177         deviceRPCResponseDevice = syncHandler.performDeviceOperation(deviceRPCRequest);
178       }
179
180       if (null == deviceRPCResponseDevice) {
181         return getTimeOutResponse();
182       }
183     }
184
185     DeviceRPCResponse deviceRPCResponse =
186         mergeSetConfigDeviceRPCResponse(deviceRPCResponseVes, deviceRPCResponseDevice);
187     if (null == deviceRPCResponse) {
188       return getTimeOutResponse();
189     }
190     response = mapperUtil.getNetconfResponse(deviceRPCResponse, netConfRequest.getSwVersion(),
191         netConfRequest.getHwVersion(), false);
192     return response;
193   }
194
195   @Override
196   public NetConfResponse handleDelConfigRequest(NetConfRequest netConfRequest) {
197     Element el = NetconfToTr069MapperUtil.convertStringToDocument(netConfRequest.getRequestXml());
198     NetConfResponse response = null;
199     DeviceRPCRequest request = NetconfToTr069MapperUtil.prepareTR069Request(
200         netConfRequest.getDeviceId(), el, CONFIG, TR069OperationCode.DELETE_OBJECT);
201
202     if (request == null) {
203       LOG.debug("There are no supported device parameters found for delete-config.");
204       return getEmptyResponse();
205     }
206
207     List<ParameterDTO> requestParams = request.getOpDetails().getParmeters();
208     List<ParameterDTO> filteredParams = new ArrayList<>();
209     if (null != requestParams) {
210       for (ParameterDTO param : requestParams) {
211         filteredParams.add(param);
212       }
213       request.getOpDetails().setParmeters(filteredParams);
214     }
215
216     if (request.getOpDetails() == null || request.getOpDetails().getParmeters().isEmpty()) {
217       LOG.debug("There are no device parameters found for delete-config.");
218       return getEmptyResponse();
219     } else if (request.getOpDetails() != null) {
220       request.getOpDetails()
221           .setParmeters(filteredSetParameters(request.getOpDetails().getParmeters(),
222               netConfRequest.getSwVersion(), netConfRequest.getHwVersion()));
223       if (request.getOpDetails().getParmeters().isEmpty()) {
224         LOG.debug("There are no supported device parameters found for delete-config.");
225         return getEmptyResponse();
226       }
227     }
228     LOG.debug("Prepared NBI request for delete-config {}", request);
229
230     DeviceRPCResponse opResult;
231     opResult = syncHandler.performDeviceOperation(request);
232     if (null == opResult) {
233       return getTimeOutResponse();
234     }
235     response = mapperUtil.getNetconfResponse(opResult, netConfRequest.getSwVersion(),
236         netConfRequest.getHwVersion(), false);
237     return response;
238   }
239
240   @Override
241   public NetConfResponse handleGetRequest(NetConfRequest netConfRequest) {
242     Element el = NetconfToTr069MapperUtil.convertStringToDocument(netConfRequest.getRequestXml());
243     NetConfResponse response = null;
244     DeviceRPCRequest request = NetconfToTr069MapperUtil.prepareTR069Request(
245         netConfRequest.getDeviceId(), el, FILTER, TR069OperationCode.GET_PARAMETER_VALUES);
246
247     if (request == null || request.getOpDetails() == null
248         || request.getOpDetails().getParmeters().isEmpty()) {
249       LOG.debug(NO_DEVICE_PARAM_FOUND);
250       return getEmptyResponse();
251     } else if (request.getOpDetails() != null) {
252
253       request.getOpDetails()
254           .setParmeters(filteredGetParameters(request.getOpDetails().getParmeters(),
255               netConfRequest.getSwVersion(), netConfRequest.getHwVersion()));
256
257       if (request.getOpDetails().getParmeters().isEmpty()) {
258         LOG.debug("There are no supported device parameters found for get.");
259         return getEmptyResponse();
260       }
261     }
262     LOG.debug("Prepared NBI request for get {}", request);
263
264     DeviceRPCResponse opResult;
265     opResult = syncHandler.performDeviceOperation(request);
266     if (null == opResult) {
267       return getTimeOutResponse();
268     }
269     response = mapperUtil.getNetconfResponse(opResult, netConfRequest.getSwVersion(),
270         netConfRequest.getHwVersion(), false);
271     return response;
272   }
273
274   @Override
275   public NetConfResponse handleGetConfigRequest(NetConfRequest netConfRequest) {
276     Element el = NetconfToTr069MapperUtil.convertStringToDocument(netConfRequest.getRequestXml());
277     NetConfResponse response = null;
278     List<ParameterDTO> vesRequestParams = new ArrayList<>();
279
280     boolean isSoftwareInventory = false;
281     if (netConfRequest.getRequestXml().contains("software-inventory")) {
282       LOG.info("XML Contains software-inventory");
283       isSoftwareInventory = true;
284     }
285
286     DeviceRPCRequest request = NetconfToTr069MapperUtil.prepareTR069Request(
287         netConfRequest.getDeviceId(), el, FILTER, TR069OperationCode.GET_PARAMETER_VALUES);
288
289     if (request == null || request.getOpDetails() == null
290         || request.getOpDetails().getParmeters().isEmpty()) {
291       LOG.debug("There are no device parameters found for get-config.");
292       return getEmptyResponse();
293     } else if (request.getOpDetails() != null) {
294       request.getOpDetails()
295           .setParmeters(filteredGetParameters(request.getOpDetails().getParmeters(),
296               netConfRequest.getSwVersion(), netConfRequest.getHwVersion()));
297
298       if (request.getOpDetails().getParmeters().isEmpty()) {
299         LOG.debug("There are no supported device parameters found for get-config.");
300         return getEmptyResponse();
301       }
302       for (ParameterDTO param : request.getOpDetails().getParmeters()) {
303         if (isVesNotificationRequest(param)) {
304           vesRequestParams.add(param);
305         }
306       }
307     }
308     LOG.debug("Prepared NBI request for get-config {}", request);
309
310     DeviceRPCResponse opResultVes = null;
311     List<ParameterDTO> allParamList = request.getOpDetails().getParmeters();
312
313     if (!vesRequestParams.isEmpty()) {
314       request.getOpDetails().setParmeters(vesRequestParams);
315       opResultVes = vesnotiSender.sendGetConfigNotification(request);
316
317       if (null == opResultVes) {
318         return getTimeOutResponse();
319       }
320     }
321
322     allParamList.removeAll(vesRequestParams);
323
324     DeviceRPCResponse opResultDevice = null;
325     if (!allParamList.isEmpty()) {
326       request.getOpDetails().setParmeters(allParamList);
327       opResultDevice = syncHandler.performDeviceOperation(request);
328
329       if (null == opResultDevice) {
330         return getTimeOutResponse();
331       }
332     }
333
334     DeviceRPCResponse opResult = mergeGetConfigDeviceRPCResponse(opResultVes, opResultDevice);
335
336     if (null == opResult) {
337       return getTimeOutResponse();
338     }
339     LOG.debug("Received GPV response : FaultKey = {}, FaultString = {}, Parameters : {}",
340         opResult.getFaultKey(), opResult.getFaultString(),
341         opResult.getOperationResponse().getParameterDTOs());
342     if (null != opResult.getOperationResponse().getParameterDTOs())
343       handleBooleanParameters(opResult.getOperationResponse().getParameterDTOs(),
344           netConfRequest.getSwVersion(), netConfRequest.getHwVersion());
345
346     if (isSoftwareInventory) {
347       response = mapperUtil.getNetconfResponseForSoftwareInventory(opResult,
348           netConfRequest.getSwVersion(), netConfRequest.getHwVersion());
349     } else {
350       response = mapperUtil.getNetconfResponse(opResult, netConfRequest.getSwVersion(),
351           netConfRequest.getHwVersion(), false);
352     }
353
354     if (opResult.getFaultKey() != null && opResult.getFaultKey().equalsIgnoreCase("9005")) {
355       // check for tabular
356       LOG.debug("Tabualr Entry not exist in the device; we need to add it now");
357       MOMetaData data = metaDataUtil.getMetaDataByTR69Name(
358           request.getOpDetails().getParmeters().get(0).getParamName(),
359           netConfRequest.getSwVersion(), netConfRequest.getHwVersion());
360       if (data.isTabluarObj()) {
361         return getEmptyResponse();
362       }
363     }
364
365     return response;
366   }
367
368   @Override
369   public NetConfResponse handleSWDownloadRequest(NetConfRequest request) {
370     LOG.debug("request received fro sw-download");
371     Document d1 = NetconfToTr069MapperUtil.convertStringToDocumentXml(request.getRequestXml());
372     NetConfResponse response = null;
373     Map<String, String> map =
374         NetconfToTr069MapperUtil.extractRequestParamters(d1, "rpc", "software-download");
375     if (map == null || map.size() <= 0) {
376       LOG.debug(NO_DEVICE_PARAM_FOUND);
377       return getEmptyResponse();
378     }
379
380     TR069OperationDetails opDetails = new TR069OperationDetails();
381     DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();
382     TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();
383     tr069DeviceDetails.setDeviceId(request.getDeviceId());
384     deviceRPCRequest.setOpDetails(opDetails);
385     deviceRPCRequest.setDeviceDetails(tr069DeviceDetails);
386     OperationOptions options = new OperationOptions();
387     options.setExecutionTimeout(60l);
388     deviceRPCRequest.setOptions(options);
389     String fileName = map.get("rpc.software-download.remote-file-path");
390     String password = map.get("rpc.software-download.password.password");
391
392     if (fileName == null || password == null || getDownloadFileURI(fileName) == null
393         || getDownloadUserName(fileName) == null) {
394       LOG.error(
395           "remote-file-path value is not as per yang model reference. Allowed pattern sftp://<username>@<host>[:<port>]/path");
396       return getOperationAbortedResponse(
397           "remote-file-path value is not as per yang model reference. Allowed pattern sftp://<username>@<host>[:<port>]/path");
398     }
399
400     List<ParameterDTO> paramDTOList = new ArrayList<>();
401     paramDTOList.add(new ParameterDTO("FileType", "1 Firmware Upgrade Image"));
402     paramDTOList.add(new ParameterDTO("URL", getDownloadFileURI(fileName)));
403     paramDTOList.add(new ParameterDTO("Username", getDownloadUserName(fileName)));
404     paramDTOList.add(new ParameterDTO("Password", password));
405     paramDTOList.add(new ParameterDTO("FileSize", "0"));
406     paramDTOList.add(new ParameterDTO("TargetFileName", ""));
407     paramDTOList.add(new ParameterDTO("DelaySeconds", "1"));
408     paramDTOList.add(new ParameterDTO("SuccessURL", ""));
409     paramDTOList.add(new ParameterDTO("FailureURL", ""));
410
411     deviceRPCRequest.getOpDetails().setParmeters(paramDTOList);
412     deviceRPCRequest.getOpDetails().setOpCode(TR069OperationCode.DOWNLOAD);
413
414     LOG.debug("Prepared NBI request for download {}", deviceRPCRequest);
415
416     DeviceOperationDetails fwDetails = deviceOperDAO.findByDeviceId(request.getDeviceId());
417     if (fwDetails == null) {
418       String errorMsg = "TR069 device request has been aborted,due to device not identified";
419       return getOperationAbortedResponse(errorMsg);
420     }
421
422     if (fwDetails.getDownLoadStatus() != FirwareUpgradeStatus.DOWNLOAD_INTIATED.getStatus()
423         && fwDetails.getDownLoadStatus() != FirwareUpgradeStatus.DOWNLOAD_COMPLETED.getStatus()) {
424
425       LOG.debug("persisting the fw details {}", fwDetails);
426
427       DeviceRPCResponse opResult;
428       opResult = syncHandler.performDeviceOperation(deviceRPCRequest);
429       if (null == opResult) {
430         return getTimeOutResponse();
431       }
432       fwDetails.setFileName(fileName);
433       fwDetails.setDownLoadStatus(FirwareUpgradeStatus.DOWNLOAD_INTIATED.getStatus());
434       fwDetails.setOrigin("sdnr");
435       deviceOperDAO.save(fwDetails);
436       ArrayList<ParameterDTO> responseParamDTOList = new ArrayList<>();
437
438       if (opResult.getOperationResponse().getStatus() == 1) {
439         responseParamDTOList.add(new ParameterDTO(RPC_REPLY_STATUS, "STARTED"));
440       } else {
441         responseParamDTOList.add(new ParameterDTO(RPC_REPLY_STATUS, FAILED));
442         responseParamDTOList.add(new ParameterDTO(RPC_REPLY_ERROR, opResult.getFaultString()));
443       }
444       responseParamDTOList.add(new ParameterDTO("rpc-reply.ns1:notification-timeout", "1200"));
445
446       opResult.getOperationResponse().setParameterDTOs(responseParamDTOList);
447       response = mapperUtil.getNetconfResponse(opResult, request.getSwVersion(),
448           request.getHwVersion(), true);
449
450       LOG.debug("update the status for fw details {}", fwDetails);
451     } else {
452       LOG.debug("FirmWare Upgrade is in progress");
453       String errorMsg = "TR069 device request has been aborted as Firmware Upgrade is inProgress";
454       return getOperationAbortedResponse(errorMsg);
455     }
456
457     return response;
458   }
459
460   @Override
461   public NetConfResponse handleAddObjectRequest(NetConfRequest request) {
462     LOG.debug("request received for addObject");
463     Document d1 = NetconfToTr069MapperUtil.convertStringToDocumentXml(request.getRequestXml());
464     NetConfResponse response = null;
465     Map<String, String> map =
466         NetconfToTr069MapperUtil.extractRequestParamters(d1, "rpc", "add-object");
467     if (map == null || map.size() <= 0) {
468       LOG.debug(NO_DEVICE_PARAM_FOUND);
469       return getEmptyResponse();
470     }
471
472     Element el = NetconfToTr069MapperUtil.convertStringToDocument(request.getRequestXml());
473     DeviceRPCRequest deviceRPCRequest = NetconfToTr069MapperUtil
474         .prepareTR069Request(request.getDeviceId(), el, PARAMETER, TR069OperationCode.ADD_OBJECT);
475
476     if (deviceRPCRequest == null || deviceRPCRequest.getOpDetails() == null
477         || deviceRPCRequest.getOpDetails().getParmeters().isEmpty()) {
478       LOG.debug("There are no device parameters found for addobject.");
479       return getEmptyResponse();
480     } else if (deviceRPCRequest.getOpDetails() != null) {
481       deviceRPCRequest.getOpDetails()
482           .setParmeters(filteredGetParameters(deviceRPCRequest.getOpDetails().getParmeters(),
483               request.getSwVersion(), request.getHwVersion()));
484       if (deviceRPCRequest.getOpDetails().getParmeters().isEmpty()) {
485         LOG.debug("There are no supported device parameters found for addobject.");
486         return getEmptyResponse();
487       }
488     }
489
490     LOG.debug("Prepared NBI request for addobject {}", deviceRPCRequest);
491
492     DeviceRPCResponse opResult;
493     opResult = syncHandler.performDeviceOperation(deviceRPCRequest);
494     if (null == opResult) {
495       return getTimeOutResponse();
496     }
497     if (null == opResult.getOperationResponse()) {
498       return getTimeOutResponse();
499     }
500     AddObjectResponse addOpresult = (AddObjectResponse) opResult.getOperationResponse();
501
502     ArrayList<ParameterDTO> responseParamDTOList = new ArrayList<>();
503
504     if (opResult.getFaultKey() == null) {
505       String status = String.valueOf(opResult.getOperationResponse().getStatus());
506       responseParamDTOList.add(new ParameterDTO(RPC_REPLY_STATUS, status));
507       String instanceNumber = String.valueOf(addOpresult.getInstanceNumber());
508       LOG.info("AddObject Passed : Instance Number: {}", instanceNumber);
509       responseParamDTOList.add(new ParameterDTO("rpc-reply.ns1:instance-number", instanceNumber));
510     }
511     LOG.info("AddObject Label value: {}", addOpresult.getLabel());
512     if (null == addOpresult.getLabel()) {
513       responseParamDTOList.add(new ParameterDTO("rpc-reply.ns1:label", ""));
514     } else {
515       responseParamDTOList.add(new ParameterDTO("rpc-reply.ns1:label", addOpresult.getLabel()));
516     }
517
518     opResult.getOperationResponse().setParameterDTOs(responseParamDTOList);
519     response = mapperUtil.getNetconfResponse(opResult, request.getSwVersion(),
520         request.getHwVersion(), true);
521
522     return response;
523   }
524
525   @Override
526   public NetConfResponse handleDeleteObjectRequest(NetConfRequest request) {
527     LOG.debug("request received for deleteObject");
528     Document d1 = NetconfToTr069MapperUtil.convertStringToDocumentXml(request.getRequestXml());
529     NetConfResponse response = null;
530     Map<String, String> map =
531         NetconfToTr069MapperUtil.extractRequestParamters(d1, "rpc", "delete-object");
532     if (map == null || map.size() <= 0) {
533       LOG.debug(NO_DEVICE_PARAM_FOUND);
534       return getEmptyResponse();
535     }
536
537     Element el = NetconfToTr069MapperUtil.convertStringToDocument(request.getRequestXml());
538     DeviceRPCRequest deviceRPCRequest = NetconfToTr069MapperUtil.prepareTR069Request(
539         request.getDeviceId(), el, PARAMETER, TR069OperationCode.DELETE_OBJECT);
540
541     if (deviceRPCRequest == null || deviceRPCRequest.getOpDetails() == null
542         || deviceRPCRequest.getOpDetails().getParmeters().isEmpty()) {
543       LOG.debug("There are no device parameters found for deleteobject.");
544       return getEmptyResponse();
545     } else if (deviceRPCRequest.getOpDetails() != null) {
546       deviceRPCRequest.getOpDetails()
547           .setParmeters(filteredGetParameters(deviceRPCRequest.getOpDetails().getParmeters(),
548               request.getSwVersion(), request.getHwVersion()));
549
550       if (deviceRPCRequest.getOpDetails().getParmeters().isEmpty()) {
551         LOG.debug("There are no supported device parameters found for deleteobject.");
552         return getEmptyResponse();
553       }
554     }
555
556     LOG.debug("Prepared NBI request for addobject: {}", deviceRPCRequest);
557
558     DeviceRPCResponse opResult;
559     opResult = syncHandler.performDeviceOperation(deviceRPCRequest);
560     if (null == opResult) {
561       return getTimeOutResponse();
562     }
563     if (null == opResult.getOperationResponse()) {
564       return getTimeOutResponse();
565     }
566
567     ArrayList<ParameterDTO> responseParamDTOList = new ArrayList<>();
568
569     if (opResult.getFaultKey() == null) {
570       String status = String.valueOf(opResult.getOperationResponse().getStatus());
571       responseParamDTOList.add(new ParameterDTO(RPC_REPLY_STATUS, status));
572     }
573     opResult.getOperationResponse().setParameterDTOs(responseParamDTOList);
574     response = mapperUtil.getNetconfResponse(opResult, request.getSwVersion(),
575         request.getHwVersion(), true);
576
577     return response;
578   }
579
580   @Override
581   public NetConfResponse handleRequestWithoutInputParams(NetConfRequest request) {
582     Document d1 = NetconfToTr069MapperUtil.convertStringToDocumentXml(request.getRequestXml());
583     NetConfResponse response = null;
584     TR069OperationDetails opDetails = new TR069OperationDetails();
585     Map<String, String> map = null;
586
587     if (request.getRequestXml().contains("reboot")) {
588       LOG.info("Request Contains Reboot");
589       map = NetconfToTr069MapperUtil.extractRequestParamters(d1, "rpc", "reboot");
590       opDetails.setOpCode(TR069OperationCode.REBOOT);
591     } else if (request.getRequestXml().contains("reset")) {
592       LOG.info("Request Contains Reset");
593       map = NetconfToTr069MapperUtil.extractRequestParamters(d1, "rpc", "reset");
594       opDetails.setOpCode(TR069OperationCode.FACTORY_RESET);
595     }
596
597     if (map == null || map.size() <= 0) {
598       LOG.debug(NO_DEVICE_PARAM_FOUND);
599       return getEmptyResponse();
600     }
601
602     DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();
603     TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();
604     tr069DeviceDetails.setDeviceId(request.getDeviceId());
605     deviceRPCRequest.setOpDetails(opDetails);
606     deviceRPCRequest.setDeviceDetails(tr069DeviceDetails);
607     OperationOptions options = new OperationOptions();
608     options.setExecutionTimeout(60l);
609     deviceRPCRequest.setOptions(options);
610
611     DeviceRPCResponse opResult;
612     opResult = syncHandler.performDeviceOperation(deviceRPCRequest);
613     if (null == opResult) {
614       return getTimeOutResponse();
615     }
616     LOG.debug("Received response for request without input params : FaultKey = {}",
617         opResult.getFaultKey());
618
619     response = mapperUtil.getNetconfResponseForRequestWithoutInputParams(opResult);
620
621     return response;
622   }
623
624   @Override
625   public NetConfResponse handleSPAObjectRequest(NetConfRequest request) {
626     LOG.debug("request received for spaObject");
627     Document d1 = NetconfToTr069MapperUtil.convertStringToDocumentXml(request.getRequestXml());
628     NetConfResponse response = null;
629     Map<String, String> map =
630         NetconfToTr069MapperUtil.extractRequestParamters(d1, "rpc", "set-parameter-attributes");
631     if (map == null || map.size() <= 0) {
632       LOG.debug(NO_DEVICE_PARAM_FOUND);
633       return getEmptyResponse();
634     }
635     List<ParameterDTO> params = new ArrayList<>();
636     NodeList nl = d1.getElementsByTagName(CONFIG);
637     int len = nl.getLength();
638     for (int i = 0; i < len; i++) {
639       Element elm = (Element) nl.item(i);
640       ParameterAttributeDTO param = mapperUtil.getParamNameAndValueForSPA(elm, CONFIG,
641           request.getSwVersion(), request.getHwVersion());
642
643       if (param == null) {
644         LOG.debug("There are no device parameters found for spaconfig.");
645         return getEmptyResponse();
646       }
647
648       params.add(param);
649     }
650
651     TR069OperationDetails opDetails = new TR069OperationDetails();
652     DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();
653     TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();
654     tr069DeviceDetails.setDeviceId(request.getDeviceId());
655     deviceRPCRequest.setOpDetails(opDetails);
656     deviceRPCRequest.setDeviceDetails(tr069DeviceDetails);
657     OperationOptions options = new OperationOptions();
658     options.setExecutionTimeout(60l);
659     deviceRPCRequest.setOptions(options);
660
661     deviceRPCRequest.getOpDetails().setParmeters(params);
662     deviceRPCRequest.getOpDetails().setOpCode(TR069OperationCode.SET_PARAMETER_ATTRIBUTES);
663
664     LOG.debug("Prepared NBI request for spaobject {} ", deviceRPCRequest);
665
666     DeviceRPCResponse opResult;
667     opResult = syncHandler.performDeviceOperation(deviceRPCRequest);
668     if (null == opResult) {
669       return getTimeOutResponse();
670     }
671
672     ArrayList<ParameterDTO> responseParamDTOList = new ArrayList<>();
673
674     if (opResult.getFaultKey() == null) {
675       responseParamDTOList.add(new ParameterDTO(RPC_REPLY_STATUS, "SUCCESS"));
676     } else {
677       responseParamDTOList.add(new ParameterDTO(RPC_REPLY_STATUS, FAILED));
678       responseParamDTOList.add(new ParameterDTO(RPC_REPLY_ERROR, opResult.getFaultString()));
679     }
680
681     opResult.getOperationResponse().setParameterDTOs(responseParamDTOList);
682     response = mapperUtil.getNetconfResponse(opResult, request.getSwVersion(),
683         request.getHwVersion(), true);
684
685     return response;
686   }
687
688   @Override
689   public NetConfResponse handleGPAObjectRequest(NetConfRequest netConfRequest) {
690     LOG.debug("request received for gpaObject");
691     Document d1 =
692         NetconfToTr069MapperUtil.convertStringToDocumentXml(netConfRequest.getRequestXml());
693     NetConfResponse response = null;
694     Map<String, String> map =
695         NetconfToTr069MapperUtil.extractRequestParamters(d1, "rpc", "get-parameter-attributes");
696     if (map == null || map.size() <= 0) {
697       LOG.debug(NO_DEVICE_PARAM_FOUND);
698       return getEmptyResponse();
699     }
700     List<ParameterDTO> params = new ArrayList<>();
701     NodeList nl = d1.getElementsByTagName(FILTER);
702     int len = nl.getLength();
703     for (int i = 0; i < len; i++) {
704       Element elm = (Element) nl.item(i);
705       ParameterDTO param = mapperUtil.getParamNameAndValueForGPA(elm, PARAMETER,
706           netConfRequest.getSwVersion(), netConfRequest.getHwVersion());
707
708       if (param == null) {
709         LOG.debug("There are no device parameters found for GPA.");
710         return getEmptyResponse();
711       }
712
713       params.add(param);
714     }
715
716     TR069OperationDetails opDetails = new TR069OperationDetails();
717     DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();
718     TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();
719     tr069DeviceDetails.setDeviceId(netConfRequest.getDeviceId());
720     deviceRPCRequest.setOpDetails(opDetails);
721     deviceRPCRequest.setDeviceDetails(tr069DeviceDetails);
722     OperationOptions options = new OperationOptions();
723     options.setExecutionTimeout(60l);
724     deviceRPCRequest.setOptions(options);
725
726     deviceRPCRequest.getOpDetails().setParmeters(params);
727     deviceRPCRequest.getOpDetails().setOpCode(TR069OperationCode.GET_PARAMETER_ATTRIBUTES);
728
729     LOG.debug("Prepared NBI request for gpaobject {}", deviceRPCRequest);
730
731     DeviceRPCResponse opResult;
732     opResult = syncHandler.performDeviceOperation(deviceRPCRequest);
733     if (null == opResult) {
734       return getTimeOutResponse();
735     }
736
737     response = mapperUtil.getNetconfResponseForGPA(opResult, netConfRequest.getSwVersion(),
738         netConfRequest.getHwVersion());
739
740     return response;
741   }
742
743   @Override
744   public NetConfResponse handleConnectionStatusRequest(NetConfRequest request) {
745     NetConfResponse netConfResponse = new NetConfResponse();
746     ConnectionStatusPOJO connStatusPOJO =
747         tr069ReqSender.sendConnectionStatusReq(request.getDeviceId());
748
749     List<ParameterDTO> paramDTOList = new ArrayList<>();
750     DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
751     if (connStatusPOJO.isStatus()) {
752       paramDTOList.add(new ParameterDTO("rpc-reply.ns1:last-access-status", "SUCCESS"));
753     } else {
754       paramDTOList.add(new ParameterDTO("rpc-reply.ns1:last-access-status", FAILED));
755       paramDTOList.add(new ParameterDTO(RPC_REPLY_ERROR, connStatusPOJO.getErrorMessage()));
756     }
757     String lastContactDate = dateFormat.format(connStatusPOJO.getLastContactTime());
758     paramDTOList.add(new ParameterDTO("rpc-reply.ns1:last-contact-time", lastContactDate));
759
760     String lastFailedAttemptDate = dateFormat.format(connStatusPOJO.getLastFailedAttemptTime());
761     paramDTOList
762         .add(new ParameterDTO("rpc-reply.ns1:last-failure-attempt-time", lastFailedAttemptDate));
763
764     String xml = mapperUtil.getNetconfResponseXML(paramDTOList, request.getSwVersion(),
765         request.getHwVersion(), true);
766     LOG.debug("handleConnectionStatusRequest XML String: {}", xml);
767     netConfResponse.setNetconfResponseXml(xml);
768     return netConfResponse;
769   }
770
771   @Override
772   public NetConfResponse handleDownloadRequest(NetConfRequest request) {
773     LOG.debug("request received for download");
774     Document d1 = NetconfToTr069MapperUtil.convertStringToDocumentXml(request.getRequestXml());
775     NetConfResponse response = null;
776     Map<String, String> map =
777         NetconfToTr069MapperUtil.extractRequestParamters(d1, "rpc", "download");
778     if (map == null || map.size() <= 0) {
779       LOG.debug(NO_DEVICE_PARAM_FOUND);
780       return getEmptyResponse();
781     }
782
783     TR069OperationDetails opDetails = new TR069OperationDetails();
784     DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();
785     TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();
786     tr069DeviceDetails.setDeviceId(request.getDeviceId());
787     deviceRPCRequest.setOpDetails(opDetails);
788     deviceRPCRequest.setDeviceDetails(tr069DeviceDetails);
789     OperationOptions options = new OperationOptions();
790     options.setExecutionTimeout(60l);
791     deviceRPCRequest.setOptions(options);
792     String fileName = map.get("rpc.download.target-file-name");
793     String password = map.get("rpc.download.password");
794     String url = map.get("rpc.download.url");
795     String userName = map.get("rpc.download.username");
796
797     if (fileName == null || password == null || url == null || userName == null) {
798       LOG.error("fileName or password or url or userName is not as per yang model");
799       return getOperationAbortedResponse(
800           "fileName or password or url or userName is not as per yang model");
801     }
802
803     List<ParameterDTO> paramDTOList = new ArrayList<>();
804     paramDTOList.add(new ParameterDTO("FileType", map.get("rpc.download.file-type")));
805     paramDTOList.add(new ParameterDTO("URL", url));
806     paramDTOList.add(new ParameterDTO("Username", userName));
807     paramDTOList.add(new ParameterDTO("Password", password));
808     paramDTOList.add(new ParameterDTO("FileSize", map.get("rpc.download.file-size")));
809     paramDTOList.add(new ParameterDTO("TargetFileName", fileName));
810     paramDTOList.add(new ParameterDTO("DelaySeconds", map.get("rpc.download.delay-in-seconds")));
811     paramDTOList.add(new ParameterDTO("SuccessURL", map.get("rpc.download.success-url")));
812     paramDTOList.add(new ParameterDTO("FailureURL", map.get("rpc.download.failure-url")));
813     paramDTOList.add(new ParameterDTO("CommandKey", map.get("rpc.download.command-key")));
814
815     deviceRPCRequest.getOpDetails().setParmeters(paramDTOList);
816     deviceRPCRequest.getOpDetails().setOpCode(TR069OperationCode.DOWNLOAD);
817
818     LOG.debug("Prepared NBI request for download {} ", deviceRPCRequest);
819
820     DeviceOperationDetails fwDetails = deviceOperDAO.findByDeviceId(request.getDeviceId());
821     if (fwDetails == null) {
822       String errorMsg = "TR069 device request has been aborted,due to device not identified";
823       return getOperationAbortedResponse(errorMsg);
824     }
825
826     if (fwDetails.getDownLoadStatus() != FirwareUpgradeStatus.DOWNLOAD_INTIATED.getStatus()
827         && fwDetails.getDownLoadStatus() != FirwareUpgradeStatus.DOWNLOAD_COMPLETED.getStatus()) {
828
829       LOG.debug("persisting the fw details {}", fwDetails);
830
831       DeviceRPCResponse opResult;
832       opResult = syncHandler.performDeviceOperation(deviceRPCRequest);
833       if (null == opResult) {
834         return getTimeOutResponse();
835       }
836       fwDetails.setFileName(fileName);
837       fwDetails.setDownLoadStatus(FirwareUpgradeStatus.DOWNLOAD_INTIATED.getStatus());
838       fwDetails.setOrigin("csem");
839       deviceOperDAO.save(fwDetails);
840       ArrayList<ParameterDTO> responseParamDTOList = new ArrayList<>();
841
842       if (opResult.getOperationResponse().getStatus() == 1) {
843         responseParamDTOList.add(new ParameterDTO(RPC_REPLY_STATUS, "STARTED"));
844       } else {
845         responseParamDTOList.add(new ParameterDTO(RPC_REPLY_STATUS, FAILED));
846         responseParamDTOList.add(new ParameterDTO(RPC_REPLY_ERROR, opResult.getFaultString()));
847       }
848       responseParamDTOList.add(new ParameterDTO("rpc-reply.ns1:notification-timeout", "1200"));
849
850       opResult.getOperationResponse().setParameterDTOs(responseParamDTOList);
851       response = mapperUtil.getNetconfResponse(opResult, request.getSwVersion(),
852           request.getHwVersion(), true);
853
854       LOG.debug("update the status for fw details {} ", fwDetails);
855     } else {
856       LOG.debug("FirmWare Upgrade is in progress");
857       String errorMsg = "TR069 device request has been aborted as Firmware Upgrade is inProgress";
858       return getOperationAbortedResponse(errorMsg);
859     }
860
861     return response;
862   }
863
864   protected DeviceRPCResponse mergeGetConfigDeviceRPCResponse(DeviceRPCResponse opResultVes,
865       DeviceRPCResponse opResultDevice) {
866     if (null == opResultVes) {
867       return opResultDevice;
868     }
869
870     if (null == opResultDevice) {
871       return opResultVes;
872     }
873
874     if (null != opResultVes.getFaultKey()
875         && !opResultVes.getFaultKey().equals(MapperConstants.RPC_SUCCESS)) {
876       return opResultVes;
877     } else if (null != opResultDevice.getFaultKey()
878         && !opResultDevice.getFaultKey().equals(MapperConstants.RPC_SUCCESS)) {
879       return opResultDevice;
880     }
881
882     opResultDevice.getOperationResponse().getParameterDTOs()
883         .addAll(opResultVes.getOperationResponse().getParameterDTOs());
884     return opResultDevice;
885   }
886
887   protected DeviceRPCResponse mergeSetConfigDeviceRPCResponse(DeviceRPCResponse opResultVes,
888       DeviceRPCResponse opResultDevice) {
889     if (null == opResultVes) {
890       return opResultDevice;
891     }
892
893     if (null == opResultDevice) {
894       return opResultVes;
895     }
896
897     return opResultDevice;
898   }
899
900   protected boolean isVesNotificationRequest(ParameterDTO param) {
901     if (null == param.getParamName() || param.getParamName().isEmpty()) {
902       return false;
903     }
904
905     if (param.getParamName().toLowerCase().contains(MapperConstants.HEART_BEAT_PERIOD.toLowerCase())
906         || param.getParamName().toLowerCase()
907             .contains(MapperConstants.COUNT_DOWN_TIMER.toLowerCase())
908         || param.getParamName().toLowerCase().contains(MapperConstants.HEART_BEAT.toLowerCase())) {
909       return true;
910     }
911
912     return false;
913   }
914
915   protected void handleBooleanParameters(List<ParameterDTO> parameterDTOs, String swVersion,
916       String hwVersion) {
917
918     for (ParameterDTO param : parameterDTOs) {
919       MOMetaData metaData =
920           metaDataUtil.getMetaDataByTR69Name(param.getParamName(), swVersion, hwVersion);
921       if (null != metaData && BOOLEAN_DATA_TYPE.equalsIgnoreCase(metaData.getDataType())) {
922         if (BOOLEAN_TRUE_VALUE.equalsIgnoreCase(param.getParamValue().trim())) {
923           param.setParamValue(Boolean.TRUE.toString());
924         } else if (BOOLEAN_FALSE_VALUE.equalsIgnoreCase(param.getParamValue().trim())) {
925           param.setParamValue(Boolean.FALSE.toString());
926         }
927       }
928     }
929   }
930
931   protected void handleBooleanParametersReverse(List<ParameterDTO> parameterDTOs, String swVersion,
932       String hwVersion) {
933
934     for (ParameterDTO param : parameterDTOs) {
935       MOMetaData metaData =
936           metaDataUtil.getMetaDataByTR69Name(param.getParamName(), swVersion, hwVersion);
937       if (null != metaData && BOOLEAN_DATA_TYPE.equalsIgnoreCase(metaData.getDataType())) {
938         if (Boolean.TRUE.toString().equalsIgnoreCase(param.getParamValue().trim())) {
939           param.setParamValue(BOOLEAN_TRUE_VALUE);
940         } else if (Boolean.FALSE.toString().equalsIgnoreCase(param.getParamValue().trim())) {
941           param.setParamValue(BOOLEAN_FALSE_VALUE);
942         }
943       }
944     }
945   }
946
947   protected NetConfResponse getEmptyResponse() {
948     NetConfResponse response = new NetConfResponse();
949     ErrorCodeDetails errorCodeMetaData = errorCodeUtil.getErrorCodeMetaData("0");
950     ErrorCodeDetails errorCode = new ErrorCodeDetails();
951     errorCode.setFaultCode("0");
952     errorCode.setErrorMessage(errorCodeMetaData.getErrorMessage());
953     errorCode.setErrorType(errorCodeMetaData.getErrorType());
954     errorCode.setErrorTag(errorCodeMetaData.getErrorTag());
955     errorCode.setErrorSeverity(errorCodeMetaData.getErrorSeverity());
956     response.setErrorCode(errorCode);
957     return response;
958   }
959
960   protected NetConfResponse getTimeOutResponse() {
961     // prepare timeout error response
962     NetConfResponse timeOutErrorResponse = new NetConfResponse();
963     ErrorCodeDetails errorCode = new ErrorCodeDetails();
964     ErrorCodeDetails errorCodeMetaData = errorCodeUtil.getErrorCodeMetaData("8006");
965
966     errorCode.setFaultCode("8006");
967     errorCode.setErrorMessage(errorCodeMetaData.getErrorMessage());
968     errorCode.setErrorType(errorCodeMetaData.getErrorType());
969     errorCode.setErrorTag(errorCodeMetaData.getErrorTag());
970     errorCode.setErrorSeverity(errorCodeMetaData.getErrorSeverity());
971     timeOutErrorResponse.setErrorCode(errorCode);
972     timeOutErrorResponse.setErrorMessage("TR069 device request has been timed out.");
973     return timeOutErrorResponse;
974   }
975
976   protected NetConfResponse getErrorResponse(String errCode, String errorMsg) {
977     NetConfResponse errorResponse = new NetConfResponse();
978     ErrorCodeDetails errorCode = new ErrorCodeDetails();
979     ErrorCodeDetails errorCodeMetaData = errorCodeUtil.getErrorCodeMetaData("8006");
980     if (errorCodeMetaData != null) {
981       errorCode.setFaultCode(errCode);
982       errorCode.setErrorMessage(errorCodeMetaData.getErrorMessage());
983       errorCode.setErrorType(errorCodeMetaData.getErrorType());
984       errorCode.setErrorTag(errorCodeMetaData.getErrorTag());
985       errorCode.setErrorSeverity(errorCodeMetaData.getErrorSeverity());
986     }
987     errorResponse.setErrorCode(errorCode);
988     errorResponse.setErrorMessage(errorMsg);
989     return errorResponse;
990   }
991
992   protected NetConfResponse getOperationAbortedResponse(String errorMessage) {
993     // prepare timeout error response
994     NetConfResponse timeOutErrorResponse = new NetConfResponse();
995     ErrorCodeDetails errorCode = new ErrorCodeDetails();
996     ErrorCodeDetails errorCodeMetaData = errorCodeUtil.getErrorCodeMetaData("8006");
997     if (errorCodeMetaData != null) {
998       errorCode.setFaultCode("8002");
999       errorCode.setErrorMessage(errorCodeMetaData.getErrorMessage());
1000       errorCode.setErrorType(errorCodeMetaData.getErrorType());
1001       errorCode.setErrorTag(errorCodeMetaData.getErrorTag());
1002       errorCode.setErrorSeverity(errorCodeMetaData.getErrorSeverity());
1003     }
1004     timeOutErrorResponse.setErrorCode(errorCode);
1005     timeOutErrorResponse.setErrorMessage(errorMessage);
1006     return timeOutErrorResponse;
1007   }
1008
1009   public List<ParameterDTO> filteredSetParameters(List<ParameterDTO> parameters, String swVersion,
1010       String hwVersion) {
1011     List<ParameterDTO> result = new ArrayList<>();
1012     for (ParameterDTO param : parameters) {
1013       MOMetaData metaData =
1014           metaDataUtil.getMetaDataByNetConfName(param.getParamName(), swVersion, hwVersion);
1015       if (null != metaData && !metaData.isReadOnly()) {
1016         String tr069MoName =
1017             MOMetaDataUtil.getTR69MOByReplacingIndexes(param.getParamName(), metaData.getMoName());
1018         param.setDataType(metaData.getDataType());
1019         param.setParamName(tr069MoName);
1020         result.add(param);
1021       }
1022     }
1023     return result;
1024   }
1025
1026   protected List<ParameterDTO> filteredGetParameters(List<ParameterDTO> parameters,
1027       String swVersion, String hwVersion) {
1028     return metaDataUtil.getSupportedChildParameters(parameters, swVersion, hwVersion);
1029   }
1030
1031   @Override
1032   public boolean handelRegisterEvent(NetConfServerDetails request) {
1033     LOG.debug("processing the handelRegisterEvent started");
1034     try {
1035       VESNotificationResponse vesRsponse = vesnotiSender.sendNotification(null, request);
1036       if (HttpStatus.valueOf(vesRsponse.getStatusCode()).is2xxSuccessful()) {
1037         LOG.debug("processing the handelRegisterEvent completed");
1038         return true;
1039       } else {
1040         LOG.error("processing the handelRegisterEvent error code recevived: {}",
1041             vesRsponse.getStatusCode());
1042         return false;
1043       }
1044     } catch (Exception e) {
1045       LOG.error("processing the handelRegisterEvent exception occurred");
1046       return false;
1047     }
1048   }
1049
1050   protected static String getDownloadFileURI(String filepath) {
1051
1052     if (filepath.contains("@") && filepath.contains("//")) {
1053       String[] str = filepath.split("@");
1054       String[] strForUserName = str[0].split("//");
1055       if (str.length > 1) {
1056         return strForUserName[0] + "//" + str[1];
1057       }
1058     }
1059     return null;
1060   }
1061
1062   protected static String getDownloadUserName(String filepath) {
1063
1064     if (filepath.contains("@") && filepath.contains("//")) {
1065       String[] str = filepath.split("@");
1066       String[] strForUserName = str[0].split("//");
1067       if (strForUserName.length > 1)
1068         return strForUserName[1];
1069     }
1070     return null;
1071   }
1072
1073   protected boolean isAdminStateOverriden(List<ParameterDTO> paramList) {
1074     for (ParameterDTO paramDTO : paramList) {
1075       if (paramDTO.getParamName().contains(MapperConstants.ADMIN_STATE)
1076           || paramDTO.getParamName().contains(MapperConstants.ADMIN_STATUS)) {
1077         return true;
1078       }
1079     }
1080     return false;
1081   }
1082
1083   protected void convertResposeToSPVResponse(DeviceRPCResponse deviceRPCResponse) {
1084     if (null == deviceRPCResponse) {
1085       return;
1086     }
1087
1088     OperationResponse operationResponse = new SetParameterValueResponse();
1089     operationResponse.setParameterDTOs(new ArrayList<>());
1090
1091     if (null == deviceRPCResponse.getFaultKey()) {
1092       operationResponse.setStatus(MapperConstants.RPC_SUCCESS_CODE);
1093     } else {
1094       operationResponse.setStatus(MapperConstants.RPC_FAILED_CODE);
1095     }
1096
1097     deviceRPCResponse.setOperationResponse(operationResponse);
1098   }
1099 }