65a41330a7fc6f1a10fda41a4bba4dbe51fe2b37
[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 / VendorSoftwareProductInfoDaoZusammenImpl.java
1 package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen;
2
3 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement;
4 import com.amdocs.zusammen.datatypes.Id;
5 import com.amdocs.zusammen.datatypes.SessionContext;
6 import com.amdocs.zusammen.datatypes.item.Action;
7 import com.amdocs.zusammen.datatypes.item.ElementContext;
8 import com.amdocs.zusammen.datatypes.item.Info;
9 import com.amdocs.zusammen.datatypes.item.ItemVersion;
10 import com.amdocs.zusammen.utils.fileutils.FileUtils;
11 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
12 import org.openecomp.core.zusammen.api.ZusammenUtil;
13 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
14 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
15 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspQuestionnaireEntity;
16 import org.openecomp.sdc.versioning.VersioningManagerFactory;
17 import org.openecomp.sdc.versioning.dao.types.Version;
18 import org.openecomp.sdc.versioning.types.VersionableEntityMetadata;
19 import org.openecomp.sdc.versioning.types.VersionableEntityStoreType;
20
21 import java.io.ByteArrayInputStream;
22 import java.util.Collection;
23 import java.util.Date;
24 import java.util.stream.Collectors;
25
26 public class VendorSoftwareProductInfoDaoZusammenImpl implements VendorSoftwareProductInfoDao {
27   private ZusammenAdaptor zusammenAdaptor;
28
29   public VendorSoftwareProductInfoDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
30     this.zusammenAdaptor = zusammenAdaptor;
31   }
32
33   @Override
34   public void registerVersioning(String versionableEntityType) {
35     VersionableEntityMetadata metadata =
36         new VersionableEntityMetadata(VersionableEntityStoreType.Zusammen, "vsp", null, null);
37
38     VersioningManagerFactory.getInstance().createInterface()
39         .register(versionableEntityType, metadata);
40   }
41
42   @Override
43   public Collection<VspDetails> list(VspDetails entity) {
44     return zusammenAdaptor.listItems(ZusammenUtil.createSessionContext()).stream().filter
45         (vspEntity-> "vsp".equals(vspEntity.getInfo().getProperty("type")))
46         .map(item -> mapInfoToVspDetails(
47             item.getId().getValue(), null, item.getInfo(),
48             item.getModificationTime(), item.getCreationTime()))
49         .collect(Collectors.toList());
50   }
51
52   @Override
53   public void create(VspDetails vspDetails) {
54     SessionContext context = ZusammenUtil.createSessionContext();
55
56     Id itemId = zusammenAdaptor.createItem(context, mapVspDetailsToZusammenItemInfo(vspDetails));
57     Id versionId =
58         zusammenAdaptor.createVersion(context, itemId, null, ZusammenUtil.createFirstVersionData());
59
60     ZusammenElement generalElement = mapVspDetailsToZusammenElement(vspDetails, Action.CREATE);
61     zusammenAdaptor.saveElement(context, new ElementContext(itemId, versionId),
62         generalElement, "Create VSP General Info Element");
63
64     vspDetails.setId(itemId.getValue());//set id for caller
65   }
66
67   @Override
68   public void update(VspDetails vspDetails) {
69     SessionContext context = ZusammenUtil.createSessionContext();
70     Id itemId = new Id(vspDetails.getId());
71     Id versionId = VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor);
72
73     zusammenAdaptor.updateItem(context, itemId, mapVspDetailsToZusammenItemInfo(vspDetails));
74
75     ZusammenElement generalElement = mapVspDetailsToZusammenElement(vspDetails, Action.UPDATE);
76     zusammenAdaptor.saveElement(context, new ElementContext(itemId, versionId),
77         generalElement, "Update VSP General Info Element");
78   }
79
80   @Override
81   public VspDetails get(VspDetails vspDetails) {
82     SessionContext context = ZusammenUtil.createSessionContext();
83     Id itemId = new Id(vspDetails.getId());
84     ItemVersion itemVersion = VspZusammenUtil.getFirstVersion(context, itemId, zusammenAdaptor);
85     ElementContext elementContext = new ElementContext(itemId, itemVersion.getId(),
86         VspZusammenUtil.getVersionTag(vspDetails.getVersion()));
87
88     return zusammenAdaptor
89         .getElementInfoByName(context, elementContext, null, StructureElement.General.name())
90         .map(generalElementInfo -> mapInfoToVspDetails(
91             vspDetails.getId(), vspDetails.getVersion(), generalElementInfo.getInfo(),
92             itemVersion.getModificationTime(), itemVersion.getCreationTime()))
93         .orElse(null);
94   }
95
96
97   @Override
98   public void delete(VspDetails entity) {
99
100   }
101
102   @Override
103   public void updateOldVersionIndication(VspDetails vspDetails) {
104     VspDetails retrieved = get(vspDetails);
105     if (retrieved != null) {
106       retrieved.setOldVersion(vspDetails.getOldVersion());
107       update(retrieved);
108     }
109   }
110
111   @Override
112   public void updateQuestionnaireData(String vspId, Version version, String questionnaireData) {
113     SessionContext context = ZusammenUtil.createSessionContext();
114     Id itemId = new Id(vspId);
115     Id versionId = VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor);
116
117     ZusammenElement questionnaireElement = mapQuestionnaireToZusammenElement(questionnaireData);
118     zusammenAdaptor.saveElement(context, new ElementContext(itemId, versionId),
119         questionnaireElement, "Update VSP Questionnaire");
120   }
121
122
123   @Override
124   public String getQuestionnaireData(String vspId, Version version) {
125     SessionContext context = ZusammenUtil.createSessionContext();
126     Id itemId = new Id(vspId);
127     Id versionId = VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor);
128
129     return zusammenAdaptor.getElementByName(context,
130         new ElementContext(itemId, versionId, VspZusammenUtil.getVersionTag(version)), null,
131         StructureElement.Questionnaire.name())
132         .map(questionnaireElement ->
133             new String(FileUtils.toByteArray(questionnaireElement.getData())))
134         .orElse(null);
135   }
136
137   @Override
138   public VspQuestionnaireEntity getQuestionnaire(String vspId, Version version) {
139     VspQuestionnaireEntity entity = new VspQuestionnaireEntity();
140     entity.setId(vspId);
141     entity.setVersion(version);
142     entity.setQuestionnaireData(getQuestionnaireData(vspId, version));
143     return entity;
144   }
145
146   @Override
147   public void deleteAll(String vspId, Version version) {
148
149   }
150
151   private Info mapVspDetailsToZusammenItemInfo(VspDetails vspDetails) {
152     Info info = new Info();
153     info.setName(vspDetails.getName());
154     info.setDescription(vspDetails.getDescription());
155     info.addProperty("type", "vsp");
156     addVspDetailsToInfo(info, vspDetails);
157     return info;
158   }
159
160   private ZusammenElement mapVspDetailsToZusammenElement(VspDetails vspDetails, Action action) {
161     ZusammenElement generalElement =
162         VspZusammenUtil.buildStructuralElement(StructureElement.General, action);
163     addVspDetailsToInfo(generalElement.getInfo(), vspDetails);
164     return generalElement;
165   }
166
167   private ZusammenElement mapQuestionnaireToZusammenElement(String questionnaireData) {
168     ZusammenElement questionnaireElement =
169         VspZusammenUtil.buildStructuralElement(StructureElement.Questionnaire, Action.UPDATE);
170     questionnaireElement.setData(new ByteArrayInputStream(questionnaireData.getBytes()));
171     return questionnaireElement;
172   }
173
174   private void addVspDetailsToInfo(Info info, VspDetails vspDetails) {
175     info.addProperty(InfoPropertyName.name.name(), vspDetails.getName());
176     info.addProperty(InfoPropertyName.description.name(), vspDetails.getDescription());
177     info.addProperty(InfoPropertyName.icon.name(), vspDetails.getIcon());
178     info.addProperty(InfoPropertyName.category.name(), vspDetails.getCategory());
179     info.addProperty(InfoPropertyName.subCategory.name(), vspDetails.getSubCategory());
180     info.addProperty(InfoPropertyName.vendorId.name(), vspDetails.getVendorId());
181     info.addProperty(InfoPropertyName.vendorName.name(), vspDetails.getVendorName());
182     if (vspDetails.getVlmVersion() != null) {
183       info.addProperty(
184           InfoPropertyName.vendorVersion.name(), vspDetails.getVlmVersion().toString());
185     }
186     info.addProperty(InfoPropertyName.licenseAgreement.name(), vspDetails.getLicenseAgreement());
187     info.addProperty(InfoPropertyName.featureGroups.name(), vspDetails.getFeatureGroups());
188     info.addProperty(InfoPropertyName.oldVersion.name(), vspDetails.getOldVersion());
189   }
190
191   private VspDetails mapInfoToVspDetails(String vspId, Version version, Info info,
192                                          Date modificationTime, Date creationTime) {
193     VspDetails vspDetails = new VspDetails(vspId, version);
194     vspDetails.setName(info.getProperty(InfoPropertyName.name.name()));
195     vspDetails.setDescription(info.getProperty(InfoPropertyName.description.name()));
196     vspDetails.setCategory(info.getProperty(InfoPropertyName.category.name()));
197     vspDetails.setSubCategory(info.getProperty(InfoPropertyName.subCategory.name()));
198     vspDetails.setVendorId(info.getProperty(InfoPropertyName.vendorId.name()));
199     vspDetails.setVendorName(info.getProperty(InfoPropertyName.vendorName.name()));
200     vspDetails.setVlmVersion(
201         Version.valueOf(info.getProperty(InfoPropertyName.vendorVersion.name())));
202     vspDetails.setLicenseAgreement(info.getProperty(InfoPropertyName.licenseAgreement.name()));
203     vspDetails.setFeatureGroups(info.getProperty(InfoPropertyName.featureGroups.name()));
204     vspDetails.setWritetimeMicroSeconds(
205         modificationTime == null ? creationTime.getTime() : modificationTime.getTime());
206     vspDetails.setVersion(version);
207     String oldVersion = info.getProperty(InfoPropertyName.oldVersion.name());
208
209     //Boolean oldVersion = ind == null || "true".equals( ind.toLowerCase());
210     vspDetails.setOldVersion(oldVersion);
211     return vspDetails;
212   }
213
214   private enum InfoPropertyName {
215     name,
216     description,
217     icon,
218     category,
219     subCategory,
220     vendorId,
221     vendorName,
222     vendorVersion,
223     licenseAgreement,
224     featureGroups,
225     oldVersion
226   }
227
228 }