1 package org.openecomp.sdc.vendorlicense.dao.impl.zusammen;
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 com.amdocs.zusammen.datatypes.item.Info;
11 import com.amdocs.zusammen.datatypes.item.Relation;
12 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
13 import org.openecomp.core.zusammen.api.ZusammenUtil;
14 import org.openecomp.sdc.vendorlicense.dao.FeatureGroupDao;
15 import org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity;
16 import org.openecomp.sdc.versioning.dao.types.Version;
18 import java.util.ArrayList;
19 import java.util.Collection;
20 import java.util.HashSet;
21 import java.util.Optional;
23 import java.util.stream.Collectors;
26 * Created by ayalaben on 3/27/2017.
28 public class FeatureGroupDaoZusammenImpl implements FeatureGroupDao {
30 private ZusammenAdaptor zusammenAdaptor;
32 public FeatureGroupDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
33 this.zusammenAdaptor = zusammenAdaptor;
37 public void registerVersioning(String versionableEntityType) {
42 public void create(FeatureGroupEntity featureGroup) {
43 ZusammenElement featureGroupElement =
44 buildFeatureGroupElement(featureGroup, Action.CREATE);
46 ZusammenElement featureGroupsElement =
47 VlmZusammenUtil.buildStructuralElement(StructureElement.FeatureGroups, null);
49 featureGroupsElement.addSubElement(featureGroupElement);
51 SessionContext context = ZusammenUtil.createSessionContext();
52 Id itemId = new Id(featureGroup.getVendorLicenseModelId());
53 Optional<Element> savedElement = zusammenAdaptor.saveElement(context, new ElementContext(itemId,
54 VlmZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)),
55 featureGroupsElement, "Create feature group");
57 savedElement.ifPresent(element -> featureGroup
58 .setId(element.getSubElements().iterator().next().getElementId().getValue()));
62 public void update(FeatureGroupEntity featureGroup) {
63 ZusammenElement featureGroupElement = buildFeatureGroupElement(featureGroup, Action.UPDATE);
65 SessionContext context = ZusammenUtil.createSessionContext();
66 Id itemId = new Id(featureGroup.getVendorLicenseModelId());
67 zusammenAdaptor.saveElement(context, new ElementContext(itemId,
68 VlmZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)), featureGroupElement,
69 String.format("Update feature group with id %s", featureGroup.getId()));
73 public FeatureGroupEntity get(FeatureGroupEntity featureGroup) {
74 SessionContext context = ZusammenUtil.createSessionContext();
75 Id itemId = new Id(featureGroup.getVendorLicenseModelId());
76 ElementContext elementContext = new ElementContext(itemId,
77 VlmZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor),
78 VlmZusammenUtil.getVersionTag(featureGroup.getVersion()));
80 return zusammenAdaptor.getElementInfo(context, elementContext, new Id(featureGroup.getId()))
81 .map(elementInfo -> mapElementInfoToFeatureGroup(
82 featureGroup.getVendorLicenseModelId(), featureGroup.getVersion(), elementInfo))
87 public void delete(FeatureGroupEntity featureGroup) {
88 SessionContext context = ZusammenUtil.createSessionContext();
89 ZusammenElement zusammenElement = new ZusammenElement();
90 zusammenElement.setAction(Action.DELETE);
91 zusammenElement.setElementId(new Id(featureGroup.getId()));
93 Id itemId = new Id(featureGroup.getVendorLicenseModelId());
94 ElementContext elementContext = new ElementContext(itemId,
95 VlmZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor));
96 zusammenAdaptor.saveElement(context, elementContext, zusammenElement,
97 "delete feature group. id:" + featureGroup.getId() + ".");
101 public Collection<FeatureGroupEntity> list(FeatureGroupEntity featureGroup) {
102 SessionContext context = ZusammenUtil.createSessionContext();
103 Id itemId = new Id(featureGroup.getVendorLicenseModelId());
104 ElementContext elementContext = new ElementContext(itemId,
105 VlmZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor),
106 VlmZusammenUtil.getVersionTag(featureGroup.getVersion()));
108 return zusammenAdaptor
109 .listElementsByName(context, elementContext, null, StructureElement.FeatureGroups.name())
110 .stream().map(elementInfo -> mapElementInfoToFeatureGroup(
111 featureGroup.getVendorLicenseModelId(), featureGroup.getVersion(), elementInfo))
112 .collect(Collectors.toList());
116 public long count(FeatureGroupEntity featureGroup) {
117 SessionContext context = ZusammenUtil.createSessionContext();
118 Id itemId = new Id(featureGroup.getVendorLicenseModelId());
119 ElementContext elementContext = new ElementContext(itemId,
120 VlmZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor),
121 VlmZusammenUtil.getVersionTag(featureGroup.getVersion()));
123 return zusammenAdaptor
124 .listElementsByName(context, elementContext, null, StructureElement.FeatureGroups.name())
129 public void removeEntitlementPool(FeatureGroupEntity featureGroup, String entitlementPoolId) {
130 removeRelationToContainedEntity(featureGroup, entitlementPoolId, "entitlement pool");
134 public void removeLicenseKeyGroup(FeatureGroupEntity featureGroup, String licenseKeyGroupId) {
135 removeRelationToContainedEntity(featureGroup, licenseKeyGroupId, "license Key Group");
138 private void removeRelationToContainedEntity(FeatureGroupEntity featureGroup,
139 String containedEntityId,
140 String containedEntityType) {
141 SessionContext context = ZusammenUtil.createSessionContext();
142 Id itemId = new Id(featureGroup.getVendorLicenseModelId());
143 ElementContext elementContext = new ElementContext(itemId,
144 VlmZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor));
146 Optional<ElementInfo> elementInfo = zusammenAdaptor.getElementInfo(context,
147 elementContext, new Id(featureGroup.getId()));
148 if (elementInfo.isPresent()) {
149 ZusammenElement zusammenElement = VlmZusammenUtil.getZusammenElement(elementInfo.get());
150 zusammenElement.setAction(Action.UPDATE);
151 zusammenElement.setRelations(elementInfo.get().getRelations().stream()
153 relation -> !containedEntityId.equals(relation.getEdge2().getElementId().getValue()))
154 .collect(Collectors.toList()));
155 zusammenAdaptor.saveElement(context, elementContext, zusammenElement,
156 String.format("remove %s", containedEntityType));
161 public void updateFeatureGroup(FeatureGroupEntity
162 featureGroup, Set<String> addedEntitlementPools,
163 Set<String> removedEntitlementPools,
164 Set<String> addedLicenseKeyGroups,
165 Set<String> removedLicenseKeyGroups) {
166 ZusammenElement featureGroupElement = buildFeatureGroupElement(featureGroup, Action.UPDATE);
167 SessionContext context = ZusammenUtil.createSessionContext();
168 Id itemId = new Id(featureGroup.getVendorLicenseModelId());
169 ElementContext elementContext = new ElementContext(itemId,
170 VlmZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor));
172 Optional<ElementInfo> elementInfo = zusammenAdaptor.getElementInfo(context,
173 elementContext, new Id(featureGroup.getId()));
174 if (elementInfo.isPresent()) {
175 FeatureGroupEntity currentFeatureGroup =
176 mapElementInfoToFeatureGroup(featureGroup.getId(), featureGroup.getVersion(),
179 if (!(removedEntitlementPools == null )) {
180 currentFeatureGroup.getEntitlementPoolIds().removeAll(removedEntitlementPools);
182 if (!(addedEntitlementPools == null)) {
183 currentFeatureGroup.getEntitlementPoolIds().addAll(addedEntitlementPools);
186 if (featureGroupElement.getRelations() == null) {
187 featureGroupElement.setRelations(new ArrayList<>());
189 featureGroupElement.getRelations()
190 .addAll(currentFeatureGroup.getEntitlementPoolIds().stream()
191 .map(relation -> VlmZusammenUtil
192 .createRelation(RelationType.FeatureGroupToEntitlmentPool, relation))
193 .collect(Collectors.toList()));
195 if (! ( removedLicenseKeyGroups == null)) {
196 currentFeatureGroup.getLicenseKeyGroupIds().removeAll(removedLicenseKeyGroups);
198 if (! ( addedLicenseKeyGroups == null)) {
199 currentFeatureGroup.getLicenseKeyGroupIds().addAll(addedLicenseKeyGroups);
201 featureGroupElement.getRelations()
202 .addAll(currentFeatureGroup.getLicenseKeyGroupIds().stream()
203 .map(relation -> VlmZusammenUtil
204 .createRelation(RelationType.FeatureGroupToLicenseKeyGroup, relation))
205 .collect(Collectors.toList()));
207 Collection<Relation> LaRelations = elementInfo.get().getRelations().stream().filter
208 (rel->rel.getType().equals(RelationType.FeatureGroupToReferencingLicenseAgreement.name()))
209 .map(rel ->VlmZusammenUtil.createRelation(RelationType
210 .FeatureGroupToReferencingLicenseAgreement,rel.getEdge2().getElementId().toString()))
211 .collect(Collectors.toList());
213 featureGroupElement.getRelations().addAll(LaRelations);
216 .saveElement(context, elementContext, featureGroupElement, "update feature group");
221 public void deleteAll(FeatureGroupEntity featureGroup) {
227 public void addReferencingLicenseAgreement(FeatureGroupEntity featureGroup,
228 String licenseAgreementId) {
229 SessionContext context = ZusammenUtil.createSessionContext();
230 Id itemId = new Id(featureGroup.getVendorLicenseModelId());
231 ElementContext elementContext = new ElementContext(itemId,
232 VlmZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor));
234 Optional<ElementInfo> elementInfo =
235 zusammenAdaptor.getElementInfo(context, elementContext, new Id(featureGroup.getId()));
236 if (elementInfo.isPresent()) {
237 ZusammenElement zusammenElement = VlmZusammenUtil.getZusammenElement(elementInfo.get());
238 zusammenElement.setAction(Action.UPDATE);
239 zusammenElement.getRelations().add(VlmZusammenUtil
240 .createRelation(RelationType.FeatureGroupToReferencingLicenseAgreement,
241 licenseAgreementId));
242 zusammenAdaptor.saveElement(context, elementContext, zusammenElement,
243 "add referencing license agreement");
248 public void removeReferencingLicenseAgreement(FeatureGroupEntity featureGroup,
249 String licenseAgreementId) {
250 SessionContext context = ZusammenUtil.createSessionContext();
251 Id itemId = new Id(featureGroup.getVendorLicenseModelId());
252 ElementContext elementContext = new ElementContext(itemId,
253 VlmZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor));
255 Optional<ElementInfo> elementInfo =
256 zusammenAdaptor.getElementInfo(context, elementContext, new Id(featureGroup.getId()));
257 if (elementInfo.isPresent()) {
258 ZusammenElement zusammenElement = VlmZusammenUtil.getZusammenElement(elementInfo.get());
259 zusammenElement.setAction(Action.UPDATE);
260 zusammenElement.setRelations(elementInfo.get().getRelations().stream()
262 relation -> !licenseAgreementId.equals(relation.getEdge2().getElementId().getValue()))
263 .collect(Collectors.toList()));
265 zusammenAdaptor.saveElement(context, elementContext, zusammenElement,
266 "remove referencing license agreement");
270 private ZusammenElement buildFeatureGroupElement(FeatureGroupEntity featureGroup, Action action) {
272 ZusammenElement featureGroupElement = new ZusammenElement();
273 featureGroupElement.setAction(action);
274 if (featureGroup.getId() != null) {
275 featureGroupElement.setElementId(new Id(featureGroup.getId()));
277 Info info = new Info();
278 info.setName(featureGroup.getName());
279 info.setDescription(featureGroup.getDescription());
280 info.addProperty("partNumber", featureGroup.getPartNumber());
281 info.addProperty("manufacturerReferenceNumber", featureGroup.getManufacturerReferenceNumber());
282 featureGroupElement.setInfo(info);
284 featureGroupElement.setRelations(new ArrayList<>());
286 if (featureGroup.getEntitlementPoolIds() != null &&
287 featureGroup.getEntitlementPoolIds().size() > 0) {
288 featureGroupElement.getRelations().addAll(featureGroup.getEntitlementPoolIds().stream()
289 .map(rel -> VlmZusammenUtil
290 .createRelation(RelationType.FeatureGroupToEntitlmentPool, rel))
291 .collect(Collectors.toList()));
294 if (featureGroup.getLicenseKeyGroupIds() != null &&
295 featureGroup.getLicenseKeyGroupIds().size() > 0) {
296 featureGroupElement.getRelations()
297 .addAll(featureGroup.getLicenseKeyGroupIds().stream()
298 .map(rel -> VlmZusammenUtil
299 .createRelation(RelationType.FeatureGroupToLicenseKeyGroup, rel))
300 .collect(Collectors.toList()));
303 if (featureGroup.getReferencingLicenseAgreements() != null &&
304 featureGroup.getReferencingLicenseAgreements().size() > 0) {
305 featureGroupElement.getRelations()
306 .addAll(featureGroup.getReferencingLicenseAgreements().stream()
307 .map(rel -> VlmZusammenUtil
308 .createRelation(RelationType.FeatureGroupToReferencingLicenseAgreement,
310 .collect(Collectors.toList()));
312 return featureGroupElement;
316 private FeatureGroupEntity mapElementInfoToFeatureGroup(String vlmId, Version version,
317 ElementInfo elementInfo) {
318 FeatureGroupEntity featureGroup =
319 new FeatureGroupEntity(vlmId, version, elementInfo.getId().getValue());
320 featureGroup.setName(elementInfo.getInfo().getName());
321 featureGroup.setDescription(elementInfo.getInfo().getDescription());
322 featureGroup.setPartNumber(elementInfo.getInfo().getProperty("partNumber"));
323 featureGroup.setManufacturerReferenceNumber(elementInfo.getInfo()
324 .getProperty("manufacturerReferenceNumber"));
326 Set<String> entitlementPoolIds = new HashSet<>();
327 Set<String> licenseAgreements = new HashSet<>();
328 Set<String> licenseKeyGroupIds = new HashSet<>();
330 if (elementInfo.getRelations() != null) {
331 for (Relation relation : elementInfo.getRelations()) {
332 if (RelationType.FeatureGroupToEntitlmentPool.name().equals(relation.getType())) {
333 entitlementPoolIds.add(relation.getEdge2().getElementId().getValue());
334 } else if (RelationType.FeatureGroupToLicenseKeyGroup.name().equals(relation.getType())) {
335 licenseKeyGroupIds.add(relation.getEdge2().getElementId().getValue());
336 } else if (RelationType.FeatureGroupToReferencingLicenseAgreement.name()
337 .equals(relation.getType())) {
338 licenseAgreements.add(relation.getEdge2().getElementId().getValue());
342 featureGroup.setEntitlementPoolIds(entitlementPoolIds);
343 featureGroup.setLicenseKeyGroupIds(licenseKeyGroupIds);
344 featureGroup.setReferencingLicenseAgreements(licenseAgreements);