c7fe7e36a6742f1ce66192040018d2633ea5f60e
[so.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  # Copyright (c) 2020, Wipro Limited.
6  #
7  # Licensed under the Apache License, Version 2.0 (the "License")
8  # you may not use this file except in compliance with the License.
9  # You may obtain a copy of the License at
10  #
11  #       http://www.apache.org/licenses/LICENSE-2.0
12  #
13  # Unless required by applicable law or agreed to in writing, software
14  # distributed under the License is distributed on an "AS IS" BASIS,
15  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  # See the License for the specific language governing permissions and
17  # limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.so.bpmn.infrastructure.scripts
22
23 import org.camunda.bpm.engine.delegate.BpmnError
24 import org.camunda.bpm.engine.delegate.DelegateExecution
25 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
26 import org.onap.so.bpmn.common.scripts.ExceptionUtil
27 import org.onap.so.bpmn.common.scripts.RequestDBUtil
28 import org.onap.so.bpmn.core.json.JsonUtils
29 import org.onap.so.db.request.beans.ResourceOperationStatus
30 import org.slf4j.Logger
31 import org.slf4j.LoggerFactory
32 import static org.apache.commons.lang3.StringUtils.isBlank
33
34 class ActivateSliceSubnet extends AbstractServiceTaskProcessor {
35         String Prefix="ActSS"
36         ExceptionUtil exceptionUtil = new ExceptionUtil()
37         JsonUtils jsonUtil = new JsonUtils()
38         RequestDBUtil requestDBUtil = new RequestDBUtil()
39         
40         private static final Logger logger = LoggerFactory.getLogger(ActivateSliceSubnet.class)
41         
42          @Override
43         void preProcessRequest(DelegateExecution execution) {
44                 logger.debug(Prefix + "preProcessRequest Start")
45                 execution.setVariable("prefix", Prefix)
46                 execution.setVariable("startTime", System.currentTimeMillis())
47                 def msg
48                 try {
49                         // get request input
50                         String subnetInstanceReq = execution.getVariable("bpmnRequest")
51                         logger.debug(subnetInstanceReq)
52
53                         String requestId = execution.getVariable("mso-request-id")
54                         execution.setVariable("msoRequestId", requestId)
55                         logger.debug("Input Request:" + subnetInstanceReq + " reqId:" + requestId)
56
57                         //subscriberInfo
58                         String globalSubscriberId = jsonUtil.getJsonValue(subnetInstanceReq, "globalSubscriberId")
59                         if (isBlank(globalSubscriberId)) {
60                                 msg = "Input globalSubscriberId' is null"
61                                 exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
62                         } else {
63                                 execution.setVariable("globalSubscriberId", globalSubscriberId)
64                         }
65                         
66                         //NSSI ID
67                         String serviceInstanceID = jsonUtil.getJsonValue(subnetInstanceReq, "serviceInstanceID")
68                         if (isBlank(serviceInstanceID)) {
69                                 msg = "Input serviceInstanceID is null"
70                                 logger.debug(msg)
71                                 exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
72                         } else
73                         {
74                                 execution.setVariable("serviceInstanceID", serviceInstanceID)
75                         }
76                         
77                         String nsiId = jsonUtil.getJsonValue(subnetInstanceReq, "additionalProperties.nsiId")
78                         if (isBlank(nsiId)) {
79                                 msg = "Input nsiId is null"
80                                 logger.debug(msg)
81                                 exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
82                         } else
83                         {
84                                 execution.setVariable("nsiId", nsiId)
85                         }
86                         String networkType = jsonUtil.getJsonValue(subnetInstanceReq, "networkType")
87                         if (isBlank(networkType)) {
88                                 msg = "Input networkType is null"
89                                 logger.debug(msg)
90                                 exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
91                         } else
92                         {
93                                 execution.setVariable("networkType", networkType.toUpperCase())
94                         }
95                         
96                         //requestParameters, subscriptionServiceType is 5G
97                         String subscriptionServiceType = jsonUtil.getJsonValue(subnetInstanceReq, "subscriptionServiceType")
98                         if (isBlank(subscriptionServiceType)) {
99                                 msg = "Input subscriptionServiceType is null"
100                                 logger.debug(msg)
101                                 exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
102                         } else {
103                                 execution.setVariable("subscriptionServiceType", subscriptionServiceType)
104                         }
105                         
106                         //operationType = deactivateInstance/activateInstance
107                         String operationType = execution.getVariable("requestAction")
108                         if (isBlank(operationType)) {
109                                 msg = "Input operationType is null"
110                                 logger.debug(msg)
111                                 exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
112                         } else {
113                                 execution.setVariable("operationType", operationType)
114                         }
115                         
116                         String jobId = UUID.randomUUID().toString()
117                         execution.setVariable("jobId", jobId)
118                         
119                         String sliceParams = jsonUtil.getJsonValue(subnetInstanceReq, "additionalProperties")
120                         execution.setVariable("sliceParams", sliceParams)
121
122                 } catch(BpmnError e) {
123                         throw e
124                 } catch(Exception ex) {
125                         msg = "Exception in ActivateSliceSubnet.preProcessRequest " + ex.getMessage()
126                         logger.debug(msg)
127                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
128                 }
129                 logger.debug(Prefix + "preProcessRequest Exit")
130         }
131
132
133         /**
134          * create operation status in request db
135          *
136          * Init the Operation Status
137          */
138         def prepareInitOperationStatus = { DelegateExecution execution ->
139                 logger.debug(Prefix + "prepareInitOperationStatus Start")
140
141                 String serviceId = execution.getVariable("serviceInstanceID")
142                 String jobId = execution.getVariable("jobId")
143                 String nsiId = execution.getVariable("nsiId")
144                 String operationType = execution.getVariable("operationType")
145                 logger.debug("Generated new job for Service Instance serviceId:" + serviceId + " jobId:" + jobId)
146
147                 ResourceOperationStatus initStatus = new ResourceOperationStatus()
148                 initStatus.setServiceId(serviceId)
149                 initStatus.setOperationId(jobId)
150                 initStatus.setResourceTemplateUUID(nsiId)
151                 initStatus.setOperType(operationType)
152                 requestDBUtil.prepareInitResourceOperationStatus(execution, initStatus)
153
154                 logger.debug(Prefix + "prepareInitOperationStatus Exit")
155         }
156
157
158         
159         /**
160          * return sync response
161          */
162         def sendSyncResponse = { DelegateExecution execution ->
163                 logger.debug(Prefix + "sendSyncResponse Start")
164                 try {
165                         String jobId = execution.getVariable("jobId")
166                         String activateSyncResponse = """{"jobId": "${jobId}","status": "processing"}"""
167                                                                                                 .trim().replaceAll(" ", "")
168
169                         logger.debug("sendSyncResponse to APIH:" + "\n" + activateSyncResponse)
170                         sendWorkflowResponse(execution, 202, activateSyncResponse)
171
172                         execution.setVariable("sentSyncResponse", true)
173                 } catch (Exception ex) {
174                         String msg = "Exception in sendSyncResponse:" + ex.getMessage()
175                         logger.debug(msg)
176                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
177                 }
178                 logger.debug(Prefix + "sendSyncResponse Exit")
179         }
180         
181 }