1 package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen;
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;
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;
26 import static org.openecomp.core.zusammen.api.ZusammenUtil.*;
27 import static org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen.convertor.ElementToProcessConvertor.*;
31 * @since March 23, 2017
33 public class ProcessDaoZusammenImpl implements ProcessDao {
35 private ZusammenAdaptor zusammenAdaptor;
37 public ProcessDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
38 this.zusammenAdaptor = zusammenAdaptor;
42 public void registerVersioning(String versionableEntityType) {
43 // registerVersioning not implemented for ProcessDaoZusammenImpl
47 public void create(ProcessEntity processEntity) {
48 ZusammenElement processElement = buildProcessElement(processEntity, Action.CREATE);
50 ZusammenElement processesElement =
51 buildStructuralElement(ElementType.Processes, Action.IGNORE);
52 ZusammenElement aggregatedElement = VspZusammenUtil.aggregateElements(processesElement,
54 ZusammenElement componentElement;
55 if (processEntity.getComponentId() != null) {
56 componentElement = buildElement(new Id(processEntity.getComponentId()), Action.IGNORE);
58 VspZusammenUtil.aggregateElements(componentElement, aggregatedElement);
61 SessionContext context = createSessionContext();
62 ElementContext elementContext =
63 new ElementContext(processEntity.getVspId(), processEntity.getVersion().getId());
65 Element savedElement =
66 zusammenAdaptor.saveElement(context, elementContext, aggregatedElement, "Create process");
68 .setId(processEntity.getComponentId() == null
69 ? savedElement.getSubElements().iterator().next().getElementId().getValue()
70 : savedElement.getSubElements().iterator().next().getSubElements()
71 .iterator().next().getElementId().getValue());
75 public ProcessEntity get(ProcessEntity processEntity) {
76 SessionContext context = createSessionContext();
77 ElementContext elementContext =
78 new ElementContext(processEntity.getVspId(), processEntity.getVersion().getId());
80 return zusammenAdaptor.getElementInfo(context, elementContext, new Id(processEntity.getId()))
81 .map(elementInfo -> convertToProcessEntity(elementInfo, new ElementToProcessConvertor(),
87 public void update(ProcessEntity processEntity) {
88 ProcessEntity retrieved = getArtifact(processEntity);
89 if (retrieved != null && retrieved.getArtifact() != null) {
90 processEntity.setArtifactName(retrieved.getArtifactName());
91 processEntity.setArtifact(retrieved.getArtifact());
94 update(processEntity, "Update process");
98 public void delete(ProcessEntity processEntity) {
99 ZusammenElement processElement = buildElement(new Id(processEntity.getId()), Action.DELETE);
101 SessionContext context = createSessionContext();
102 ElementContext elementContext =
103 new ElementContext(processEntity.getVspId(), processEntity.getVersion().getId());
105 zusammenAdaptor.saveElement(context, elementContext, processElement,
106 String.format("Delete process with id %s", processEntity.getId()));
110 public void deleteAll(ProcessEntity processEntity) {
111 SessionContext context = createSessionContext();
112 ElementContext elementContext =
113 new ElementContext(processEntity.getVspId(), processEntity.getVersion().getId());
115 Optional<Element> optionalElement = zusammenAdaptor.getElementByName(context,
116 elementContext, new Id(processEntity.getComponentId()), ElementType.Processes.name());
118 if (optionalElement.isPresent()) {
119 Element processesElement = optionalElement.get();
120 Collection<Element> processes = processesElement.getSubElements();
122 processes.forEach(process -> {
123 ZusammenElement processZusammenElement =
124 buildElement(process.getElementId(), Action.DELETE);
125 zusammenAdaptor.saveElement(context, elementContext, processZusammenElement,
126 "Delete Process with id " + process.getElementId());
132 public void deleteVspAll(String vspId, Version version) {
133 SessionContext context = createSessionContext();
134 ElementContext elementContext =
135 new ElementContext(vspId, version.getId());
137 Optional<Element> optionalElement = zusammenAdaptor.getElementByName(context,
138 elementContext, null, ElementType.Processes.name());
140 if (optionalElement.isPresent()) {
141 Element processesElement = optionalElement.get();
142 Collection<Element> processes = processesElement.getSubElements();
144 processes.forEach(process -> {
145 ZusammenElement processZusammenElement =
146 buildElement(process.getElementId(), Action.DELETE);
147 zusammenAdaptor.saveElement(context, elementContext, processZusammenElement,
148 "Delete Process with id " + process.getElementId());
154 public ProcessEntity getArtifact(ProcessEntity processEntity) {
155 SessionContext context = createSessionContext();
156 ElementContext elementContext =
157 new ElementContext(processEntity.getVspId(), processEntity.getVersion().getId());
159 return zusammenAdaptor.getElement(context, elementContext, processEntity.getId())
161 ProcessEntity process = new ElementToProcessConvertor().convert(element);
162 process.setVspId(processEntity.getVspId());
163 process.setVersion(processEntity.getVersion());
164 process.setComponentId(processEntity.getComponentId());
171 public void uploadArtifact(ProcessEntity processEntity) {
172 ProcessEntity retrieved = get(processEntity);
173 if (retrieved != null) {
174 retrieved.setArtifactName(processEntity.getArtifactName());
175 retrieved.setArtifact(processEntity.getArtifact());
177 update(retrieved, "Upload process artifact");
182 public void deleteArtifact(ProcessEntity processEntity) {
183 ProcessEntity retrieved = get(processEntity);
184 if (retrieved != null) {
185 retrieved.setArtifactName(null);
186 retrieved.setArtifact(null);
188 update(retrieved, "Delete process artifact");
193 public Collection<ProcessEntity> list(ProcessEntity processEntity) {
194 SessionContext context = createSessionContext();
195 ElementContext elementContext =
196 new ElementContext(processEntity.getVspId(), processEntity.getVersion().getId());
198 Optional<ElementInfo> processesOptional =
199 zusammenAdaptor.getElementInfoByName(context, elementContext,
200 extractParentElementId(processEntity), ElementType.Processes.name());
201 if (!processesOptional.isPresent()) {
202 return new ArrayList<>();
204 ElementToProcessConvertor convertor = new ElementToProcessConvertor();
205 return zusammenAdaptor.listElements(context, elementContext, processesOptional.get().getId())
207 .map(elementInfo -> convertToProcessEntity(elementInfo, convertor, processEntity))
208 .collect(Collectors.toList());
211 private ProcessEntity convertToProcessEntity(ElementInfo elementInfo,
212 ElementToProcessConvertor convertor,
213 ProcessEntity inputProcess) {
214 ProcessEntity process = convertor.convert(elementInfo);
215 process.setVspId(inputProcess.getVspId());
216 process.setVersion(inputProcess.getVersion());
217 process.setComponentId(inputProcess.getComponentId());
221 private void update(ProcessEntity processEntity, String message) {
222 ZusammenElement processElement = buildProcessElement(processEntity, Action.UPDATE);
224 SessionContext context = createSessionContext();
225 ElementContext elementContext =
226 new ElementContext(processEntity.getVspId(), processEntity.getVersion().getId());
228 zusammenAdaptor.saveElement(context, elementContext, processElement, message);
231 private Id extractParentElementId(ProcessEntity processEntity) {
232 return processEntity.getComponentId() == null ? null : new Id(processEntity.getComponentId());
235 private ZusammenElement buildProcessElement(ProcessEntity process, Action action) {
237 Info info = new Info();
238 info.setName(process.getName());
239 info.addProperty(NAME, process.getName());
240 info.addProperty(ElementPropertyName.elementType.name(), ElementType.Process);
241 info.addProperty(ARTIFACT_NAME, process.getArtifactName());
242 info.addProperty(DESCRIPTION, process.getDescription());
243 info.addProperty(PROCESS_TYPE, process.getType() != null ? process.getType().name() : null);
245 ZusammenElement processElement = buildElement(new Id(process.getId()), action);
246 processElement.setInfo(info);
247 if (Objects.nonNull(process.getArtifact())) {
248 processElement.setData(new ByteArrayInputStream(process.getArtifact().array()));
250 return processElement;