Development of NETCONF RPCs for tr-069 adapter to
[oam/tr069-adapter.git] / acs / cpe / src / main / java / org / commscope / tr069adapter / acs / cpe / builder / DeviceRPCBuilder.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.acs.cpe.builder;
20
21 import java.util.ArrayList;
22 import java.util.List;
23
24 import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;
25 import org.commscope.tr069adapter.acs.common.OperationCode;
26 import org.commscope.tr069adapter.acs.common.OperationDetails;
27 import org.commscope.tr069adapter.acs.common.ParameterDTO;
28 import org.commscope.tr069adapter.acs.common.dto.ParameterAttributeDTO;
29 import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;
30 import org.commscope.tr069adapter.acs.cpe.TR069RPC;
31 import org.commscope.tr069adapter.acs.cpe.rpc.AddObject;
32 import org.commscope.tr069adapter.acs.cpe.rpc.DeleteObject;
33 import org.commscope.tr069adapter.acs.cpe.rpc.Download;
34 import org.commscope.tr069adapter.acs.cpe.rpc.FactoryReset;
35 import org.commscope.tr069adapter.acs.cpe.rpc.GetParameterAttributes;
36 import org.commscope.tr069adapter.acs.cpe.rpc.GetParameterValues;
37 import org.commscope.tr069adapter.acs.cpe.rpc.Reboot;
38 import org.commscope.tr069adapter.acs.cpe.rpc.SetParameterAttributes;
39 import org.commscope.tr069adapter.acs.cpe.rpc.SetParameterValues;
40 import org.springframework.stereotype.Component;
41
42 @Component
43 public class DeviceRPCBuilder {
44
45   /**
46    * @param deviceRPCRequest
47    * @return
48    */
49
50
51   public TR069RPC constructDeviceRPC(DeviceRPCRequest deviceRPCRequest) {
52     TR069RPC message = null;
53
54     OperationDetails opDetails = deviceRPCRequest.getOpDetails();
55     if (null == opDetails || null == opDetails.getOpCode()) {
56       return null;
57     }
58
59     OperationCode opCode = opDetails.getOpCode();
60     if (opCode.equals(TR069OperationCode.SET_PARAMETER_VALUES)) {
61       message = buildSetParameterValues(opDetails);
62     } else if (opCode.equals(TR069OperationCode.GET_PARAMETER_VALUES)) {
63       message = buildGetParameterValues(opDetails);
64     } else if (opCode.equals(TR069OperationCode.SET_PARAMETER_ATTRIBUTES)) {
65       message = buildSetParameterAttributes(opDetails);
66     } else if (opCode.equals(TR069OperationCode.GET_PARAMETER_ATTRIBUTES)) {
67       message = buildGetParameterAttributes(opDetails);
68     } else if (opCode.equals(TR069OperationCode.ADD_OBJECT)) {
69       List<ParameterDTO> poarameterDTOs = opDetails.getParmeters();
70       for (ParameterDTO param : poarameterDTOs) {
71         AddObject addObject = new AddObject(param.getParamName(), String.valueOf(hashCode()));
72         message = addObject;
73       }
74     } else if (opCode.equals(TR069OperationCode.DELETE_OBJECT)) {
75       List<ParameterDTO> poarameterDTOs = opDetails.getParmeters();
76       for (ParameterDTO param : poarameterDTOs) {
77         DeleteObject deleteObject =
78             new DeleteObject(param.getParamName(), String.valueOf(hashCode()));
79         message = deleteObject;
80       }
81     } else if (opCode.equals(TR069OperationCode.DOWNLOAD)) {
82       String deviceId = deviceRPCRequest.getDeviceDetails().getDeviceId();
83       List<ParameterDTO> poarameterDTOs = opDetails.getParmeters();
84       message = populateDownloadParams(deviceId, poarameterDTOs);
85     } else if (opCode.equals(TR069OperationCode.FACTORY_RESET)) {
86       message = new FactoryReset();
87     } else if (opCode.equals(TR069OperationCode.REBOOT)) {
88       message = new Reboot();
89     }
90
91     return message;
92   }
93
94   /**
95    * @param poarameterDTOs
96    * @return
97    */
98   private Download populateDownloadParams(String deviceId, List<ParameterDTO> poarameterDTOs) {
99     Download download = new Download();
100     for (ParameterDTO param : poarameterDTOs) {
101       if (param.getParamName().equals("FileType")) {
102         download.setFileType(param.getParamValue());
103       } else if (param.getParamName().equals("URL")) {
104         download.setUrl(param.getParamValue());
105       } else if (param.getParamName().equals("Username")) {
106         download.setUserName(param.getParamValue());
107       } else if (param.getParamName().equals("Password")) {
108         download.setPassword(param.getParamValue());
109       } else if (param.getParamName().equals("FileSize")) {
110         download.setFileSize(Long.parseLong(param.getParamValue()));
111       } else if (param.getParamName().equals("TargetFileName")) {
112         download.setTargetFileName(param.getParamValue());
113       } else if (param.getParamName().equals("DelaySeconds")) {
114         download.setDelaySeconds(Integer.parseInt(param.getParamValue()));
115       } else if (param.getParamName().equals("SuccessURL")) {
116         download.setSuccessUrl(param.getParamValue());
117       } else if (param.getParamName().equals("FailureURL")) {
118         download.setFailureUrl(param.getParamValue());
119       }
120     }
121     download.setCommandKey(String.valueOf(deviceId));
122
123     return download;
124   }
125
126   private SetParameterValues buildSetParameterValues(OperationDetails opDetails) {
127     SetParameterValues spv = new SetParameterValues();
128     List<ParameterDTO> parmeters = opDetails.getParmeters();
129     for (ParameterDTO param : parmeters) {
130       spv.addValue(param.getParamName(), param.getParamValue(), param.getDataType());
131     }
132
133     return spv;
134   }
135
136   private GetParameterValues buildGetParameterValues(OperationDetails opDetails) {
137     GetParameterValues gpv = new GetParameterValues();
138     List<ParameterDTO> parmeters = opDetails.getParmeters();
139     List<String> paramNamelist = new ArrayList<>();
140     for (ParameterDTO param : parmeters) {
141       paramNamelist.add(param.getParamName());
142     }
143     String[] parameterNames = new String[paramNamelist.size()];
144     for (int i = 0; i < paramNamelist.size(); i++) {
145       parameterNames[i] = paramNamelist.get(i);
146     }
147     gpv.setParameterNames(parameterNames);
148     return gpv;
149   }
150
151   private SetParameterAttributes buildSetParameterAttributes(OperationDetails opDetails) {
152     SetParameterAttributes spa = new SetParameterAttributes();
153     List<ParameterDTO> parameterAttributes = opDetails.getParmeters();
154     for (ParameterDTO parameterDTO : parameterAttributes) {
155       ParameterAttributeDTO parameterAttributeDTO = (ParameterAttributeDTO) parameterDTO;
156       spa.addAttribute(parameterAttributeDTO.getParamName(),
157           parameterAttributeDTO.getNotificationChange(), parameterAttributeDTO.getNotification(),
158           parameterAttributeDTO.getAccesslistChange(), parameterAttributeDTO.getAccessList());
159     }
160     return spa;
161   }
162
163   private GetParameterAttributes buildGetParameterAttributes(OperationDetails opDetails) {
164     GetParameterAttributes gpa = new GetParameterAttributes();
165     List<ParameterDTO> poarameterDTOs = opDetails.getParmeters();
166     List<String> paramNamelist = new ArrayList<>();
167     for (ParameterDTO param : poarameterDTOs) {
168       paramNamelist.add(param.getParamName());
169     }
170     String[] parameterNames = new String[paramNamelist.size()];
171     for (int i = 0; i < paramNamelist.size(); i++) {
172       parameterNames[i] = paramNamelist.get(i);
173     }
174     gpa.setParameterNames(parameterNames);
175
176     return gpa;
177   }
178 }