3ec31ea33d82a0876a3cd61d897845fecf7f49d1
[sdc.git] /
1 package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen;
2
3 import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element;
4 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo;
5 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement;
6 import com.amdocs.zusammen.datatypes.Id;
7 import com.amdocs.zusammen.datatypes.SessionContext;
8 import com.amdocs.zusammen.datatypes.item.Action;
9 import com.amdocs.zusammen.datatypes.item.ElementContext;
10 import com.amdocs.zusammen.datatypes.item.Info;
11 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
12 import org.openecomp.sdc.datatypes.model.ElementType;
13 import org.openecomp.sdc.vendorsoftwareproduct.dao.ProcessDao;
14 import org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen.convertor.ElementToProcessConvertor;
15 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity;
16 import org.openecomp.sdc.versioning.dao.types.Version;
17 import org.openecomp.types.ElementPropertyName;
18
19 import java.io.ByteArrayInputStream;
20 import java.util.ArrayList;
21 import java.util.Collection;
22 import java.util.Objects;
23 import java.util.Optional;
24 import java.util.stream.Collectors;
25
26 import static org.openecomp.core.zusammen.api.ZusammenUtil.buildElement;
27 import static org.openecomp.core.zusammen.api.ZusammenUtil.buildStructuralElement;
28 import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
29 import static org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen.convertor.ElementToProcessConvertor.ARTIFACT_NAME;
30 import static org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen.convertor.ElementToProcessConvertor.DESCRIPTION;
31 import static org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen.convertor.ElementToProcessConvertor.NAME;
32 import static org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen.convertor.ElementToProcessConvertor.PROCESS_TYPE;
33
34 /**
35  * @author Avrahamg.
36  * @since March 23, 2017
37  */
38 public class ProcessDaoZusammenImpl implements ProcessDao {
39
40   private ZusammenAdaptor zusammenAdaptor;
41
42   public ProcessDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
43     this.zusammenAdaptor = zusammenAdaptor;
44   }
45
46   @Override
47   public void registerVersioning(String versionableEntityType) {
48     // registerVersioning not implemented for ProcessDaoZusammenImpl
49   }
50
51   @Override
52   public void create(ProcessEntity processEntity) {
53     ZusammenElement processElement = buildProcessElement(processEntity, Action.CREATE);
54
55     ZusammenElement processesElement =
56         buildStructuralElement(ElementType.Processes, Action.IGNORE);
57     ZusammenElement aggregatedElement = VspZusammenUtil.aggregateElements(processesElement,
58         processElement);
59     ZusammenElement componentElement;
60     if (processEntity.getComponentId() != null) {
61       componentElement = buildElement(new Id(processEntity.getComponentId()), Action.IGNORE);
62       aggregatedElement =
63           VspZusammenUtil.aggregateElements(componentElement, aggregatedElement);
64     }
65
66     SessionContext context = createSessionContext();
67     ElementContext elementContext =
68         new ElementContext(processEntity.getVspId(), processEntity.getVersion().getId());
69
70     Element savedElement =
71         zusammenAdaptor.saveElement(context, elementContext, aggregatedElement, "Create process");
72     processEntity
73         .setId(processEntity.getComponentId() == null
74             ? savedElement.getSubElements().iterator().next().getElementId().getValue()
75             : savedElement.getSubElements().iterator().next().getSubElements()
76                 .iterator().next().getElementId().getValue());
77   }
78
79   @Override
80   public ProcessEntity get(ProcessEntity processEntity) {
81     SessionContext context = createSessionContext();
82     ElementContext elementContext =
83         new ElementContext(processEntity.getVspId(), processEntity.getVersion().getId());
84
85     return zusammenAdaptor.getElementInfo(context, elementContext, new Id(processEntity.getId()))
86         .map(elementInfo -> convertToProcessEntity(elementInfo, new ElementToProcessConvertor(),
87             processEntity))
88         .orElse(null);
89   }
90
91   @Override
92   public void update(ProcessEntity processEntity) {
93     ProcessEntity retrieved = getArtifact(processEntity);
94     if (retrieved != null && retrieved.getArtifact() != null) {
95       processEntity.setArtifactName(retrieved.getArtifactName());
96       processEntity.setArtifact(retrieved.getArtifact());
97     }
98
99     update(processEntity, "Update process");
100   }
101
102   @Override
103   public void delete(ProcessEntity processEntity) {
104     ZusammenElement processElement = buildElement(new Id(processEntity.getId()), Action.DELETE);
105
106     SessionContext context = createSessionContext();
107     ElementContext elementContext =
108         new ElementContext(processEntity.getVspId(), processEntity.getVersion().getId());
109
110     zusammenAdaptor.saveElement(context, elementContext, processElement,
111         String.format("Delete process with id %s", processEntity.getId()));
112   }
113
114   @Override
115   public void deleteAll(ProcessEntity processEntity) {
116     SessionContext context = createSessionContext();
117     ElementContext elementContext =
118         new ElementContext(processEntity.getVspId(), processEntity.getVersion().getId());
119
120     Optional<Element> optionalElement = zusammenAdaptor.getElementByName(context,
121         elementContext, new Id(processEntity.getComponentId()), ElementType.Processes.name());
122
123     if (optionalElement.isPresent()) {
124       Element processesElement = optionalElement.get();
125       Collection<Element> processes = processesElement.getSubElements();
126
127       processes.forEach(process -> {
128         ZusammenElement processZusammenElement =
129             buildElement(process.getElementId(), Action.DELETE);
130         zusammenAdaptor.saveElement(context, elementContext, processZusammenElement,
131             "Delete Process with id " + process.getElementId());
132       });
133     }
134   }
135
136   @Override
137   public void deleteVspAll(String vspId, Version version) {
138     SessionContext context = createSessionContext();
139     ElementContext elementContext =
140         new ElementContext(vspId, version.getId());
141
142     Optional<Element> optionalElement = zusammenAdaptor.getElementByName(context,
143         elementContext, null, ElementType.Processes.name());
144
145     if (optionalElement.isPresent()) {
146       Element processesElement = optionalElement.get();
147       Collection<Element> processes = processesElement.getSubElements();
148
149       processes.forEach(process -> {
150         ZusammenElement processZusammenElement =
151             buildElement(process.getElementId(), Action.DELETE);
152         zusammenAdaptor.saveElement(context, elementContext, processZusammenElement,
153             "Delete Process with id " + process.getElementId());
154       });
155     }
156   }
157
158   @Override
159   public ProcessEntity getArtifact(ProcessEntity processEntity) {
160     SessionContext context = createSessionContext();
161     ElementContext elementContext =
162         new ElementContext(processEntity.getVspId(), processEntity.getVersion().getId());
163
164     return zusammenAdaptor.getElement(context, elementContext, processEntity.getId())
165         .map(element -> {
166           ProcessEntity process = new ElementToProcessConvertor().convert(element);
167           process.setVspId(processEntity.getVspId());
168           process.setVersion(processEntity.getVersion());
169           process.setComponentId(processEntity.getComponentId());
170           return process;
171         })
172         .orElse(null);
173   }
174
175   @Override
176   public void uploadArtifact(ProcessEntity processEntity) {
177     ProcessEntity retrieved = get(processEntity);
178     if (retrieved != null) {
179       retrieved.setArtifactName(processEntity.getArtifactName());
180       retrieved.setArtifact(processEntity.getArtifact());
181
182       update(retrieved, "Upload process artifact");
183     }
184   }
185
186   @Override
187   public void deleteArtifact(ProcessEntity processEntity) {
188     ProcessEntity retrieved = get(processEntity);
189     if (retrieved != null) {
190       retrieved.setArtifactName(null);
191       retrieved.setArtifact(null);
192
193       update(retrieved, "Delete process artifact");
194     }
195   }
196
197   @Override
198   public Collection<ProcessEntity> list(ProcessEntity processEntity) {
199     SessionContext context = createSessionContext();
200     ElementContext elementContext =
201         new ElementContext(processEntity.getVspId(), processEntity.getVersion().getId());
202
203     Optional<ElementInfo> processesOptional =
204         zusammenAdaptor.getElementInfoByName(context, elementContext,
205             extractParentElementId(processEntity), ElementType.Processes.name());
206     if (!processesOptional.isPresent()) {
207       return new ArrayList<>();
208     }
209     ElementToProcessConvertor convertor = new ElementToProcessConvertor();
210     return zusammenAdaptor.listElements(context, elementContext, processesOptional.get().getId())
211         .stream()
212         .map(elementInfo -> convertToProcessEntity(elementInfo, convertor, processEntity))
213         .collect(Collectors.toList());
214   }
215
216   private ProcessEntity convertToProcessEntity(ElementInfo elementInfo,
217                                                ElementToProcessConvertor convertor,
218                                                ProcessEntity inputProcess) {
219     ProcessEntity process = convertor.convert(elementInfo);
220     process.setVspId(inputProcess.getVspId());
221     process.setVersion(inputProcess.getVersion());
222     process.setComponentId(inputProcess.getComponentId());
223     return process;
224   }
225
226   private void update(ProcessEntity processEntity, String message) {
227     ZusammenElement processElement = buildProcessElement(processEntity, Action.UPDATE);
228
229     SessionContext context = createSessionContext();
230     ElementContext elementContext =
231         new ElementContext(processEntity.getVspId(), processEntity.getVersion().getId());
232
233     zusammenAdaptor.saveElement(context, elementContext, processElement, message);
234   }
235
236   private Id extractParentElementId(ProcessEntity processEntity) {
237     return processEntity.getComponentId() == null ? null : new Id(processEntity.getComponentId());
238   }
239
240   private ZusammenElement buildProcessElement(ProcessEntity process, Action action) {
241
242     Info info = new Info();
243     info.setName(process.getName());
244     info.addProperty(NAME, process.getName());
245     info.addProperty(ElementPropertyName.elementType.name(), ElementType.Process);
246     info.addProperty(ARTIFACT_NAME, process.getArtifactName());
247     info.addProperty(DESCRIPTION, process.getDescription());
248     info.addProperty(PROCESS_TYPE, process.getType() != null ? process.getType().name() : null);
249
250     ZusammenElement processElement = buildElement(new Id(process.getId()), action);
251     processElement.setInfo(info);
252     if (Objects.nonNull(process.getArtifact())) {
253       processElement.setData(new ByteArrayInputStream(process.getArtifact().array()));
254     }
255     return processElement;
256   }
257
258 }