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
20 package org.commscope.tr069adapter.acs.requestprocessor.util;
\r
22 import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.DEVICE_RPC_EXECUTION_TIMEOUT_SECONDS;
\r
24 import com.google.gson.Gson;
\r
25 import com.google.gson.reflect.TypeToken;
\r
27 import java.lang.reflect.Type;
\r
28 import java.util.ArrayList;
\r
29 import java.util.Date;
\r
30 import java.util.List;
\r
32 import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;
\r
33 import org.commscope.tr069adapter.acs.common.OperationCode;
\r
34 import org.commscope.tr069adapter.acs.common.OperationDetails;
\r
35 import org.commscope.tr069adapter.acs.common.OperationOptions;
\r
36 import org.commscope.tr069adapter.acs.common.ParameterDTO;
\r
37 import org.commscope.tr069adapter.acs.common.dto.CustomOperationCode;
\r
38 import org.commscope.tr069adapter.acs.common.dto.ParameterAttributeDTO;
\r
39 import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;
\r
40 import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;
\r
41 import org.commscope.tr069adapter.acs.common.dto.TR069OperationDetails;
\r
42 import org.commscope.tr069adapter.acs.common.exception.TR069EventProcessingException;
\r
43 import org.commscope.tr069adapter.acs.common.utils.ErrorCode;
\r
44 import org.commscope.tr069adapter.acs.requestprocessor.entity.TR069DeviceRPCRequestEntity;
\r
46 public class TR069RequestProcessorUtility {
\r
48 protected static final int BLOCK_SIZE = 3999;
\r
49 protected static final int MAX_SIZE = 11998;
\r
51 private TR069RequestProcessorUtility() {
\r
56 * Converts entity object to DTO
\r
61 public static DeviceRPCRequest convertToDTO(List<TR069DeviceRPCRequestEntity> entityList) {
\r
62 DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();
\r
63 OperationDetails operationDetails = new TR069OperationDetails();
\r
65 boolean isCustomOperation = true;
\r
66 OperationCode opCode = null;
\r
68 TR069DeviceRPCRequestEntity entity = entityList.get(0);
\r
69 if (CustomOperationCode.getByOperationCode(entity.getOpCode()) != null) {
\r
70 opCode = CustomOperationCode.getByOperationCode(entity.getOpCode());
\r
72 opCode = TR069OperationCode.getByOperationCode(entity.getOpCode());
\r
73 isCustomOperation = false;
\r
76 operationDetails.setOpCode(opCode);
\r
77 dtoFromEntityJson(operationDetails, entityList, isCustomOperation);
\r
78 deviceRPCRequest.setOpDetails(operationDetails);
\r
80 OperationOptions opOptions = new OperationOptions();
\r
81 opOptions.setExecutionTimeout(entity.getRequestTimeOut());
\r
82 deviceRPCRequest.setOptions(opOptions);
\r
84 TR069DeviceDetails deviceDetails = new TR069DeviceDetails();
\r
85 deviceDetails.setDeviceId(entity.getDeviceId());
\r
87 deviceRPCRequest.setDeviceDetails(deviceDetails);
\r
88 deviceRPCRequest.setOperationId(entity.getOperationId());
\r
89 return deviceRPCRequest;
\r
93 * Converts DTO to entity object
\r
95 * @param deviceRPCRequest
\r
97 * @throws TR069EventProcessingException
\r
99 public static List<TR069DeviceRPCRequestEntity> convertToEntity(DeviceRPCRequest deviceRPCRequest)
\r
100 throws TR069EventProcessingException {
\r
102 if (deviceRPCRequest.getOpDetails() == null
\r
103 || deviceRPCRequest.getOpDetails().getOpCode() == null) {
\r
104 throw new TR069EventProcessingException(ErrorCode.MISSING_OPERATION_DETAILS);
\r
107 Integer opCode = null;
\r
108 boolean isCustomOperation = true;
\r
109 OperationCode operationCode = deviceRPCRequest.getOpDetails().getOpCode();
\r
110 if (CustomOperationCode.getByOperationCode(operationCode.getOperationCode()) != null) {
\r
111 CustomOperationCode customOperationCode =
\r
112 CustomOperationCode.getByOperationCode(operationCode.getOperationCode());
\r
113 opCode = customOperationCode.getOperationCode();
\r
115 TR069OperationCode tr069OperationCode =
\r
116 (TR069OperationCode) deviceRPCRequest.getOpDetails().getOpCode();
\r
117 opCode = tr069OperationCode.getOperationCode();
\r
118 isCustomOperation = false;
\r
121 String paramListJSON = paramListToJson(deviceRPCRequest, isCustomOperation);
\r
122 List<TR069DeviceRPCRequestEntity> tr069DeviceRPCRequestEntities =
\r
123 getTR069DeviceRPCRequestEntities(paramListJSON);
\r
125 for (TR069DeviceRPCRequestEntity entity : tr069DeviceRPCRequestEntities) {
\r
126 entity.setOpCode(opCode);
\r
127 entity.setCreateTime(new Date());
\r
128 entity.setDeviceId(deviceRPCRequest.getDeviceDetails().getDeviceId());
\r
129 entity.setOperationId(deviceRPCRequest.getOperationId());
\r
130 entity.setIsProcessed(0);
\r
131 if (deviceRPCRequest.getOptions() != null
\r
132 && deviceRPCRequest.getOptions().getExecutionTimeout() != 0L) {
\r
133 entity.setRequestTimeOut(deviceRPCRequest.getOptions().getExecutionTimeout());
\r
135 entity.setRequestTimeOut(DEVICE_RPC_EXECUTION_TIMEOUT_SECONDS);
\r
136 OperationOptions options = new OperationOptions();
\r
137 options.setExecutionTimeout(DEVICE_RPC_EXECUTION_TIMEOUT_SECONDS);
\r
138 deviceRPCRequest.setOptions(options);
\r
142 return tr069DeviceRPCRequestEntities;
\r
148 * @param isCustomOperation
\r
150 private static String paramListToJson(DeviceRPCRequest dto, boolean isCustomOperation) {
\r
151 String attrJsonString = null;
\r
152 if (isCustomOperation) {
\r
153 TR069OperationDetails operationDetails = (TR069OperationDetails) dto.getOpDetails();
\r
154 StringBuilder buffer = new StringBuilder();
\r
156 List<ParameterDTO> deletParamList = operationDetails.getDeleteParamList();
\r
157 List<ParameterDTO> modifyParamList = operationDetails.getModifyParamList();
\r
158 List<ParameterDTO> setParamList = operationDetails.getSetParamList();
\r
160 if (deletParamList != null && !deletParamList.isEmpty()) {
\r
161 convertBooleanValues(deletParamList);
\r
162 buffer.append(toJson(deletParamList));
\r
164 buffer.append(toJson(new ArrayList<>()));
\r
167 if (modifyParamList != null && !modifyParamList.isEmpty()) {
\r
168 convertBooleanValues(modifyParamList);
\r
169 buffer.append(toJson(modifyParamList));
\r
171 buffer.append(toJson(new ArrayList<>()));
\r
174 if (setParamList != null && !setParamList.isEmpty()) {
\r
175 convertBooleanValues(setParamList);
\r
176 buffer.append(toJson(setParamList));
\r
178 buffer.append(toJson(new ArrayList<>()));
\r
181 attrJsonString = buffer.toString();
\r
183 List<ParameterDTO> parameterDTOs = dto.getOpDetails().getParmeters();
\r
184 attrJsonString = toJson(parameterDTOs);
\r
187 return attrJsonString;
\r
191 * @param paramListJSON
\r
194 private static List<TR069DeviceRPCRequestEntity> getTR069DeviceRPCRequestEntities(
\r
195 String paramListJSON) {
\r
196 List<TR069DeviceRPCRequestEntity> tr069DeviceRPCRequestEntities = new ArrayList<>();
\r
198 if (paramListJSON.length() < MAX_SIZE) {
\r
199 TR069DeviceRPCRequestEntity entity = new TR069DeviceRPCRequestEntity();
\r
200 entity.setAttributeJson1(getAttriuteJsonData(paramListJSON, 0));
\r
201 entity.setAttributeJson2(getAttriuteJsonData(paramListJSON, 1));
\r
202 entity.setAttributeJson3(getAttriuteJsonData(paramListJSON, 2));
\r
204 tr069DeviceRPCRequestEntities.add(entity);
\r
206 int noOfEntities = 0;
\r
208 int i = 3 * noOfEntities;
\r
209 TR069DeviceRPCRequestEntity entity = new TR069DeviceRPCRequestEntity();
\r
210 entity.setAttributeJson1(getAttriuteJsonData(paramListJSON, i));
\r
211 entity.setAttributeJson2(getAttriuteJsonData(paramListJSON, ++i));
\r
212 entity.setAttributeJson3(getAttriuteJsonData(paramListJSON, ++i));
\r
214 if (entity.getAttributeJson1() != null) {
\r
215 tr069DeviceRPCRequestEntities.add(entity);
\r
218 if (entity.getAttributeJson1() == null || entity.getAttributeJson2() == null
\r
219 || entity.getAttributeJson3() == null) {
\r
227 return tr069DeviceRPCRequestEntities;
\r
235 private static String getAttriuteJsonData(String eventData, int blockNum) {
\r
236 int eventDataSize = eventData.length();
\r
237 int startIndex = blockNum * BLOCK_SIZE;
\r
238 if (startIndex > eventDataSize) {
\r
241 int endIndex = startIndex + BLOCK_SIZE;
\r
242 endIndex = endIndex < eventDataSize ? endIndex : eventDataSize;
\r
243 return eventData.substring(startIndex, endIndex);
\r
249 * @param isCustomOperation
\r
251 private static void dtoFromEntityJson(OperationDetails opDetails,
\r
252 List<TR069DeviceRPCRequestEntity> entityList, boolean isCustomOperation) {
\r
253 StringBuilder sb = new StringBuilder();
\r
254 for (TR069DeviceRPCRequestEntity entity : entityList) {
\r
255 append(sb, entity.getAttributeJson1());
\r
256 append(sb, entity.getAttributeJson2());
\r
257 append(sb, entity.getAttributeJson3());
\r
260 if (isCustomOperation) {
\r
261 String[] splitStringArray = sb.toString().split("]\\[");
\r
262 List<ParameterDTO> deleteParamList = new ArrayList<>();
\r
263 List<ParameterDTO> modifyParamList = new ArrayList<>();
\r
264 List<ParameterDTO> setParamList = new ArrayList<>();
\r
265 for (int i = 0; i < splitStringArray.length; i++) {
\r
266 String data = splitStringArray[i];
\r
269 deleteParamList.addAll(fromJson(data));
\r
270 } else if ((i + 1) == splitStringArray.length) {
\r
272 setParamList.addAll(fromJson(data));
\r
274 data = "[" + data + "]";
\r
275 modifyParamList.addAll(fromJson(data));
\r
278 TR069OperationDetails tr069OperationDetails = (TR069OperationDetails) opDetails;
\r
279 tr069OperationDetails.setDeleteParamList(deleteParamList);
\r
280 tr069OperationDetails.setModifyParamList(modifyParamList);
\r
281 tr069OperationDetails.setSetParamList(setParamList);
\r
283 if (TR069OperationCode.SET_PARAMETER_ATTRIBUTES.equals(opDetails.getOpCode())) {
\r
284 List<ParameterDTO> list = fromJsonToParameterAttribute(sb.toString());
\r
285 opDetails.setParmeters(list);
\r
287 List<ParameterDTO> list = fromJson(sb.toString());
\r
288 opDetails.setParmeters(list);
\r
297 private static void append(StringBuilder sb, String temp) {
\r
298 if (temp != null && !temp.isEmpty()) {
\r
304 * @param jsonString
\r
307 private static List<ParameterDTO> fromJson(String jsonString) {
\r
308 Gson gson = new Gson();
\r
309 Type collectionType = new TypeToken<List<ParameterDTO>>() {}.getType();
\r
310 return gson.fromJson(jsonString, collectionType);
\r
314 * @param jsonString
\r
317 private static List<ParameterDTO> fromJsonToParameterAttribute(String jsonString) {
\r
318 Gson gson = new Gson();
\r
319 Type collectionType = new TypeToken<List<ParameterAttributeDTO>>() {}.getType();
\r
320 return gson.fromJson(jsonString, collectionType);
\r
327 private static <T> String toJson(T entity) {
\r
328 Gson gson = new Gson();
\r
329 return gson.toJson(entity);
\r
333 * @param parameterDTOs
\r
335 private static void convertBooleanValues(List<ParameterDTO> parameterDTOs) {
\r
336 for (ParameterDTO param : parameterDTOs) {
\r
337 if (param.getDataType() != null && param.getDataType().equalsIgnoreCase("boolean")) {
\r
338 if (param.getParamValue() != null && (param.getParamValue().equalsIgnoreCase("true")
\r
339 || param.getParamValue().equalsIgnoreCase("1"))) {
\r
340 param.setParamValue("1");
\r
342 param.setParamValue("0");
\r