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=======================================================================
20 package org.commscope.tr069adapter.acs.requestprocessor.util;
22 import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.DEVICE_RPC_EXECUTION_TIMEOUT_SECONDS;
24 import com.google.gson.Gson;
25 import com.google.gson.reflect.TypeToken;
27 import java.lang.reflect.Type;
28 import java.util.ArrayList;
29 import java.util.Date;
30 import java.util.List;
32 import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;
33 import org.commscope.tr069adapter.acs.common.OperationCode;
34 import org.commscope.tr069adapter.acs.common.OperationDetails;
35 import org.commscope.tr069adapter.acs.common.OperationOptions;
36 import org.commscope.tr069adapter.acs.common.ParameterDTO;
37 import org.commscope.tr069adapter.acs.common.dto.CustomOperationCode;
38 import org.commscope.tr069adapter.acs.common.dto.ParameterAttributeDTO;
39 import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;
40 import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;
41 import org.commscope.tr069adapter.acs.common.dto.TR069OperationDetails;
42 import org.commscope.tr069adapter.acs.common.exception.TR069EventProcessingException;
43 import org.commscope.tr069adapter.acs.common.utils.ErrorCode;
44 import org.commscope.tr069adapter.acs.requestprocessor.entity.TR069DeviceRPCRequestEntity;
46 public class TR069RequestProcessorUtility {
48 protected static final int BLOCK_SIZE = 3999;
49 protected static final int MAX_SIZE = 11998;
50 public static final int DEVICE_REACHABLE_STATUS_CODE = 100;
51 public static final String ADMIN_STATE = "FAPControl.LTE.AdminState";
52 public static final String ADMIN_STATUS = "FAPControl.LTE.AdminStatus";
55 private TR069RequestProcessorUtility() {
60 * Converts entity object to DTO
65 public static DeviceRPCRequest convertToDTO(List<TR069DeviceRPCRequestEntity> entityList) {
66 DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();
67 OperationDetails operationDetails = new TR069OperationDetails();
69 boolean isCustomOperation = true;
70 OperationCode opCode = null;
72 TR069DeviceRPCRequestEntity entity = entityList.get(0);
73 if (CustomOperationCode.getByOperationCode(entity.getOpCode()) != null) {
74 opCode = CustomOperationCode.getByOperationCode(entity.getOpCode());
76 opCode = TR069OperationCode.getByOperationCode(entity.getOpCode());
77 isCustomOperation = false;
80 operationDetails.setOpCode(opCode);
81 dtoFromEntityJson(operationDetails, entityList, isCustomOperation);
82 deviceRPCRequest.setOpDetails(operationDetails);
84 OperationOptions opOptions = new OperationOptions();
85 opOptions.setExecutionTimeout(entity.getRequestTimeOut());
86 deviceRPCRequest.setOptions(opOptions);
88 TR069DeviceDetails deviceDetails = new TR069DeviceDetails();
89 deviceDetails.setDeviceId(entity.getDeviceId());
91 deviceRPCRequest.setDeviceDetails(deviceDetails);
92 deviceRPCRequest.setOperationId(entity.getOperationId());
93 return deviceRPCRequest;
97 * Converts DTO to entity object
99 * @param deviceRPCRequest
101 * @throws TR069EventProcessingException
103 public static List<TR069DeviceRPCRequestEntity> convertToEntity(DeviceRPCRequest deviceRPCRequest)
104 throws TR069EventProcessingException {
106 if (deviceRPCRequest.getOpDetails() == null
107 || deviceRPCRequest.getOpDetails().getOpCode() == null) {
108 throw new TR069EventProcessingException(ErrorCode.MISSING_OPERATION_DETAILS);
111 Integer opCode = null;
112 boolean isCustomOperation = true;
113 OperationCode operationCode = deviceRPCRequest.getOpDetails().getOpCode();
114 if (CustomOperationCode.getByOperationCode(operationCode.getOperationCode()) != null) {
115 CustomOperationCode customOperationCode =
116 CustomOperationCode.getByOperationCode(operationCode.getOperationCode());
117 opCode = customOperationCode.getOperationCode();
119 TR069OperationCode tr069OperationCode =
120 (TR069OperationCode) deviceRPCRequest.getOpDetails().getOpCode();
121 opCode = tr069OperationCode.getOperationCode();
122 isCustomOperation = false;
125 String paramListJSON = paramListToJson(deviceRPCRequest, isCustomOperation);
126 List<TR069DeviceRPCRequestEntity> tr069DeviceRPCRequestEntities =
127 getTR069DeviceRPCRequestEntities(paramListJSON);
129 for (TR069DeviceRPCRequestEntity entity : tr069DeviceRPCRequestEntities) {
130 entity.setOpCode(opCode);
131 entity.setCreateTime(new Date());
132 entity.setDeviceId(deviceRPCRequest.getDeviceDetails().getDeviceId());
133 entity.setOperationId(deviceRPCRequest.getOperationId());
134 entity.setIsProcessed(0);
135 if (deviceRPCRequest.getOptions() != null
136 && deviceRPCRequest.getOptions().getExecutionTimeout() != 0L) {
137 entity.setRequestTimeOut(deviceRPCRequest.getOptions().getExecutionTimeout());
139 entity.setRequestTimeOut(DEVICE_RPC_EXECUTION_TIMEOUT_SECONDS);
140 OperationOptions options = new OperationOptions();
141 options.setExecutionTimeout(DEVICE_RPC_EXECUTION_TIMEOUT_SECONDS);
142 deviceRPCRequest.setOptions(options);
146 return tr069DeviceRPCRequestEntities;
152 * @param isCustomOperation
154 private static String paramListToJson(DeviceRPCRequest dto, boolean isCustomOperation) {
155 String attrJsonString = null;
156 if (isCustomOperation) {
157 TR069OperationDetails operationDetails = (TR069OperationDetails) dto.getOpDetails();
158 StringBuilder buffer = new StringBuilder();
160 List<ParameterDTO> deletParamList = operationDetails.getDeleteParamList();
161 List<ParameterDTO> modifyParamList = operationDetails.getModifyParamList();
162 List<ParameterDTO> setParamList = operationDetails.getSetParamList();
164 if (deletParamList != null && !deletParamList.isEmpty()) {
165 convertBooleanValues(deletParamList);
166 buffer.append(toJson(deletParamList));
168 buffer.append(toJson(new ArrayList<>()));
171 if (modifyParamList != null && !modifyParamList.isEmpty()) {
172 convertBooleanValues(modifyParamList);
173 buffer.append(toJson(modifyParamList));
175 buffer.append(toJson(new ArrayList<>()));
178 if (setParamList != null && !setParamList.isEmpty()) {
179 convertBooleanValues(setParamList);
180 buffer.append(toJson(setParamList));
182 buffer.append(toJson(new ArrayList<>()));
185 attrJsonString = buffer.toString();
187 List<ParameterDTO> parameterDTOs = dto.getOpDetails().getParmeters();
188 attrJsonString = toJson(parameterDTOs);
191 return attrJsonString;
195 * @param paramListJSON
198 private static List<TR069DeviceRPCRequestEntity> getTR069DeviceRPCRequestEntities(
199 String paramListJSON) {
200 List<TR069DeviceRPCRequestEntity> tr069DeviceRPCRequestEntities = new ArrayList<>();
202 if (paramListJSON.length() < MAX_SIZE) {
203 TR069DeviceRPCRequestEntity entity = new TR069DeviceRPCRequestEntity();
204 entity.setAttributeJson1(getAttriuteJsonData(paramListJSON, 0));
205 entity.setAttributeJson2(getAttriuteJsonData(paramListJSON, 1));
206 entity.setAttributeJson3(getAttriuteJsonData(paramListJSON, 2));
208 tr069DeviceRPCRequestEntities.add(entity);
210 int noOfEntities = 0;
212 int i = 3 * noOfEntities;
213 TR069DeviceRPCRequestEntity entity = new TR069DeviceRPCRequestEntity();
214 entity.setAttributeJson1(getAttriuteJsonData(paramListJSON, i));
215 entity.setAttributeJson2(getAttriuteJsonData(paramListJSON, ++i));
216 entity.setAttributeJson3(getAttriuteJsonData(paramListJSON, ++i));
218 if (entity.getAttributeJson1() != null) {
219 tr069DeviceRPCRequestEntities.add(entity);
222 if (entity.getAttributeJson1() == null || entity.getAttributeJson2() == null
223 || entity.getAttributeJson3() == null) {
231 return tr069DeviceRPCRequestEntities;
239 private static String getAttriuteJsonData(String eventData, int blockNum) {
240 int eventDataSize = eventData.length();
241 int startIndex = blockNum * BLOCK_SIZE;
242 if (startIndex > eventDataSize) {
245 int endIndex = startIndex + BLOCK_SIZE;
246 endIndex = endIndex < eventDataSize ? endIndex : eventDataSize;
247 return eventData.substring(startIndex, endIndex);
253 * @param isCustomOperation
255 private static void dtoFromEntityJson(OperationDetails opDetails,
256 List<TR069DeviceRPCRequestEntity> entityList, boolean isCustomOperation) {
257 StringBuilder sb = new StringBuilder();
258 for (TR069DeviceRPCRequestEntity entity : entityList) {
259 append(sb, entity.getAttributeJson1());
260 append(sb, entity.getAttributeJson2());
261 append(sb, entity.getAttributeJson3());
264 if (isCustomOperation) {
265 String[] splitStringArray = sb.toString().split("]\\[");
266 List<ParameterDTO> deleteParamList = new ArrayList<>();
267 List<ParameterDTO> modifyParamList = new ArrayList<>();
268 List<ParameterDTO> setParamList = new ArrayList<>();
269 for (int i = 0; i < splitStringArray.length; i++) {
270 String data = splitStringArray[i];
273 deleteParamList.addAll(fromJson(data));
274 } else if ((i + 1) == splitStringArray.length) {
276 setParamList.addAll(fromJson(data));
278 data = "[" + data + "]";
279 modifyParamList.addAll(fromJson(data));
282 TR069OperationDetails tr069OperationDetails = (TR069OperationDetails) opDetails;
283 tr069OperationDetails.setDeleteParamList(deleteParamList);
284 tr069OperationDetails.setModifyParamList(modifyParamList);
285 tr069OperationDetails.setSetParamList(setParamList);
287 if (TR069OperationCode.SET_PARAMETER_ATTRIBUTES.equals(opDetails.getOpCode())) {
288 List<ParameterDTO> list = fromJsonToParameterAttribute(sb.toString());
289 opDetails.setParmeters(list);
291 List<ParameterDTO> list = fromJson(sb.toString());
292 opDetails.setParmeters(list);
301 private static void append(StringBuilder sb, String temp) {
302 if (temp != null && !temp.isEmpty()) {
311 private static List<ParameterDTO> fromJson(String jsonString) {
312 Gson gson = new Gson();
313 Type collectionType = new TypeToken<List<ParameterDTO>>() {}.getType();
314 return gson.fromJson(jsonString, collectionType);
321 private static List<ParameterDTO> fromJsonToParameterAttribute(String jsonString) {
322 Gson gson = new Gson();
323 Type collectionType = new TypeToken<List<ParameterAttributeDTO>>() {}.getType();
324 return gson.fromJson(jsonString, collectionType);
331 private static <T> String toJson(T entity) {
332 Gson gson = new Gson();
333 return gson.toJson(entity);
337 * @param parameterDTOs
339 private static void convertBooleanValues(List<ParameterDTO> parameterDTOs) {
340 for (ParameterDTO param : parameterDTOs) {
341 if (param.getDataType() != null && param.getDataType().equalsIgnoreCase("boolean")) {
342 if (param.getParamValue() != null && (param.getParamValue().equalsIgnoreCase("true")
343 || param.getParamValue().equalsIgnoreCase("1"))) {
344 param.setParamValue("1");
346 param.setParamValue("0");