2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.onap.so.db.catalog.client;
23 import org.onap.so.db.catalog.beans.BuildingBlockDetail;
24 import org.onap.so.db.catalog.beans.CollectionNetworkResourceCustomization;
25 import org.onap.so.db.catalog.beans.CollectionResourceInstanceGroupCustomization;
26 import org.onap.so.db.catalog.beans.ControllerSelectionReference;
27 import org.onap.so.db.catalog.beans.InstanceGroup;
28 import org.onap.so.db.catalog.beans.NetworkCollectionResourceCustomization;
29 import org.onap.so.db.catalog.beans.OrchestrationAction;
30 import org.onap.so.db.catalog.beans.OrchestrationStatus;
31 import org.onap.so.db.catalog.beans.OrchestrationStatusStateTransitionDirective;
32 import org.onap.so.db.catalog.beans.ResourceType;
33 import org.onap.so.db.catalog.beans.Service;
34 import org.onap.so.db.catalog.beans.VfModuleCustomization;
35 import org.onap.so.db.catalog.beans.VnfcInstanceGroupCustomization;
36 import org.onap.so.db.catalog.beans.CloudSite;
37 import org.onap.so.db.catalog.beans.CloudIdentity;
38 import org.onap.so.db.catalog.beans.CloudifyManager;
39 import org.onap.so.db.catalog.beans.ServiceRecipe;
40 import org.onap.so.db.catalog.beans.macro.NorthBoundRequest;
41 import org.onap.so.db.catalog.beans.macro.OrchestrationFlow;
42 import org.onap.so.db.catalog.beans.macro.RainyDayHandlerStatus;
43 import org.onap.so.logging.jaxrs.filter.jersey.SpringClientFilter;
44 import org.springframework.beans.factory.annotation.Value;
45 import org.springframework.http.client.BufferingClientHttpRequestFactory;
46 import org.springframework.http.client.ClientHttpRequestFactory;
47 import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
48 import org.springframework.stereotype.Component;
49 import uk.co.blackpepper.bowman.Client;
50 import uk.co.blackpepper.bowman.ClientFactory;
51 import uk.co.blackpepper.bowman.Configuration;
53 import javax.annotation.PostConstruct;
54 import javax.ws.rs.core.UriBuilder;
56 import java.util.ArrayList;
57 import java.util.Iterator;
58 import java.util.List;
60 @Component("CatalogDbClient")
61 public class CatalogDbClient {
63 private static final String SERVICE_RECIPE_SEARCH = "/serviceRecipe/search";
64 private static final String SERVICE_MODEL_UUID = "SERVICE_MODEL_UUID";
65 private static final String ACTION = "ACTION";
66 private static final String MODEL_NAME = "MODEL_NAME";
67 private static final String SERVICE_SEARCH = "/service/search";
68 private static final String MODEL_VERSION = "MODEL_VERSION";
69 private static final String MODEL_INVARIANT_UUID = "MODEL_INVARIANT_UUID";
70 private String findFirstByModelNameURI = "/findFirstByModelNameOrderByModelVersionDesc";
71 private String findFirstByServiceModelUUIDAndActionURI = "/findFirstByServiceModelUUIDAndAction";
72 private String findByModelVersionAndModelInvariantUUIDURI = "/findByModelVersionAndModelInvariantUUID";
74 private Client<Service> serviceClient;
76 private Client<VfModuleCustomization> vfModuleCustomizationClient;
78 private Client<OrchestrationFlow> orchestrationClient;
80 private Client<NorthBoundRequest> northBoundRequestClient;
82 private Client<RainyDayHandlerStatus> rainyDayHandlerStatusClient;
84 private Client<BuildingBlockDetail> buildingBlockDetailClient;
86 private Client<OrchestrationStatusStateTransitionDirective> orchestrationStatusStateTransitionDirectiveClient;
88 private Client<VnfcInstanceGroupCustomization> vnfcInstanceGroupCustomizationClient;
90 private Client<CollectionResourceInstanceGroupCustomization> collectionResourceInstanceGroupCustomizationClient;
92 private Client<InstanceGroup> instanceGroupClient;
94 private Client<NetworkCollectionResourceCustomization> networkCollectionResourceCustomizationClient;
96 private Client<CollectionNetworkResourceCustomization> collectionNetworkResourceCustomizationClient;
98 private Client<ServiceRecipe> serviceRecipeClient;
100 private Client<CloudSite> cloudSiteClient;
102 private Client<CloudIdentity> cloudIdentityClient;
104 private Client<CloudifyManager> cloudifyManagerClient;
106 protected Client<ControllerSelectionReference> controllerSelectionReferenceClient;
108 @Value("${mso.catalog.db.spring.endpoint}")
109 private String endpoint;
111 @Value("${mso.db.auth}")
112 private String msoAdaptersAuth;
116 findFirstByModelNameURI = endpoint + SERVICE_SEARCH + findFirstByModelNameURI;
117 findByModelVersionAndModelInvariantUUIDURI = endpoint + SERVICE_SEARCH + findByModelVersionAndModelInvariantUUIDURI;
118 findFirstByServiceModelUUIDAndActionURI = endpoint + SERVICE_RECIPE_SEARCH + findFirstByServiceModelUUIDAndActionURI;
121 public CatalogDbClient() {
122 ClientHttpRequestFactory factory = new BufferingClientHttpRequestFactory(new HttpComponentsClientHttpRequestFactory());
124 ClientFactory clientFactory = Configuration.builder().setClientHttpRequestFactory(factory).setRestTemplateConfigurer(restTemplate -> {
125 restTemplate.getInterceptors().add((new SpringClientFilter()));
127 restTemplate.getInterceptors().add((request, body, execution) -> {
129 request.getHeaders().add("Authorization", msoAdaptersAuth);
130 return execution.execute(request, body);
132 }).build().buildClientFactory();
133 serviceClient = clientFactory.create(Service.class);
134 orchestrationClient = clientFactory.create(OrchestrationFlow.class);
135 vfModuleCustomizationClient = clientFactory.create(VfModuleCustomization.class);
136 northBoundRequestClient = clientFactory.create(NorthBoundRequest.class);
137 rainyDayHandlerStatusClient = clientFactory.create(RainyDayHandlerStatus.class);
138 buildingBlockDetailClient = clientFactory.create(BuildingBlockDetail.class);
139 orchestrationStatusStateTransitionDirectiveClient = clientFactory
140 .create(OrchestrationStatusStateTransitionDirective.class);
141 vnfcInstanceGroupCustomizationClient = clientFactory.create(VnfcInstanceGroupCustomization.class);
142 collectionResourceInstanceGroupCustomizationClient = clientFactory
143 .create(CollectionResourceInstanceGroupCustomization.class);
144 instanceGroupClient = clientFactory.create(InstanceGroup.class);
145 networkCollectionResourceCustomizationClient = clientFactory.create(NetworkCollectionResourceCustomization.class);
146 collectionNetworkResourceCustomizationClient = clientFactory.create(CollectionNetworkResourceCustomization.class);
147 cloudSiteClient = clientFactory.create(CloudSite.class);
148 cloudIdentityClient = clientFactory.create(CloudIdentity.class);
149 cloudifyManagerClient = clientFactory.create(CloudifyManager.class);
150 serviceRecipeClient = clientFactory.create(ServiceRecipe.class);
151 controllerSelectionReferenceClient = clientFactory.create(ControllerSelectionReference.class);
154 public NetworkCollectionResourceCustomization getNetworkCollectionResourceCustomizationByID(String modelCustomizationUUID) {
155 NetworkCollectionResourceCustomization networkCollectionResourceCustomization =
156 this.getSingleNetworkCollectionResourceCustomization(UriBuilder.fromUri(endpoint + "/networkCollectionResourceCustomization/" + modelCustomizationUUID).build());
157 if (networkCollectionResourceCustomization != null) {
158 networkCollectionResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
160 return networkCollectionResourceCustomization;
163 private NetworkCollectionResourceCustomization getSingleNetworkCollectionResourceCustomization(URI uri) {
164 return networkCollectionResourceCustomizationClient.get(uri);
167 public Service getServiceByID(String modelUUID) {
168 Service service = this.getSingleService(UriBuilder.fromUri(endpoint + "/service/" + modelUUID).build());
169 if (service != null) {
170 service.setModelUUID(modelUUID);
175 public BuildingBlockDetail getBuildingBlockDetail(String buildingBlockName) {
176 BuildingBlockDetail buildingBlockDetail = buildingBlockDetailClient
177 .get(UriBuilder.fromUri(endpoint + "/buildingBlockDetail/search/findOneByBuildingBlockName")
178 .queryParam("buildingBlockName", buildingBlockName).build());
179 if (buildingBlockDetail != null) {
180 buildingBlockDetail.setBuildingBlockName(buildingBlockName);
182 return buildingBlockDetail;
185 public CollectionNetworkResourceCustomization getCollectionNetworkResourceCustomizationByID(String modelCustomizationUUID) {
186 CollectionNetworkResourceCustomization collectionNetworkResourceCustomization =
187 this.getSingleCollectionNetworkResourceCustomization(
188 UriBuilder.fromUri(endpoint + "/collectionNetworkResourceCustomization/" + modelCustomizationUUID).build());
189 if (collectionNetworkResourceCustomization != null) {
190 collectionNetworkResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
192 return collectionNetworkResourceCustomization;
195 public InstanceGroup getInstanceGroupByModelUUID(String modelUUID) {
196 InstanceGroup instanceGroup = this
197 .getSingleInstanceGroup(UriBuilder.fromUri(endpoint + "/instanceGroup/" + modelUUID).build());
198 if (instanceGroup != null) {
199 instanceGroup.setModelUUID(modelUUID);
201 return instanceGroup;
204 public OrchestrationStatusStateTransitionDirective getOrchestrationStatusStateTransitionDirective(
205 ResourceType resourceType, OrchestrationStatus orchestrationStatus, OrchestrationAction targetAction) {
206 return orchestrationStatusStateTransitionDirectiveClient.get(UriBuilder
208 endpoint + "/orchestrationStatusStateTransitionDirective/search/findOneByResourceTypeAndOrchestrationStatusAndTargetAction")
209 .queryParam("resourceType", resourceType.name())
210 .queryParam("orchestrationStatus", orchestrationStatus.name())
211 .queryParam("targetAction", targetAction.name()).build());
214 public List<OrchestrationFlow> getOrchestrationFlowByAction(String action) {
216 .getMultipleOrchestrationFlows(UriBuilder.fromUri(endpoint + "/orchestrationFlow/search/findByAction")
217 .queryParam("COMPOSITE_ACTION", action).build());
220 public List<OrchestrationFlow> getAllOrchestrationFlows() {
221 return this.getMultipleOrchestrationFlows(UriBuilder.fromUri(endpoint + "/orchestrationFlow/").build());
224 private List<OrchestrationFlow> getMultipleOrchestrationFlows(URI uri) {
225 Iterable<OrchestrationFlow> orchIterator = orchestrationClient.getAll(uri);
226 List<OrchestrationFlow> orchList = new ArrayList<>();
227 Iterator<OrchestrationFlow> it = orchIterator.iterator();
228 it.forEachRemaining(orchList::add);
232 public List<VnfcInstanceGroupCustomization> getVnfcInstanceGroupsByVnfResourceCust(String modelCustomizationUUID) {
233 return this.getMultipleVnfcInstanceGroupCustomizations(
234 UriBuilder.fromUri(endpoint + "/vnfcInstanceGroupCustomization/search/findByModelCustomizationUUID")
235 .queryParam("MODEL_CUSTOMIZATION_UUID", modelCustomizationUUID).build());
238 public List<CollectionResourceInstanceGroupCustomization> getCollectionResourceInstanceGroupCustomizationByModelCustUUID(
239 String modelCustomizationUUID) {
240 return this.getMultipleCollectionResourceInstanceGroupCustomizations(UriBuilder
241 .fromUri(endpoint + "/collectionResourceInstanceGroupCustomization/search/findByModelCustomizationUUID")
242 .queryParam("MODEL_CUSTOMIZATION_UUID", modelCustomizationUUID).build());
245 private List<CollectionResourceInstanceGroupCustomization> getMultipleCollectionResourceInstanceGroupCustomizations(
247 Iterable<CollectionResourceInstanceGroupCustomization> collectionInstanceGroupCustIter = collectionResourceInstanceGroupCustomizationClient
249 List<CollectionResourceInstanceGroupCustomization> collectionInstanceGroupCustList = new ArrayList<>();
250 Iterator<CollectionResourceInstanceGroupCustomization> it = collectionInstanceGroupCustIter.iterator();
251 it.forEachRemaining(collectionInstanceGroupCustList::add);
252 return collectionInstanceGroupCustList;
255 private List<VnfcInstanceGroupCustomization> getMultipleVnfcInstanceGroupCustomizations(URI uri) {
256 Iterable<VnfcInstanceGroupCustomization> vnfcIterator = vnfcInstanceGroupCustomizationClient.getAll(uri);
257 List<VnfcInstanceGroupCustomization> vnfcList = new ArrayList<>();
258 Iterator<VnfcInstanceGroupCustomization> it = vnfcIterator.iterator();
259 it.forEachRemaining(vnfcList::add);
263 public VfModuleCustomization getVfModuleCustomizationByModelCuztomizationUUID(String modelCustomizationUUID) {
264 VfModuleCustomization vfModuleCust = this.getSingleVfModuleCustomization(
265 UriBuilder.fromUri(endpoint + "/vfModuleCustomization/" + modelCustomizationUUID).build());
266 if (vfModuleCust != null) {
267 vfModuleCust.setModelCustomizationUUID(modelCustomizationUUID);
272 public NorthBoundRequest getNorthBoundRequestByActionAndIsALaCarteAndRequestScope(String requestAction,
273 String resourceName, boolean aLaCarte) {
274 return this.getSingleNorthBoundRequest(UriBuilder
275 .fromUri(endpoint + "/northbound_request_ref_lookup/search/findOneByActionAndRequestScopeAndIsAlacarte")
276 .queryParam("ACTION", requestAction).queryParam("REQUEST_SCOPE", resourceName)
277 .queryParam("IS_ALACARTE", aLaCarte).build());
280 public RainyDayHandlerStatus getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(
281 String flowName, String serviceType, String vnfType, String errorCode, String workStep) {
282 return this.getSingleRainyDayHandlerStatus(UriBuilder
284 endpoint + "/rainy_day_handler_macro/search/findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep")
285 .queryParam("FLOW_NAME", flowName).queryParam("SERVICE_TYPE", serviceType)
286 .queryParam("VNF_TYPE", vnfType).queryParam("ERROR_CODE", errorCode).queryParam("WORK_STEP", workStep)
290 public ServiceRecipe getFirstByServiceModelUUIDAndAction(String modelUUID, String action){
291 return this.getSingleServiceRecipe(UriBuilder.fromUri(findFirstByServiceModelUUIDAndActionURI)
292 .queryParam(SERVICE_MODEL_UUID,modelUUID)
293 .queryParam(ACTION,action)
297 public Service getFirstByModelNameOrderByModelVersionDesc(String modelName){
298 return this.getSingleService(UriBuilder.fromUri(findFirstByModelNameURI)
299 .queryParam(MODEL_NAME,modelName)
303 public ControllerSelectionReference getControllerSelectionReferenceByVnfType(String vnfType) {
304 return this.getSingleControllerSelectionReference(UriBuilder
305 .fromUri(endpoint + "/controllerSelectionReference/search/findControllerSelectionReferenceByVnfType")
306 .queryParam("VNF_TYPE", vnfType).build());
310 public ControllerSelectionReference getControllerSelectionReferenceByVnfTypeAndActionCategory(String vnfType, String actionCategory) {
311 return this.getSingleControllerSelectionReference(UriBuilder
312 .fromUri(endpoint + "/controllerSelectionReference/search/findControllerSelectionReferenceByVnfTypeAndActionCategory")
313 .queryParam("VNF_TYPE", vnfType).queryParam("ACTION_CATEGORY", actionCategory).build());
316 private CollectionNetworkResourceCustomization getSingleCollectionNetworkResourceCustomization(URI uri) {
317 return collectionNetworkResourceCustomizationClient.get(uri);
320 public CloudifyManager getCloudifyManager(String id) {
321 return this.getSingleCloudifyManager(UriBuilder.fromUri(endpoint+"/cloudifyManager/"+id).build());
324 public CloudSite getCloudSite(String id){
325 return this.getSinglCloudSite(UriBuilder.fromUri(endpoint+"/cloudSite/"+id).build());
328 public CloudIdentity getCloudIdentity(String id){
329 return this.getSingleCloudIdentity(UriBuilder.fromUri(endpoint+"/cloudIdentity/"+id).build());
332 public CloudSite getCloudSiteByClliAndAicVersion (String clli, String cloudVersion){
333 return this.getSinglCloudSite(UriBuilder.fromUri(endpoint+"/cloudSite/search/findByClliAndCloudVersion")
334 .queryParam("CLLI",clli).queryParam("CLOUD_VERSION",cloudVersion)
338 private InstanceGroup getSingleInstanceGroup(URI uri) {
339 return instanceGroupClient.get(uri);
342 private Service getSingleService(URI uri) {
343 return serviceClient.get(uri);
346 private VfModuleCustomization getSingleVfModuleCustomization(URI uri) {
347 return vfModuleCustomizationClient.get(uri);
350 private NorthBoundRequest getSingleNorthBoundRequest(URI uri) {
351 return northBoundRequestClient.get(uri);
354 private RainyDayHandlerStatus getSingleRainyDayHandlerStatus(URI uri) {
355 return rainyDayHandlerStatusClient.get(uri);
358 private ServiceRecipe getSingleServiceRecipe(URI uri){
359 return serviceRecipeClient.get(uri);
362 protected CloudSite getSinglCloudSite(URI uri) {
363 return cloudSiteClient.get(uri);
366 protected CloudIdentity getSingleCloudIdentity(URI uri) {
367 return cloudIdentityClient.get(uri);
370 protected CloudifyManager getSingleCloudifyManager(URI uri) {
371 return cloudifyManagerClient.get(uri);
374 private ControllerSelectionReference getSingleControllerSelectionReference(URI uri) {
375 return controllerSelectionReferenceClient.get(uri);
378 public Service getServiceByModelVersionAndModelInvariantUUID(String modelVersion, String modelInvariantUUID) {
379 return this.getSingleService(
380 UriBuilder.fromUri(findByModelVersionAndModelInvariantUUIDURI)
381 .queryParam(MODEL_VERSION, modelVersion)
382 .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID).build());
386 public void setPortToEndpoint(String port) {
387 endpoint = endpoint + port;
391 public void removePortFromEndpoint() {
392 endpoint = endpoint.substring(0, endpoint.lastIndexOf(':') + 1);