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