1eea42803bee28eb25437b43079c7a5d8f88b39b
[sdc.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2019 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
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
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=========================================================
19  */
20
21 package org.openecomp.sdcrests.vsp.rest.services;
22
23 import org.apache.commons.collections4.CollectionUtils;
24 import org.openecomp.sdc.vendorsoftwareproduct.ComponentManager;
25 import org.openecomp.sdc.vendorsoftwareproduct.ComponentManagerFactory;
26 import org.openecomp.sdc.vendorsoftwareproduct.ComputeManager;
27 import org.openecomp.sdc.vendorsoftwareproduct.ComputeManagerFactory;
28 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComputeEntity;
29 import org.openecomp.sdc.vendorsoftwareproduct.types.CompositionEntityResponse;
30 import org.openecomp.sdc.vendorsoftwareproduct.types.ListComputeResponse;
31 import org.openecomp.sdc.vendorsoftwareproduct.types.QuestionnaireResponse;
32 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityValidationData;
33 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComputeData;
34 import org.openecomp.sdc.versioning.dao.types.Version;
35 import org.openecomp.sdcrests.vendorsoftwareproducts.types.*;
36 import org.openecomp.sdcrests.vsp.rest.Compute;
37 import org.openecomp.sdcrests.vsp.rest.mapping.*;
38 import org.openecomp.sdcrests.wrappers.GenericCollectionWrapper;
39 import org.springframework.context.annotation.Scope;
40 import org.springframework.stereotype.Service;
41
42 import javax.inject.Named;
43 import javax.ws.rs.core.Response;
44 import java.util.Collection;
45
46 @Named
47 @Service("computes")
48 @Scope(value = "prototype")
49 public class ComputeImpl implements Compute {
50   private final ComputeManager computetManager;
51   private final ComponentManager componentManager;
52
53   public ComputeImpl() {
54     this.computetManager = ComputeManagerFactory.getInstance().createInterface();
55     this.componentManager = ComponentManagerFactory.getInstance().createInterface();
56   }
57
58   public ComputeImpl(ComputeManager computetManager, ComponentManager componentManager) {
59     this.computetManager = computetManager;
60     this.componentManager = componentManager;
61   }
62
63   @Override
64   public Response list(String vspId, String versionId, String componentId, String user) {
65
66     Version version = new Version(versionId);
67     componentManager.validateComponentExistence(vspId, version, componentId);
68     Collection<ListComputeResponse> computes =
69         computetManager.listComputes(vspId, version, componentId);
70
71     MapComputeEntityToComputeDto mapper = new MapComputeEntityToComputeDto();
72     GenericCollectionWrapper<ComputeDto> results = new GenericCollectionWrapper<>();
73     for (ListComputeResponse compute : computes) {
74       results.add(mapper.applyMapping(compute, ComputeDto.class));
75     }
76
77     return Response.ok(results).build();
78   }
79
80   @Override
81   public Response get(String vspId, String versionId, String componentId, String computeId,
82                       String user) {
83
84     Version version = new Version(versionId);
85     componentManager.validateComponentExistence(vspId, version, componentId);
86     CompositionEntityResponse<ComputeData> response =
87         computetManager.getCompute(vspId, version, componentId, computeId);
88
89     CompositionEntityResponseDto<ComputeDetailsDto> responseDto = new
90         CompositionEntityResponseDto<>();
91     new MapCompositionEntityResponseToDto<>(new MapComputeDataToComputeDetailsDto(),
92         ComputeDetailsDto.class).doMapping(response, responseDto);
93     return Response.ok(responseDto).build();
94   }
95
96   @Override
97   public Response create(ComputeDetailsDto request, String vspId, String versionId,
98                          String componentId, String user) {
99
100     ComputeEntity compute = new MapComputeDetailsDtoToComputeEntity().applyMapping(request,
101         ComputeEntity.class);
102     compute.setVspId(vspId);
103     compute.setVersion(new Version(versionId));
104     compute.setComponentId(componentId);
105     componentManager.validateComponentExistence(vspId, compute.getVersion(), componentId);
106
107     ComputeEntity createdCompute = computetManager.createCompute(compute);
108
109     MapComputeEntityToComputeCreationDto mapper = new MapComputeEntityToComputeCreationDto();
110     ComputeCreationDto createdComputeDto =
111         mapper.applyMapping(createdCompute, ComputeCreationDto.class);
112     return Response.ok(createdComputeDto != null ? createdComputeDto : null).build();
113   }
114
115   @Override
116   public Response update(ComputeDetailsDto request, String vspId, String versionId,
117                          String componentId, String computeFlavorId, String user) {
118
119     ComputeEntity compute =
120         new MapComputeDetailsDtoToComputeEntity().applyMapping(request, ComputeEntity.class);
121     compute.setVspId(vspId);
122     compute.setVersion(new Version(versionId));
123     compute.setComponentId(componentId);
124     compute.setId(computeFlavorId);
125
126     componentManager.validateComponentExistence(vspId, compute.getVersion(), componentId);
127     CompositionEntityValidationData validationData = computetManager.updateCompute(compute);
128     return validationData != null && CollectionUtils.isNotEmpty(validationData.getErrors())
129         ? Response.status(Response.Status.EXPECTATION_FAILED).entity(
130         new MapCompositionEntityValidationDataToDto().applyMapping(validationData,
131             CompositionEntityValidationDataDto.class)).build() : Response.ok().build();
132   }
133
134   @Override
135   public Response delete(String vspId, String versionId, String componentId, String computeFlavorId,
136                          String user) {
137
138     Version version = new Version(versionId);
139     componentManager.validateComponentExistence(vspId, version, componentId);
140     computetManager.deleteCompute(vspId, version, componentId, computeFlavorId);
141     return Response.ok().build();
142   }
143
144   @Override
145   public Response getQuestionnaire(String vspId, String versionId, String componentId,
146                                    String computeFlavorId, String user) {
147
148     Version version = new Version(versionId);
149     componentManager.validateComponentExistence(vspId, version, componentId);
150     QuestionnaireResponse questionnaireResponse =
151         computetManager.getComputeQuestionnaire(vspId, version, componentId, computeFlavorId);
152
153     QuestionnaireResponseDto result = new MapQuestionnaireResponseToQuestionnaireResponseDto()
154         .applyMapping(questionnaireResponse, QuestionnaireResponseDto.class);
155     return Response.ok(result).build();
156   }
157
158   @Override
159   public Response updateQuestionnaire(String questionnaireData, String vspId, String versionId,
160                                       String componentId, String computeFlavorId, String user) {
161
162     Version version = new Version(versionId);
163     componentManager.validateComponentExistence(vspId, version, componentId);
164     computetManager.updateComputeQuestionnaire(vspId, version, componentId, computeFlavorId,
165         questionnaireData);
166     return Response.ok().build();
167   }
168 }