Add collaboration feature
[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.activitylog.ActivityLogManager;
25 import org.openecomp.sdc.activitylog.ActivityLogManagerFactory;
26 import org.openecomp.sdc.activitylog.dao.type.ActivityLogEntity;
27 import org.openecomp.sdc.activitylog.dao.type.ActivityType;
28 import org.openecomp.sdc.logging.api.Logger;
29 import org.openecomp.sdc.logging.api.LoggerFactory;
30 import org.openecomp.sdc.logging.context.MdcUtil;
31 import org.openecomp.sdc.logging.messages.AuditMessages;
32 import org.openecomp.sdc.logging.types.LoggerServiceName;
33 import org.openecomp.sdc.vendorsoftwareproduct.ComponentManager;
34 import org.openecomp.sdc.vendorsoftwareproduct.ComponentManagerFactory;
35 import org.openecomp.sdc.vendorsoftwareproduct.ProcessManager;
36 import org.openecomp.sdc.vendorsoftwareproduct.ProcessManagerFactory;
37 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity;
38 import org.openecomp.sdc.versioning.dao.types.Version;
39 import org.openecomp.sdcrests.vendorsoftwareproducts.types.ProcessEntityDto;
40 import org.openecomp.sdcrests.vendorsoftwareproducts.types.ProcessRequestDto;
41 import org.openecomp.sdcrests.vsp.rest.ComponentProcesses;
42 import org.openecomp.sdcrests.vsp.rest.mapping.MapProcessEntityToProcessEntityDto;
43 import org.openecomp.sdcrests.vsp.rest.mapping.MapProcessRequestDtoToProcessEntity;
44 import org.openecomp.sdcrests.wrappers.GenericCollectionWrapper;
45 import org.openecomp.sdcrests.wrappers.StringWrapperResponse;
46 import org.springframework.context.annotation.Scope;
47 import org.springframework.stereotype.Service;
48
49 import javax.inject.Named;
50 import javax.ws.rs.core.Response;
51 import java.io.File;
52 import java.io.InputStream;
53 import java.util.Collection;
54
55 @Named
56 @Service("componentProcesses")
57 @Scope(value = "prototype")
58 public class ComponentProcessesImpl implements ComponentProcesses {
59
60   private ProcessManager processManager = ProcessManagerFactory.getInstance().createInterface();
61   private ComponentManager componentManager =
62       ComponentManagerFactory.getInstance().createInterface();
63   private ActivityLogManager activityLogManager =
64       ActivityLogManagerFactory.getInstance().createInterface();
65
66   private static final Logger logger =
67       LoggerFactory.getLogger(ComponentProcessesImpl.class);
68
69   @Override
70   public Response list(String vspId, String versionId, String componentId, String user) {
71     MdcUtil.initMdc(LoggerServiceName.List_Component_Processes.toString());
72     Version version = new Version(versionId);
73     validateComponentExistence(vspId, version, componentId, user);
74     Collection<ProcessEntity> processes = processManager.listProcesses(vspId, version, componentId);
75
76     MapProcessEntityToProcessEntityDto mapper = new MapProcessEntityToProcessEntityDto();
77     GenericCollectionWrapper<ProcessEntityDto> results = new GenericCollectionWrapper<>();
78     for (ProcessEntity process : processes) {
79       results.add(mapper.applyMapping(process, ProcessEntityDto.class));
80     }
81
82     return Response.ok(results).build();
83   }
84
85   @Override
86   public Response deleteList(String vspId, String versionId, String componentId, String user) {
87     MdcUtil.initMdc(LoggerServiceName.Delete_List_Component_Processes.toString());
88     Version version = new Version(versionId);
89     validateComponentExistence(vspId, version, componentId, user);
90     processManager.deleteProcesses(vspId, version, componentId);
91
92     return Response.ok().build();
93   }
94
95   @Override
96   public Response create(ProcessRequestDto request, String vspId, String versionId,
97                          String componentId, String user) {
98     MdcUtil.initMdc(LoggerServiceName.Create_Component_Processes.toString());
99     ProcessEntity process =
100         new MapProcessRequestDtoToProcessEntity().applyMapping(request, ProcessEntity.class);
101     process.setVspId(vspId);
102     process.setVersion(new Version(versionId));
103     process.setComponentId(componentId);
104
105     validateComponentExistence(vspId, process.getVersion(), componentId, user);
106     ProcessEntity createdProcess = processManager.createProcess(process);
107
108     return Response
109         .ok(createdProcess != null ? new StringWrapperResponse(createdProcess.getId()) : null)
110         .build();
111   }
112
113   @Override
114   public Response get(String vspId, String versionId, String componentId, String processId,
115                       String user) {
116     MdcUtil.initMdc(LoggerServiceName.Get_Component_Processes.toString());
117     Version version = new Version(versionId);
118     validateComponentExistence(vspId, version, componentId, user);
119     ProcessEntity process = processManager.getProcess(vspId, version, componentId, processId);
120     ProcessEntityDto result =
121         new MapProcessEntityToProcessEntityDto().applyMapping(process, ProcessEntityDto.class);
122     return Response.ok(result).build();
123   }
124
125   @Override
126   public Response delete(String vspId, String versionId, String componentId, String processId,
127                          String user) {
128     MdcUtil.initMdc(LoggerServiceName.Delete_Component_Processes.toString());
129     Version version = new Version(versionId);
130     validateComponentExistence(vspId, version, componentId, user);
131     processManager.deleteProcess(vspId, version, componentId, processId);
132     return Response.ok().build();
133   }
134
135   @Override
136   public Response update(ProcessRequestDto request, String vspId, String versionId,
137                          String componentId,
138                          String processId, String user) {
139     MdcUtil.initMdc(LoggerServiceName.Update_Component_Processes.toString());
140     ProcessEntity process =
141         new MapProcessRequestDtoToProcessEntity().applyMapping(request, ProcessEntity.class);
142     process.setVspId(vspId);
143     process.setVersion(new Version(versionId));
144     process.setComponentId(componentId);
145     process.setId(processId);
146     validateComponentExistence(vspId, process.getVersion(), componentId, user);
147     processManager.updateProcess(process);
148     return Response.ok().build();
149   }
150
151   @Override
152   public Response getUploadedFile(String vspId, String versionId, String componentId,
153                                   String processId, String user) {
154     MdcUtil.initMdc(LoggerServiceName.Get_Uploaded_File_Component_Processes.toString());
155     Version vspVersion = new Version(versionId);
156     validateComponentExistence(vspId, vspVersion, componentId, user);
157     File file = processManager.getProcessArtifact(vspId, vspVersion, componentId, processId);
158
159     Response.ResponseBuilder response = Response.ok(file);
160     if (file == null) {
161       return Response.status(Response.Status.NOT_FOUND).build();
162     }
163     response.header("Content-Disposition", "attachment; filename=" + file.getName());
164     return response.build();
165   }
166
167   @Override
168   public Response deleteUploadedFile(String vspId, String versionId, String componentId,
169                                      String processId,
170                                      String user) {
171     MdcUtil.initMdc(LoggerServiceName.Delete_Uploaded_File_Component_Processes.toString());
172     Version version = new Version(versionId);
173     validateComponentExistence(vspId, version, componentId, user);
174     processManager.deleteProcessArtifact(vspId, version, componentId, processId);
175     return Response.ok().build();
176   }
177
178   @Override
179   public Response uploadFile(Attachment attachment, String vspId, String versionId,
180                              String componentId,
181                              String processId, String user) {
182     MdcUtil.initMdc(LoggerServiceName.Upload_File_Component_Processes.toString());
183     logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.UPLOAD_PROCESS_ARTIFACT + vspId);
184     Version version = new Version(versionId);
185     validateComponentExistence(vspId, version, componentId, user);
186     processManager.uploadProcessArtifact(attachment.getObject(InputStream.class),
187         attachment.getContentDisposition().getParameter("filename"), vspId, version, componentId,
188         processId);
189
190
191     activityLogManager.logActivity(new ActivityLogEntity(vspId, version,
192         ActivityType.Upload_Artifact, user, true, "", ""));
193
194     return Response.ok().build();
195   }
196
197
198   private void validateComponentExistence(String vspId, Version version, String componentId,
199                                           String user) {
200     if (componentId == null) {
201       return;
202     }
203     componentManager.validateComponentExistence(vspId, version, componentId);
204   }
205 }