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.datatypes.error.ErrorMessage;
6 import org.openecomp.sdc.healing.interfaces.Healer;
7 import org.openecomp.sdc.heat.datatypes.manifest.FileData;
8 import org.openecomp.sdc.heat.datatypes.structure.Artifact;
9 import org.openecomp.sdc.heat.datatypes.structure.HeatStructureTree;
10 import org.openecomp.sdc.heat.datatypes.structure.ValidationStructureList;
11 import org.openecomp.sdc.logging.api.Logger;
12 import org.openecomp.sdc.logging.api.LoggerFactory;
13 import org.openecomp.sdc.vendorsoftwareproduct.dao.OrchestrationTemplateDao;
14 import org.openecomp.sdc.vendorsoftwareproduct.dao.OrchestrationTemplateDaoFactory;
15 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.OrchestrationTemplateEntity;
16 import org.openecomp.sdc.versioning.dao.types.Version;
18 import java.util.HashSet;
19 import java.util.List;
20 import java.util.Objects;
21 import java.util.Optional;
25 * Created by Talio on 7/30/2017.
27 public class ValidationStructureHealer implements Healer {
29 private static final Logger logger = LoggerFactory.getLogger(JsonUtil.class);
30 private static final OrchestrationTemplateDao orchestrationTemplateDao =
31 OrchestrationTemplateDaoFactory.getInstance().createInterface();
34 public Object heal(String vspId, Version version) throws Exception {
36 OrchestrationTemplateEntity orchestrationTemplate =
37 orchestrationTemplateDao.get(vspId, version);
39 if (Objects.isNull(orchestrationTemplate.getValidationData())
40 || !JsonUtil.isValidJson(orchestrationTemplate.getValidationData())) {
41 return Optional.empty();
44 OldValidationStructureTree oldValidationStructureTree;
46 oldValidationStructureTree = JsonUtil
47 .json2Object(orchestrationTemplate.getValidationData(), OldValidationStructureTree.class);
48 } catch (Exception e) {
50 return Optional.empty();
53 Optional<HeatStructureTree> newHeatStructureTreeFromOldStructureTree =
54 createNewHeatStructureTreeFromOldStructureTree(
55 oldValidationStructureTree.getImportStructure());
57 newHeatStructureTreeFromOldStructureTree.ifPresent(newStructure ->
58 updateValuesInDb(vspId, version, orchestrationTemplate,
59 new ValidationStructureList(newStructure)));
61 return newHeatStructureTreeFromOldStructureTree;
65 private void updateValuesInDb(String vspId, Version version,
66 OrchestrationTemplateEntity orchestrationTemplate,
67 ValidationStructureList validationData) {
68 orchestrationTemplate.setValidationDataStructure(validationData);
69 orchestrationTemplateDao.update(vspId, version, orchestrationTemplate);
72 private Optional<HeatStructureTree> createNewHeatStructureTreeFromOldStructureTree(
73 OldHeatStructureTree oldHeatStructureTree) {
75 HeatStructureTree heatStructureTree = new HeatStructureTree();
77 if (Objects.isNull(oldHeatStructureTree)) {
78 return Optional.empty();
81 mapOldHeatStructureTreeValues(oldHeatStructureTree, heatStructureTree);
83 Set<OldHeatStructureTree> heat =
84 oldHeatStructureTree.getHeat() == null ? new HashSet<>() : oldHeatStructureTree.getHeat();
85 Set<OldHeatStructureTree> volume =
86 oldHeatStructureTree.getVolume() == null ? new HashSet<>()
87 : oldHeatStructureTree.getVolume();
88 Set<OldHeatStructureTree> nested =
89 oldHeatStructureTree.getNested() == null ? new HashSet<>()
90 : oldHeatStructureTree.getNested();
91 Set<OldHeatStructureTree> network =
92 oldHeatStructureTree.getNetwork() == null ? new HashSet<>()
93 : oldHeatStructureTree.getNetwork();
96 heatStructureTree.setHeat(createHeatStructureTreeSetFromOld(heat));
97 heatStructureTree.setVolume(createHeatStructureTreeSetFromOld(volume));
98 heatStructureTree.setNested(createHeatStructureTreeSetFromOld(nested));
99 heatStructureTree.setNetwork(createHeatStructureTreeSetFromOld(network));
101 return Optional.of(heatStructureTree);
104 private void mapOldHeatStructureTreeValues(OldHeatStructureTree oldHeatStructureTree,
105 HeatStructureTree heatStructureTree) {
106 heatStructureTree.setFileName(oldHeatStructureTree.getFileName());
107 heatStructureTree.setBase(oldHeatStructureTree.getBase());
108 heatStructureTree.setType(oldHeatStructureTree.getType());
109 heatStructureTree.setArtifacts(oldHeatStructureTree.getArtifacts());
110 heatStructureTree.setErrors(oldHeatStructureTree.getErrors());
112 if (Objects.nonNull(oldHeatStructureTree.getEnv())) {
113 heatStructureTree.setEnv(new HeatStructureTree(oldHeatStructureTree.getEnv(), false));
117 private Set<HeatStructureTree> createHeatStructureTreeSetFromOld(Set<OldHeatStructureTree>
118 oldHeatStructureTreeSet) {
119 if (CollectionUtils.isEmpty(oldHeatStructureTreeSet)) {
122 Set<HeatStructureTree> newHeatStructureSet = new HashSet<>();
124 for (OldHeatStructureTree old : oldHeatStructureTreeSet) {
125 Optional<HeatStructureTree> newHeatStructureTree =
126 createNewHeatStructureTreeFromOldStructureTree(old);
127 newHeatStructureTree.ifPresent(newHeatStructureSet::add);
130 return newHeatStructureSet;
133 private class OldValidationStructureTree {
134 private OldHeatStructureTree importStructure;
136 OldHeatStructureTree getImportStructure() {
137 return importStructure;
141 private class OldHeatStructureTree {
142 private String fileName;
143 private FileData.Type type;
144 private Boolean isBase;
146 private List<ErrorMessage> errors;
147 private Set<OldHeatStructureTree> heat;
148 private Set<OldHeatStructureTree> volume;
149 private Set<OldHeatStructureTree> network;
150 private Set<OldHeatStructureTree> nested;
151 private Set<OldHeatStructureTree> other;
152 private Set<Artifact> artifacts;
154 public OldHeatStructureTree() {
157 public String getFileName() {
161 public void setFileName(String fileName) {
162 this.fileName = fileName;
165 public FileData.Type getType() {
169 public void setType(FileData.Type type) {
173 public Boolean getBase() {
177 public void setBase(Boolean base) {
181 public String getEnv() {
185 public void setEnv(String env) {
189 public List<ErrorMessage> getErrors() {
193 public void setErrors(List<ErrorMessage> errors) {
194 this.errors = errors;
197 public Set<OldHeatStructureTree> getHeat() {
201 public void setHeat(Set<OldHeatStructureTree> heat) {
205 public Set<OldHeatStructureTree> getVolume() {
209 public void setVolume(Set<OldHeatStructureTree> volume) {
210 this.volume = volume;
213 public Set<OldHeatStructureTree> getNetwork() {
217 public void setNetwork(
218 Set<OldHeatStructureTree> network) {
219 this.network = network;
222 public Set<OldHeatStructureTree> getNested() {
226 public void setNested(Set<OldHeatStructureTree> nested) {
227 this.nested = nested;
230 public Set<OldHeatStructureTree> getOther() {
234 public void setOther(Set<OldHeatStructureTree> other) {
238 public Set<Artifact> getArtifacts() {
242 public void setArtifacts(Set<Artifact> artifacts) {
243 this.artifacts = artifacts;