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.utilities.file.FileUtils;
12 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
13 import org.openecomp.core.zusammen.api.ZusammenUtil;
14 import org.openecomp.sdc.vendorsoftwareproduct.dao.ProcessDao;
15 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity;
16 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessType;
17 import org.openecomp.sdc.versioning.dao.types.Version;
19 import java.io.ByteArrayInputStream;
20 import java.nio.ByteBuffer;
21 import java.util.ArrayList;
22 import java.util.Collection;
23 import java.util.Objects;
24 import java.util.Optional;
25 import java.util.stream.Collectors;
29 * @since March 23, 2017
31 public class ProcessDaoZusammenImpl implements ProcessDao {
33 private static final String NAME = "name";
34 private static final String ELEMENT_TYPE = "type";
35 private static final String ARTIFACT_NAME = "artifactName";
36 private static final String DESCRIPTION = "description";
37 private static final String PROCESS_TYPE = "processType";
39 private ZusammenAdaptor zusammenAdaptor;
41 public ProcessDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
42 this.zusammenAdaptor = zusammenAdaptor;
46 public void registerVersioning(String versionableEntityType) {
51 public void create(ProcessEntity processEntity) {
52 ZusammenElement processElement = buildProcessElement(processEntity, Action.CREATE);
54 ZusammenElement processesElement =
55 VspZusammenUtil.buildStructuralElement(StructureElement.Processes, null);
56 ZusammenElement aggregatedElement = VspZusammenUtil.aggregateElements(processesElement,
58 ZusammenElement componentElement;
59 if (processEntity.getComponentId() != null) {
60 componentElement = createParentElement(processEntity);
62 VspZusammenUtil.aggregateElements(componentElement, aggregatedElement);
65 SessionContext context = ZusammenUtil.createSessionContext();
66 Id itemId = new Id(processEntity.getVspId());
67 ElementContext elementContext = new ElementContext(itemId,
68 VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor));
70 Optional<Element> savedElement =
71 zusammenAdaptor.saveElement(context, elementContext, aggregatedElement, "Create process");
72 savedElement.ifPresent(element -> {
73 if (processEntity.getComponentId() == null) {
74 processEntity.setId(element.getSubElements().iterator().next()
75 .getElementId().getValue());
77 processEntity.setId(element.getSubElements().iterator().next()
78 .getSubElements().iterator().next().getElementId().getValue());
84 public ProcessEntity get(ProcessEntity process) {
85 SessionContext context = ZusammenUtil.createSessionContext();
86 Id itemId = new Id(process.getVspId());
87 ElementContext elementContext = new ElementContext(itemId,
88 VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor),
89 VspZusammenUtil.getVersionTag(process.getVersion()));
91 Optional<Element> elementOptional =
92 zusammenAdaptor.getElement(context, elementContext, process.getId());
94 if (elementOptional.isPresent()) {
95 Element element = elementOptional.get();
96 process.setName(element.getInfo().getProperty(NAME));
97 process.setArtifactName(element.getInfo().getProperty(ARTIFACT_NAME));
98 process.setDescription(element.getInfo().getProperty(DESCRIPTION));
99 process.setType(element.getInfo().getProperty
100 (PROCESS_TYPE) != null ? ProcessType.valueOf(element.getInfo().getProperty
101 (PROCESS_TYPE)) : null);
103 process.setArtifact(ByteBuffer.wrap(FileUtils.toByteArray(element.getData())));
111 public void update(ProcessEntity processEntity) {
112 ZusammenElement processElement = buildProcessElement(processEntity, Action.UPDATE);
114 SessionContext context = ZusammenUtil.createSessionContext();
115 Id itemId = new Id(processEntity.getVspId());
116 ElementContext elementContext = new ElementContext(itemId,
117 VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor));
119 Optional<Element> element =
120 zusammenAdaptor.saveElement(context, elementContext, processElement, "Create process");
121 System.out.println(element.get().getElementId());
125 public void delete(ProcessEntity processEntity) {
126 ZusammenElement processElement = new ZusammenElement();
127 processElement.setElementId(new Id(processEntity.getId()));
128 processElement.setAction(Action.DELETE);
130 SessionContext context = ZusammenUtil.createSessionContext();
131 Id itemId = new Id(processEntity.getVspId());
132 ElementContext elementContext = new ElementContext(itemId,
133 VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor));
135 zusammenAdaptor.saveElement(context, elementContext, processElement,
136 String.format("Delete process with id %s", processEntity.getId()));
140 public void deleteAll(ProcessEntity processEntity) {
141 ZusammenElement aggregatedElement =
142 VspZusammenUtil.buildStructuralElement(StructureElement.Processes, Action.DELETE);
144 if (processEntity.getComponentId() != null) {
145 ZusammenElement componentElement = createParentElement(processEntity);
146 aggregatedElement = VspZusammenUtil.aggregateElements(componentElement,
150 SessionContext context = ZusammenUtil.createSessionContext();
151 Id itemId = new Id(processEntity.getVspId());
152 ElementContext elementContext = new ElementContext(itemId,
153 VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor));
154 zusammenAdaptor.saveElement(context, elementContext, aggregatedElement, "Delete All processes");
158 public void deleteVspAll(String vspId, Version version) {
159 ProcessEntity processEntity = new ProcessEntity();
160 processEntity.setVersion(version);
161 processEntity.setVspId(vspId);
162 deleteAll(processEntity);
166 public Collection<ProcessEntity> list(ProcessEntity process) {
167 SessionContext context = ZusammenUtil.createSessionContext();
168 Id itemId = new Id(process.getVspId());
169 ElementContext elementContext = new ElementContext(itemId,
170 VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor),
171 VspZusammenUtil.getVersionTag(process.getVersion()));
173 Optional<ElementInfo> processesOptional =
174 zusammenAdaptor.getElementInfoByName(context, elementContext,
175 extractParentElementId(process), StructureElement.Processes.name());
176 if (!processesOptional.isPresent()) {
177 return new ArrayList<>();
179 return zusammenAdaptor.listElements(context, elementContext, processesOptional.get().getId())
181 .map(elementInfo -> mapElementInfoToProcess(
182 process.getVspId(), process.getVersion(), process.getComponentId(),
184 .collect(Collectors.toList());
187 private Id extractParentElementId(ProcessEntity processEntity) {
188 return processEntity.getComponentId() == null ? null : new Id(processEntity.getComponentId());
191 private ProcessEntity mapElementInfoToProcess(String vspId, Version version,
193 ElementInfo elementInfo) {
194 ProcessEntity processEntity = new ProcessEntity(vspId, version, componentId, elementInfo
195 .getId().getValue());
196 processEntity.setName((String) elementInfo.getInfo().getProperties().get(NAME));
198 .setArtifactName((String) elementInfo.getInfo().getProperties().get(ARTIFACT_NAME));
199 processEntity.setDescription((String) elementInfo.getInfo().getProperties().get(DESCRIPTION));
200 processEntity.setType( elementInfo.getInfo().getProperties().get(PROCESS_TYPE) != null ?
201 ProcessType.valueOf((String) elementInfo.getInfo().getProperties().get(PROCESS_TYPE)) :
203 return processEntity;
206 private ZusammenElement buildProcessElement(ProcessEntity process, Action action) {
208 Info info = new Info();
209 info.setName(process.getName());
210 info.addProperty(NAME, process.getName());
211 info.addProperty(ELEMENT_TYPE, ElementType.Process);
212 info.addProperty(ARTIFACT_NAME, process.getArtifactName());
213 info.addProperty(DESCRIPTION, process.getDescription());
214 info.addProperty(PROCESS_TYPE, process.getType() != null ? process.getType().name() : null);
216 ZusammenElement processElement = new ZusammenElement();
217 processElement.setElementId(new Id(process.getId()));
218 processElement.setAction(action);
219 processElement.setInfo(info);
220 if (Objects.nonNull(process.getArtifact())) {
221 processElement.setData(new ByteArrayInputStream(process.getArtifact().array()));
223 return processElement;
226 private ZusammenElement createParentElement(ProcessEntity entity) {
227 ZusammenElement componentElement = new ZusammenElement();
228 componentElement.setElementId(new Id(entity.getComponentId()));
229 componentElement.setAction(Action.IGNORE);
230 return componentElement;