2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen;
23 import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element;
24 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement;
25 import com.amdocs.zusammen.datatypes.Id;
26 import com.amdocs.zusammen.datatypes.SessionContext;
27 import com.amdocs.zusammen.datatypes.item.Action;
28 import com.amdocs.zusammen.datatypes.item.ElementContext;
29 import org.openecomp.core.enrichment.types.MonitoringUploadType;
30 import org.openecomp.core.utilities.file.FileUtils;
31 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
32 import org.openecomp.sdc.datatypes.model.ElementType;
33 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentArtifactDao;
34 import org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen.convertor.ElementToComponentMonitoringUploadConvertor;
35 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentMonitoringUploadEntity;
37 import java.io.ByteArrayInputStream;
38 import java.nio.ByteBuffer;
39 import java.util.Collection;
40 import java.util.Collections;
41 import java.util.Optional;
42 import java.util.stream.Collectors;
44 import static org.openecomp.core.zusammen.api.ZusammenUtil.*;
48 * @since March 21, 2017
50 public class ComponentArtifactDaoZusammenImpl implements ComponentArtifactDao {
52 private static final String ARTIFACT_NAME = "artifactName";
54 private ZusammenAdaptor zusammenAdaptor;
56 public ComponentArtifactDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
57 this.zusammenAdaptor = zusammenAdaptor;
61 public void registerVersioning(String versionableEntityType) {
62 // registerVersioning is not implemented for ComponentArtifactDaoZusammenImpl
66 public Optional<ComponentMonitoringUploadEntity> getByType(
67 ComponentMonitoringUploadEntity componentMonitoringUploadEntity) {
68 SessionContext context = createSessionContext();
69 ElementContext elementContext =
70 new ElementContext(componentMonitoringUploadEntity.getVspId(),
71 componentMonitoringUploadEntity.getVersion().getId());
73 Optional<Element> mibsElement =
74 zusammenAdaptor.getElementByName(context, elementContext,
75 new Id(componentMonitoringUploadEntity.getComponentId()), ElementType.Mibs.toString());
76 if (mibsElement.isPresent()) {
77 Optional<Element> monitoringElement = zusammenAdaptor
78 .getElementByName(context, elementContext, mibsElement.get().getElementId(),
79 getMonitoringStructuralElement(componentMonitoringUploadEntity.getType()).toString());
80 if (monitoringElement.isPresent()) {
81 ComponentMonitoringUploadEntity entity =
82 new ElementToComponentMonitoringUploadConvertor().convert(monitoringElement.get());
83 entity.setVspId(componentMonitoringUploadEntity.getVspId());
84 entity.setVersion(componentMonitoringUploadEntity.getVersion());
85 entity.setComponentId(componentMonitoringUploadEntity.getComponentId());
86 return Optional.of(entity);
90 return Optional.empty();
94 public void create(ComponentMonitoringUploadEntity entity) {
95 ZusammenElement mibElement = buildMibElement(entity);
97 ZusammenElement mibsElement = buildStructuralElement(ElementType.Mibs, null);
99 ZusammenElement componentElement = buildElement(new Id(entity.getComponentId()), Action.IGNORE);
101 SessionContext context = createSessionContext();
102 ElementContext elementContext =
103 new ElementContext(entity.getVspId(), entity.getVersion().getId());
105 Element savedElement = zusammenAdaptor.saveElement(context, elementContext,
106 VspZusammenUtil.aggregateElements(componentElement, mibsElement, mibElement),
107 "Create monitoring upload");
108 entity.setId(savedElement.getSubElements().iterator().next()
109 .getSubElements().iterator().next().getElementId().getValue());
113 public void delete(ComponentMonitoringUploadEntity componentMonitoringUploadEntity) {
115 ZusammenElement mibElement = buildMibElementStructure(componentMonitoringUploadEntity);
116 mibElement.setElementId(new Id(componentMonitoringUploadEntity.getId()));
117 SessionContext context = createSessionContext();
118 ElementContext elementContext =
119 new ElementContext(componentMonitoringUploadEntity.getVspId(),
120 componentMonitoringUploadEntity.getVersion().getId());
122 zusammenAdaptor.saveElement(context, elementContext, mibElement,
123 String.format("Delete mib with id %s", componentMonitoringUploadEntity.getId()));
129 public Collection<ComponentMonitoringUploadEntity> list(
130 ComponentMonitoringUploadEntity mibEntity) {
131 SessionContext context = createSessionContext();
132 ElementContext elementContext =
133 new ElementContext(mibEntity.getVspId(), mibEntity.getVersion().getId());
134 return zusammenAdaptor
135 .listElementsByName(context, elementContext, new Id(mibEntity.getComponentId()),
136 ElementType.Mibs.toString())
138 .map(new ElementToComponentMonitoringUploadConvertor()::convert)
140 mib.setVspId(mibEntity.getVspId());
141 mib.setVersion(mibEntity.getVersion());
142 mib.setComponentId(mibEntity.getComponentId());
145 .collect(Collectors.toList());
149 public void deleteAll(ComponentMonitoringUploadEntity componentMonitoringUploadEntity) {
150 SessionContext context = createSessionContext();
151 ElementContext elementContext =
152 new ElementContext(componentMonitoringUploadEntity.getVspId(),
153 componentMonitoringUploadEntity.getVersion().getId());
155 Optional<Element> optionalElement = zusammenAdaptor.getElementByName(context,
156 elementContext, new Id(componentMonitoringUploadEntity.getComponentId()), ElementType.Mibs
159 if (optionalElement.isPresent()) {
160 Element mibsElement = optionalElement.get();
161 Collection<Element> mibs = mibsElement.getSubElements();
163 mibs.forEach(mib -> {
164 ZusammenElement mibZusammenElement = buildElement(mib.getElementId(), Action.DELETE);
165 zusammenAdaptor.saveElement(context, elementContext, mibZusammenElement,
166 "Delete mib with id " + mib.getElementId());
172 public Collection<ComponentMonitoringUploadEntity> listArtifacts(
173 ComponentMonitoringUploadEntity monitoringUploadEntity) {
174 SessionContext context = createSessionContext();
175 ElementContext elementContext = new ElementContext(monitoringUploadEntity.getVspId(),
176 monitoringUploadEntity.getVersion().getId());
178 final Optional<Element> elementByName =
179 zusammenAdaptor.getElementByName(context, elementContext,
180 new Id(monitoringUploadEntity.getComponentId()), ElementType.Mibs.name());
182 if (!elementByName.isPresent()) {
183 return Collections.emptyList();
185 final Id elementId = elementByName.get().getElementId();
186 return zusammenAdaptor.listElementData(context, elementContext, elementId).stream()
187 .map(element -> buildMibEntity(element, monitoringUploadEntity))
188 .collect(Collectors.toList());
192 private ComponentMonitoringUploadEntity buildMibEntity(Element element,
193 ComponentMonitoringUploadEntity monitoringUploadEntity) {
194 final String componentId = monitoringUploadEntity.getComponentId();
195 ComponentMonitoringUploadEntity
196 createdMib = new ComponentMonitoringUploadEntity(monitoringUploadEntity.getVspId(),
197 monitoringUploadEntity.getVersion(),
200 createdMib.setArtifactName((String) element.getInfo().getProperties().get(ARTIFACT_NAME));
201 createdMib.setArtifact(ByteBuffer.wrap(FileUtils.toByteArray(element.getData())));
202 createdMib.setType(MonitoringUploadType.valueOf(element.getInfo().getName()));
206 private ZusammenElement buildMibElement(
207 ComponentMonitoringUploadEntity monitoringUploadEntity) {
209 ZusammenElement monitoringElement = buildMibElementStructure(monitoringUploadEntity);
210 monitoringElement.getInfo().getProperties()
211 .put(ARTIFACT_NAME, monitoringUploadEntity.getArtifactName());
213 .setData(new ByteArrayInputStream(monitoringUploadEntity.getArtifact().array()));
214 return monitoringElement;
217 private ZusammenElement buildMibElementStructure(
218 ComponentMonitoringUploadEntity componentMonitoringUploadEntity) {
219 return buildStructuralElement(getMonitoringStructuralElement(componentMonitoringUploadEntity
220 .getType()), Action.UPDATE);
223 private ElementType getMonitoringStructuralElement(MonitoringUploadType type){
226 return ElementType.SNMP_POLL;
228 return ElementType.SNMP_TRAP;
230 return ElementType.VES_EVENTS;
232 throw new IllegalArgumentException();