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.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;
21 import java.util.HashSet;
22 import java.util.List;
24 import java.util.Objects;
25 import java.util.Optional;
29 * Created by Talio on 7/30/2017.
31 public class ValidationStructureHealer implements Healer {
33 private static final VendorSoftwareProductInfoDao vspInfoDao =
34 VendorSoftwareProductInfoDaoFactory.getInstance().createInterface();
35 private static final OrchestrationTemplateDao orchestrationTemplateDao =
36 OrchestrationTemplateDaoFactory.getInstance().createInterface();
39 public Object heal(Map<String, Object> healingParams) throws Exception {
41 String vspId = (String) healingParams.get(SdcCommon.VSP_ID);
42 Version version = (Version) healingParams.get(SdcCommon.VERSION);
44 VspDetails vspDetails = vspInfoDao.get(new VspDetails(vspId, version));
45 UploadDataEntity orchestrationTemplate =
46 orchestrationTemplateDao.getOrchestrationTemplate(vspId, version);
48 OldValidationStructureTree oldValidationStructureTree;
50 oldValidationStructureTree =
51 JsonUtil.json2Object(orchestrationTemplate.getValidationData(), OldValidationStructureTree
53 } catch (Exception e){
54 return Optional.empty();
57 Optional<HeatStructureTree> newHeatStructureTreeFromOldStructureTree =
58 createNewHeatStructureTreeFromOldStructureTree(oldValidationStructureTree.getImportStructure());
60 if(newHeatStructureTreeFromOldStructureTree.isPresent()){
61 ValidationStructureList validationData = new ValidationStructureList
62 (newHeatStructureTreeFromOldStructureTree.get());
63 vspDetails.setValidationDataStructure(validationData);
65 updateValuesInDb(vspId, vspDetails, orchestrationTemplate, validationData);
67 return newHeatStructureTreeFromOldStructureTree;
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);
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());
92 private Optional<HeatStructureTree> createNewHeatStructureTreeFromOldStructureTree(OldHeatStructureTree
93 oldHeatStructureTree){
95 HeatStructureTree heatStructureTree = new HeatStructureTree();
97 if(Objects.isNull(oldHeatStructureTree)){
98 return Optional.empty();
101 mapOldHeatStructureTreeValues(oldHeatStructureTree, heatStructureTree);
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();
113 heatStructureTree.setHeat(createHeatStructureTreeSetFromOld(heat));
114 heatStructureTree.setVolume(createHeatStructureTreeSetFromOld(volume));
115 heatStructureTree.setNested(createHeatStructureTreeSetFromOld(nested));
116 heatStructureTree.setNetwork(createHeatStructureTreeSetFromOld(network));
119 return Optional.of(heatStructureTree);
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());
132 if(Objects.nonNull(oldHeatStructureTree.getEnv())) {
133 heatStructureTree.setEnv(new HeatStructureTree(oldHeatStructureTree.getEnv(), false));
137 private Set<HeatStructureTree> createHeatStructureTreeSetFromOld(Set<OldHeatStructureTree>
138 oldHeatStructureTreeSet){
139 if(CollectionUtils.isEmpty(oldHeatStructureTreeSet)){
142 Set<HeatStructureTree> newHeatStructureSet = new HashSet<>();
144 for(OldHeatStructureTree old : oldHeatStructureTreeSet){
145 Optional<HeatStructureTree> newHeatStructureTree =
146 createNewHeatStructureTreeFromOldStructureTree(old);
147 if(newHeatStructureTree.isPresent()){
148 newHeatStructureSet.add(newHeatStructureTree.get());
152 return newHeatStructureSet;
155 private class OldValidationStructureTree{
156 private OldHeatStructureTree importStructure;
158 public OldHeatStructureTree getImportStructure() {
159 return importStructure;
162 public void setImportStructure(
163 OldHeatStructureTree importStructure) {
164 this.importStructure = importStructure;
168 private class OldHeatStructureTree{
169 private String fileName;
170 private FileData.Type type;
171 private Boolean isBase;
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;
181 public OldHeatStructureTree() {
184 public String getFileName() {
188 public void setFileName(String fileName) {
189 this.fileName = fileName;
192 public FileData.Type getType() {
196 public void setType(FileData.Type type) {
200 public Boolean getBase() {
204 public void setBase(Boolean base) {
208 public String getEnv() {
212 public void setEnv(String env) {
216 public List<ErrorMessage> getErrors() {
220 public void setErrors(List<ErrorMessage> errors) {
221 this.errors = errors;
224 public Set<OldHeatStructureTree> getHeat() {
228 public void setHeat(Set<OldHeatStructureTree> heat) {
232 public Set<OldHeatStructureTree> getVolume() {
236 public void setVolume(Set<OldHeatStructureTree> volume) {
237 this.volume = volume;
240 public Set<OldHeatStructureTree> getNetwork() {
244 public void setNetwork(
245 Set<OldHeatStructureTree> network) {
246 this.network = network;
249 public Set<OldHeatStructureTree> getNested() {
253 public void setNested(Set<OldHeatStructureTree> nested) {
254 this.nested = nested;
257 public Set<OldHeatStructureTree> getOther() {
261 public void setOther(Set<OldHeatStructureTree> other) {
265 public Set<Artifact> getArtifacts() {
269 public void setArtifacts(Set<Artifact> artifacts) {
270 this.artifacts = artifacts;