Enable DeleteChildService functionality
[so.git] / bpmn / so-bpmn-tasks / src / main / java / org / onap / so / bpmn / infrastructure / service / composition / ChildServiceRequestBuilder.java
1 package org.onap.so.bpmn.infrastructure.service.composition;
2
3 import com.fasterxml.jackson.databind.ObjectMapper;
4 import org.onap.so.bpmn.common.BuildingBlockExecution;
5 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
6 import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
7 import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
8 import org.onap.so.serviceinstancebeans.CloudConfiguration;
9 import org.onap.so.serviceinstancebeans.InstanceDirection;
10 import org.onap.so.serviceinstancebeans.OwningEntity;
11 import org.onap.so.serviceinstancebeans.Project;
12 import org.onap.so.serviceinstancebeans.RelatedInstance;
13 import org.onap.so.serviceinstancebeans.RelatedInstanceList;
14 import org.onap.so.serviceinstancebeans.RequestDetails;
15 import org.onap.so.serviceinstancebeans.RequestInfo;
16 import org.onap.so.serviceinstancebeans.RequestParameters;
17 import org.onap.so.serviceinstancebeans.Service;
18 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
19 import org.onap.so.serviceinstancebeans.SubscriberInfo;
20 import java.io.IOException;
21 import java.util.Map;
22
23 public class ChildServiceRequestBuilder {
24     private final BuildingBlockExecution buildingBlockExecution;
25     private Service parent;
26     private Service child;
27     private ServiceInstancesRequest sir;
28
29     private ChildServiceRequestBuilder(final BuildingBlockExecution buildingBlockExecution, Service parent,
30             Service child) {
31         this.buildingBlockExecution = buildingBlockExecution;
32         this.child = child;
33         this.parent = parent;
34
35         this.sir = new ServiceInstancesRequest();
36         RequestDetails requestDetails = new RequestDetails();
37         requestDetails.setRequestInfo(new RequestInfo());
38         this.sir.setRequestDetails(requestDetails);
39     }
40
41     public static ChildServiceRequestBuilder getInstance(final BuildingBlockExecution buildingBlockExecution,
42             String childSvcInstanceName) {
43         Service child = null;
44         Service parent = null;
45         try {
46             String USERPARAMSERVICE = "service";
47             for (Map<String, Object> params : buildingBlockExecution.getGeneralBuildingBlock().getRequestContext()
48                     .getRequestParameters().getUserParams()) {
49                 if (params.containsKey(USERPARAMSERVICE)) {
50                     ObjectMapper obj = new ObjectMapper();
51                     String input = obj.writeValueAsString(params.get(USERPARAMSERVICE));
52                     parent = obj.readValue(input, Service.class);
53                     if (parent.getResources().getServices() != null) {
54                         for (Service service : parent.getResources().getServices()) {
55                             if (service.getInstanceName().equals(childSvcInstanceName)) {
56                                 child = service;
57                             }
58                         }
59                     }
60                 }
61             }
62         } catch (IOException e) {
63             throw new RuntimeException("Failed parsing context user parameters for parent or child service", e);
64         }
65         return new ChildServiceRequestBuilder(buildingBlockExecution, parent, child);
66     }
67
68     public static ChildServiceRequestBuilder getInstance(final BuildingBlockExecution buildingBlockExecution,
69             Service parentInstance, Service childInstance) {
70         Service child = null;
71         Service parent = null;
72         if (childInstance != null) {
73             parent = parentInstance;
74             child = childInstance;
75         }
76         return new ChildServiceRequestBuilder(buildingBlockExecution, parent, child);
77     }
78
79     public ChildServiceRequestBuilder setParentRequestId(String parentRequestId) {
80         sir.getRequestDetails().getRequestInfo().setRequestorId(parentRequestId);
81         return this;
82     }
83
84     public ChildServiceRequestBuilder setCorrelationId(String correlationId) {
85         sir.getRequestDetails().getRequestInfo().setCorrelator(correlationId);
86         return this;
87     }
88
89     public ChildServiceRequestBuilder setChildSvcInstanceId(String childSvcInstanceId) {
90         sir.setServiceInstanceId(childSvcInstanceId);
91         return this;
92     }
93
94     public ServiceInstancesRequest build() {
95         RequestContext context = buildingBlockExecution.getGeneralBuildingBlock().getRequestContext();
96
97         if (context.getAction().equals("deleteInstance")) {
98             sir.setRequestDetails(createRequestDetailsDeleteChild(context));
99         } else {
100             sir.setRequestDetails(createRequestDetails(context));
101         }
102         return sir;
103     }
104
105     private RequestDetails createRequestDetailsDeleteChild(RequestContext context) {
106         RequestDetails details = sir.getRequestDetails();
107
108         details.setRequestParameters(createRequestParameters(context, child));
109         details.setRequestInfo(createRequestInfo(context));
110         details.setCloudConfiguration(createCloudConfiguration());
111         details.setModelInfo(child.getModelInfo());
112         details.setSubscriberInfo(createSubscriberInfo());
113         details.setRelatedInstanceList(createRelatedInstanceList());
114
115         return details;
116     }
117
118     private RequestDetails createRequestDetails(RequestContext context) {
119         RequestDetails details = sir.getRequestDetails();
120
121         details.setRequestParameters(createRequestParameters(context, child));
122         details.setRequestInfo(createRequestInfo(context));
123         details.setCloudConfiguration(createCloudConfiguration());
124         details.setModelInfo(child.getModelInfo());
125         details.setSubscriberInfo(createSubscriberInfo());
126         details.setOwningEntity(createOwningEntity());
127         details.setProject(createProject());
128         details.setRelatedInstanceList(createRelatedInstanceList());
129
130         return details;
131     }
132
133     private RequestParameters createRequestParameters(RequestContext context, Service childService) {
134         RequestParameters requestParameters = new RequestParameters();
135
136         if (!context.getRequestParameters().getUserParams().isEmpty()) {
137             requestParameters.getUserParams().add(context.getRequestParameters().getUserParams().get(0));
138             if (context.getAction().equals("createInstance")) {
139                 requestParameters.getUserParams().add(Map.of("service", childService));
140             }
141         }
142         requestParameters.setSubscriptionServiceType(context.getRequestParameters().getSubscriptionServiceType());
143         requestParameters.setaLaCarte(context.getRequestParameters().getALaCarte());
144         requestParameters.setPayload(context.getRequestParameters().getPayload());
145         requestParameters.setUsePreload(context.getRequestParameters().getUsePreload());
146
147         return requestParameters;
148     }
149
150     private RequestInfo createRequestInfo(RequestContext context) {
151         RequestInfo info = sir.getRequestDetails().getRequestInfo();
152         if (info != null) {
153             info.setProductFamilyId(context.getProductFamilyId());
154             info.setSource(context.getSource());
155             info.setRequestorId(context.getRequestorId());
156             info.setInstanceName(child.getInstanceName());
157             info.setSuppressRollback(false);
158         }
159         return info;
160     }
161
162     private CloudConfiguration createCloudConfiguration() {
163         if (child.getCloudConfiguration() != null) {
164             return child.getCloudConfiguration();
165         }
166
167         CloudConfiguration cloudConfiguration = null;
168         CloudRegion requestCloudConfiguration = buildingBlockExecution.getGeneralBuildingBlock().getCloudRegion();
169         if (requestCloudConfiguration != null) {
170             cloudConfiguration = new CloudConfiguration();
171             cloudConfiguration.setLcpCloudRegionId(requestCloudConfiguration.getLcpCloudRegionId());
172             cloudConfiguration.setTenantId(requestCloudConfiguration.getTenantId());
173             cloudConfiguration.setCloudOwner(requestCloudConfiguration.getCloudOwner());
174         }
175         return cloudConfiguration;
176     }
177
178     private SubscriberInfo createSubscriberInfo() {
179         Customer requestCustomer = buildingBlockExecution.getGeneralBuildingBlock().getCustomer();
180
181         SubscriberInfo subscriberInfo = null;
182         if (requestCustomer != null) {
183             subscriberInfo = new SubscriberInfo();
184             subscriberInfo.setGlobalSubscriberId(requestCustomer.getGlobalCustomerId());
185             subscriberInfo.setSubscriberName(requestCustomer.getSubscriberName());
186         }
187
188         return subscriberInfo;
189     }
190
191     private OwningEntity createOwningEntity() {
192         org.onap.so.bpmn.servicedecomposition.bbobjects.OwningEntity requestOwningEntity =
193                 buildingBlockExecution.getGeneralBuildingBlock().getServiceInstance().getOwningEntity();
194         OwningEntity owningEntity = null;
195         if (requestOwningEntity != null) {
196             owningEntity = new OwningEntity();
197             owningEntity.setOwningEntityId(requestOwningEntity.getOwningEntityId());
198             owningEntity.setOwningEntityName(requestOwningEntity.getOwningEntityName());
199         }
200
201         return owningEntity;
202     }
203
204     private Project createProject() {
205         org.onap.so.bpmn.servicedecomposition.bbobjects.Project requestProject =
206                 buildingBlockExecution.getGeneralBuildingBlock().getServiceInstance().getProject();
207         Project project = null;
208
209         if (requestProject != null) {
210             project = new Project();
211             project.setProjectName(requestProject.getProjectName());
212         }
213         return project;
214     }
215
216     private RelatedInstanceList[] createRelatedInstanceList() {
217         RelatedInstance relatedInstance = new RelatedInstance();
218         relatedInstance.setModelInfo(parent.getModelInfo());
219         relatedInstance.setInstanceId(
220                 buildingBlockExecution.getGeneralBuildingBlock().getServiceInstance().getServiceInstanceId());
221         relatedInstance.setInstanceDirection(InstanceDirection.source);
222
223         RelatedInstanceList relatedInstanceList = new RelatedInstanceList();
224         relatedInstanceList.setRelatedInstance(relatedInstance);
225
226         RelatedInstanceList[] relatedInstanceListsArray = new RelatedInstanceList[1];
227         relatedInstanceListsArray[0] = relatedInstanceList;
228
229         return relatedInstanceListsArray;
230     }
231 }