f92fbd1730df21b046084981285b1583269b532a
[sdc.git] /
1 package org.openecomp.sdc.healing.healers;
2
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.vendorsoftwareproduct.dao.OrchestrationTemplateDao;
13 import org.openecomp.sdc.vendorsoftwareproduct.dao.OrchestrationTemplateDaoFactory;
14 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
15 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDaoFactory;
16 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.UploadData;
17 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.UploadDataEntity;
18 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
19 import org.openecomp.sdc.versioning.dao.types.Version;
20
21 import java.util.HashSet;
22 import java.util.List;
23 import java.util.Map;
24 import java.util.Objects;
25 import java.util.Optional;
26 import java.util.Set;
27
28 /**
29  * Created by Talio on 7/30/2017.
30  */
31 public class ValidationStructureHealer implements Healer {
32
33   private static final VendorSoftwareProductInfoDao vspInfoDao =
34       VendorSoftwareProductInfoDaoFactory.getInstance().createInterface();
35   private static final OrchestrationTemplateDao orchestrationTemplateDao =
36       OrchestrationTemplateDaoFactory.getInstance().createInterface();
37
38   @Override
39   public Object heal(Map<String, Object> healingParams) throws Exception {
40
41     String vspId = (String) healingParams.get(SdcCommon.VSP_ID);
42     Version version = (Version) healingParams.get(SdcCommon.VERSION);
43
44     VspDetails vspDetails = vspInfoDao.get(new VspDetails(vspId, version));
45     UploadDataEntity orchestrationTemplate =
46         orchestrationTemplateDao.getOrchestrationTemplate(vspId, version);
47
48     OldValidationStructureTree oldValidationStructureTree;
49     try{
50       oldValidationStructureTree =
51           JsonUtil.json2Object(orchestrationTemplate.getValidationData(), OldValidationStructureTree
52               .class);
53     } catch (Exception e){
54       return Optional.empty();
55     }
56
57     Optional<HeatStructureTree> newHeatStructureTreeFromOldStructureTree =
58         createNewHeatStructureTreeFromOldStructureTree(oldValidationStructureTree.getImportStructure());
59
60     if(newHeatStructureTreeFromOldStructureTree.isPresent()){
61       ValidationStructureList validationData = new ValidationStructureList
62           (newHeatStructureTreeFromOldStructureTree.get());
63       vspDetails.setValidationDataStructure(validationData);
64
65       updateValuesInDb(vspId, vspDetails, orchestrationTemplate, validationData);
66     }
67     return newHeatStructureTreeFromOldStructureTree;
68
69   }
70
71   private void updateValuesInDb(String vspId, VspDetails vspDetails,
72                                 UploadDataEntity orchestrationTemplate,
73                                 ValidationStructureList validationData) {
74     vspInfoDao.update(vspDetails);
75     UploadData uploadData = getUpdatedUploadData(orchestrationTemplate, validationData);
76     orchestrationTemplateDao.updateOrchestrationTemplateData(vspId, uploadData);
77   }
78
79   private UploadData getUpdatedUploadData(UploadDataEntity orchestrationTemplate,
80                                           ValidationStructureList validationData) {
81     UploadData uploadData = new UploadData();
82     uploadData.setValidationDataStructure(validationData);
83     uploadData.setValidationData(JsonUtil.object2Json(validationData));
84     uploadData.setContentData(orchestrationTemplate.getContentData());
85     uploadData.setId(orchestrationTemplate.getId());
86     uploadData.setPackageName(orchestrationTemplate.getPackageName());
87     uploadData.setPackageVersion(orchestrationTemplate.getPackageVersion());
88     return uploadData;
89   }
90
91
92   private Optional<HeatStructureTree> createNewHeatStructureTreeFromOldStructureTree(OldHeatStructureTree
93                                                                oldHeatStructureTree){
94
95     HeatStructureTree heatStructureTree = new HeatStructureTree();
96
97     if(Objects.isNull(oldHeatStructureTree)){
98       return Optional.empty();
99     }
100
101     mapOldHeatStructureTreeValues(oldHeatStructureTree, heatStructureTree);
102
103     Set<OldHeatStructureTree> heat =
104         oldHeatStructureTree.getHeat() == null ? new HashSet<>() : oldHeatStructureTree.getHeat();
105     Set<OldHeatStructureTree> volume =
106         oldHeatStructureTree.getVolume() == null ? new HashSet<>() : oldHeatStructureTree.getVolume();
107     Set<OldHeatStructureTree> nested =
108         oldHeatStructureTree.getNested() == null ? new HashSet<>() : oldHeatStructureTree.getNested();
109     Set<OldHeatStructureTree> network =
110         oldHeatStructureTree.getNetwork() == null ? new HashSet<>() : oldHeatStructureTree.getNetwork();
111
112
113     heatStructureTree.setHeat(createHeatStructureTreeSetFromOld(heat));
114     heatStructureTree.setVolume(createHeatStructureTreeSetFromOld(volume));
115     heatStructureTree.setNested(createHeatStructureTreeSetFromOld(nested));
116     heatStructureTree.setNetwork(createHeatStructureTreeSetFromOld(network));
117
118
119     return Optional.of(heatStructureTree);
120
121   }
122
123   private void mapOldHeatStructureTreeValues(
124       OldHeatStructureTree oldHeatStructureTree,
125       HeatStructureTree heatStructureTree) {
126     heatStructureTree.setFileName(oldHeatStructureTree.getFileName());
127     heatStructureTree.setBase(oldHeatStructureTree.getBase());
128     heatStructureTree.setType(oldHeatStructureTree.getType());
129     heatStructureTree.setArtifacts(oldHeatStructureTree.getArtifacts());
130     heatStructureTree.setErrors(oldHeatStructureTree.getErrors());
131
132     if(Objects.nonNull(oldHeatStructureTree.getEnv())) {
133       heatStructureTree.setEnv(new HeatStructureTree(oldHeatStructureTree.getEnv(), false));
134     }
135   }
136
137   private Set<HeatStructureTree> createHeatStructureTreeSetFromOld(Set<OldHeatStructureTree>
138                                                                         oldHeatStructureTreeSet){
139     if(CollectionUtils.isEmpty(oldHeatStructureTreeSet)){
140       return null;
141     }
142     Set<HeatStructureTree> newHeatStructureSet = new HashSet<>();
143
144     for(OldHeatStructureTree old : oldHeatStructureTreeSet){
145       Optional<HeatStructureTree> newHeatStructureTree =
146           createNewHeatStructureTreeFromOldStructureTree(old);
147       if(newHeatStructureTree.isPresent()){
148         newHeatStructureSet.add(newHeatStructureTree.get());
149       }
150     }
151
152     return newHeatStructureSet;
153   }
154
155   private class OldValidationStructureTree{
156     private OldHeatStructureTree importStructure;
157
158     public OldHeatStructureTree getImportStructure() {
159       return importStructure;
160     }
161
162     public void setImportStructure(
163         OldHeatStructureTree importStructure) {
164       this.importStructure = importStructure;
165     }
166   }
167
168   private class OldHeatStructureTree{
169     private String fileName;
170     private FileData.Type type;
171     private Boolean isBase;
172     private String env;
173     private List<ErrorMessage> errors;
174     private Set<OldHeatStructureTree> heat;
175     private Set<OldHeatStructureTree> volume;
176     private Set<OldHeatStructureTree> network;
177     private Set<OldHeatStructureTree> nested;
178     private Set<OldHeatStructureTree> other;
179     private Set<Artifact> artifacts;
180
181     public OldHeatStructureTree() {
182     }
183
184   public String getFileName() {
185     return fileName;
186   }
187
188   public void setFileName(String fileName) {
189     this.fileName = fileName;
190   }
191
192   public FileData.Type getType() {
193     return type;
194   }
195
196   public void setType(FileData.Type type) {
197     this.type = type;
198   }
199
200   public Boolean getBase() {
201     return isBase;
202   }
203
204   public void setBase(Boolean base) {
205     isBase = base;
206   }
207
208   public String getEnv() {
209     return env;
210   }
211
212   public void setEnv(String env) {
213     this.env = env;
214   }
215
216   public List<ErrorMessage> getErrors() {
217     return errors;
218   }
219
220   public void setErrors(List<ErrorMessage> errors) {
221     this.errors = errors;
222   }
223
224   public Set<OldHeatStructureTree> getHeat() {
225     return heat;
226   }
227
228   public void setHeat(Set<OldHeatStructureTree> heat) {
229     this.heat = heat;
230   }
231
232   public Set<OldHeatStructureTree> getVolume() {
233     return volume;
234   }
235
236   public void setVolume(Set<OldHeatStructureTree> volume) {
237     this.volume = volume;
238   }
239
240   public Set<OldHeatStructureTree> getNetwork() {
241     return network;
242   }
243
244   public void setNetwork(
245       Set<OldHeatStructureTree> network) {
246     this.network = network;
247   }
248
249   public Set<OldHeatStructureTree> getNested() {
250     return nested;
251   }
252
253   public void setNested(Set<OldHeatStructureTree> nested) {
254     this.nested = nested;
255   }
256
257   public Set<OldHeatStructureTree> getOther() {
258     return other;
259   }
260
261   public void setOther(Set<OldHeatStructureTree> other) {
262     this.other = other;
263   }
264
265   public Set<Artifact> getArtifacts() {
266     return artifacts;
267   }
268
269   public void setArtifacts(Set<Artifact> artifacts) {
270     this.artifacts = artifacts;
271   }
272 }
273 }