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 if(Objects.isNull(orchestrationTemplate.getValidationData())
52 || !JsonUtil.isValidJson(orchestrationTemplate.getValidationData())){
53 return Optional.empty();
56 OldValidationStructureTree oldValidationStructureTree;
58 oldValidationStructureTree =
59 JsonUtil.json2Object(orchestrationTemplate.getValidationData(), OldValidationStructureTree
61 } catch (Exception e){
63 return Optional.empty();
66 Optional<HeatStructureTree> newHeatStructureTreeFromOldStructureTree =
67 createNewHeatStructureTreeFromOldStructureTree(oldValidationStructureTree.getImportStructure());
69 if(newHeatStructureTreeFromOldStructureTree.isPresent()){
70 ValidationStructureList validationData = new ValidationStructureList
71 (newHeatStructureTreeFromOldStructureTree.get());
72 vspDetails.setValidationDataStructure(validationData);
74 updateValuesInDb(vspId, vspDetails, orchestrationTemplate, validationData);
76 return newHeatStructureTreeFromOldStructureTree;
80 private void updateValuesInDb(String vspId, VspDetails vspDetails,
81 UploadDataEntity orchestrationTemplate,
82 ValidationStructureList validationData) {
83 vspInfoDao.update(vspDetails);
84 UploadData uploadData = getUpdatedUploadData(orchestrationTemplate, validationData);
85 orchestrationTemplateDao.updateOrchestrationTemplateData(vspId, uploadData);
88 private UploadData getUpdatedUploadData(UploadDataEntity orchestrationTemplate,
89 ValidationStructureList validationData) {
90 UploadData uploadData = new UploadData();
91 uploadData.setValidationDataStructure(validationData);
92 uploadData.setValidationData(JsonUtil.object2Json(validationData));
93 uploadData.setContentData(orchestrationTemplate.getContentData());
94 uploadData.setId(orchestrationTemplate.getId());
95 uploadData.setPackageName(orchestrationTemplate.getPackageName());
96 uploadData.setPackageVersion(orchestrationTemplate.getPackageVersion());
101 private Optional<HeatStructureTree> createNewHeatStructureTreeFromOldStructureTree(OldHeatStructureTree
102 oldHeatStructureTree){
104 HeatStructureTree heatStructureTree = new HeatStructureTree();
106 if(Objects.isNull(oldHeatStructureTree)){
107 return Optional.empty();
110 mapOldHeatStructureTreeValues(oldHeatStructureTree, heatStructureTree);
112 Set<OldHeatStructureTree> heat =
113 oldHeatStructureTree.getHeat() == null ? new HashSet<>() : oldHeatStructureTree.getHeat();
114 Set<OldHeatStructureTree> volume =
115 oldHeatStructureTree.getVolume() == null ? new HashSet<>() : oldHeatStructureTree.getVolume();
116 Set<OldHeatStructureTree> nested =
117 oldHeatStructureTree.getNested() == null ? new HashSet<>() : oldHeatStructureTree.getNested();
118 Set<OldHeatStructureTree> network =
119 oldHeatStructureTree.getNetwork() == null ? new HashSet<>() : oldHeatStructureTree.getNetwork();
122 heatStructureTree.setHeat(createHeatStructureTreeSetFromOld(heat));
123 heatStructureTree.setVolume(createHeatStructureTreeSetFromOld(volume));
124 heatStructureTree.setNested(createHeatStructureTreeSetFromOld(nested));
125 heatStructureTree.setNetwork(createHeatStructureTreeSetFromOld(network));
128 return Optional.of(heatStructureTree);
132 private void mapOldHeatStructureTreeValues(
133 OldHeatStructureTree oldHeatStructureTree,
134 HeatStructureTree heatStructureTree) {
135 heatStructureTree.setFileName(oldHeatStructureTree.getFileName());
136 heatStructureTree.setBase(oldHeatStructureTree.getBase());
137 heatStructureTree.setType(oldHeatStructureTree.getType());
138 heatStructureTree.setArtifacts(oldHeatStructureTree.getArtifacts());
139 heatStructureTree.setErrors(oldHeatStructureTree.getErrors());
141 if(Objects.nonNull(oldHeatStructureTree.getEnv())) {
142 heatStructureTree.setEnv(new HeatStructureTree(oldHeatStructureTree.getEnv(), false));
146 private Set<HeatStructureTree> createHeatStructureTreeSetFromOld(Set<OldHeatStructureTree>
147 oldHeatStructureTreeSet){
148 if(CollectionUtils.isEmpty(oldHeatStructureTreeSet)){
151 Set<HeatStructureTree> newHeatStructureSet = new HashSet<>();
153 for(OldHeatStructureTree old : oldHeatStructureTreeSet){
154 Optional<HeatStructureTree> newHeatStructureTree =
155 createNewHeatStructureTreeFromOldStructureTree(old);
156 if(newHeatStructureTree.isPresent()){
157 newHeatStructureSet.add(newHeatStructureTree.get());
161 return newHeatStructureSet;
164 private class OldValidationStructureTree{
165 private OldHeatStructureTree importStructure;
167 public OldHeatStructureTree getImportStructure() {
168 return importStructure;
171 public void setImportStructure(
172 OldHeatStructureTree importStructure) {
173 this.importStructure = importStructure;
177 private class OldHeatStructureTree{
178 private String fileName;
179 private FileData.Type type;
180 private Boolean isBase;
182 private List<ErrorMessage> errors;
183 private Set<OldHeatStructureTree> heat;
184 private Set<OldHeatStructureTree> volume;
185 private Set<OldHeatStructureTree> network;
186 private Set<OldHeatStructureTree> nested;
187 private Set<OldHeatStructureTree> other;
188 private Set<Artifact> artifacts;
190 public OldHeatStructureTree() {
193 public String getFileName() {
197 public void setFileName(String fileName) {
198 this.fileName = fileName;
201 public FileData.Type getType() {
205 public void setType(FileData.Type type) {
209 public Boolean getBase() {
213 public void setBase(Boolean base) {
217 public String getEnv() {
221 public void setEnv(String env) {
225 public List<ErrorMessage> getErrors() {
229 public void setErrors(List<ErrorMessage> errors) {
230 this.errors = errors;
233 public Set<OldHeatStructureTree> getHeat() {
237 public void setHeat(Set<OldHeatStructureTree> heat) {
241 public Set<OldHeatStructureTree> getVolume() {
245 public void setVolume(Set<OldHeatStructureTree> volume) {
246 this.volume = volume;
249 public Set<OldHeatStructureTree> getNetwork() {
253 public void setNetwork(
254 Set<OldHeatStructureTree> network) {
255 this.network = network;
258 public Set<OldHeatStructureTree> getNested() {
262 public void setNested(Set<OldHeatStructureTree> nested) {
263 this.nested = nested;
266 public Set<OldHeatStructureTree> getOther() {
270 public void setOther(Set<OldHeatStructureTree> other) {
274 public Set<Artifact> getArtifacts() {
278 public void setArtifacts(Set<Artifact> artifacts) {
279 this.artifacts = artifacts;