[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 / MibDaoZusammenImpl.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 org.openecomp.core.enrichment.types.ArtifactType;
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.MibDao;
15 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.MibEntity;
16 import org.openecomp.sdc.versioning.dao.types.Version;
17
18 import java.io.ByteArrayInputStream;
19 import java.nio.ByteBuffer;
20 import java.util.Collection;
21 import java.util.Optional;
22 import java.util.stream.Collectors;
23
24 /**
25  * @author Avrahamg.
26  * @since March 21, 2017
27  */
28 public class MibDaoZusammenImpl implements MibDao {
29
30   private static final String ARTIFACT_NAME = "name";
31
32   private ZusammenAdaptor zusammenAdaptor;
33
34   public MibDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
35     this.zusammenAdaptor = zusammenAdaptor;
36   }
37
38   @Override
39   public void registerVersioning(String versionableEntityType) {
40
41   }
42
43   @Override
44   public Optional<MibEntity> getByType(MibEntity mibEntity) {
45     SessionContext context = ZusammenUtil.createSessionContext();
46     Id itemId = new Id(mibEntity.getVspId());
47     ElementContext elementContext = new ElementContext(itemId,
48         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor),
49         VspZusammenUtil.getVersionTag(mibEntity.getVersion()));
50
51     Optional<Element> mibsElement =
52         zusammenAdaptor.getElementByName(context, elementContext, new Id(mibEntity
53             .getComponentId()), StructureElement.Mibs.toString());
54     if (mibsElement.isPresent()) {
55       Optional<Element> mibElement = zusammenAdaptor
56           .getElementByName(context, elementContext, mibsElement.get().getElementId(),
57               getMibStructuralElement(mibEntity.getType()).toString());
58       if (mibElement.isPresent()) {
59         mibEntity.setId(mibElement.get().getElementId().getValue());
60         mibEntity.setArtifactName((String) mibElement.get().getInfo().getProperties().get(ARTIFACT_NAME));
61         mibEntity.setArtifact(ByteBuffer.wrap(FileUtils.toByteArray(mibElement.get().getData())));
62         return Optional.of(mibEntity);
63       }
64     }
65
66     return Optional.empty();
67   }
68
69   @Override
70   public void create(MibEntity mibEntity) {
71     ZusammenElement mibElement = buildMibElement(mibEntity);
72
73     ZusammenElement mibsElement =
74         VspZusammenUtil.buildStructuralElement(StructureElement.Mibs, null);
75
76     ZusammenElement componentElement = buildComponentElement(mibEntity);
77
78     SessionContext context = ZusammenUtil.createSessionContext();
79     Id itemId = new Id(mibEntity.getVspId());
80     ElementContext elementContext = new ElementContext(itemId,
81         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor));
82
83     Optional<Element> savedElement = zusammenAdaptor.saveElement(context, elementContext,
84         VspZusammenUtil.aggregateElements(componentElement, mibsElement, mibElement),
85         "Create mib");
86     savedElement.ifPresent(element ->
87         mibEntity.setId(element.getSubElements().iterator().next()
88             .getSubElements().iterator().next().getElementId().getValue()));
89   }
90
91   @Override
92   public void delete(MibEntity mibEntity) {
93     ZusammenElement mibElement = new ZusammenElement();
94     mibElement.setElementId(new Id(mibEntity.getId()));
95     mibElement.setAction(Action.DELETE);
96
97     SessionContext context = ZusammenUtil.createSessionContext();
98     Id itemId = new Id(mibEntity.getVspId());
99     ElementContext elementContext = new ElementContext(itemId,
100         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor));
101
102     zusammenAdaptor.saveElement(context, elementContext, mibElement,
103         String.format("Delete mib with id %s", mibEntity.getId()));
104   }
105
106   @Override
107   public Collection<MibEntity> list(MibEntity mib) {
108     SessionContext context = ZusammenUtil.createSessionContext();
109     Id itemId = new Id(mib.getVspId());
110     ElementContext elementContext = new ElementContext(itemId,
111         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor),
112         VspZusammenUtil.getVersionTag(mib.getVersion()));
113
114     return zusammenAdaptor.listElementsByName(context, elementContext, new Id(mib.getComponentId()),
115         StructureElement.Mibs.toString()).stream()
116         .map(elementInfo ->
117             mapElementInfoToMib(mib.getVspId(), mib.getVersion(), mib.getComponentId(),
118                 elementInfo))
119         .collect(Collectors.toList());
120   }
121
122   @Override
123   public void deleteAll(MibEntity mibEntity) {
124     ZusammenElement mibsElement =
125         VspZusammenUtil.buildStructuralElement(StructureElement.Mibs, Action.DELETE);
126
127     ZusammenElement componentElement = buildComponentElement(mibEntity);
128
129     SessionContext context = ZusammenUtil.createSessionContext();
130     Id itemId = new Id(mibEntity.getVspId());
131     ElementContext elementContext = new ElementContext(itemId,
132         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor));
133
134     zusammenAdaptor.saveElement(context, elementContext,
135         VspZusammenUtil.aggregateElements(componentElement, mibsElement), "Delete mibs");
136   }
137
138   @Override
139   public Collection<MibEntity> listArtifacts(MibEntity mib) {
140     SessionContext context = ZusammenUtil.createSessionContext();
141     Id itemId = new Id(mib.getVspId());
142     ElementContext elementContext = new ElementContext(itemId,
143         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor),
144         VspZusammenUtil.getVersionTag(mib.getVersion()));
145
146     final Optional<Element> elementByName =
147         zusammenAdaptor.getElementByName(context, elementContext, new Id(mib.getComponentId()
148         ), StructureElement.Mibs.name());
149
150     if(!elementByName.isPresent())
151       return null;
152     else {
153       final Id elementId = elementByName.get().getElementId();
154       return zusammenAdaptor.listElementData(context, elementContext, elementId).stream()
155           .map(element ->
156               buildMibEntity(element,mib)
157           ).collect(Collectors.toList());
158     }
159   }
160
161   private MibEntity buildMibEntity (Element element, MibEntity mib) {
162     MibEntity createdMib = new MibEntity(mib.getVspId(), mib.getVersion(), mib.getComponentId(),
163         null);
164     createdMib.setArtifactName((String) element.getInfo().getProperties().get(ARTIFACT_NAME));
165     createdMib.setArtifact(ByteBuffer.wrap(FileUtils.toByteArray(element.getData())));
166     createdMib.setType( ArtifactType.valueOf(element.getInfo().getName()));
167     return createdMib;
168   }
169
170   private ZusammenElement buildComponentElement(MibEntity mibEntity) {
171     ZusammenElement componentElement = new ZusammenElement();
172     componentElement.setElementId(new Id(mibEntity.getComponentId()));
173     componentElement.setAction(Action.IGNORE);
174     return componentElement;
175   }
176
177   private ZusammenElement buildMibElement(MibEntity mib) {
178     ZusammenElement mibElement = VspZusammenUtil
179         .buildStructuralElement(getMibStructuralElement(mib.getType()), Action.UPDATE);
180     mibElement.getInfo().getProperties().put(ARTIFACT_NAME, mib.getArtifactName());
181     mibElement.setData(new ByteArrayInputStream(mib.getArtifact().array()));
182     return mibElement;
183   }
184
185   private MibEntity mapElementInfoToMib(String vspId, Version version, String componentId,
186                                         ElementInfo elementInfo) {
187     MibEntity mib = new MibEntity(vspId, version, componentId, elementInfo.getId().getValue());
188     mib.setArtifactName((String) elementInfo.getInfo().getProperties().get(ARTIFACT_NAME));
189     mib.setType(ArtifactType.valueOf(elementInfo.getInfo().getName()));
190     return mib;
191   }
192
193   private StructureElement getMibStructuralElement(ArtifactType type) {
194     switch (type) {
195       case SNMP_POLL:
196         return StructureElement.SNMP_POLL;
197       case SNMP_TRAP:
198         return StructureElement.SNMP_TRAP;
199       default:
200         throw new IllegalArgumentException();
201     }
202   }
203 }