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