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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=======================================================================
19 package org.commscope.tr069adapter.mapper.netconf.impl;
21 import java.text.DateFormat;
22 import java.text.SimpleDateFormat;
23 import java.util.ArrayList;
24 import java.util.List;
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;
68 public class NetConfRequestHandlerImpl implements NetConfRequestHandler {
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";
84 SynchronizedRequestHandler syncHandler;
87 NetconfToTr069MapperUtil mapperUtil;
90 MOMetaDataUtil metaDataUtil;
93 ErrorCodeUtil errorCodeUtil;
96 VESNotificationSender vesnotiSender;
99 DeviceOperationsDAO deviceOperDAO;
102 ACSRequestSender tr069ReqSender;
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);
111 if (deviceRPCRequest == null) {
112 LOG.debug("There are no supported device parameters found for edit-config.");
113 return getEmptyResponse();
115 List<ParameterDTO> requestParams = deviceRPCRequest.getOpDetails().getParmeters();
116 List<ParameterDTO> filteredParams = new ArrayList<>();
117 List<ParameterDTO> vesRequestParams = new ArrayList<>();
119 if (null != requestParams) {
120 for (ParameterDTO param : requestParams) {
121 if (null == param.getParamValue() || StringUtils.isEmpty(param.getParamValue())) {
124 if (isVesNotificationRequest(param)) {
125 vesRequestParams.add(param);
127 filteredParams.add(param);
129 deviceRPCRequest.getOpDetails().setParmeters(filteredParams);
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();
146 handleBooleanParametersReverse(deviceRPCRequest.getOpDetails().getParmeters(),
147 netConfRequest.getSwVersion(), netConfRequest.getHwVersion());
148 LOG.debug("Prepared NBI request for edit-config {}", deviceRPCRequest);
150 DeviceRPCResponse deviceRPCResponseVes = null;
151 List<ParameterDTO> allParamList = deviceRPCRequest.getOpDetails().getParmeters();
153 if (!vesRequestParams.isEmpty()) {
154 deviceRPCRequest.getOpDetails().setParmeters(vesRequestParams);
155 deviceRPCResponseVes = vesnotiSender.sendEditConfigNotification(deviceRPCRequest);
157 if (null == deviceRPCResponseVes) {
158 return getTimeOutResponse();
162 allParamList.removeAll(vesRequestParams);
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);
174 deviceRPCResponseDevice = syncHandler.performDeviceOperation(deviceRPCRequest);
175 convertResposeToSPVResponse(deviceRPCResponseDevice);
177 deviceRPCResponseDevice = syncHandler.performDeviceOperation(deviceRPCRequest);
180 if (null == deviceRPCResponseDevice) {
181 return getTimeOutResponse();
185 DeviceRPCResponse deviceRPCResponse =
186 mergeSetConfigDeviceRPCResponse(deviceRPCResponseVes, deviceRPCResponseDevice);
187 if (null == deviceRPCResponse) {
188 return getTimeOutResponse();
190 response = mapperUtil.getNetconfResponse(deviceRPCResponse, netConfRequest.getSwVersion(),
191 netConfRequest.getHwVersion(), false);
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);
202 if (request == null) {
203 LOG.debug("There are no supported device parameters found for delete-config.");
204 return getEmptyResponse();
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);
213 request.getOpDetails().setParmeters(filteredParams);
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();
228 LOG.debug("Prepared NBI request for delete-config {}", request);
230 DeviceRPCResponse opResult;
231 opResult = syncHandler.performDeviceOperation(request);
232 if (null == opResult) {
233 return getTimeOutResponse();
235 response = mapperUtil.getNetconfResponse(opResult, netConfRequest.getSwVersion(),
236 netConfRequest.getHwVersion(), false);
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);
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) {
253 request.getOpDetails()
254 .setParmeters(filteredGetParameters(request.getOpDetails().getParmeters(),
255 netConfRequest.getSwVersion(), netConfRequest.getHwVersion()));
257 if (request.getOpDetails().getParmeters().isEmpty()) {
258 LOG.debug("There are no supported device parameters found for get.");
259 return getEmptyResponse();
262 LOG.debug("Prepared NBI request for get {}", request);
264 DeviceRPCResponse opResult;
265 opResult = syncHandler.performDeviceOperation(request);
266 if (null == opResult) {
267 return getTimeOutResponse();
269 response = mapperUtil.getNetconfResponse(opResult, netConfRequest.getSwVersion(),
270 netConfRequest.getHwVersion(), false);
275 public NetConfResponse handleGetConfigRequest(NetConfRequest netConfRequest) {
276 Element el = NetconfToTr069MapperUtil.convertStringToDocument(netConfRequest.getRequestXml());
277 NetConfResponse response = null;
278 List<ParameterDTO> vesRequestParams = new ArrayList<>();
280 boolean isSoftwareInventory = false;
281 if (netConfRequest.getRequestXml().contains("software-inventory")) {
282 LOG.info("XML Contains software-inventory");
283 isSoftwareInventory = true;
286 DeviceRPCRequest request = NetconfToTr069MapperUtil.prepareTR069Request(
287 netConfRequest.getDeviceId(), el, FILTER, TR069OperationCode.GET_PARAMETER_VALUES);
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()));
298 if (request.getOpDetails().getParmeters().isEmpty()) {
299 LOG.debug("There are no supported device parameters found for get-config.");
300 return getEmptyResponse();
302 for (ParameterDTO param : request.getOpDetails().getParmeters()) {
303 if (isVesNotificationRequest(param)) {
304 vesRequestParams.add(param);
308 LOG.debug("Prepared NBI request for get-config {}", request);
310 DeviceRPCResponse opResultVes = null;
311 List<ParameterDTO> allParamList = request.getOpDetails().getParmeters();
313 if (!vesRequestParams.isEmpty()) {
314 request.getOpDetails().setParmeters(vesRequestParams);
315 opResultVes = vesnotiSender.sendGetConfigNotification(request);
317 if (null == opResultVes) {
318 return getTimeOutResponse();
322 allParamList.removeAll(vesRequestParams);
324 DeviceRPCResponse opResultDevice = null;
325 if (!allParamList.isEmpty()) {
326 request.getOpDetails().setParmeters(allParamList);
327 opResultDevice = syncHandler.performDeviceOperation(request);
329 if (null == opResultDevice) {
330 return getTimeOutResponse();
334 DeviceRPCResponse opResult = mergeGetConfigDeviceRPCResponse(opResultVes, opResultDevice);
336 if (null == opResult) {
337 return getTimeOutResponse();
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());
346 if (isSoftwareInventory) {
347 response = mapperUtil.getNetconfResponseForSoftwareInventory(opResult,
348 netConfRequest.getSwVersion(), netConfRequest.getHwVersion());
350 response = mapperUtil.getNetconfResponse(opResult, netConfRequest.getSwVersion(),
351 netConfRequest.getHwVersion(), false);
354 if (opResult.getFaultKey() != null && opResult.getFaultKey().equalsIgnoreCase("9005")) {
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();
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();
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");
392 if (fileName == null || password == null || getDownloadFileURI(fileName) == null
393 || getDownloadUserName(fileName) == null) {
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");
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", ""));
411 deviceRPCRequest.getOpDetails().setParmeters(paramDTOList);
412 deviceRPCRequest.getOpDetails().setOpCode(TR069OperationCode.DOWNLOAD);
414 LOG.debug("Prepared NBI request for download {}", deviceRPCRequest);
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);
422 if (fwDetails.getDownLoadStatus() != FirwareUpgradeStatus.DOWNLOAD_INTIATED.getStatus()
423 && fwDetails.getDownLoadStatus() != FirwareUpgradeStatus.DOWNLOAD_COMPLETED.getStatus()) {
425 LOG.debug("persisting the fw details {}", fwDetails);
427 DeviceRPCResponse opResult;
428 opResult = syncHandler.performDeviceOperation(deviceRPCRequest);
429 if (null == opResult) {
430 return getTimeOutResponse();
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<>();
438 if (opResult.getOperationResponse().getStatus() == 1) {
439 responseParamDTOList.add(new ParameterDTO(RPC_REPLY_STATUS, "STARTED"));
441 responseParamDTOList.add(new ParameterDTO(RPC_REPLY_STATUS, FAILED));
442 responseParamDTOList.add(new ParameterDTO(RPC_REPLY_ERROR, opResult.getFaultString()));
444 responseParamDTOList.add(new ParameterDTO("rpc-reply.ns1:notification-timeout", "1200"));
446 opResult.getOperationResponse().setParameterDTOs(responseParamDTOList);
447 response = mapperUtil.getNetconfResponse(opResult, request.getSwVersion(),
448 request.getHwVersion(), true);
450 LOG.debug("update the status for fw details {}", fwDetails);
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);
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();
472 Element el = NetconfToTr069MapperUtil.convertStringToDocument(request.getRequestXml());
473 DeviceRPCRequest deviceRPCRequest = NetconfToTr069MapperUtil
474 .prepareTR069Request(request.getDeviceId(), el, PARAMETER, TR069OperationCode.ADD_OBJECT);
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();
490 LOG.debug("Prepared NBI request for addobject {}", deviceRPCRequest);
492 DeviceRPCResponse opResult;
493 opResult = syncHandler.performDeviceOperation(deviceRPCRequest);
494 if (null == opResult) {
495 return getTimeOutResponse();
497 if (null == opResult.getOperationResponse()) {
498 return getTimeOutResponse();
500 AddObjectResponse addOpresult = (AddObjectResponse) opResult.getOperationResponse();
502 ArrayList<ParameterDTO> responseParamDTOList = new ArrayList<>();
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));
511 LOG.info("AddObject Label value: {}", addOpresult.getLabel());
512 if (null == addOpresult.getLabel()) {
513 responseParamDTOList.add(new ParameterDTO("rpc-reply.ns1:label", ""));
515 responseParamDTOList.add(new ParameterDTO("rpc-reply.ns1:label", addOpresult.getLabel()));
518 opResult.getOperationResponse().setParameterDTOs(responseParamDTOList);
519 response = mapperUtil.getNetconfResponse(opResult, request.getSwVersion(),
520 request.getHwVersion(), true);
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();
537 Element el = NetconfToTr069MapperUtil.convertStringToDocument(request.getRequestXml());
538 DeviceRPCRequest deviceRPCRequest = NetconfToTr069MapperUtil.prepareTR069Request(
539 request.getDeviceId(), el, PARAMETER, TR069OperationCode.DELETE_OBJECT);
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()));
550 if (deviceRPCRequest.getOpDetails().getParmeters().isEmpty()) {
551 LOG.debug("There are no supported device parameters found for deleteobject.");
552 return getEmptyResponse();
556 LOG.debug("Prepared NBI request for addobject: {}", deviceRPCRequest);
558 DeviceRPCResponse opResult;
559 opResult = syncHandler.performDeviceOperation(deviceRPCRequest);
560 if (null == opResult) {
561 return getTimeOutResponse();
563 if (null == opResult.getOperationResponse()) {
564 return getTimeOutResponse();
567 ArrayList<ParameterDTO> responseParamDTOList = new ArrayList<>();
569 if (opResult.getFaultKey() == null) {
570 String status = String.valueOf(opResult.getOperationResponse().getStatus());
571 responseParamDTOList.add(new ParameterDTO(RPC_REPLY_STATUS, status));
573 opResult.getOperationResponse().setParameterDTOs(responseParamDTOList);
574 response = mapperUtil.getNetconfResponse(opResult, request.getSwVersion(),
575 request.getHwVersion(), true);
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;
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);
597 if (map == null || map.size() <= 0) {
598 LOG.debug(NO_DEVICE_PARAM_FOUND);
599 return getEmptyResponse();
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);
611 DeviceRPCResponse opResult;
612 opResult = syncHandler.performDeviceOperation(deviceRPCRequest);
613 if (null == opResult) {
614 return getTimeOutResponse();
616 LOG.debug("Received response for request without input params : FaultKey = {}",
617 opResult.getFaultKey());
619 response = mapperUtil.getNetconfResponseForRequestWithoutInputParams(opResult);
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();
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());
644 LOG.debug("There are no device parameters found for spaconfig.");
645 return getEmptyResponse();
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);
661 deviceRPCRequest.getOpDetails().setParmeters(params);
662 deviceRPCRequest.getOpDetails().setOpCode(TR069OperationCode.SET_PARAMETER_ATTRIBUTES);
664 LOG.debug("Prepared NBI request for spaobject {} ", deviceRPCRequest);
666 DeviceRPCResponse opResult;
667 opResult = syncHandler.performDeviceOperation(deviceRPCRequest);
668 if (null == opResult) {
669 return getTimeOutResponse();
672 ArrayList<ParameterDTO> responseParamDTOList = new ArrayList<>();
674 if (opResult.getFaultKey() == null) {
675 responseParamDTOList.add(new ParameterDTO(RPC_REPLY_STATUS, "SUCCESS"));
677 responseParamDTOList.add(new ParameterDTO(RPC_REPLY_STATUS, FAILED));
678 responseParamDTOList.add(new ParameterDTO(RPC_REPLY_ERROR, opResult.getFaultString()));
681 opResult.getOperationResponse().setParameterDTOs(responseParamDTOList);
682 response = mapperUtil.getNetconfResponse(opResult, request.getSwVersion(),
683 request.getHwVersion(), true);
689 public NetConfResponse handleGPAObjectRequest(NetConfRequest netConfRequest) {
690 LOG.debug("request received for gpaObject");
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();
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());
709 LOG.debug("There are no device parameters found for GPA.");
710 return getEmptyResponse();
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);
726 deviceRPCRequest.getOpDetails().setParmeters(params);
727 deviceRPCRequest.getOpDetails().setOpCode(TR069OperationCode.GET_PARAMETER_ATTRIBUTES);
729 LOG.debug("Prepared NBI request for gpaobject {}", deviceRPCRequest);
731 DeviceRPCResponse opResult;
732 opResult = syncHandler.performDeviceOperation(deviceRPCRequest);
733 if (null == opResult) {
734 return getTimeOutResponse();
737 response = mapperUtil.getNetconfResponseForGPA(opResult, netConfRequest.getSwVersion(),
738 netConfRequest.getHwVersion());
744 public NetConfResponse handleConnectionStatusRequest(NetConfRequest request) {
745 NetConfResponse netConfResponse = new NetConfResponse();
746 ConnectionStatusPOJO connStatusPOJO =
747 tr069ReqSender.sendConnectionStatusReq(request.getDeviceId());
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"));
754 paramDTOList.add(new ParameterDTO("rpc-reply.ns1:last-access-status", FAILED));
755 paramDTOList.add(new ParameterDTO(RPC_REPLY_ERROR, connStatusPOJO.getErrorMessage()));
757 String lastContactDate = dateFormat.format(connStatusPOJO.getLastContactTime());
758 paramDTOList.add(new ParameterDTO("rpc-reply.ns1:last-contact-time", lastContactDate));
760 String lastFailedAttemptDate = dateFormat.format(connStatusPOJO.getLastFailedAttemptTime());
762 .add(new ParameterDTO("rpc-reply.ns1:last-failure-attempt-time", lastFailedAttemptDate));
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;
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();
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");
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");
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")));
815 deviceRPCRequest.getOpDetails().setParmeters(paramDTOList);
816 deviceRPCRequest.getOpDetails().setOpCode(TR069OperationCode.DOWNLOAD);
818 LOG.debug("Prepared NBI request for download {} ", deviceRPCRequest);
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);
826 if (fwDetails.getDownLoadStatus() != FirwareUpgradeStatus.DOWNLOAD_INTIATED.getStatus()
827 && fwDetails.getDownLoadStatus() != FirwareUpgradeStatus.DOWNLOAD_COMPLETED.getStatus()) {
829 LOG.debug("persisting the fw details {}", fwDetails);
831 DeviceRPCResponse opResult;
832 opResult = syncHandler.performDeviceOperation(deviceRPCRequest);
833 if (null == opResult) {
834 return getTimeOutResponse();
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<>();
842 if (opResult.getOperationResponse().getStatus() == 1) {
843 responseParamDTOList.add(new ParameterDTO(RPC_REPLY_STATUS, "STARTED"));
845 responseParamDTOList.add(new ParameterDTO(RPC_REPLY_STATUS, FAILED));
846 responseParamDTOList.add(new ParameterDTO(RPC_REPLY_ERROR, opResult.getFaultString()));
848 responseParamDTOList.add(new ParameterDTO("rpc-reply.ns1:notification-timeout", "1200"));
850 opResult.getOperationResponse().setParameterDTOs(responseParamDTOList);
851 response = mapperUtil.getNetconfResponse(opResult, request.getSwVersion(),
852 request.getHwVersion(), true);
854 LOG.debug("update the status for fw details {} ", fwDetails);
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);
864 protected DeviceRPCResponse mergeGetConfigDeviceRPCResponse(DeviceRPCResponse opResultVes,
865 DeviceRPCResponse opResultDevice) {
866 if (null == opResultVes) {
867 return opResultDevice;
870 if (null == opResultDevice) {
874 if (null != opResultVes.getFaultKey()
875 && !opResultVes.getFaultKey().equals(MapperConstants.RPC_SUCCESS)) {
877 } else if (null != opResultDevice.getFaultKey()
878 && !opResultDevice.getFaultKey().equals(MapperConstants.RPC_SUCCESS)) {
879 return opResultDevice;
882 opResultDevice.getOperationResponse().getParameterDTOs()
883 .addAll(opResultVes.getOperationResponse().getParameterDTOs());
884 return opResultDevice;
887 protected DeviceRPCResponse mergeSetConfigDeviceRPCResponse(DeviceRPCResponse opResultVes,
888 DeviceRPCResponse opResultDevice) {
889 if (null == opResultVes) {
890 return opResultDevice;
893 if (null == opResultDevice) {
897 return opResultDevice;
900 protected boolean isVesNotificationRequest(ParameterDTO param) {
901 if (null == param.getParamName() || param.getParamName().isEmpty()) {
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())) {
915 protected void handleBooleanParameters(List<ParameterDTO> parameterDTOs, String swVersion,
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());
931 protected void handleBooleanParametersReverse(List<ParameterDTO> parameterDTOs, String swVersion,
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);
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);
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");
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;
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());
987 errorResponse.setErrorCode(errorCode);
988 errorResponse.setErrorMessage(errorMsg);
989 return errorResponse;
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());
1004 timeOutErrorResponse.setErrorCode(errorCode);
1005 timeOutErrorResponse.setErrorMessage(errorMessage);
1006 return timeOutErrorResponse;
1009 public List<ParameterDTO> filteredSetParameters(List<ParameterDTO> parameters, String swVersion,
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);
1026 protected List<ParameterDTO> filteredGetParameters(List<ParameterDTO> parameters,
1027 String swVersion, String hwVersion) {
1028 return metaDataUtil.getSupportedChildParameters(parameters, swVersion, hwVersion);
1032 public boolean handelRegisterEvent(NetConfServerDetails request) {
1033 LOG.debug("processing the handelRegisterEvent started");
1035 VESNotificationResponse vesRsponse = vesnotiSender.sendNotification(null, request);
1036 if (HttpStatus.valueOf(vesRsponse.getStatusCode()).is2xxSuccessful()) {
1037 LOG.debug("processing the handelRegisterEvent completed");
1040 LOG.error("processing the handelRegisterEvent error code recevived: {}",
1041 vesRsponse.getStatusCode());
1044 } catch (Exception e) {
1045 LOG.error("processing the handelRegisterEvent exception occurred");
1050 protected static String getDownloadFileURI(String filepath) {
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];
1062 protected static String getDownloadUserName(String filepath) {
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];
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)) {
1083 protected void convertResposeToSPVResponse(DeviceRPCResponse deviceRPCResponse) {
1084 if (null == deviceRPCResponse) {
1088 OperationResponse operationResponse = new SetParameterValueResponse();
1089 operationResponse.setParameterDTOs(new ArrayList<>());
1091 if (null == deviceRPCResponse.getFaultKey()) {
1092 operationResponse.setStatus(MapperConstants.RPC_SUCCESS_CODE);
1094 operationResponse.setStatus(MapperConstants.RPC_FAILED_CODE);
1097 deviceRPCResponse.setOperationResponse(operationResponse);