Development of NETCONF RPCs for tr-069 adapter to
[oam/tr069-adapter.git] / acs / requestprocessor / src / main / java / org / commscope / tr069adapter / acs / requestprocessor / helper / TR069RequestProcessEngineUtility.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.requestprocessor.helper;
20
21 import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.OPERATION_EXPIRATION_TIMEOUT;
22
23 import java.util.ArrayList;
24
25 import org.commscope.tr069adapter.acs.common.DeviceDetails;
26 import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;
27 import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;
28 import org.commscope.tr069adapter.acs.common.OperationResponse;
29 import org.commscope.tr069adapter.acs.common.dto.CustomOperationCode;
30 import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;
31 import org.commscope.tr069adapter.acs.common.faults.AcsFaultCode;
32 import org.commscope.tr069adapter.acs.common.response.AddObjectResponse;
33 import org.commscope.tr069adapter.acs.common.response.DeleteObjectResponse;
34 import org.commscope.tr069adapter.acs.common.response.DownloadResponse;
35 import org.commscope.tr069adapter.acs.common.response.FactoryResetResponse;
36 import org.commscope.tr069adapter.acs.common.response.GetParameterAttributeResponse;
37 import org.commscope.tr069adapter.acs.common.response.GetParameterValueResponse;
38 import org.commscope.tr069adapter.acs.common.response.RebootResponse;
39 import org.commscope.tr069adapter.acs.common.response.SetParameterAttributeResponse;
40 import org.commscope.tr069adapter.acs.common.response.SetParameterValueResponse;
41 import org.slf4j.Logger;
42 import org.slf4j.LoggerFactory;
43 import org.springframework.stereotype.Component;
44
45 @Component
46 public class TR069RequestProcessEngineUtility {
47
48   private static final Logger logger =
49       LoggerFactory.getLogger(TR069RequestProcessEngineUtility.class);
50
51   /**
52    * Builds a operation aborted operation request
53    * 
54    * @param deviceDetails
55    * @param nbiDeviceOperationrequest
56    * @param acsFaultCode
57    * @return
58    */
59   public DeviceRPCResponse buildAbortedOperationresult(DeviceDetails deviceDetails,
60       DeviceRPCRequest nbiDeviceOperationrequest, AcsFaultCode acsFaultCode) {
61     Long operationId = nbiDeviceOperationrequest.getOperationId();
62
63     TR069OperationCode operationCode = null;
64     if (nbiDeviceOperationrequest.getOpDetails().getOpCode() instanceof CustomOperationCode) {
65       operationCode = TR069OperationCode.GET_PARAMETER_VALUES;
66     } else {
67       operationCode = (TR069OperationCode) nbiDeviceOperationrequest.getOpDetails().getOpCode();
68     }
69
70     return buildOperationresult(deviceDetails, operationId, operationCode, acsFaultCode);
71
72   }
73
74   /**
75    * @param deviceDetails
76    * @param operationId
77    * @param operationCode
78    * @return
79    */
80   public DeviceRPCResponse buildTimedOutOperationResult(DeviceDetails deviceDetails,
81       DeviceRPCRequest deviceRPCRequest) {
82     Long operationId = deviceRPCRequest.getOperationId();
83
84     TR069OperationCode operationCode = null;
85     if (deviceRPCRequest.getOpDetails().getOpCode() instanceof CustomOperationCode) {
86       CustomOperationCode customOperationCode =
87           (CustomOperationCode) deviceRPCRequest.getOpDetails().getOpCode();
88       if (CustomOperationCode.CONFIGURE_MULTIPLE_OBJECTS.equals(customOperationCode)) {
89         operationCode = TR069OperationCode.GET_PARAMETER_VALUES;
90       } else if (CustomOperationCode.CONNECT.equals(customOperationCode)) {
91         operationCode = TR069OperationCode.INITIATE_CR;
92       }
93     } else {
94       operationCode = (TR069OperationCode) deviceRPCRequest.getOpDetails().getOpCode();
95     }
96     DeviceRPCResponse deviceRPCResponse = buildOperationresult(deviceDetails, operationId,
97         operationCode, AcsFaultCode.FAULT_CODE_8003);
98     OperationResponse operationResponse = deviceRPCResponse.getOperationResponse();
99     operationResponse.setStatus(OPERATION_EXPIRATION_TIMEOUT);
100     return deviceRPCResponse;
101   }
102
103   /**
104    * Builds a operation aborted operation request
105    * 
106    * @param deviceDetails
107    * @param nbiDeviceOperationrequest
108    * @param acsFaultCode
109    * @return
110    */
111   private DeviceRPCResponse buildOperationresult(DeviceDetails deviceDetails, Long operationId,
112       TR069OperationCode operationCode, AcsFaultCode acsFaultCode) {
113     DeviceRPCResponse deviceRPCResponse = new DeviceRPCResponse();
114     deviceRPCResponse.setDeviceDetails(deviceDetails);
115     deviceRPCResponse.setOperationId(operationId);
116
117     deviceRPCResponse.setFaultKey(acsFaultCode.getFaultKey());
118     deviceRPCResponse.setFaultString(acsFaultCode.getFaultString());
119
120     OperationResponse opResponse = null;
121     switch (operationCode) {
122       case GET_RPC_METHODS:
123       case GET_PARAMETER_NAMES:
124         break;
125       case SET_PARAMETER_VALUES:
126         opResponse = new SetParameterValueResponse();
127         opResponse.setParameterDTOs(new ArrayList<>());
128         break;
129       case GET_PARAMETER_VALUES:
130       case INITIATE_CR:
131         opResponse = new GetParameterValueResponse();
132         opResponse.setParameterDTOs(new ArrayList<>());
133         break;
134       case SET_PARAMETER_ATTRIBUTES:
135         opResponse = new SetParameterAttributeResponse();
136         opResponse.setParameterDTOs(new ArrayList<>());
137         break;
138       case GET_PARAMETER_ATTRIBUTES:
139         opResponse = new GetParameterAttributeResponse();
140         opResponse.setParameterDTOs(new ArrayList<>());
141         break;
142       case ADD_OBJECT:
143         opResponse = new AddObjectResponse();
144         opResponse.setParameterDTOs(new ArrayList<>());
145         break;
146       case DELETE_OBJECT:
147         opResponse = new DeleteObjectResponse();
148         opResponse.setParameterDTOs(new ArrayList<>());
149         break;
150       case REBOOT:
151         opResponse = new RebootResponse();
152         break;
153       case DOWNLOAD:
154         opResponse = new DownloadResponse();
155         break;
156       case SCHEDULE_DOWNLOAD:
157       case UPLOAD:
158       case FACTORY_RESET:
159         opResponse = new FactoryResetResponse();
160         break;
161       default:
162         String operationCodeName = operationCode.name();
163         logger.debug("An unsupported operation: {}, hence returning without response object",
164             operationCodeName);
165         break;
166     }
167     deviceRPCResponse.setOperationResponse(opResponse);
168
169     return deviceRPCResponse;
170   }
171
172 }