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.InstanceGroup;
27 import org.onap.so.db.catalog.beans.NetworkCollectionResourceCustomization;
28 import org.onap.so.db.catalog.beans.OrchestrationAction;
29 import org.onap.so.db.catalog.beans.OrchestrationStatus;
30 import org.onap.so.db.catalog.beans.OrchestrationStatusStateTransitionDirective;
31 import org.onap.so.db.catalog.beans.ResourceType;
32 import org.onap.so.db.catalog.beans.Service;
33 import org.onap.so.db.catalog.beans.VfModuleCustomization;
34 import org.onap.so.db.catalog.beans.VnfcInstanceGroupCustomization;
35 import org.onap.so.db.catalog.beans.ServiceRecipe;
36 import org.onap.so.db.catalog.beans.macro.NorthBoundRequest;
37 import org.onap.so.db.catalog.beans.macro.OrchestrationFlow;
38 import org.onap.so.db.catalog.beans.macro.RainyDayHandlerStatus;
39 import org.onap.so.logging.jaxrs.filter.jersey.SpringClientFilter;
40 import org.springframework.beans.factory.annotation.Value;
41 import org.springframework.http.HttpRequest;
42 import org.springframework.http.client.BufferingClientHttpRequestFactory;
43 import org.springframework.http.client.ClientHttpRequestExecution;
44 import org.springframework.http.client.ClientHttpRequestFactory;
45 import org.springframework.http.client.ClientHttpRequestInterceptor;
46 import org.springframework.http.client.ClientHttpResponse;
47 import org.springframework.http.client.SimpleClientHttpRequestFactory;
48 import org.springframework.stereotype.Component;
49 import org.springframework.web.client.RestTemplate;
50 import uk.co.blackpepper.bowman.Client;
51 import uk.co.blackpepper.bowman.ClientFactory;
52 import uk.co.blackpepper.bowman.Configuration;
53 import uk.co.blackpepper.bowman.RestTemplateConfigurer;
55 import javax.annotation.PostConstruct;
56 import javax.ws.rs.core.UriBuilder;
57 import java.io.IOException;
59 import java.util.ArrayList;
60 import java.util.Iterator;
61 import java.util.List;
63 @Component("CatalogDbClient")
64 public class CatalogDbClient {
66 private static final String SERVICE_RECIPE_SEARCH = "/serviceRecipe/search";
67 private static final String SERVICE_MODEL_UUID = "SERVICE_MODEL_UUID";
68 private static final String ACTION = "ACTION";
69 private static final String MODEL_NAME = "MODEL_NAME";
70 private static final String SERVICE_SEARCH = "/service/search";
71 private static final String MODEL_VERSION = "MODEL_VERSION";
72 private static final String MODEL_INVARIANT_UUID = "MODEL_INVARIANT_UUID";
73 private String findFirstByModelNameURI = "/findFirstByModelNameOrderByModelVersionDesc";
74 private String findFirstByServiceModelUUIDAndActionURI = "/findFirstByServiceModelUUIDAndAction";
75 private String findByModelVersionAndModelInvariantUUIDURI = "/findByModelVersionAndModelInvariantUUID";
77 private Client<Service> serviceClient;
79 private Client<VfModuleCustomization> vfModuleCustomizationClient;
81 private Client<OrchestrationFlow> orchestrationClient;
83 private Client<NorthBoundRequest> northBoundRequestClient;
85 private Client<RainyDayHandlerStatus> rainyDayHandlerStatusClient;
87 private Client<BuildingBlockDetail> buildingBlockDetailClient;
89 private Client<OrchestrationStatusStateTransitionDirective> orchestrationStatusStateTransitionDirectiveClient;
91 private Client<VnfcInstanceGroupCustomization> vnfcInstanceGroupCustomizationClient;
93 private Client<CollectionResourceInstanceGroupCustomization> collectionResourceInstanceGroupCustomizationClient;
95 private Client<InstanceGroup> instanceGroupClient;
97 private Client<NetworkCollectionResourceCustomization> networkCollectionResourceCustomizationClient;
99 private Client<CollectionNetworkResourceCustomization> collectionNetworkResourceCustomizationClient;
101 private Client<ServiceRecipe> serviceRecipeClient;
103 @Value("${mso.catalog.db.spring.endpoint}")
104 protected String endpoint;
106 @Value("${mso.db.auth}")
107 private String msoAdaptersAuth;
111 findFirstByModelNameURI = endpoint + SERVICE_SEARCH + findFirstByModelNameURI;
112 findByModelVersionAndModelInvariantUUIDURI = endpoint + SERVICE_SEARCH + findByModelVersionAndModelInvariantUUIDURI;
113 findFirstByServiceModelUUIDAndActionURI = endpoint + SERVICE_RECIPE_SEARCH + findFirstByServiceModelUUIDAndActionURI;
116 public CatalogDbClient() {
117 ClientHttpRequestFactory factory = new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory());
119 ClientFactory clientFactory = Configuration.builder().setClientHttpRequestFactory(factory).setRestTemplateConfigurer(new RestTemplateConfigurer() {
121 public void configure(RestTemplate restTemplate) {
122 restTemplate.getInterceptors().add((new SpringClientFilter()));
124 restTemplate.getInterceptors().add(new ClientHttpRequestInterceptor() {
126 public ClientHttpResponse intercept(HttpRequest request, byte[] body,
127 ClientHttpRequestExecution execution) throws IOException {
129 request.getHeaders().add("Authorization", msoAdaptersAuth);
130 return execution.execute(request, body);
134 }).build().buildClientFactory();
135 serviceClient = clientFactory.create(Service.class);
136 orchestrationClient = clientFactory.create(OrchestrationFlow.class);
137 vfModuleCustomizationClient = clientFactory.create(VfModuleCustomization.class);
138 northBoundRequestClient = clientFactory.create(NorthBoundRequest.class);
139 rainyDayHandlerStatusClient = clientFactory.create(RainyDayHandlerStatus.class);
140 buildingBlockDetailClient = clientFactory.create(BuildingBlockDetail.class);
141 orchestrationStatusStateTransitionDirectiveClient = clientFactory
142 .create(OrchestrationStatusStateTransitionDirective.class);
143 vnfcInstanceGroupCustomizationClient = clientFactory.create(VnfcInstanceGroupCustomization.class);
144 collectionResourceInstanceGroupCustomizationClient = clientFactory
145 .create(CollectionResourceInstanceGroupCustomization.class);
146 instanceGroupClient = clientFactory.create(InstanceGroup.class);
147 networkCollectionResourceCustomizationClient = clientFactory.create(NetworkCollectionResourceCustomization.class);
148 collectionNetworkResourceCustomizationClient = clientFactory.create(CollectionNetworkResourceCustomization.class);
149 serviceRecipeClient = clientFactory.create(ServiceRecipe.class);
152 public NetworkCollectionResourceCustomization getNetworkCollectionResourceCustomizationByID(String modelCustomizationUUID) {
153 NetworkCollectionResourceCustomization networkCollectionResourceCustomization =
154 this.getSingleNetworkCollectionResourceCustomization(UriBuilder.fromUri(endpoint + "/networkCollectionResourceCustomization/" + modelCustomizationUUID).build());
155 if (networkCollectionResourceCustomization != null) {
156 networkCollectionResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
158 return networkCollectionResourceCustomization;
161 private NetworkCollectionResourceCustomization getSingleNetworkCollectionResourceCustomization(URI uri) {
162 return networkCollectionResourceCustomizationClient.get(uri);
165 public Service getServiceByID(String modelUUID) {
166 Service service = this.getSingleService(UriBuilder.fromUri(endpoint + "/service/" + modelUUID).build());
167 if (service != null) {
168 service.setModelUUID(modelUUID);
173 public BuildingBlockDetail getBuildingBlockDetail(String buildingBlockName) {
174 BuildingBlockDetail buildingBlockDetail = buildingBlockDetailClient
175 .get(UriBuilder.fromUri(endpoint + "/buildingBlockDetail/search/findOneByBuildingBlockName")
176 .queryParam("buildingBlockName", buildingBlockName).build());
177 if (buildingBlockDetail != null) {
178 buildingBlockDetail.setBuildingBlockName(buildingBlockName);
180 return buildingBlockDetail;
183 public CollectionNetworkResourceCustomization getCollectionNetworkResourceCustomizationByID(String modelCustomizationUUID) {
184 CollectionNetworkResourceCustomization collectionNetworkResourceCustomization =
185 this.getSingleCollectionNetworkResourceCustomization(
186 UriBuilder.fromUri(endpoint + "/collectionNetworkResourceCustomization/" + modelCustomizationUUID).build());
187 if (collectionNetworkResourceCustomization != null) {
188 collectionNetworkResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
190 return collectionNetworkResourceCustomization;
193 public InstanceGroup getInstanceGroupByModelUUID(String modelUUID) {
194 InstanceGroup instanceGroup = this
195 .getSingleInstanceGroup(UriBuilder.fromUri(endpoint + "/instanceGroup/" + modelUUID).build());
196 if (instanceGroup != null) {
197 instanceGroup.setModelUUID(modelUUID);
199 return instanceGroup;
202 public OrchestrationStatusStateTransitionDirective getOrchestrationStatusStateTransitionDirective(
203 ResourceType resourceType, OrchestrationStatus orchestrationStatus, OrchestrationAction targetAction) {
204 return orchestrationStatusStateTransitionDirectiveClient.get(UriBuilder
206 endpoint + "/orchestrationStatusStateTransitionDirective/search/findOneByResourceTypeAndOrchestrationStatusAndTargetAction")
207 .queryParam("resourceType", resourceType.name())
208 .queryParam("orchestrationStatus", orchestrationStatus.name())
209 .queryParam("targetAction", targetAction.name()).build());
212 public List<OrchestrationFlow> getOrchestrationFlowByAction(String action) {
214 .getMultipleOrchestrationFlows(UriBuilder.fromUri(endpoint + "/orchestrationFlow/search/findByAction")
215 .queryParam("COMPOSITE_ACTION", action).build());
218 public List<OrchestrationFlow> getAllOrchestrationFlows() {
219 return this.getMultipleOrchestrationFlows(UriBuilder.fromUri(endpoint + "/orchestrationFlow/").build());
222 private List<OrchestrationFlow> getMultipleOrchestrationFlows(URI uri) {
223 Iterable<OrchestrationFlow> orchIterator = orchestrationClient.getAll(uri);
224 List<OrchestrationFlow> orchList = new ArrayList<>();
225 Iterator<OrchestrationFlow> it = orchIterator.iterator();
226 it.forEachRemaining(orchList::add);
230 public List<VnfcInstanceGroupCustomization> getVnfcInstanceGroupsByVnfResourceCust(String modelCustomizationUUID) {
231 return this.getMultipleVnfcInstanceGroupCustomizations(
232 UriBuilder.fromUri(endpoint + "/vnfcInstanceGroupCustomization/search/findByModelCustomizationUUID")
233 .queryParam("MODEL_CUSTOMIZATION_UUID", modelCustomizationUUID).build());
236 public List<CollectionResourceInstanceGroupCustomization> getCollectionResourceInstanceGroupCustomizationByModelCustUUID(
237 String modelCustomizationUUID) {
238 return this.getMultipleCollectionResourceInstanceGroupCustomizations(UriBuilder
239 .fromUri(endpoint + "/collectionResourceInstanceGroupCustomization/search/findByModelCustomizationUUID")
240 .queryParam("MODEL_CUSTOMIZATION_UUID", modelCustomizationUUID).build());
243 private List<CollectionResourceInstanceGroupCustomization> getMultipleCollectionResourceInstanceGroupCustomizations(
245 Iterable<CollectionResourceInstanceGroupCustomization> collectionInstanceGroupCustIter = collectionResourceInstanceGroupCustomizationClient
247 List<CollectionResourceInstanceGroupCustomization> collectionInstanceGroupCustList = new ArrayList<>();
248 Iterator<CollectionResourceInstanceGroupCustomization> it = collectionInstanceGroupCustIter.iterator();
249 it.forEachRemaining(collectionInstanceGroupCustList::add);
250 return collectionInstanceGroupCustList;
253 private List<VnfcInstanceGroupCustomization> getMultipleVnfcInstanceGroupCustomizations(URI uri) {
254 Iterable<VnfcInstanceGroupCustomization> vnfcIterator = vnfcInstanceGroupCustomizationClient.getAll(uri);
255 List<VnfcInstanceGroupCustomization> vnfcList = new ArrayList<>();
256 Iterator<VnfcInstanceGroupCustomization> it = vnfcIterator.iterator();
257 it.forEachRemaining(vnfcList::add);
261 public VfModuleCustomization getVfModuleCustomizationByModelCuztomizationUUID(String modelCustomizationUUID) {
262 VfModuleCustomization vfModuleCust = this.getSingleVfModuleCustomization(
263 UriBuilder.fromUri(endpoint + "/vfModuleCustomization/" + modelCustomizationUUID).build());
264 if (vfModuleCust != null) {
265 vfModuleCust.setModelCustomizationUUID(modelCustomizationUUID);
270 public NorthBoundRequest getNorthBoundRequestByActionAndIsALaCarteAndRequestScope(String requestAction,
271 String resourceName, boolean aLaCarte) {
272 return this.getSingleNorthBoundRequest(UriBuilder
273 .fromUri(endpoint + "/northbound_request_ref_lookup/search/findOneByActionAndRequestScopeAndIsAlacarte")
274 .queryParam("ACTION", requestAction).queryParam("REQUEST_SCOPE", resourceName)
275 .queryParam("IS_ALACARTE", aLaCarte).build());
278 public RainyDayHandlerStatus getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(
279 String flowName, String serviceType, String vnfType, String errorCode, String workStep) {
280 return this.getSingleRainyDayHandlerStatus(UriBuilder
282 endpoint + "/rainy_day_handler_macro/search/findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep")
283 .queryParam("FLOW_NAME", flowName).queryParam("SERVICE_TYPE", serviceType)
284 .queryParam("VNF_TYPE", vnfType).queryParam("ERROR_CODE", errorCode).queryParam("WORK_STEP", workStep)
288 public ServiceRecipe getFirstByServiceModelUUIDAndAction(String modelUUID, String action){
289 return this.getSingleServiceRecipe(UriBuilder.fromUri(findFirstByServiceModelUUIDAndActionURI)
290 .queryParam(SERVICE_MODEL_UUID,modelUUID)
291 .queryParam(ACTION,action)
295 public Service getFirstByModelNameOrderByModelVersionDesc(String modelName){
296 return this.getSingleService(UriBuilder.fromUri(findFirstByModelNameURI)
297 .queryParam(MODEL_NAME,modelName)
302 private CollectionNetworkResourceCustomization getSingleCollectionNetworkResourceCustomization(URI uri) {
303 return collectionNetworkResourceCustomizationClient.get(uri);
306 private InstanceGroup getSingleInstanceGroup(URI uri) {
307 return instanceGroupClient.get(uri);
310 private Service getSingleService(URI uri) {
311 return serviceClient.get(uri);
314 private VfModuleCustomization getSingleVfModuleCustomization(URI uri) {
315 return vfModuleCustomizationClient.get(uri);
318 private NorthBoundRequest getSingleNorthBoundRequest(URI uri) {
319 return northBoundRequestClient.get(uri);
322 private RainyDayHandlerStatus getSingleRainyDayHandlerStatus(URI uri) {
323 return rainyDayHandlerStatusClient.get(uri);
326 private ServiceRecipe getSingleServiceRecipe(URI uri){
327 return serviceRecipeClient.get(uri);
330 public Service getServiceByModelVersionAndModelInvariantUUID(String modelVersion, String modelInvariantUUID) {
331 return this.getSingleService(
332 UriBuilder.fromUri(findByModelVersionAndModelInvariantUUIDURI)
333 .queryParam(MODEL_VERSION, modelVersion)
334 .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID).build());
338 public void setPortToEndpoint(String port) {
339 endpoint = endpoint + port;
343 public void removePortFromEndpoint() {
344 endpoint = endpoint.substring(0, endpoint.lastIndexOf(':') + 1);