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