re base code
[sdc.git] / openecomp-be / api / openecomp-sdc-rest-webapp / vendor-software-products-rest / vendor-software-products-rest-services / src / main / java / org / openecomp / sdcrests / vsp / rest / services / ComponentProcessesImpl.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
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
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.cxf.jaxrs.ext.multipart.Attachment;
24 import org.openecomp.sdc.vendorsoftwareproduct.ComponentManager;
25 import org.openecomp.sdc.vendorsoftwareproduct.ComponentManagerFactory;
26 import org.openecomp.sdc.vendorsoftwareproduct.ProcessManager;
27 import org.openecomp.sdc.vendorsoftwareproduct.ProcessManagerFactory;
28 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity;
29 import org.openecomp.sdc.versioning.dao.types.Version;
30 import org.openecomp.sdcrests.vendorsoftwareproducts.types.ProcessEntityDto;
31 import org.openecomp.sdcrests.vendorsoftwareproducts.types.ProcessRequestDto;
32 import org.openecomp.sdcrests.vsp.rest.ComponentProcesses;
33 import org.openecomp.sdcrests.vsp.rest.mapping.MapProcessEntityToProcessEntityDto;
34 import org.openecomp.sdcrests.vsp.rest.mapping.MapProcessRequestDtoToProcessEntity;
35 import org.openecomp.sdcrests.wrappers.GenericCollectionWrapper;
36 import org.openecomp.sdcrests.wrappers.StringWrapperResponse;
37 import org.springframework.context.annotation.Scope;
38 import org.springframework.stereotype.Service;
39
40 import javax.inject.Named;
41 import javax.ws.rs.core.Response;
42 import java.io.File;
43 import java.io.InputStream;
44 import java.util.Collection;
45
46 @Named
47 @Service("componentProcesses")
48 @Scope(value = "prototype")
49 public class ComponentProcessesImpl implements ComponentProcesses {
50
51   private ProcessManager processManager = ProcessManagerFactory.getInstance().createInterface();
52   private ComponentManager componentManager =
53       ComponentManagerFactory.getInstance().createInterface();
54
55   @Override
56   public Response list(String vspId, String versionId, String componentId, String user) {
57
58     Version version = new Version(versionId);
59     validateComponentExistence(vspId, version, componentId, user);
60     Collection<ProcessEntity> processes = processManager.listProcesses(vspId, version, componentId);
61
62     MapProcessEntityToProcessEntityDto mapper = new MapProcessEntityToProcessEntityDto();
63     GenericCollectionWrapper<ProcessEntityDto> results = new GenericCollectionWrapper<>();
64     for (ProcessEntity process : processes) {
65       results.add(mapper.applyMapping(process, ProcessEntityDto.class));
66     }
67
68     return Response.ok(results).build();
69   }
70
71   @Override
72   public Response deleteList(String vspId, String versionId, String componentId, String user) {
73
74     Version version = new Version(versionId);
75     validateComponentExistence(vspId, version, componentId, user);
76     processManager.deleteProcesses(vspId, version, componentId);
77
78     return Response.ok().build();
79   }
80
81   @Override
82   public Response create(ProcessRequestDto request, String vspId, String versionId,
83                          String componentId, String user) {
84
85     ProcessEntity process =
86         new MapProcessRequestDtoToProcessEntity().applyMapping(request, ProcessEntity.class);
87     process.setVspId(vspId);
88     process.setVersion(new Version(versionId));
89     process.setComponentId(componentId);
90
91     validateComponentExistence(vspId, process.getVersion(), componentId, user);
92     ProcessEntity createdProcess = processManager.createProcess(process);
93
94     return Response
95         .ok(createdProcess != null ? new StringWrapperResponse(createdProcess.getId()) : null)
96         .build();
97   }
98
99   @Override
100   public Response get(String vspId, String versionId, String componentId, String processId,
101                       String user) {
102
103     Version version = new Version(versionId);
104     validateComponentExistence(vspId, version, componentId, user);
105     ProcessEntity process = processManager.getProcess(vspId, version, componentId, processId);
106     ProcessEntityDto result =
107         new MapProcessEntityToProcessEntityDto().applyMapping(process, ProcessEntityDto.class);
108     return Response.ok(result).build();
109   }
110
111   @Override
112   public Response delete(String vspId, String versionId, String componentId, String processId,
113                          String user) {
114
115     Version version = new Version(versionId);
116     validateComponentExistence(vspId, version, componentId, user);
117     processManager.deleteProcess(vspId, version, componentId, processId);
118     return Response.ok().build();
119   }
120
121   @Override
122   public Response update(ProcessRequestDto request, String vspId, String versionId,
123                          String componentId,
124                          String processId, String user) {
125
126     ProcessEntity process =
127         new MapProcessRequestDtoToProcessEntity().applyMapping(request, ProcessEntity.class);
128     process.setVspId(vspId);
129     process.setVersion(new Version(versionId));
130     process.setComponentId(componentId);
131     process.setId(processId);
132     validateComponentExistence(vspId, process.getVersion(), componentId, user);
133     processManager.updateProcess(process);
134     return Response.ok().build();
135   }
136
137   @Override
138   public Response getUploadedFile(String vspId, String versionId, String componentId,
139                                   String processId, String user) {
140
141     Version vspVersion = new Version(versionId);
142     validateComponentExistence(vspId, vspVersion, componentId, user);
143     File file = processManager.getProcessArtifact(vspId, vspVersion, componentId, processId);
144
145     Response.ResponseBuilder response = Response.ok(file);
146     if (file == null) {
147       return Response.status(Response.Status.NOT_FOUND).build();
148     }
149     response.header("Content-Disposition", "attachment; filename=" + file.getName());
150     return response.build();
151   }
152
153   @Override
154   public Response deleteUploadedFile(String vspId, String versionId, String componentId,
155                                      String processId,
156                                      String user) {
157
158     Version version = new Version(versionId);
159     validateComponentExistence(vspId, version, componentId, user);
160     processManager.deleteProcessArtifact(vspId, version, componentId, processId);
161     return Response.ok().build();
162   }
163
164   @Override
165   public Response uploadFile(Attachment attachment, String vspId, String versionId,
166                              String componentId,
167                              String processId, String user) {
168
169     Version version = new Version(versionId);
170     validateComponentExistence(vspId, version, componentId, user);
171     processManager.uploadProcessArtifact(attachment.getObject(InputStream.class),
172         attachment.getContentDisposition().getParameter("filename"), vspId, version, componentId,
173         processId);
174
175     return Response.ok().build();
176   }
177
178
179   private void validateComponentExistence(String vspId, Version version, String componentId,
180                                           String user) {
181     if (componentId == null) {
182       return;
183     }
184     componentManager.validateComponentExistence(vspId, version, componentId);
185   }
186 }