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