[SDC-29] rebase continue work to align source
[sdc.git] / openecomp-be / lib / openecomp-sdc-vendor-software-product-lib / openecomp-sdc-vendor-software-product-core / src / main / java / org / openecomp / sdc / vendorsoftwareproduct / dao / impl / zusammen / ProcessDaoZusammenImpl.java
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.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;
18
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;
26
27 /**
28  * @author Avrahamg.
29  * @since March 23, 2017
30  */
31 public class ProcessDaoZusammenImpl implements ProcessDao {
32
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";
38
39   private ZusammenAdaptor zusammenAdaptor;
40
41   public ProcessDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
42     this.zusammenAdaptor = zusammenAdaptor;
43   }
44
45   @Override
46   public void registerVersioning(String versionableEntityType) {
47
48   }
49
50   @Override
51   public void create(ProcessEntity processEntity) {
52     ZusammenElement processElement = buildProcessElement(processEntity, Action.CREATE);
53
54     ZusammenElement processesElement =
55         VspZusammenUtil.buildStructuralElement(StructureElement.Processes, null);
56     ZusammenElement aggregatedElement = VspZusammenUtil.aggregateElements(processesElement,
57         processElement);
58     ZusammenElement componentElement;
59     if (processEntity.getComponentId() != null) {
60       componentElement = createParentElement(processEntity);
61       aggregatedElement =
62           VspZusammenUtil.aggregateElements(componentElement, aggregatedElement);
63     }
64
65     SessionContext context = ZusammenUtil.createSessionContext();
66     Id itemId = new Id(processEntity.getVspId());
67     ElementContext elementContext = new ElementContext(itemId,
68         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor));
69
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());
76       } else {
77         processEntity.setId(element.getSubElements().iterator().next()
78             .getSubElements().iterator().next().getElementId().getValue());
79       }
80     });
81   }
82
83   @Override
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()));
90
91     Optional<Element> elementOptional =
92         zusammenAdaptor.getElement(context, elementContext, process.getId());
93
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);
102
103       process.setArtifact(ByteBuffer.wrap(FileUtils.toByteArray(element.getData())));
104       return process;
105     } else {
106       return null;
107     }
108   }
109
110   @Override
111   public void update(ProcessEntity processEntity) {
112     ZusammenElement processElement = buildProcessElement(processEntity, Action.UPDATE);
113
114     SessionContext context = ZusammenUtil.createSessionContext();
115     Id itemId = new Id(processEntity.getVspId());
116     ElementContext elementContext = new ElementContext(itemId,
117         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor));
118
119     Optional<Element> element =
120         zusammenAdaptor.saveElement(context, elementContext, processElement, "Create process");
121     System.out.println(element.get().getElementId());
122   }
123
124   @Override
125   public void delete(ProcessEntity processEntity) {
126     ZusammenElement processElement = new ZusammenElement();
127     processElement.setElementId(new Id(processEntity.getId()));
128     processElement.setAction(Action.DELETE);
129
130     SessionContext context = ZusammenUtil.createSessionContext();
131     Id itemId = new Id(processEntity.getVspId());
132     ElementContext elementContext = new ElementContext(itemId,
133         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor));
134
135     zusammenAdaptor.saveElement(context, elementContext, processElement,
136         String.format("Delete process with id %s", processEntity.getId()));
137   }
138
139   @Override
140   public void deleteAll(ProcessEntity processEntity) {
141     ZusammenElement aggregatedElement =
142         VspZusammenUtil.buildStructuralElement(StructureElement.Processes, Action.DELETE);
143
144     if (processEntity.getComponentId() != null) {
145       ZusammenElement componentElement = createParentElement(processEntity);
146       aggregatedElement = VspZusammenUtil.aggregateElements(componentElement,
147           aggregatedElement);
148     }
149
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");
155   }
156
157   @Override
158   public void deleteVspAll(String vspId, Version version) {
159     ProcessEntity processEntity = new ProcessEntity();
160     processEntity.setVersion(version);
161     processEntity.setVspId(vspId);
162     deleteAll(processEntity);
163   }
164
165   @Override
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()));
172
173     Optional<ElementInfo> processesOptional =
174         zusammenAdaptor.getElementInfoByName(context, elementContext,
175             extractParentElementId(process), StructureElement.Processes.name());
176     if (!processesOptional.isPresent()) {
177       return new ArrayList<>();
178     }
179     return zusammenAdaptor.listElements(context, elementContext, processesOptional.get().getId())
180         .stream()
181         .map(elementInfo -> mapElementInfoToProcess(
182             process.getVspId(), process.getVersion(), process.getComponentId(),
183             elementInfo))
184         .collect(Collectors.toList());
185   }
186
187   private Id extractParentElementId(ProcessEntity processEntity) {
188     return processEntity.getComponentId() == null ? null : new Id(processEntity.getComponentId());
189   }
190
191   private ProcessEntity mapElementInfoToProcess(String vspId, Version version,
192                                                 String componentId,
193                                                 ElementInfo elementInfo) {
194     ProcessEntity processEntity = new ProcessEntity(vspId, version, componentId, elementInfo
195         .getId().getValue());
196     processEntity.setName((String) elementInfo.getInfo().getProperties().get(NAME));
197     processEntity
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)) :
202             null);
203     return processEntity;
204   }
205
206   private ZusammenElement buildProcessElement(ProcessEntity process, Action action) {
207
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);
215
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()));
222     }
223     return processElement;
224   }
225
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;
231   }
232 }