2 * ============LICENSE_START========================================================================
\r
3 * ONAP : tr-069-adapter
\r
4 * =================================================================================================
\r
5 * Copyright (C) 2020 CommScope Inc Intellectual Property.
\r
6 * =================================================================================================
\r
7 * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,
\r
8 * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You
\r
9 * may obtain a copy of the License at
\r
11 * http://www.apache.org/licenses/LICENSE-2.0
\r
13 * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
\r
14 * either express or implied. See the License for the specific language governing permissions and
\r
15 * limitations under the License.
\r
16 * ===============LICENSE_END=======================================================================
\r
19 package org.commscope.tr069adapter.acs.cpe.builder;
\r
21 import java.util.ArrayList;
\r
22 import java.util.List;
\r
23 import java.util.Map;
\r
24 import java.util.Map.Entry;
\r
25 import java.util.Set;
\r
27 import org.commscope.tr069adapter.acs.common.InformType;
\r
28 import org.commscope.tr069adapter.acs.common.ParameterDTO;
\r
29 import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;
\r
30 import org.commscope.tr069adapter.acs.common.dto.TR069InformType;
\r
31 import org.commscope.tr069adapter.acs.common.exception.TR069EventProcessingException;
\r
32 import org.commscope.tr069adapter.acs.common.inform.AbstractDeviceInform;
\r
33 import org.commscope.tr069adapter.acs.common.inform.BootInform;
\r
34 import org.commscope.tr069adapter.acs.common.inform.BootstrapInform;
\r
35 import org.commscope.tr069adapter.acs.common.inform.ConnectionRequestInform;
\r
36 import org.commscope.tr069adapter.acs.common.inform.PeriodicInform;
\r
37 import org.commscope.tr069adapter.acs.common.inform.TransferCompleteInform;
\r
38 import org.commscope.tr069adapter.acs.common.inform.ValueChangeInform;
\r
39 import org.commscope.tr069adapter.acs.common.utils.ErrorCode;
\r
40 import org.commscope.tr069adapter.acs.cpe.rpc.Inform;
\r
41 import org.slf4j.Logger;
\r
42 import org.slf4j.LoggerFactory;
\r
43 import org.springframework.stereotype.Component;
\r
46 public class DeviceInformBuilder {
\r
48 private static final Logger logger = LoggerFactory.getLogger(DeviceInformBuilder.class);
\r
53 * @throws TR069EventProcessingException
\r
55 public AbstractDeviceInform constructDeviceInform(Inform inform)
\r
56 throws TR069EventProcessingException {
\r
58 AbstractDeviceInform deviceInform = null;
\r
61 TR069DeviceDetails deviceDetails = buildDeviceDetailsFromInform(inform);
\r
63 List<InformType> informTypeList = new ArrayList<>();
\r
64 for (Entry<String, String> obj : inform.getEvents()) {
\r
65 if (null != TR069InformType.getTR069NotificationType(obj.getKey())) {
\r
66 informTypeList.add(TR069InformType.getTR069NotificationType(obj.getKey()));
\r
68 logger.error("Invalid Event code: {}", obj.getValue());
\r
72 logger.debug("Building Device Inform event based on the event codes sent by the device");
\r
74 if (informTypeList.contains(TR069InformType.BOOTSTRAP)) {
\r
75 logger.debug("Constructing BOOTSTRAP Inform");
\r
76 BootstrapInform bootstrapInform = new BootstrapInform();
\r
77 bootstrapInform.setDeviceDetails(deviceDetails);
\r
78 bootstrapInform.setInformTypeList(informTypeList);
\r
79 bootstrapInform.setParameters(getParameterList(inform.getParams()));
\r
80 if (informTypeList.contains(TR069InformType.VALUECHANGE)) {
\r
81 ValueChangeInform vcNotification = new ValueChangeInform();
\r
82 bootstrapInform.setValueChangeNotification(vcNotification);
\r
84 deviceInform = bootstrapInform;
\r
85 } else if (informTypeList.contains(TR069InformType.BOOT)) {
\r
86 logger.debug("Constructing BOOT Inform");
\r
87 BootInform bootInform = new BootInform();
\r
88 bootInform.setDeviceDetails(deviceDetails);
\r
89 bootInform.setInformTypeList(informTypeList);
\r
90 bootInform.setParameters(getParameterList(inform.getParams()));
\r
91 if (informTypeList.contains(TR069InformType.VALUECHANGE)) {
\r
92 ValueChangeInform vcNotification = new ValueChangeInform();
\r
93 bootInform.setValueChangeNotification(vcNotification);
\r
95 deviceInform = bootInform;
\r
96 } else if (informTypeList.contains(TR069InformType.PERIODIC)) {
\r
97 logger.debug("Constructing PERIODIC Inform");
\r
98 PeriodicInform periodicInform = new PeriodicInform();
\r
99 periodicInform.setDeviceDetails(deviceDetails);
\r
100 periodicInform.setInformTypeList(informTypeList);
\r
101 periodicInform.setParameters(getParameterList(inform.getParams()));
\r
102 deviceInform = periodicInform;
\r
103 } else if (informTypeList.contains(TR069InformType.VALUECHANGE)) {
\r
104 logger.debug("Constructing VALUECHANGE Inform");
\r
105 ValueChangeInform valueChangeInform = new ValueChangeInform();
\r
106 valueChangeInform.setDeviceDetails(deviceDetails);
\r
107 valueChangeInform.setInformTypeList(informTypeList);
\r
108 valueChangeInform.setParameters(getParameterList(inform.getParams()));
\r
109 deviceInform = valueChangeInform;
\r
110 } else if (informTypeList.contains(TR069InformType.TRANSFER_COMPLETE)) {
\r
111 logger.debug("Constructing Transfer Complete Inform");
\r
112 TransferCompleteInform transferCompleteInform = new TransferCompleteInform();
\r
113 transferCompleteInform.setDeviceDetails(deviceDetails);
\r
114 transferCompleteInform.setInformTypeList(informTypeList);
\r
115 transferCompleteInform.setParameters(getParameterList(inform.getParams()));
\r
116 deviceInform = transferCompleteInform;
\r
117 } else if (informTypeList.contains(TR069InformType.CONNECTIONREQUEST)) {
\r
118 logger.debug("Constructing Connection Request Inform");
\r
119 ConnectionRequestInform connectionRequestInform = new ConnectionRequestInform();
\r
120 connectionRequestInform.setDeviceDetails(deviceDetails);
\r
121 connectionRequestInform.setInformTypeList(informTypeList);
\r
122 connectionRequestInform.setParameters(getParameterList(inform.getParams()));
\r
123 deviceInform = connectionRequestInform;
\r
125 } catch (Exception e) {
\r
126 throw new TR069EventProcessingException(ErrorCode.FAILED_PROCESSING_INFORM, e.getMessage());
\r
128 return deviceInform;
\r
135 private TR069DeviceDetails buildDeviceDetailsFromInform(Inform inform) {
\r
136 TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();
\r
137 tr069DeviceDetails.setDeviceId(inform.getSn());
\r
138 tr069DeviceDetails.setSoftwareVersion(inform.getSoftwareVersion());
\r
139 tr069DeviceDetails.setHardwareVersion(inform.getHardwareVersion());
\r
140 tr069DeviceDetails.setOui(inform.getOui());
\r
141 tr069DeviceDetails.setProductClass(inform.getProductClass());
\r
142 tr069DeviceDetails.setConnectionRequestURL(inform.getURL());
\r
143 tr069DeviceDetails.setUsername(inform.getConreqUser());
\r
144 tr069DeviceDetails.setPassword(inform.getConreqPass());
\r
146 return tr069DeviceDetails;
\r
150 * @param parameterList
\r
153 private List<ParameterDTO> getParameterList(Map<String, String> parameterList) {
\r
154 List<ParameterDTO> parameterDTOList = new ArrayList<>();
\r
155 Set<String> keys = parameterList.keySet();
\r
156 for (String key : keys) {
\r
157 ParameterDTO param = new ParameterDTO();
\r
158 param.setParamName(key);
\r
159 param.setParamValue(parameterList.get(key));
\r
160 parameterDTOList.add(param);
\r
163 return parameterDTOList;
\r