re base code
[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 / DeploymentFlavorDaoZusammenImpl.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.ZusammenElement;
5 import com.amdocs.zusammen.datatypes.Id;
6 import com.amdocs.zusammen.datatypes.SessionContext;
7 import com.amdocs.zusammen.datatypes.item.Action;
8 import com.amdocs.zusammen.datatypes.item.ElementContext;
9 import com.amdocs.zusammen.datatypes.item.Info;
10 import org.openecomp.core.utilities.file.FileUtils;
11 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
12 import org.openecomp.sdc.datatypes.model.ElementType;
13 import org.openecomp.sdc.vendorsoftwareproduct.dao.DeploymentFlavorDao;
14 import org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen.convertor.ElementToDeploymentFlavorConvertor;
15 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.DeploymentFlavorEntity;
16 import org.openecomp.sdc.versioning.dao.types.Version;
17 import org.openecomp.types.ElementPropertyName;
18
19 import java.io.ByteArrayInputStream;
20 import java.util.Collection;
21 import java.util.Optional;
22 import java.util.stream.Collectors;
23
24 import static org.openecomp.core.zusammen.api.ZusammenUtil.*;
25
26 public class DeploymentFlavorDaoZusammenImpl implements DeploymentFlavorDao {
27
28   private ZusammenAdaptor zusammenAdaptor;
29
30   public DeploymentFlavorDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
31     this.zusammenAdaptor = zusammenAdaptor;
32   }
33
34   @Override
35   public void registerVersioning(String versionableEntityType) {
36     // registerVersioning not implemented for DeploymentFlavorDaoZusammenImpl
37   }
38
39   @Override
40   public Collection<DeploymentFlavorEntity> list(DeploymentFlavorEntity deploymentFlavor) {
41     SessionContext context = createSessionContext();
42     ElementContext elementContext =
43         new ElementContext(deploymentFlavor.getVspId(), deploymentFlavor.getVersion().getId());
44
45     return listDeploymentFlavor(zusammenAdaptor, context, elementContext,
46         deploymentFlavor.getVspId(),
47         deploymentFlavor.getVersion());
48   }
49
50   private static Collection<DeploymentFlavorEntity> listDeploymentFlavor(
51       ZusammenAdaptor zusammenAdaptor,
52       SessionContext context,
53       ElementContext elementContext,
54       String vspId, Version version) {
55     ElementToDeploymentFlavorConvertor convertor = new ElementToDeploymentFlavorConvertor();
56     return zusammenAdaptor
57         .listElementsByName(context, elementContext, null,
58             ElementType.DeploymentFlavors.name())
59         .stream().map(elementInfo -> {
60           DeploymentFlavorEntity entity = convertor.convert(
61               elementInfo);
62           entity.setVspId(vspId);
63           entity.setVersion(version);
64           return entity;
65         })
66         .collect(Collectors.toList());
67   }
68
69
70   @Override
71   public void create(DeploymentFlavorEntity deploymentFlavor) {
72     ZusammenElement deploymentFlavorElement = deploymentFlavorToZusammen(deploymentFlavor,
73         Action.CREATE);
74     ZusammenElement deploymentFlavorElements =
75         buildStructuralElement(ElementType.DeploymentFlavors, Action.IGNORE);
76     deploymentFlavorElements.getSubElements().add(deploymentFlavorElement);
77
78     SessionContext context = createSessionContext();
79     Element savedElement = zusammenAdaptor.saveElement(context,
80         new ElementContext(deploymentFlavor.getVspId(), deploymentFlavor.getVersion().getId()),
81         deploymentFlavorElements, "Create deloymentFlavor");
82     deploymentFlavor.setId(savedElement.getSubElements().iterator().next().getElementId()
83         .getValue());
84   }
85
86   @Override
87   public void update(DeploymentFlavorEntity deploymentFlavor) {
88     ZusammenElement deploymentFlavorElement = deploymentFlavorToZusammen(deploymentFlavor,
89         Action.UPDATE);
90
91     SessionContext context = createSessionContext();
92     zusammenAdaptor.saveElement(context,
93         new ElementContext(deploymentFlavor.getVspId(), deploymentFlavor.getVersion().getId()),
94         deploymentFlavorElement, String.format("Update deloymentFlavor with id %s",
95             deploymentFlavor.getId()));
96   }
97
98   @Override
99   public DeploymentFlavorEntity get(DeploymentFlavorEntity deploymentFlavor) {
100     SessionContext context = createSessionContext();
101     ElementContext elementContext =
102         new ElementContext(deploymentFlavor.getVspId(), deploymentFlavor.getVersion().getId());
103
104     Optional<Element> element =
105         zusammenAdaptor.getElement(context, elementContext, deploymentFlavor.getId());
106
107     if (element.isPresent()) {
108       ElementToDeploymentFlavorConvertor convertor = new ElementToDeploymentFlavorConvertor();
109       DeploymentFlavorEntity entity = convertor.convert(element.get());
110       deploymentFlavor.setCompositionData(new String(FileUtils.toByteArray(element.get()
111           .getData())));
112       entity.setVspId(deploymentFlavor.getVspId());
113       entity.setVersion(deploymentFlavor.getVersion());
114       return entity;
115     }
116     return null;
117   }
118
119   @Override
120   public void delete(DeploymentFlavorEntity deploymentFlavor) {
121     ZusammenElement componentElement =
122         buildElement(new Id(deploymentFlavor.getId()), Action.DELETE);
123
124     SessionContext context = createSessionContext();
125     zusammenAdaptor.saveElement(context,
126         new ElementContext(deploymentFlavor.getVspId(), deploymentFlavor.getVersion().getId()),
127         componentElement, String.format("Delete deloymentFlavor with id %s",
128             deploymentFlavor.getId()));
129   }
130
131   @Override
132   public void deleteAll(String vspId, Version version) {
133     SessionContext context = createSessionContext();
134     ElementContext elementContext = new ElementContext(vspId, version.getId());
135
136     Optional<Element> optionalElement = zusammenAdaptor.getElementByName(context,
137         elementContext, null, ElementType.DeploymentFlavors.name());
138
139     if (optionalElement.isPresent()) {
140       Element deploymentFlavorsElement = optionalElement.get();
141       Collection<Element> deploymentFlavors = deploymentFlavorsElement.getSubElements();
142
143       deploymentFlavors.forEach(deplymentFlavor -> {
144         ZusammenElement deplymentFlavorZusammenElement =
145             buildElement(deplymentFlavor.getElementId(), Action.DELETE);
146         zusammenAdaptor.saveElement(context,
147             elementContext, deplymentFlavorZusammenElement, " Delete Deplyment Flavor with id "
148                 + deplymentFlavor.getElementId());
149       });
150     }
151   }
152
153   private ZusammenElement deploymentFlavorToZusammen(DeploymentFlavorEntity deploymentFlavor,
154                                                      Action action) {
155     ZusammenElement deploymentFlavorElement =
156         buildElement(deploymentFlavor.getId() == null ? null : new Id(deploymentFlavor.getId()),
157             action);
158     Info info = new Info();
159     info.addProperty(ElementPropertyName.elementType.name(), ElementType.DeploymentFlavor);
160     info.addProperty(ElementPropertyName.compositionData.name(), deploymentFlavor
161         .getCompositionData());
162     deploymentFlavorElement.setInfo(info);
163     deploymentFlavorElement.setData(new ByteArrayInputStream(deploymentFlavor.getCompositionData()
164         .getBytes()));
165     return deploymentFlavorElement;
166   }
167
168 }