4df00fd74aca9b412c1a32db7a295f0ca3b6b148
[sdc.git] /
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.sdc.vendorsoftwareproduct.impl;
22
23 import org.openecomp.core.util.UniqueValueUtil;
24 import org.openecomp.core.utilities.file.FileUtils;
25 import org.openecomp.sdc.activityLog.ActivityLogManager;
26 import org.openecomp.sdc.activitylog.dao.type.ActivityLogEntity;
27 import org.openecomp.sdc.common.errors.CoreException;
28 import org.openecomp.sdc.datatypes.error.ErrorLevel;
29 import org.openecomp.sdc.logging.api.Logger;
30 import org.openecomp.sdc.logging.api.LoggerFactory;
31 import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
32 import org.openecomp.sdc.logging.context.impl.MdcDataErrorMessage;
33 import org.openecomp.sdc.logging.types.LoggerConstants;
34 import org.openecomp.sdc.logging.types.LoggerErrorCode;
35 import org.openecomp.sdc.logging.types.LoggerTragetServiceName;
36 import org.openecomp.sdc.vendorsoftwareproduct.ProcessManager;
37 import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants;
38 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductDao;
39 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity;
40 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
41 import org.openecomp.sdc.vendorsoftwareproduct.errors.UploadInvalidErrorBuilder;
42 import org.openecomp.sdc.versioning.VersioningUtil;
43 import org.openecomp.sdc.versioning.dao.types.Version;
44 import org.openecomp.sdcrests.activitylog.types.ActivityType;
45
46 import java.io.File;
47 import java.io.FileOutputStream;
48 import java.io.IOException;
49 import java.io.InputStream;
50 import java.util.Collection;
51
52 public class ProcessManagerImpl implements ProcessManager {
53   private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
54   private ActivityLogManager activityLogManager;
55
56   private VendorSoftwareProductDao vendorSoftwareProductDao;
57
58   private final Logger log = (Logger) LoggerFactory.getLogger(this.getClass().getName());
59
60   public ProcessManagerImpl(VendorSoftwareProductDao vendorSoftwareProductDao, ActivityLogManager activityLogManager) {
61     this.vendorSoftwareProductDao = vendorSoftwareProductDao;
62     this.activityLogManager = activityLogManager;
63   }
64
65   @Override
66   public Collection<ProcessEntity> listProcesses(String vspId, Version version,
67                                                  String componentId,
68                                                  String user) {
69     mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId, componentId);
70     mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId, componentId);
71
72     return vendorSoftwareProductDao.listProcesses(vspId, version, componentId);
73   }
74
75   @Override
76   public void deleteProcesses(String vspId, Version version, String componentId, String user) {
77     mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId, componentId);
78
79     Collection<ProcessEntity> processes =
80         vendorSoftwareProductDao.listProcesses(vspId, version, componentId);
81
82     if (!processes.isEmpty()) {
83       for (ProcessEntity process : processes) {
84         deleteUniqueValue(process.getVspId(), process.getVersion(), process.getComponentId(),
85             process.getName());
86       }
87
88       vendorSoftwareProductDao.deleteProcesses(vspId, version, componentId);
89     }
90     mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId, componentId);
91   }
92
93   @Override
94   public ProcessEntity createProcess(ProcessEntity process, String user) {
95     mdcDataDebugMessage.debugEntryMessage("VSP id, component id", process.getId(),
96         process.getComponentId());
97     validateUniqueName(process.getVspId(), process.getVersion(), process.getComponentId(),
98         process.getName());
99     //process.setId(CommonMethods.nextUuId());
100
101     vendorSoftwareProductDao.createProcess(process);
102     createUniqueName(process.getVspId(), process.getVersion(), process.getComponentId(),
103         process.getName());
104
105     mdcDataDebugMessage.debugExitMessage("VSP id, component id", process.getId(),
106         process.getComponentId());
107
108     return process;
109   }
110
111
112   @Override
113   public ProcessEntity getProcess(String vspId, Version version, String componentId,
114                                   String processId, String user) {
115     mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId, componentId);
116
117     ProcessEntity retrieved =
118         vendorSoftwareProductDao.getProcess(vspId, version, componentId, processId);
119     validateProcessExistence(vspId, version, componentId, processId, retrieved);
120
121     mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId, componentId);
122
123     return retrieved;
124   }
125
126   @Override
127   public void updateProcess(ProcessEntity process, String user) {
128     mdcDataDebugMessage.debugEntryMessage("VSP id, component id", process.getId(),
129         process.getComponentId());
130
131     ProcessEntity retrieved = vendorSoftwareProductDao
132         .getProcess(process.getVspId(), process.getVersion(), process.getComponentId(),
133             process.getId());
134     validateProcessExistence(process.getVspId(), process.getVersion(), process.getComponentId(),
135         process.getId(), retrieved);
136
137     updateUniqueName(process.getVspId(), process.getVersion(), process.getComponentId(),
138         retrieved.getName(), process.getName());
139     vendorSoftwareProductDao.updateProcess(process);
140
141     mdcDataDebugMessage.debugExitMessage("VSP id, component id", process.getId(),
142         process.getComponentId());
143   }
144
145   @Override
146   public void deleteProcess(String vspId, Version version, String componentId, String processId,
147                             String user) {
148     mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId, componentId);
149
150     ProcessEntity retrieved =
151         vendorSoftwareProductDao.getProcess(vspId, version, componentId, processId);
152     validateProcessExistence(vspId, version, componentId, processId, retrieved);
153
154     vendorSoftwareProductDao.deleteProcess(vspId, version, componentId, processId);
155     deleteUniqueValue(retrieved.getVspId(), retrieved.getVersion(), retrieved.getComponentId(),
156         retrieved.getName());
157
158     mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId, componentId);
159   }
160
161
162   @Override
163   public File getProcessArtifact(String vspId, Version version, String componentId,
164                                  String processId, String user) {
165     mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId, componentId);
166
167     ProcessEntity retrieved =
168         vendorSoftwareProductDao.getProcessArtifact(vspId, version, componentId, processId);
169     validateProcessArtifactExistence(vspId, version, componentId, processId, retrieved);
170
171     File file = new File(String.format("%s_%s_%s", vspId, componentId, processId));
172     try {
173       FileOutputStream fos = new FileOutputStream(file);
174       fos.write(retrieved.getArtifact().array());
175       fos.close();
176     } catch (IOException exception) {
177       log.debug("", exception);
178       MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
179           LoggerTragetServiceName.GET_PROCESS_ARTIFACT, ErrorLevel.ERROR.name(),
180           LoggerErrorCode.DATA_ERROR.getErrorCode(), "Can't get process artifact");
181       throw new CoreException(new UploadInvalidErrorBuilder().build());
182     }
183
184     mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId, componentId);
185
186     return file;
187   }
188
189   @Override
190   public void deleteProcessArtifact(String vspId, Version version, String componentId,
191                                     String processId, String user) {
192     mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId, componentId);
193
194     ProcessEntity retrieved =
195         vendorSoftwareProductDao.getProcessArtifact(vspId, version, componentId, processId);
196     validateProcessArtifactExistence(vspId, version, componentId, processId, retrieved);
197
198     vendorSoftwareProductDao.deleteProcessArtifact(vspId, version, componentId, processId);
199
200     mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId, componentId);
201   }
202
203   @Override
204   public void uploadProcessArtifact(InputStream artifactFile, String artifactFileName, String vspId,
205                                     Version version, String componentId, String processId,
206                                     String user) {
207     mdcDataDebugMessage.debugEntryMessage("VSP id, component id", vspId, componentId);
208
209     ProcessEntity retrieved =
210         vendorSoftwareProductDao.getProcess(vspId, version, componentId, processId);
211     validateProcessExistence(vspId, version, componentId, processId, retrieved);
212
213     if (artifactFile == null) {
214       MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
215           LoggerTragetServiceName.UPLOAD_PROCESS_ARTIFACT, ErrorLevel.ERROR.name(),
216           LoggerErrorCode.DATA_ERROR.getErrorCode(), "Can't upload process artifact");
217       throw new CoreException(new UploadInvalidErrorBuilder().build());
218     }
219
220     byte[] artifact;
221     try {
222       artifact = FileUtils.toByteArray(artifactFile);
223     } catch (RuntimeException exception) {
224       log.debug("", exception);
225       MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
226           LoggerTragetServiceName.UPLOAD_PROCESS_ARTIFACT, ErrorLevel.ERROR.name(),
227           LoggerErrorCode.DATA_ERROR.getErrorCode(), "Can't upload process artifact");
228       throw new CoreException(new UploadInvalidErrorBuilder().build());
229     }
230
231     vendorSoftwareProductDao.uploadProcessArtifact(vspId, version, componentId, processId, artifact,
232             artifactFileName);
233     ActivityLogEntity activityLogEntity = new ActivityLogEntity(vspId, String.valueOf(version.getMajor()+1),
234         ActivityType.UPLOAD_MONITORING_FILE.toString(), user, true, "", "");
235     activityLogManager.addActionLog(activityLogEntity, user);
236
237     mdcDataDebugMessage.debugExitMessage("VSP id, component id", vspId, componentId);
238   }
239
240
241   private void validateProcessExistence(String vspId, Version version, String componentId,
242                                         String processId, ProcessEntity retrieved) {
243     mdcDataDebugMessage.debugEntryMessage("VSP id, component id, process id", vspId, componentId,
244         processId);
245
246     if (retrieved != null) {
247       return;
248     }
249     VersioningUtil.validateEntityExistence(retrieved,
250         new ProcessEntity(vspId, version, componentId, processId),
251         VspDetails.ENTITY_TYPE);//todo retrieved is always null ??
252
253     mdcDataDebugMessage.debugExitMessage("VSP id, component id, process id", vspId, componentId,
254         processId);
255   }
256
257   private void validateProcessArtifactExistence(String vspId, Version version, String componentId,
258                                                 String processId, ProcessEntity retrieved) {
259     mdcDataDebugMessage.debugEntryMessage("VSP id, component id, process id", vspId, componentId,
260         processId);
261
262     if (retrieved != null) {
263       VersioningUtil.validateEntityExistence(retrieved.getArtifact(),
264           new ProcessEntity(vspId, version, componentId, processId),
265           VspDetails.ENTITY_TYPE);
266     } else {
267       VersioningUtil.validateEntityExistence(retrieved,
268           new ProcessEntity(vspId, version, componentId, processId),
269           VspDetails.ENTITY_TYPE); //todo retrieved is always null ??
270     }
271
272     mdcDataDebugMessage.debugExitMessage("VSP id, component id, process id", vspId, componentId,
273         processId);
274   }
275
276
277   protected void validateUniqueName(String vspId, Version version, String componentId,
278                                     String processName) {
279     UniqueValueUtil.validateUniqueValue(VendorSoftwareProductConstants.UniqueValues.PROCESS_NAME,
280         vspId, version.toString(), componentId, processName);
281   }
282
283   protected void createUniqueName(String vspId, Version version, String componentId,
284                                   String processName) {
285     UniqueValueUtil
286         .createUniqueValue(VendorSoftwareProductConstants.UniqueValues.PROCESS_NAME, vspId,
287             version.toString(), componentId, processName);
288   }
289
290   protected void updateUniqueName(String vspId, Version version, String componentId,
291                                   String oldProcessName, String newProcessName) {
292     UniqueValueUtil
293         .updateUniqueValue(VendorSoftwareProductConstants.UniqueValues.PROCESS_NAME, oldProcessName,
294             newProcessName, vspId, version.toString(), componentId);
295   }
296
297   protected void deleteUniqueValue(String vspId, Version version, String componentId,
298                                    String processName) {
299     UniqueValueUtil
300         .deleteUniqueValue(VendorSoftwareProductConstants.UniqueValues.PROCESS_NAME, vspId,
301             version.toString(), componentId, processName);
302   }
303 }