Chore: Fix typo in INFO
[externalapi/nbi.git] / src / main / java / org / onap / nbi / apis / servicecatalog / ServiceSpecificationService.java
1 /**
2  * Copyright (c) 2018 Orange
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5  * in compliance with the License. You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software distributed under the License
10  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11  * or implied. See the License for the specific language governing permissions and limitations under
12  * the License.
13  */
14
15 package org.onap.nbi.apis.servicecatalog;
16
17 import java.io.File;
18 import java.io.IOException;
19 import java.nio.file.Path;
20 import java.util.*;
21
22 import com.fasterxml.jackson.databind.ObjectMapper;
23 import org.apache.commons.io.FileUtils;
24 import org.onap.nbi.apis.servicecatalog.jolt.FindServiceSpecJsonTransformer;
25 import org.onap.nbi.apis.servicecatalog.jolt.GetServiceSpecJsonTransformer;
26 import org.onap.nbi.apis.servicecatalog.jolt.PostServiceResponseSpecJsonTransformer;
27 import org.onap.nbi.apis.servicecatalog.jolt.PostServiceSpecJsonTransformer;
28 import org.onap.nbi.apis.servicecatalog.model.ServiceSpecificationRequest;
29 import org.onap.nbi.apis.serviceorder.ServiceCatalogUrl;
30 import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException;
31 import org.slf4j.Logger;
32 import org.slf4j.LoggerFactory;
33 import org.springframework.beans.factory.annotation.Autowired;
34 import org.springframework.stereotype.Service;
35 import org.springframework.util.CollectionUtils;
36 import org.springframework.util.MultiValueMap;
37
38 @Service
39 public class ServiceSpecificationService {
40
41     @Autowired
42     SdcClient sdcClient;
43
44     @Autowired
45     GetServiceSpecJsonTransformer getServiceSpecJsonTransformer;
46
47     @Autowired
48     FindServiceSpecJsonTransformer findServiceSpecJsonTransformer;
49
50     // Change for processing POST request
51     @Autowired
52     PostServiceSpecJsonTransformer postServiceSpecJsonTransformer;
53
54     @Autowired
55     PostServiceResponseSpecJsonTransformer postServiceResponseSpecJsonTransformer ;
56
57     @Autowired
58     ToscaInfosProcessor toscaInfosProcessor;
59
60     @Autowired
61     private ServiceCatalogUrl serviceCatalogUrl;
62
63     @Autowired
64     ServiceSpecificationDBManager serviceSpecificationDBManager;
65
66     private static final Logger LOGGER = LoggerFactory.getLogger(ServiceSpecificationService.class);
67
68     public Map get(String serviceSpecId) {
69         if (serviceSpecificationDBManager.checkServiceSpecExistence(serviceSpecId)) {
70             return serviceSpecificationDBManager.getServiceSpecification(serviceSpecId);
71         } else {
72             Map sdcResponse = sdcClient.callGet(serviceSpecId);
73             LinkedHashMap serviceCatalogResponse = (LinkedHashMap) getServiceSpecJsonTransformer.transform(sdcResponse);
74             String toscaModelUrl = (String) sdcResponse.get("toscaModelURL");
75             String serviceId = (String) sdcResponse.get("id");
76             File toscaFile = sdcClient.callGetWithAttachment(toscaModelUrl);
77             Path pathToToscaCsar = toscaFile.toPath().toAbsolutePath();
78             try {
79                 toscaInfosProcessor.buildAndSaveResponseWithSdcToscaParser(pathToToscaCsar, serviceCatalogResponse);
80                 serviceSpecificationDBManager.saveCatalogResponse(serviceCatalogResponse);
81             } catch (SdcToscaParserException e) {
82                 LOGGER.debug("unable to build response from tosca csar using sdc-parser, partial response : "
83                         + pathToToscaCsar.toString() + " " + e.getMessage());
84             }
85             try {
86                 if (toscaFile != null) {
87                     LOGGER.debug("deleting tosca archive : " + toscaFile.getName());
88                     FileUtils.forceDelete(toscaFile);
89                 }
90             } catch (IOException e) {
91                 LOGGER.error("unable to delete temp directory tosca file for id : " + serviceId, e);
92             }
93             return serviceCatalogResponse;
94         }
95     }
96
97     public List<LinkedHashMap> find(MultiValueMap<String, String> parametersMap) {
98         List<LinkedHashMap> sdcResponse = sdcClient.callFind(parametersMap);
99         List<LinkedHashMap> serviceCatalogResponse = new ArrayList<>();
100         if (!CollectionUtils.isEmpty(sdcResponse)) {
101             serviceCatalogResponse = findServiceSpecJsonTransformer.transform(sdcResponse);
102         }
103         return serviceCatalogResponse;
104     }
105
106     public String getInputSchema(String serviceSpecId) {
107         if (serviceSpecificationDBManager.checkInputSchemaExistence(serviceSpecId)) {
108             return serviceSpecificationDBManager.getInputSchema(serviceSpecId);
109         } else {
110             return null;
111         }
112     }
113
114     public Map create(String userId, ServiceSpecificationRequest specRequest) {
115         ObjectMapper mapper = new ObjectMapper();
116         LinkedHashMap specRequestMap = mapper.convertValue(specRequest, LinkedHashMap.class);
117         HashMap<Object, Object> serviceCatalogInput = (HashMap) postServiceSpecJsonTransformer.transform(specRequestMap);
118
119         //Call SDC Post API
120         Map sdcResponse = sdcClient.callPost(serviceCatalogInput,userId);
121         LOGGER.info("SDC response " + sdcResponse);
122         //Transform SDC Response
123         LinkedHashMap<Object,Object> serviceCatalogResponse =null;
124         if (!CollectionUtils.isEmpty(sdcResponse)) {
125             serviceCatalogResponse = (LinkedHashMap)postServiceResponseSpecJsonTransformer.transform(sdcResponse);
126         }
127         return serviceCatalogResponse;
128     }
129
130 }