Fix: Update Sonar needed parameters
[oam/tr069-adapter.git] / acs / cpe / src / main / java / org / commscope / tr069adapter / acs / cpe / builder / DeviceInformBuilder.java
1 /*\r
2  * ============LICENSE_START========================================================================\r
3  * ONAP : tr-069-adapter\r
4  * =================================================================================================\r
5  * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
6  * =================================================================================================\r
7  * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
8  * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
9  * may obtain a copy of the License at\r
10  *\r
11  * http://www.apache.org/licenses/LICENSE-2.0\r
12  *\r
13  * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
14  * either express or implied. See the License for the specific language governing permissions and\r
15  * limitations under the License.\r
16  * ===============LICENSE_END=======================================================================\r
17  */\r
18 \r
19 package org.commscope.tr069adapter.acs.cpe.builder;\r
20 \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
26 \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
44 \r
45 @Component\r
46 public class DeviceInformBuilder {\r
47 \r
48   private static final Logger logger = LoggerFactory.getLogger(DeviceInformBuilder.class);\r
49 \r
50   /**\r
51    * @param inform\r
52    * @return\r
53    * @throws TR069EventProcessingException\r
54    */\r
55   public AbstractDeviceInform constructDeviceInform(Inform inform)\r
56       throws TR069EventProcessingException {\r
57 \r
58     AbstractDeviceInform deviceInform = null;\r
59 \r
60     try {\r
61       TR069DeviceDetails deviceDetails = buildDeviceDetailsFromInform(inform);\r
62 \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
67         } else {\r
68           logger.error("Invalid Event code: {}", obj.getValue());\r
69         }\r
70       }\r
71 \r
72       logger.debug("Building Device Inform event based on the event codes sent by the device");\r
73 \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
83         }\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
94         }\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
124       }\r
125     } catch (Exception e) {\r
126       throw new TR069EventProcessingException(ErrorCode.FAILED_PROCESSING_INFORM, e.getMessage());\r
127     }\r
128     return deviceInform;\r
129   }\r
130 \r
131   /**\r
132    * @param inform\r
133    * @return\r
134    */\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
145 \r
146     return tr069DeviceDetails;\r
147   }\r
148 \r
149   /**\r
150    * @param parameterList\r
151    * @return\r
152    */\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
161     }\r
162 \r
163     return parameterDTOList;\r
164   }\r
165 }\r