1 package org.openecomp.sdc.healing.healers;
3 import org.apache.commons.collections4.CollectionUtils;
4 import org.openecomp.core.utilities.json.JsonUtil;
5 import org.openecomp.sdc.common.utils.SdcCommon;
6 import org.openecomp.sdc.datatypes.error.ErrorMessage;
7 import org.openecomp.sdc.healing.interfaces.Healer;
8 import org.openecomp.sdc.heat.datatypes.manifest.FileData;
9 import org.openecomp.sdc.heat.datatypes.structure.Artifact;
10 import org.openecomp.sdc.heat.datatypes.structure.HeatStructureTree;
11 import org.openecomp.sdc.heat.datatypes.structure.ValidationStructureList;
12 import org.openecomp.sdc.logging.api.Logger;
13 import org.openecomp.sdc.logging.api.LoggerFactory;
14 import org.openecomp.sdc.vendorsoftwareproduct.dao.OrchestrationTemplateDao;
15 import org.openecomp.sdc.vendorsoftwareproduct.dao.OrchestrationTemplateDaoFactory;
16 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
17 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDaoFactory;
18 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.UploadData;
19 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.UploadDataEntity;
20 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
21 import org.openecomp.sdc.versioning.dao.types.Version;
23 import java.util.HashSet;
24 import java.util.List;
26 import java.util.Objects;
27 import java.util.Optional;
31 * Created by Talio on 7/30/2017.
33 public class ValidationStructureHealer implements Healer {
35 private static final VendorSoftwareProductInfoDao vspInfoDao =
36 VendorSoftwareProductInfoDaoFactory.getInstance().createInterface();
37 private static final OrchestrationTemplateDao orchestrationTemplateDao =
38 OrchestrationTemplateDaoFactory.getInstance().createInterface();
39 private static final Logger logger = LoggerFactory.getLogger(JsonUtil.class);
42 public Object heal(Map<String, Object> healingParams) throws Exception {
44 String vspId = (String) healingParams.get(SdcCommon.VSP_ID);
45 Version version = (Version) healingParams.get(SdcCommon.VERSION);
47 VspDetails vspDetails = vspInfoDao.get(new VspDetails(vspId, version));
48 UploadDataEntity orchestrationTemplate =
49 orchestrationTemplateDao.getOrchestrationTemplate(vspId, version);
51 OldValidationStructureTree oldValidationStructureTree;
53 oldValidationStructureTree =
54 JsonUtil.json2Object(orchestrationTemplate.getValidationData(), OldValidationStructureTree
56 } catch (Exception e){
58 return Optional.empty();
61 Optional<HeatStructureTree> newHeatStructureTreeFromOldStructureTree =
62 createNewHeatStructureTreeFromOldStructureTree(oldValidationStructureTree.getImportStructure());
64 if(newHeatStructureTreeFromOldStructureTree.isPresent()){
65 ValidationStructureList validationData = new ValidationStructureList
66 (newHeatStructureTreeFromOldStructureTree.get());
67 vspDetails.setValidationDataStructure(validationData);
69 updateValuesInDb(vspId, vspDetails, orchestrationTemplate, validationData);
71 return newHeatStructureTreeFromOldStructureTree;
75 private void updateValuesInDb(String vspId, VspDetails vspDetails,
76 UploadDataEntity orchestrationTemplate,
77 ValidationStructureList validationData) {
78 vspInfoDao.update(vspDetails);
79 UploadData uploadData = getUpdatedUploadData(orchestrationTemplate, validationData);
80 orchestrationTemplateDao.updateOrchestrationTemplateData(vspId, uploadData);
83 private UploadData getUpdatedUploadData(UploadDataEntity orchestrationTemplate,
84 ValidationStructureList validationData) {
85 UploadData uploadData = new UploadData();
86 uploadData.setValidationDataStructure(validationData);
87 uploadData.setValidationData(JsonUtil.object2Json(validationData));
88 uploadData.setContentData(orchestrationTemplate.getContentData());
89 uploadData.setId(orchestrationTemplate.getId());
90 uploadData.setPackageName(orchestrationTemplate.getPackageName());
91 uploadData.setPackageVersion(orchestrationTemplate.getPackageVersion());
96 private Optional<HeatStructureTree> createNewHeatStructureTreeFromOldStructureTree(OldHeatStructureTree
97 oldHeatStructureTree){
99 HeatStructureTree heatStructureTree = new HeatStructureTree();
101 if(Objects.isNull(oldHeatStructureTree)){
102 return Optional.empty();
105 mapOldHeatStructureTreeValues(oldHeatStructureTree, heatStructureTree);
107 Set<OldHeatStructureTree> heat =
108 oldHeatStructureTree.getHeat() == null ? new HashSet<>() : oldHeatStructureTree.getHeat();
109 Set<OldHeatStructureTree> volume =
110 oldHeatStructureTree.getVolume() == null ? new HashSet<>() : oldHeatStructureTree.getVolume();
111 Set<OldHeatStructureTree> nested =
112 oldHeatStructureTree.getNested() == null ? new HashSet<>() : oldHeatStructureTree.getNested();
113 Set<OldHeatStructureTree> network =
114 oldHeatStructureTree.getNetwork() == null ? new HashSet<>() : oldHeatStructureTree.getNetwork();
117 heatStructureTree.setHeat(createHeatStructureTreeSetFromOld(heat));
118 heatStructureTree.setVolume(createHeatStructureTreeSetFromOld(volume));
119 heatStructureTree.setNested(createHeatStructureTreeSetFromOld(nested));
120 heatStructureTree.setNetwork(createHeatStructureTreeSetFromOld(network));
123 return Optional.of(heatStructureTree);
127 private void mapOldHeatStructureTreeValues(
128 OldHeatStructureTree oldHeatStructureTree,
129 HeatStructureTree heatStructureTree) {
130 heatStructureTree.setFileName(oldHeatStructureTree.getFileName());
131 heatStructureTree.setBase(oldHeatStructureTree.getBase());
132 heatStructureTree.setType(oldHeatStructureTree.getType());
133 heatStructureTree.setArtifacts(oldHeatStructureTree.getArtifacts());
134 heatStructureTree.setErrors(oldHeatStructureTree.getErrors());
136 if(Objects.nonNull(oldHeatStructureTree.getEnv())) {
137 heatStructureTree.setEnv(new HeatStructureTree(oldHeatStructureTree.getEnv(), false));
141 private Set<HeatStructureTree> createHeatStructureTreeSetFromOld(Set<OldHeatStructureTree>
142 oldHeatStructureTreeSet){
143 if(CollectionUtils.isEmpty(oldHeatStructureTreeSet)){
146 Set<HeatStructureTree> newHeatStructureSet = new HashSet<>();
148 for(OldHeatStructureTree old : oldHeatStructureTreeSet){
149 Optional<HeatStructureTree> newHeatStructureTree =
150 createNewHeatStructureTreeFromOldStructureTree(old);
151 if(newHeatStructureTree.isPresent()){
152 newHeatStructureSet.add(newHeatStructureTree.get());
156 return newHeatStructureSet;
159 private class OldValidationStructureTree{
160 private OldHeatStructureTree importStructure;
162 public OldHeatStructureTree getImportStructure() {
163 return importStructure;
166 public void setImportStructure(
167 OldHeatStructureTree importStructure) {
168 this.importStructure = importStructure;
172 private class OldHeatStructureTree{
173 private String fileName;
174 private FileData.Type type;
175 private Boolean isBase;
177 private List<ErrorMessage> errors;
178 private Set<OldHeatStructureTree> heat;
179 private Set<OldHeatStructureTree> volume;
180 private Set<OldHeatStructureTree> network;
181 private Set<OldHeatStructureTree> nested;
182 private Set<OldHeatStructureTree> other;
183 private Set<Artifact> artifacts;
185 public OldHeatStructureTree() {
188 public String getFileName() {
192 public void setFileName(String fileName) {
193 this.fileName = fileName;
196 public FileData.Type getType() {
200 public void setType(FileData.Type type) {
204 public Boolean getBase() {
208 public void setBase(Boolean base) {
212 public String getEnv() {
216 public void setEnv(String env) {
220 public List<ErrorMessage> getErrors() {
224 public void setErrors(List<ErrorMessage> errors) {
225 this.errors = errors;
228 public Set<OldHeatStructureTree> getHeat() {
232 public void setHeat(Set<OldHeatStructureTree> heat) {
236 public Set<OldHeatStructureTree> getVolume() {
240 public void setVolume(Set<OldHeatStructureTree> volume) {
241 this.volume = volume;
244 public Set<OldHeatStructureTree> getNetwork() {
248 public void setNetwork(
249 Set<OldHeatStructureTree> network) {
250 this.network = network;
253 public Set<OldHeatStructureTree> getNested() {
257 public void setNested(Set<OldHeatStructureTree> nested) {
258 this.nested = nested;
261 public Set<OldHeatStructureTree> getOther() {
265 public void setOther(Set<OldHeatStructureTree> other) {
269 public Set<Artifact> getArtifacts() {
273 public void setArtifacts(Set<Artifact> artifacts) {
274 this.artifacts = artifacts;