2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.openecomp.sdc.healing.healers;
23 import org.apache.commons.collections4.CollectionUtils;
24 import org.openecomp.core.model.dao.ServiceModelDao;
25 import org.openecomp.core.model.dao.ServiceModelDaoFactory;
26 import org.openecomp.core.model.types.ServiceElement;
27 import org.openecomp.core.translator.datatypes.TranslatorOutput;
28 import org.openecomp.core.utilities.file.FileContentHandler;
29 import org.openecomp.core.utilities.json.JsonUtil;
30 import org.openecomp.core.utilities.orchestration.OnboardingTypesEnum;
31 import org.openecomp.sdc.common.utils.CommonUtil;
32 import org.openecomp.sdc.common.utils.SdcCommon;
33 import org.openecomp.sdc.healing.interfaces.Healer;
34 import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
35 import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
36 import org.openecomp.sdc.translator.services.heattotosca.HeatToToscaUtil;
37 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentDao;
38 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentDaoFactory;
39 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComputeDao;
40 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComputeDaoFactory;
41 import org.openecomp.sdc.vendorsoftwareproduct.dao.DeploymentFlavorDao;
42 import org.openecomp.sdc.vendorsoftwareproduct.dao.DeploymentFlavorDaoFactory;
43 import org.openecomp.sdc.vendorsoftwareproduct.dao.ImageDao;
44 import org.openecomp.sdc.vendorsoftwareproduct.dao.ImageDaoFactory;
45 import org.openecomp.sdc.vendorsoftwareproduct.dao.NetworkDao;
46 import org.openecomp.sdc.vendorsoftwareproduct.dao.NetworkDaoFactory;
47 import org.openecomp.sdc.vendorsoftwareproduct.dao.NicDao;
48 import org.openecomp.sdc.vendorsoftwareproduct.dao.NicDaoFactory;
49 import org.openecomp.sdc.vendorsoftwareproduct.dao.OrchestrationTemplateDao;
50 import org.openecomp.sdc.vendorsoftwareproduct.dao.OrchestrationTemplateDaoFactory;
51 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
52 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComputeEntity;
53 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ImageEntity;
54 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity;
55 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity;
56 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.UploadDataEntity;
57 import org.openecomp.sdc.vendorsoftwareproduct.factory.CompositionDataExtractorFactory;
58 import org.openecomp.sdc.vendorsoftwareproduct.factory.CompositionEntityDataManagerFactory;
59 import org.openecomp.sdc.vendorsoftwareproduct.services.composition.CompositionDataExtractor;
60 import org.openecomp.sdc.vendorsoftwareproduct.services.composition.CompositionEntityDataManager;
61 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Component;
62 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.ComponentData;
63 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionData;
64 import org.openecomp.sdc.versioning.dao.types.Version;
66 import java.io.IOException;
67 import java.util.Collection;
69 import java.util.Objects;
70 import java.util.Optional;
72 public class CompositionDataHealer implements Healer {
73 private static final Version VERSION00 = new Version(0, 0);
74 private static final Version VERSION01 = new Version(0, 1);
75 private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
77 private static final OrchestrationTemplateDao orchestrationTemplateDataDao =
78 OrchestrationTemplateDaoFactory.getInstance().createInterface();
80 private static ComponentDao componentDao = ComponentDaoFactory.getInstance().createInterface();
81 private static NicDao nicDao = NicDaoFactory.getInstance().createInterface();
82 private static NetworkDao networkDao = NetworkDaoFactory.getInstance().createInterface();
83 private static ComputeDao computeDao = ComputeDaoFactory.getInstance().createInterface();
84 private static DeploymentFlavorDao deloymentFlavorDao = DeploymentFlavorDaoFactory.getInstance()
86 private static ImageDao imageDao = ImageDaoFactory.getInstance().createInterface();
88 private static final ServiceModelDao<ToscaServiceModel, ServiceElement> serviceModelDao =
89 ServiceModelDaoFactory.getInstance().createInterface();
90 private static CompositionDataExtractor compositionDataExtractor =
91 CompositionDataExtractorFactory.getInstance().createInterface();
92 private static CompositionEntityDataManager compositionEntityDataManager =
93 CompositionEntityDataManagerFactory.getInstance().createInterface();
95 public CompositionDataHealer() {
99 public Optional<CompositionData> heal(Map<String, Object> healingParams) throws IOException {
100 mdcDataDebugMessage.debugEntryMessage(null);
102 String vspId = (String) healingParams.get(SdcCommon.VSP_ID);
103 Version version = VERSION00.equals(healingParams.get(SdcCommon.VERSION))
105 : (Version) healingParams.get(SdcCommon.VERSION);
107 Collection<ComponentEntity> componentEntities =
108 componentDao.list(new ComponentEntity(vspId, version, null));
109 Collection<NicEntity> nicEntities = nicDao.listByVsp(vspId, version);
110 Collection<NetworkEntity> networkEntities =
111 networkDao.list(new NetworkEntity(vspId, version, null));
113 Optional<ToscaServiceModel> serviceModelForHealing = getServiceModelForHealing(vspId, version);
114 CompositionData compositionData = null;
115 if (!doesVspNeedCompositionDataHealing(vspId, version, componentEntities, networkEntities,
117 updateComponentsDisplayNames(componentEntities);
118 mdcDataDebugMessage.debugExitMessage(null, null);
119 //return Optional.empty();
121 if (!serviceModelForHealing.isPresent()) {
122 mdcDataDebugMessage.debugExitMessage(null, null);
123 return Optional.empty();
125 compositionData = healCompositionData(vspId, version, serviceModelForHealing);
128 getCompositionDataForHealing(vspId, version, serviceModelForHealing.get());
129 HealNfodData(vspId, version, compositionData);
130 mdcDataDebugMessage.debugExitMessage(null, null);
131 return Optional.of(compositionData);
134 private boolean doesVspNeedCompositionDataHealing(String vspId, Version version,
135 Collection<ComponentEntity> componentEntities,
136 Collection<NetworkEntity> networkEntities,
137 Collection<NicEntity> nicEntities) {
139 return (CollectionUtils.isEmpty(componentEntities) && CollectionUtils.isEmpty(nicEntities) &&
140 CollectionUtils.isEmpty(networkEntities) );
142 // mdcDataDebugMessage.debugEntryMessage(null, null);
144 //// ToscaServiceModel toscaServiceModel;
146 // ByteBuffer contentData = uploadData.getContentData();
147 // FileContentHandler fileContentHandler = CommonUtil.validateAndUploadFileContent(uploadData
148 // .getContentData().array());
152 // TranslatorOutput translatorOutput =
153 // HeatToToscaUtil.loadAndTranslateTemplateData(fileContentHandler);
154 // ToscaServiceModel toscaServiceModel = translatorOutput.getToscaServiceModel();
156 //// toscaServiceModel = enrichedServiceModelDao.getServiceModel(vspId, version);
158 // mdcDataDebugMessage.debugExitMessage(null, null);
159 // return toscaServiceModel;
163 private void HealNfodData(String vspId, Version version, CompositionData compositionData) {
164 Collection<ComponentEntity> componentEntities;
165 /*componentEntities =
166 vendorSoftwareProductDao.listComponents(vspId, version);*/
167 componentEntities = componentDao.list(new ComponentEntity(vspId, version, null));
169 /*Collection<ComputeEntity> computeEntities=vendorSoftwareProductDao.listComputesByVsp(vspId,
171 Collection<ImageEntity> imageEntities =vendorSoftwareProductDao.listImagesByVsp(vspId, version);
172 Collection<DeploymentFlavorEntity> deploymentFlavorEntities =vendorSoftwareProductDao
173 .listDeploymentFlavors(vspId, version);*/
175 Collection<ComputeEntity> computeEntities = computeDao.listByVsp(vspId, version);
176 Collection<ImageEntity> imageEntities = imageDao.listByVsp(vspId, version);
177 //Collection<DeploymentFlavorEntity> deploymentFlavorEntities = deloymentFlavorDao.list(new
178 //DeploymentFlavorEntity(vspId, version, null));
180 if (CollectionUtils.isEmpty(computeEntities) && CollectionUtils.isEmpty(imageEntities)) {
181 for (Component component : compositionData.getComponents()) {
182 String componentId = null;
183 for (ComponentEntity componentEntity:componentEntities) {
184 if (componentEntity.getComponentCompositionData().getName().equals(component.getData()
186 componentId = componentEntity.getId();
190 compositionEntityDataManager.saveComputesFlavorByComponent(vspId,version,component,
192 compositionEntityDataManager.saveImagesByComponent(vspId,version,component,
198 /*if (CollectionUtils.isEmpty(deploymentFlavorEntities)) {
199 compositionEntityDataManager.saveDeploymentFlavors(vspId,version,compositionData);
203 private CompositionData healCompositionData(String vspId, Version version,
204 Optional<ToscaServiceModel> serviceModelForHealing) {
205 ToscaServiceModel toscaServiceModel = serviceModelForHealing.get();
206 CompositionData compositionData =
207 getCompositionDataForHealing(vspId, version, toscaServiceModel);
208 compositionEntityDataManager.saveCompositionData(vspId, version, compositionData);
209 return compositionData;
212 private boolean doesVspNeedCompositionDataHealing(Collection<ComponentEntity> componentEntities,
213 Collection<NetworkEntity> networkEntities,
214 Collection<NicEntity> nicEntities) {
216 return (CollectionUtils.isEmpty(componentEntities) && CollectionUtils.isEmpty(nicEntities) &&
217 CollectionUtils.isEmpty(networkEntities));
220 private CompositionData getCompositionDataForHealing(String vspId, Version version,
221 ToscaServiceModel toscaServiceModel) {
222 mdcDataDebugMessage.debugEntryMessage(null);
224 if (Objects.isNull(toscaServiceModel)) {
228 CompositionData compositionData = new CompositionData();
229 if (Objects.nonNull(toscaServiceModel)) {
230 compositionData = compositionDataExtractor
231 .extractServiceCompositionData(toscaServiceModel);
232 serviceModelDao.storeServiceModel(vspId, version, toscaServiceModel);
235 mdcDataDebugMessage.debugExitMessage(null);
236 return compositionData;
239 private void updateComponentsDisplayNames(Collection<ComponentEntity> componentEntities) {
240 if (CollectionUtils.isEmpty(componentEntities)) {
244 for (ComponentEntity component : componentEntities) {
245 updateComponentName(component);
246 componentDao.update(component);
250 private void updateComponentName(ComponentEntity component) {
251 mdcDataDebugMessage.debugEntryMessage("VSP id, component id", component.getVspId(), component
254 ComponentData componentData =
255 JsonUtil.json2Object(component.getCompositionData(), ComponentData.class);
257 .setDisplayName(compositionDataExtractor.getComponentDisplayName(componentData.getName()));
258 String displayName = componentData.getDisplayName();
259 componentData.setName(componentData.getName().replace("com.att.d2", "org.openecomp"));
260 componentData.setVfcCode(displayName);
261 component.setCompositionData(JsonUtil.object2Json(componentData));
263 mdcDataDebugMessage.debugExitMessage("VSP id, component id", component.getVspId(), component
268 private Optional<ToscaServiceModel> getServiceModelForHealing(String vspId, Version version)
270 mdcDataDebugMessage.debugEntryMessage("VSP id", vspId);
272 /*UploadDataEntity uploadData =
273 vendorSoftwareProductDao.getUploadData(new UploadDataEntity(vspId, version));*/
274 UploadDataEntity uploadData =
275 orchestrationTemplateDataDao.getOrchestrationTemplate(vspId, version);
277 if (Objects.isNull(uploadData) || Objects.isNull(uploadData.getContentData())) {
278 return Optional.empty();
281 TranslatorOutput translatorOutput = getTranslatorOutputForHealing(uploadData);
283 if (Objects.isNull(translatorOutput)) {
284 return Optional.empty();
288 serviceModelDao.storeServiceModel(vspId, version,
289 translatorOutput.getToscaServiceModel());
290 } catch (Exception e) {
291 return Optional.empty();
294 mdcDataDebugMessage.debugExitMessage("VSP id", vspId);
295 return Optional.of(translatorOutput.getToscaServiceModel());
298 private TranslatorOutput getTranslatorOutputForHealing(UploadDataEntity uploadData) {
300 FileContentHandler fileContentHandler;
303 CommonUtil.validateAndUploadFileContent(
304 OnboardingTypesEnum.ZIP, uploadData.getContentData().array());
305 return HeatToToscaUtil.loadAndTranslateTemplateData(fileContentHandler);
306 } catch (Exception e) {