4099e1264b0fa622b72d0f20229035cb3d3a9e69
[sdc.git] /
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.ElementInfo;
25 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement;
26 import com.amdocs.zusammen.datatypes.Id;
27 import com.amdocs.zusammen.datatypes.SessionContext;
28 import com.amdocs.zusammen.datatypes.item.Action;
29 import com.amdocs.zusammen.datatypes.item.ElementContext;
30 import com.amdocs.zusammen.datatypes.item.Info;
31 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
32 import org.openecomp.sdc.datatypes.model.ElementType;
33 import org.openecomp.sdc.vendorsoftwareproduct.dao.NetworkDao;
34 import org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen.convertor.ElementToNetworkConvertor;
35 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity;
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.ArrayList;
41 import java.util.Collection;
42 import java.util.Collections;
43 import java.util.Optional;
44 import java.util.stream.Collectors;
45
46 import static org.openecomp.core.zusammen.api.ZusammenUtil.*;
47
48 public class NetworkDaoZusammenImpl implements NetworkDao {
49
50   private ZusammenAdaptor zusammenAdaptor;
51
52   public NetworkDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
53     this.zusammenAdaptor = zusammenAdaptor;
54   }
55
56   @Override
57   public void registerVersioning(String versionableEntityType) {
58     // registerVersioning not implemented for NetworkDaoZusammenImpl
59   }
60
61   @Override
62   public Collection<NetworkEntity> list(NetworkEntity network) {
63     SessionContext context = createSessionContext();
64     ElementContext elementContext =
65         new ElementContext(network.getVspId(), network.getVersion().getId());
66
67     Optional<ElementInfo> vspModel = zusammenAdaptor
68         .getElementInfoByName(context, elementContext, null, ElementType.VspModel.name());
69     if (!vspModel.isPresent()) {
70       return new ArrayList<>();
71     }
72
73     return zusammenAdaptor.listElementsByName(context, elementContext, vspModel.get().getId(),
74         ElementType.Networks.name()).stream()
75         .map(new ElementToNetworkConvertor()::convert)
76         .map(entity -> {
77           entity.setVspId(network.getVspId());
78           entity.setVersion(network.getVersion());
79           return entity;
80         })
81         .collect(Collectors.toList());
82   }
83
84   @Override
85   public void create(NetworkEntity network) {
86     ZusammenElement networkElement = buildNetworkElement(network, Action.CREATE);
87
88     ZusammenElement networksElement = buildStructuralElement(ElementType.Networks, Action.IGNORE);
89     networksElement.setSubElements(Collections.singletonList(networkElement));
90
91     ZusammenElement vspModel = buildStructuralElement(ElementType.VspModel, Action.IGNORE);
92     vspModel.addSubElement(networksElement);
93
94     SessionContext context = createSessionContext();
95     Element savedElement = zusammenAdaptor
96         .saveElement(context, new ElementContext(network.getVspId(), network.getVersion().getId()),
97             vspModel, "Create network");
98     network.setId(savedElement.getSubElements().iterator().next()
99         .getSubElements().iterator().next().getElementId().getValue());
100   }
101
102   @Override
103   public void update(NetworkEntity network) {
104     ZusammenElement networkElement = buildNetworkElement(network, Action.UPDATE);
105
106     SessionContext context = createSessionContext();
107     zusammenAdaptor
108         .saveElement(context, new ElementContext(network.getVspId(), network.getVersion().getId()),
109             networkElement, String.format("Update network with id %s", network.getId()));
110   }
111
112   @Override
113   public NetworkEntity get(NetworkEntity network) {
114     SessionContext context = createSessionContext();
115
116     Optional<Element> element =
117         zusammenAdaptor.getElement(context,
118             new ElementContext(network.getVspId(), network.getVersion().getId()), network.getId());
119
120     if (element.isPresent()) {
121       ElementToNetworkConvertor convertor = new ElementToNetworkConvertor();
122       NetworkEntity entity = convertor.convert(element.get());
123       entity.setVspId(network.getVspId());
124       entity.setVersion(network.getVersion());
125       return entity;
126     } else {
127       return null;
128     }
129   }
130
131   @Override
132   public void delete(NetworkEntity network) {
133     ZusammenElement networkElement = buildElement(new Id(network.getId()), Action.DELETE);
134
135     SessionContext context = createSessionContext();
136     zusammenAdaptor
137         .saveElement(context, new ElementContext(network.getVspId(), network.getVersion().getId()),
138             networkElement, String.format("Delete network with id %s", network.getId()));
139   }
140
141
142   @Override
143   public void deleteAll(String vspId, Version version) {
144     SessionContext context = createSessionContext();
145     ElementContext elementContext = new ElementContext(vspId, version.getId());
146
147     Collection<ElementInfo> vspModelSubs = zusammenAdaptor
148         .listElementsByName(context, elementContext, null, ElementType.VspModel.name());
149
150     Optional<ElementInfo> networksElement = vspModelSubs.stream()
151         .filter(elementInfo -> elementInfo.getInfo() != null
152             && ElementType.Networks.name().equals(elementInfo.getInfo().getName()))
153         .findFirst();
154     if (!networksElement.isPresent()) {
155       return;
156     }
157
158     ZusammenElement networks = buildElement(networksElement.get().getId(), Action.IGNORE);
159     networks.setSubElements(networksElement.get().getSubElements().stream()
160         .map(network -> buildElement(network.getId(), Action.DELETE))
161         .collect(Collectors.toList()));
162
163     zusammenAdaptor.saveElement(context, elementContext, networks, "Delete all networks");
164   }
165
166   private ZusammenElement buildNetworkElement(NetworkEntity network, Action action) {
167     ZusammenElement networkElement =
168         buildElement(network.getId() == null ? null : new Id(network.getId()), action);
169     Info info = new Info();
170     info.addProperty(ElementPropertyName.elementType.name(), ElementType.Network);
171     info.addProperty(ElementPropertyName.compositionData.name(), network.getCompositionData());
172     networkElement.setInfo(info);
173     networkElement.setData(new ByteArrayInputStream(network.getCompositionData().getBytes()));
174     return networkElement;
175   }
176 }