2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.openecomp.sdc.vendorlicense.impl;
23 import org.openecomp.core.util.UniqueValueUtil;
24 import org.openecomp.sdc.activityLog.ActivityLogManager;
25 import org.openecomp.sdc.activityLog.ActivityLogManagerFactory;
26 import org.openecomp.sdc.activitylog.dao.type.ActivityLogEntity;
27 import org.openecomp.sdc.common.errors.CoreException;
28 import org.openecomp.sdc.common.errors.ErrorCode;
29 import org.openecomp.sdc.datatypes.error.ErrorLevel;
30 import org.openecomp.sdc.logging.api.Logger;
31 import org.openecomp.sdc.logging.api.LoggerFactory;
32 import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
33 import org.openecomp.sdc.logging.context.impl.MdcDataErrorMessage;
34 import org.openecomp.sdc.logging.types.LoggerConstants;
35 import org.openecomp.sdc.logging.types.LoggerErrorCode;
36 import org.openecomp.sdc.logging.types.LoggerErrorDescription;
37 import org.openecomp.sdc.logging.types.LoggerServiceName;
38 import org.openecomp.sdc.logging.types.LoggerTragetServiceName;
39 import org.openecomp.sdc.vendorlicense.VendorLicenseConstants;
40 import org.openecomp.sdc.vendorlicense.VendorLicenseManager;
41 import org.openecomp.sdc.vendorlicense.dao.EntitlementPoolDao;
42 import org.openecomp.sdc.vendorlicense.dao.EntitlementPoolDaoFactory;
43 import org.openecomp.sdc.vendorlicense.dao.FeatureGroupDao;
44 import org.openecomp.sdc.vendorlicense.dao.FeatureGroupDaoFactory;
45 import org.openecomp.sdc.vendorlicense.dao.LicenseAgreementDao;
46 import org.openecomp.sdc.vendorlicense.dao.LicenseAgreementDaoFactory;
47 import org.openecomp.sdc.vendorlicense.dao.LicenseKeyGroupDao;
48 import org.openecomp.sdc.vendorlicense.dao.LicenseKeyGroupDaoFactory;
49 import org.openecomp.sdc.vendorlicense.dao.LimitDao;
50 import org.openecomp.sdc.vendorlicense.dao.LimitDaoFactory;
51 import org.openecomp.sdc.vendorlicense.dao.VendorLicenseModelDao;
52 import org.openecomp.sdc.vendorlicense.dao.VendorLicenseModelDaoFactory;
53 import org.openecomp.sdc.vendorlicense.dao.types.EntitlementPoolEntity;
54 import org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupEntity;
55 import org.openecomp.sdc.vendorlicense.dao.types.FeatureGroupModel;
56 import org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementEntity;
57 import org.openecomp.sdc.vendorlicense.dao.types.LicenseAgreementModel;
58 import org.openecomp.sdc.vendorlicense.dao.types.LicenseKeyGroupEntity;
59 import org.openecomp.sdc.vendorlicense.dao.types.LimitEntity;
60 import org.openecomp.sdc.vendorlicense.dao.types.LimitType;
61 import org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity;
62 import org.openecomp.sdc.vendorlicense.errors.InvalidDateErrorBuilder;
63 import org.openecomp.sdc.vendorlicense.errors.LimitErrorBuilder;
64 import org.openecomp.sdc.vendorlicense.facade.VendorLicenseFacade;
65 import org.openecomp.sdc.vendorlicense.facade.VendorLicenseFacadeFactory;
66 import org.openecomp.sdc.vendorlicense.types.VersionedVendorLicenseModel;
67 import org.openecomp.sdc.versioning.VersioningManager;
68 import org.openecomp.sdc.versioning.VersioningManagerFactory;
69 import org.openecomp.sdc.versioning.VersioningUtil;
70 import org.openecomp.sdc.versioning.dao.types.Version;
71 import org.openecomp.sdc.versioning.dao.types.VersionStatus;
72 import org.openecomp.sdc.versioning.types.VersionInfo;
73 import org.openecomp.sdc.versioning.types.VersionableEntityAction;
74 import org.openecomp.sdcrests.activitylog.types.ActivityType;
76 import java.time.LocalDate;
77 import java.time.format.DateTimeFormatter;
78 import java.util.ArrayList;
79 import java.util.Collection;
80 import java.util.Iterator;
81 import java.util.List;
83 import java.util.Optional;
86 import static org.openecomp.sdc.vendorlicense.VendorLicenseConstants.VENDOR_LICENSE_MODEL_VERSIONABLE_TYPE;
88 public class VendorLicenseManagerImpl implements VendorLicenseManager {
89 private static final VersioningManager versioningManager =
90 VersioningManagerFactory.getInstance().createInterface();
91 private VendorLicenseFacade vendorLicenseFacade =
92 VendorLicenseFacadeFactory.getInstance().createInterface();
93 private static final VendorLicenseModelDao vendorLicenseModelDao =
94 VendorLicenseModelDaoFactory.getInstance().createInterface();
95 private static final LicenseAgreementDao licenseAgreementDao =
96 LicenseAgreementDaoFactory.getInstance().createInterface();
97 private static final FeatureGroupDao featureGroupDao =
98 FeatureGroupDaoFactory.getInstance().createInterface();
99 private static final EntitlementPoolDao entitlementPoolDao =
100 EntitlementPoolDaoFactory.getInstance().createInterface();
101 private static final LicenseKeyGroupDao licenseKeyGroupDao =
102 LicenseKeyGroupDaoFactory.getInstance().createInterface();
103 private static final LimitDao limitDao =
104 LimitDaoFactory.getInstance().createInterface();
106 private ActivityLogManager activityLogManager = ActivityLogManagerFactory.getInstance().createInterface();
107 private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
108 private static final Logger logger =
109 LoggerFactory.getLogger(VendorLicenseManagerImpl.class);
111 private static void sortVlmListByModificationTimeDescOrder(
112 List<VersionedVendorLicenseModel> vendorLicenseModels) {
113 vendorLicenseModels.sort((o1, o2) -> o2.getVendorLicenseModel().getWritetimeMicroSeconds()
114 .compareTo(o1.getVendorLicenseModel().getWritetimeMicroSeconds()));
118 public void checkout(String vendorLicenseModelId, String user) {
120 mdcDataDebugMessage.debugEntryMessage("VLM id", vendorLicenseModelId);
122 Version newVersion = versioningManager
123 .checkout(VENDOR_LICENSE_MODEL_VERSIONABLE_TYPE, vendorLicenseModelId, user);
125 ActivityLogEntity activityLogEntity = new ActivityLogEntity(vendorLicenseModelId, String.valueOf(newVersion.getMajor()+1),
126 ActivityType.CHECKOUT.toString(), user, true, "", "");
127 activityLogManager.addActionLog(activityLogEntity, user);
129 newVersion.setStatus(VersionStatus.Locked);
130 vendorLicenseFacade.updateVlmLastModificationTime(vendorLicenseModelId, newVersion);
132 mdcDataDebugMessage.debugExitMessage("VLM id", vendorLicenseModelId);
136 public void undoCheckout(String vendorLicenseModelId, String user) {
138 mdcDataDebugMessage.debugEntryMessage("VLM id", vendorLicenseModelId);
140 Version newVersion = versioningManager
141 .undoCheckout(VENDOR_LICENSE_MODEL_VERSIONABLE_TYPE, vendorLicenseModelId, user);
142 vendorLicenseFacade.updateVlmLastModificationTime(vendorLicenseModelId, newVersion);
144 mdcDataDebugMessage.debugExitMessage("VLM id", vendorLicenseModelId);
148 public void checkin(String vendorLicenseModelId, String user) {
150 mdcDataDebugMessage.debugEntryMessage("VLM id", vendorLicenseModelId);
152 Version newVersion = vendorLicenseFacade.checkin(vendorLicenseModelId, user);
154 ActivityLogEntity activityLogEntity = new ActivityLogEntity(vendorLicenseModelId,
155 String.valueOf(newVersion.getMajor()+1), ActivityType.CHECKIN.toString(), user, true, "", "");
156 activityLogManager.addActionLog(activityLogEntity, user);
158 mdcDataDebugMessage.debugExitMessage("VLM id", vendorLicenseModelId);
162 public void submit(String vendorLicenseModelId, String user) {
164 mdcDataDebugMessage.debugEntryMessage("VLM id", vendorLicenseModelId);
166 Version newVersion = vendorLicenseFacade.submit(vendorLicenseModelId, user);
168 ActivityLogEntity activityLogEntity = new ActivityLogEntity(vendorLicenseModelId, String.valueOf(newVersion.getMajor()),
169 ActivityType.SUBMIT.toString(), user, true, "", "");
170 activityLogManager.addActionLog(activityLogEntity, user);
172 mdcDataDebugMessage.debugExitMessage("VLM id", vendorLicenseModelId);
176 public Collection<VersionedVendorLicenseModel> listVendorLicenseModels(String versionFilter,
178 mdcDataDebugMessage.debugEntryMessage(null);
180 Map<String, VersionInfo> idToVersionsInfo = versioningManager
181 .listEntitiesVersionInfo(VENDOR_LICENSE_MODEL_VERSIONABLE_TYPE, user,
182 VersionableEntityAction.Read);
184 List<VersionedVendorLicenseModel> vendorLicenseModels = new ArrayList<>();
185 for (Map.Entry<String, VersionInfo> entry : idToVersionsInfo.entrySet()) {
186 VersionInfo versionInfo = entry.getValue();
187 if (versionFilter != null && versionFilter.equals(VersionStatus.Final.name())) {
188 if (versionInfo.getLatestFinalVersion() == null) {
191 versionInfo.setActiveVersion(versionInfo.getLatestFinalVersion());
192 versionInfo.setStatus(VersionStatus.Final);
193 versionInfo.setLockingUser(null);
196 Version version = versionInfo.getActiveVersion();
197 if (user.equals(versionInfo.getLockingUser())) {
198 version.setStatus(VersionStatus.Locked);
202 VendorLicenseModelEntity vlm =
203 vendorLicenseModelDao.get(new VendorLicenseModelEntity(entry.getKey(), version));
205 VersionedVendorLicenseModel versionedVlm = new VersionedVendorLicenseModel();
206 versionedVlm.setVendorLicenseModel(vlm);
207 versionedVlm.setVersionInfo(versionInfo);
208 vendorLicenseModels.add(versionedVlm);
210 }catch(RuntimeException rte){
211 logger.error("Error trying to retrieve vlm["+entry.getKey()+"] version["+version.toString
218 sortVlmListByModificationTimeDescOrder(vendorLicenseModels);
220 mdcDataDebugMessage.debugExitMessage(null);
221 return vendorLicenseModels;
225 public VendorLicenseModelEntity createVendorLicenseModel(VendorLicenseModelEntity vendorLicenseModelEntity, String user) {
227 VendorLicenseModelEntity vendorLicenseModelCreated = vendorLicenseFacade.createVendorLicenseModel(vendorLicenseModelEntity, user);
229 ActivityLogEntity activityLogEntity = new ActivityLogEntity(vendorLicenseModelCreated.getId(),
230 String.valueOf(vendorLicenseModelCreated.getVersion().getMajor()+1),
231 ActivityType.CREATE_NEW.toString(), user, true, "", "");
232 activityLogManager.addActionLog(activityLogEntity, user);
234 return vendorLicenseModelCreated;
238 public void updateVendorLicenseModel(VendorLicenseModelEntity vendorLicenseModelEntity,
240 mdcDataDebugMessage.debugEntryMessage("VLM id", vendorLicenseModelEntity.getId());
242 Version version = VersioningUtil.resolveVersion(null,
243 getVersionInfo(vendorLicenseModelEntity.getId(), VersionableEntityAction.Write, user),
245 vendorLicenseModelEntity.setVersion(version);
247 String existingVendorName = vendorLicenseModelDao.get(vendorLicenseModelEntity).getVendorName();
249 .updateUniqueValue(VendorLicenseConstants.UniqueValues.VENDOR_NAME, existingVendorName,
250 vendorLicenseModelEntity.getVendorName());
251 vendorLicenseModelDao.update(vendorLicenseModelEntity);
254 .updateVlmLastModificationTime(vendorLicenseModelEntity.getId(), version);
256 mdcDataDebugMessage.debugExitMessage("VLM id", vendorLicenseModelEntity.getId());
260 public VersionedVendorLicenseModel getVendorLicenseModel(String vlmId, Version version,
262 return vendorLicenseFacade.getVendorLicenseModel(vlmId, version, user);
266 public void deleteVendorLicenseModel(String vlmId, String user) {
267 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
268 LoggerTragetServiceName.DELETE_ENTITY, ErrorLevel.ERROR.name(),
269 LoggerErrorCode.DATA_ERROR.getErrorCode(), LoggerErrorDescription.UNSUPPORTED_OPERATION);
270 throw new UnsupportedOperationException(VendorLicenseConstants.UNSUPPORTED_OPERATION_ERROR);
274 public Collection<LicenseAgreementEntity> listLicenseAgreements(String vlmId, Version version,
276 mdcDataDebugMessage.debugEntryMessage("VLM id", vlmId);
277 mdcDataDebugMessage.debugExitMessage("VLM id", vlmId);
278 return licenseAgreementDao.list(new LicenseAgreementEntity(vlmId, VersioningUtil
279 .resolveVersion(version, getVersionInfo(vlmId, VersionableEntityAction.Read, user), user),
284 public LicenseAgreementEntity createLicenseAgreement(LicenseAgreementEntity licenseAgreement,
287 .debugEntryMessage("VLM id", licenseAgreement.getVendorLicenseModelId());
289 .debugExitMessage("VLM id", licenseAgreement.getVendorLicenseModelId());
290 return vendorLicenseFacade.createLicenseAgreement(licenseAgreement, user);
294 public void updateLicenseAgreement(LicenseAgreementEntity licenseAgreement,
295 Set<String> addedFeatureGroupIds,
296 Set<String> removedFeatureGroupIds, String user) {
297 mdcDataDebugMessage.debugEntryMessage("VLM id, LA id", licenseAgreement
298 .getVendorLicenseModelId(), licenseAgreement.getId());
300 Version version = VersioningUtil.resolveVersion(licenseAgreement.getVersion(),
301 getVersionInfo(licenseAgreement.getVendorLicenseModelId(), VersionableEntityAction.Write,
303 licenseAgreement.setVersion(version);
304 LicenseAgreementEntity retrieved = licenseAgreementDao.get(licenseAgreement);
306 .validateEntityExistence(retrieved, licenseAgreement, VendorLicenseModelEntity.ENTITY_TYPE);
307 VersioningUtil.validateContainedEntitiesExistence(new FeatureGroupEntity().getEntityType(),
308 removedFeatureGroupIds, retrieved, retrieved.getFeatureGroupIds());
309 VersioningUtil.validateEntitiesExistence(addedFeatureGroupIds,
310 new FeatureGroupEntity(licenseAgreement.getVendorLicenseModelId(), version, null),
311 featureGroupDao, VendorLicenseModelEntity.ENTITY_TYPE);
313 UniqueValueUtil.updateUniqueValue(VendorLicenseConstants.UniqueValues.LICENSE_AGREEMENT_NAME,
314 retrieved.getName(), licenseAgreement.getName(), licenseAgreement.getVendorLicenseModelId(),
315 licenseAgreement.getVersion().toString());
316 licenseAgreementDao.updateColumnsAndDeltaFeatureGroupIds(licenseAgreement, addedFeatureGroupIds,
317 removedFeatureGroupIds);
319 addFeatureGroupsToLicenseAgreementRef(addedFeatureGroupIds, licenseAgreement);
320 removeFeatureGroupsToLicenseAgreementRef(removedFeatureGroupIds, licenseAgreement);
323 .updateVlmLastModificationTime(licenseAgreement.getVendorLicenseModelId(), version);
325 mdcDataDebugMessage.debugExitMessage("VLM id, LA id", licenseAgreement
326 .getVendorLicenseModelId(), licenseAgreement.getId());
330 public LicenseAgreementModel getLicenseAgreementModel(String vlmId, Version version,
331 String licenseAgreementId, String user) {
333 mdcDataDebugMessage.debugEntryMessage("VLM id, LA id", vlmId, licenseAgreementId);
334 mdcDataDebugMessage.debugExitMessage("VLM id, LA id", vlmId, licenseAgreementId);
335 return vendorLicenseFacade.getLicenseAgreementModel(vlmId, version, licenseAgreementId, user);
339 public void deleteLicenseAgreement(String vlmId, Version version, String licenseAgreementId,
341 mdcDataDebugMessage.debugEntryMessage("VLM id, LA id", vlmId, licenseAgreementId);
343 version = VersioningUtil
344 .resolveVersion(version, getVersionInfo(vlmId, VersionableEntityAction.Write, user), user);
345 LicenseAgreementEntity input =
346 new LicenseAgreementEntity(vlmId, version, licenseAgreementId);
347 LicenseAgreementEntity retrieved = licenseAgreementDao.get(input);
348 VersioningUtil.validateEntityExistence(retrieved, input, VendorLicenseModelEntity.ENTITY_TYPE);
350 removeFeatureGroupsToLicenseAgreementRef(retrieved.getFeatureGroupIds(), retrieved);
352 licenseAgreementDao.delete(input);
353 UniqueValueUtil.deleteUniqueValue(VendorLicenseConstants.UniqueValues.LICENSE_AGREEMENT_NAME,
354 retrieved.getVendorLicenseModelId(), retrieved.getVersion().toString(),
355 retrieved.getName());
358 .updateVlmLastModificationTime(input.getVendorLicenseModelId(), input.getVersion());
360 mdcDataDebugMessage.debugExitMessage("VLM id, LA id", vlmId, licenseAgreementId);
364 public Collection<FeatureGroupEntity> listFeatureGroups(String vlmId, Version version,
366 mdcDataDebugMessage.debugEntryMessage("VLM id", vlmId);
367 mdcDataDebugMessage.debugExitMessage("VLM id", vlmId);
368 return vendorLicenseFacade.listFeatureGroups(vlmId, version, user);
372 public FeatureGroupEntity createFeatureGroup(FeatureGroupEntity featureGroup, String user) {
374 .debugEntryMessage("VLM id", featureGroup.getVendorLicenseModelId());
375 mdcDataDebugMessage.debugExitMessage("VLM id", featureGroup.getId());
376 return vendorLicenseFacade.createFeatureGroup(featureGroup, user);
380 public void updateFeatureGroup(FeatureGroupEntity featureGroup,
381 Set<String> addedLicenseKeyGroups,
382 Set<String> removedLicenseKeyGroups,
383 Set<String> addedEntitlementPools,
384 Set<String> removedEntitlementPools,
386 mdcDataDebugMessage.debugEntryMessage("VLM id, FG id", featureGroup
387 .getVendorLicenseModelId(), featureGroup.getId());
389 Version version = VersioningUtil.resolveVersion(featureGroup.getVersion(),
390 getVersionInfo(featureGroup.getVendorLicenseModelId(), VersionableEntityAction.Write, user),
392 featureGroup.setVersion(version);
394 FeatureGroupEntity retrieved = featureGroupDao.get(featureGroup);
396 .validateEntityExistence(retrieved, featureGroup, VendorLicenseModelEntity.ENTITY_TYPE);
398 VersioningUtil.validateContainedEntitiesExistence(new LicenseKeyGroupEntity().getEntityType(),
399 removedLicenseKeyGroups, retrieved, retrieved.getLicenseKeyGroupIds());
400 VersioningUtil.validateContainedEntitiesExistence(new EntitlementPoolEntity().getEntityType(),
401 removedEntitlementPools, retrieved, retrieved.getEntitlementPoolIds());
403 VersioningUtil.validateEntitiesExistence(addedLicenseKeyGroups,
404 new LicenseKeyGroupEntity(featureGroup.getVendorLicenseModelId(), version, null),
405 licenseKeyGroupDao, VendorLicenseModelEntity.ENTITY_TYPE);
406 VersioningUtil.validateEntitiesExistence(addedEntitlementPools,
407 new EntitlementPoolEntity(featureGroup.getVendorLicenseModelId(), version, null),
408 entitlementPoolDao, VendorLicenseModelEntity.ENTITY_TYPE);
409 UniqueValueUtil.updateUniqueValue(VendorLicenseConstants.UniqueValues.FEATURE_GROUP_NAME,
410 retrieved.getName(), featureGroup.getName(), featureGroup.getVendorLicenseModelId(),
411 featureGroup.getVersion().toString());
413 addLicenseKeyGroupsToFeatureGroupsRef(addedLicenseKeyGroups, featureGroup);
414 removeLicenseKeyGroupsToFeatureGroupsRef(removedLicenseKeyGroups, featureGroup);
415 addEntitlementPoolsToFeatureGroupsRef(addedEntitlementPools, featureGroup);
416 removeEntitlementPoolsToFeatureGroupsRef(removedEntitlementPools, featureGroup);
418 featureGroupDao.updateFeatureGroup(featureGroup, addedEntitlementPools, removedEntitlementPools,
419 addedLicenseKeyGroups, removedLicenseKeyGroups);
422 .updateVlmLastModificationTime(featureGroup.getVendorLicenseModelId(), version);
424 mdcDataDebugMessage.debugExitMessage("VLM id, FG id", featureGroup
425 .getVendorLicenseModelId(), featureGroup.getId());
429 public FeatureGroupModel getFeatureGroupModel(FeatureGroupEntity featureGroup, String user) {
430 mdcDataDebugMessage.debugEntryMessage("VLM id, FG id",
431 featureGroup.getVendorLicenseModelId(), featureGroup.getId());
433 mdcDataDebugMessage.debugExitMessage("VLM id, FG id",
434 featureGroup.getVendorLicenseModelId(), featureGroup.getId());
435 return vendorLicenseFacade.getFeatureGroupModel(featureGroup, user);
439 public void deleteFeatureGroup(FeatureGroupEntity featureGroup, String user) {
440 mdcDataDebugMessage.debugEntryMessage("VLM id, FG id",
441 featureGroup.getVendorLicenseModelId(), featureGroup.getId());
443 Version version = VersioningUtil.resolveVersion(featureGroup.getVersion(),
444 getVersionInfo(featureGroup.getVendorLicenseModelId(), VersionableEntityAction.Write,
446 featureGroup.setVersion(version);
447 FeatureGroupEntity retrieved = featureGroupDao.get(featureGroup);
449 .validateEntityExistence(retrieved, featureGroup, VendorLicenseModelEntity.ENTITY_TYPE);
451 removeLicenseKeyGroupsToFeatureGroupsRef(retrieved.getLicenseKeyGroupIds(), featureGroup);
452 removeEntitlementPoolsToFeatureGroupsRef(retrieved.getEntitlementPoolIds(), featureGroup);
454 for (String licenceAgreementId : retrieved.getReferencingLicenseAgreements()) {
455 licenseAgreementDao.removeFeatureGroup(
456 new LicenseAgreementEntity(featureGroup.getVendorLicenseModelId(), version,
457 licenceAgreementId), featureGroup.getId());
460 featureGroupDao.delete(featureGroup);
461 UniqueValueUtil.deleteUniqueValue(VendorLicenseConstants.UniqueValues.FEATURE_GROUP_NAME,
462 retrieved.getVendorLicenseModelId(), retrieved.getVersion().toString(),
463 retrieved.getName());
465 vendorLicenseFacade.updateVlmLastModificationTime(featureGroup.getVendorLicenseModelId(),
466 featureGroup.getVersion());
469 .debugExitMessage("VLM id, FG id",
470 featureGroup.getVendorLicenseModelId(), featureGroup.getId());
474 public Collection<EntitlementPoolEntity> listEntitlementPools(String vlmId, Version version,
476 mdcDataDebugMessage.debugEntryMessage("VLM id", vlmId);
477 mdcDataDebugMessage.debugExitMessage("VLM id", vlmId);
478 return vendorLicenseFacade.listEntitlementPools(vlmId, version, user);
482 public EntitlementPoolEntity createEntitlementPool(EntitlementPoolEntity entitlementPool,
485 .debugEntryMessage("VLM id", entitlementPool.getVendorLicenseModelId());
487 .debugExitMessage("VLM id", entitlementPool.getVendorLicenseModelId());
489 entitlementPool.setStartDate(entitlementPool.getStartDate() != null ? (entitlementPool
490 .getStartDate().trim().length() != 0 ? entitlementPool.getStartDate()+"T00:00:00Z"
492 entitlementPool.setExpiryDate(entitlementPool.getExpiryDate() != null ? (entitlementPool
493 .getExpiryDate().trim().length() != 0 ? entitlementPool.getExpiryDate()+"T23:59:59Z"
496 validateCreateDate(entitlementPool.getStartDate(), entitlementPool.getExpiryDate(),
497 entitlementPool.getVendorLicenseModelId());
498 return vendorLicenseFacade.createEntitlementPool(entitlementPool, user);
501 private void validateCreateDate(String startDate, String expiryDate, String vendorLicenseModelId){
502 mdcDataDebugMessage.debugEntryMessage("Start date and end date", startDate
505 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy'T'HH:mm:ss'Z'");
507 if(startDate != null && expiryDate != null) {
508 if (LocalDate.parse(startDate, formatter).atStartOfDay().isBefore
509 (LocalDate.now().atStartOfDay()) || LocalDate.parse(expiryDate, formatter).atStartOfDay()
510 .isEqual(LocalDate.parse(startDate, formatter).atStartOfDay()) || LocalDate
511 .parse(expiryDate, formatter).isBefore(LocalDate.parse(startDate, formatter))) {
512 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
513 LoggerTragetServiceName.VALIDATE_DATE_RANGE,ErrorLevel.ERROR.name(),
514 LoggerErrorCode.DATA_ERROR.getErrorCode(), LoggerErrorDescription.INVALID_VALUE);
515 throw new CoreException(
516 new InvalidDateErrorBuilder(vendorLicenseModelId)
521 if(startDate != null && expiryDate == null) {
522 if (LocalDate.parse(startDate, formatter).atStartOfDay().isBefore
523 (LocalDate.now().atStartOfDay())) {
524 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
525 LoggerTragetServiceName.VALIDATE_DATE_RANGE,ErrorLevel.ERROR.name(),
526 LoggerErrorCode.DATA_ERROR.getErrorCode(), LoggerErrorDescription.INVALID_VALUE);
527 throw new CoreException(
528 new InvalidDateErrorBuilder(vendorLicenseModelId)
533 if(startDate == null && expiryDate != null) {
534 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
535 LoggerTragetServiceName.VALIDATE_DATE_RANGE,ErrorLevel.ERROR.name(),
536 LoggerErrorCode.DATA_ERROR.getErrorCode(), LoggerErrorDescription.INVALID_VALUE);
537 throw new CoreException(
538 new InvalidDateErrorBuilder(vendorLicenseModelId)
543 mdcDataDebugMessage.debugExitMessage(null,null);
546 private void validateUpdateDate(String startDate, String expiryDate, String vendorLicenseModelId){
547 mdcDataDebugMessage.debugEntryMessage("Start date and end date", startDate
550 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy'T'HH:mm:ss'Z'");
552 if(startDate != null && expiryDate != null) {
553 if (LocalDate.parse(expiryDate, formatter).atStartOfDay()
554 .isEqual(LocalDate.parse(startDate, formatter).atStartOfDay()) ||
555 LocalDate.parse(expiryDate, formatter).isBefore(LocalDate.parse(startDate, formatter))) {
556 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
557 LoggerTragetServiceName.VALIDATE_DATE_RANGE,ErrorLevel.ERROR.name(),
558 LoggerErrorCode.DATA_ERROR.getErrorCode(), LoggerErrorDescription.INVALID_VALUE);
559 throw new CoreException(
560 new InvalidDateErrorBuilder(vendorLicenseModelId)
565 if(startDate == null && expiryDate != null) {
566 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
567 LoggerTragetServiceName.VALIDATE_DATE_RANGE,ErrorLevel.ERROR.name(),
568 LoggerErrorCode.DATA_ERROR.getErrorCode(), LoggerErrorDescription.INVALID_VALUE);
569 throw new CoreException(
570 new InvalidDateErrorBuilder(vendorLicenseModelId)
575 mdcDataDebugMessage.debugExitMessage(null,null);
579 public void updateEntitlementPool(EntitlementPoolEntity entitlementPool, String user) {
580 mdcDataDebugMessage.debugEntryMessage("VLM id, EP id", entitlementPool
581 .getVendorLicenseModelId(), entitlementPool.getId());
583 entitlementPool.setStartDate(entitlementPool.getStartDate() != null ? (entitlementPool
584 .getStartDate().trim().length() != 0 ? entitlementPool.getStartDate()+"T00:00:00Z"
586 entitlementPool.setExpiryDate(entitlementPool.getExpiryDate() != null ? (entitlementPool
587 .getExpiryDate().trim().length() != 0 ? entitlementPool.getExpiryDate()+"T23:59:59Z"
590 validateUpdateDate(entitlementPool.getStartDate(), entitlementPool.getExpiryDate(),
591 entitlementPool.getVendorLicenseModelId());
592 Version version = VersioningUtil.resolveVersion(entitlementPool.getVersion(),
593 getVersionInfo(entitlementPool.getVendorLicenseModelId(), VersionableEntityAction.Write,
596 .updateVlmLastModificationTime(entitlementPool.getVendorLicenseModelId(), version);
597 vendorLicenseFacade.updateEntitlementPool(entitlementPool, user);
599 mdcDataDebugMessage.debugExitMessage("VLM id, EP id", entitlementPool
600 .getVendorLicenseModelId(), entitlementPool.getId());
604 public EntitlementPoolEntity getEntitlementPool(EntitlementPoolEntity entitlementPool,
606 mdcDataDebugMessage.debugEntryMessage("VLM id, EP id", entitlementPool
607 .getVendorLicenseModelId(), entitlementPool.getId());
609 entitlementPool.setVersion(VersioningUtil.resolveVersion(entitlementPool.getVersion(),
610 getVersionInfo(entitlementPool.getVendorLicenseModelId(), VersionableEntityAction.Read,
613 EntitlementPoolEntity retrieved = entitlementPoolDao.get(entitlementPool);
615 .validateEntityExistence(retrieved, entitlementPool, VendorLicenseModelEntity.ENTITY_TYPE);
617 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy'T'HH:mm:ss'Z'");
618 DateTimeFormatter targetFormatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
619 if(retrieved.getStartDate() != null){
620 retrieved.setStartDate(LocalDate.parse(retrieved.getStartDate(),formatter).format
624 if(retrieved.getExpiryDate() != null){
625 retrieved.setExpiryDate(LocalDate.parse(retrieved.getExpiryDate(),formatter).format
629 mdcDataDebugMessage.debugExitMessage("VLM id, EP id", entitlementPool
630 .getVendorLicenseModelId(), entitlementPool.getId());
635 public void deleteEntitlementPool(EntitlementPoolEntity entitlementPool, String user) {
636 mdcDataDebugMessage.debugEntryMessage("VLM id, EP id", entitlementPool
637 .getVendorLicenseModelId(), entitlementPool.getId());
639 Version version = VersioningUtil.resolveVersion(entitlementPool.getVersion(),
640 getVersionInfo(entitlementPool.getVendorLicenseModelId(), VersionableEntityAction.Write,
642 entitlementPool.setVersion(version);
644 EntitlementPoolEntity retrieved = entitlementPoolDao.get(entitlementPool);
646 .validateEntityExistence(retrieved, entitlementPool, VendorLicenseModelEntity.ENTITY_TYPE);
648 for (String referencingFeatureGroupId : retrieved.getReferencingFeatureGroups()) {
649 featureGroupDao.removeEntitlementPool(
650 new FeatureGroupEntity(entitlementPool.getVendorLicenseModelId(), version,
651 referencingFeatureGroupId), entitlementPool.getId());
654 deleteChildLimits(entitlementPool.getVendorLicenseModelId(), entitlementPool.getVersion(), entitlementPool.getId(), user);
656 entitlementPoolDao.delete(entitlementPool);
658 UniqueValueUtil.deleteUniqueValue(VendorLicenseConstants.UniqueValues.ENTITLEMENT_POOL_NAME,
659 retrieved.getVendorLicenseModelId(), retrieved.getVersion().toString(),
660 retrieved.getName());
662 vendorLicenseFacade.updateVlmLastModificationTime(entitlementPool.getVendorLicenseModelId(),
663 entitlementPool.getVersion());
665 mdcDataDebugMessage.debugExitMessage("VLM id, EP id", entitlementPool
666 .getVendorLicenseModelId(), entitlementPool.getId());
669 private void deleteChildLimits(String vlmId, Version version, String epLkgId, String user) {
670 Optional<Collection<LimitEntity>> limitEntities = Optional.ofNullable(
671 listLimits(vlmId, version, epLkgId, user));
672 limitEntities.ifPresent(entities->
673 entities.forEach(entity->
674 deleteLimit(entity, user)));
678 public Collection<LicenseKeyGroupEntity> listLicenseKeyGroups(String vlmId, Version version,
680 mdcDataDebugMessage.debugEntryMessage("VLM id", vlmId);
681 mdcDataDebugMessage.debugExitMessage("VLM id", vlmId);
682 return vendorLicenseFacade.listLicenseKeyGroups(vlmId, version, user);
686 public LicenseKeyGroupEntity createLicenseKeyGroup(LicenseKeyGroupEntity licenseKeyGroup,
689 .debugEntryMessage("VLM id", licenseKeyGroup.getVendorLicenseModelId());
691 mdcDataDebugMessage.debugExitMessage("VLM id", licenseKeyGroup
692 .getVendorLicenseModelId());
694 licenseKeyGroup.setStartDate(licenseKeyGroup.getStartDate() != null ? (licenseKeyGroup
695 .getStartDate().trim().length() != 0 ? licenseKeyGroup.getStartDate()+"T00:00:00Z"
697 licenseKeyGroup.setExpiryDate(licenseKeyGroup.getExpiryDate() != null ? (licenseKeyGroup
698 .getExpiryDate().trim().length() != 0 ? licenseKeyGroup.getExpiryDate()+"T23:59:59Z"
701 validateCreateDate(licenseKeyGroup.getStartDate(), licenseKeyGroup.getExpiryDate(),
702 licenseKeyGroup.getVendorLicenseModelId());
703 return vendorLicenseFacade.createLicenseKeyGroup(licenseKeyGroup, user);
707 public void updateLicenseKeyGroup(LicenseKeyGroupEntity licenseKeyGroup, String user) {
708 mdcDataDebugMessage.debugEntryMessage("VLM id, LKG id", licenseKeyGroup
709 .getVendorLicenseModelId(), licenseKeyGroup.getId());
711 licenseKeyGroup.setStartDate(licenseKeyGroup.getStartDate() != null ? (licenseKeyGroup
712 .getStartDate().trim().length() != 0 ? licenseKeyGroup.getStartDate()+"T00:00:00Z"
714 licenseKeyGroup.setExpiryDate(licenseKeyGroup.getExpiryDate() != null ? (licenseKeyGroup
715 .getExpiryDate().trim().length() != 0 ? licenseKeyGroup.getExpiryDate()+"T23:59:59Z"
718 validateUpdateDate(licenseKeyGroup.getStartDate(), licenseKeyGroup.getExpiryDate(),
719 licenseKeyGroup.getVendorLicenseModelId());
721 Version version = VersioningUtil.resolveVersion(licenseKeyGroup.getVersion(),
722 getVersionInfo(licenseKeyGroup.getVendorLicenseModelId(), VersionableEntityAction.Write,
725 .updateVlmLastModificationTime(licenseKeyGroup.getVendorLicenseModelId(), version);
727 vendorLicenseFacade.updateLicenseKeyGroup(licenseKeyGroup, user);
729 mdcDataDebugMessage.debugExitMessage("VLM id, LKG id", licenseKeyGroup
730 .getVendorLicenseModelId(), licenseKeyGroup.getId());
734 public LicenseKeyGroupEntity getLicenseKeyGroup(LicenseKeyGroupEntity licenseKeyGroup,
736 mdcDataDebugMessage.debugEntryMessage("VLM id, LKG id", licenseKeyGroup
737 .getVendorLicenseModelId(), licenseKeyGroup.getId());
739 licenseKeyGroup.setVersion(VersioningUtil.resolveVersion(licenseKeyGroup.getVersion(),
740 getVersionInfo(licenseKeyGroup.getVendorLicenseModelId(), VersionableEntityAction.Read,
743 LicenseKeyGroupEntity retrieved = licenseKeyGroupDao.get(licenseKeyGroup);
745 .validateEntityExistence(retrieved, licenseKeyGroup, VendorLicenseModelEntity.ENTITY_TYPE);
747 mdcDataDebugMessage.debugExitMessage("VLM id, LKG id", licenseKeyGroup
748 .getVendorLicenseModelId(), licenseKeyGroup.getId());
753 public void deleteLicenseKeyGroup(LicenseKeyGroupEntity licenseKeyGroup, String user) {
754 mdcDataDebugMessage.debugEntryMessage("VLM id, LKG id", licenseKeyGroup
755 .getVendorLicenseModelId(), licenseKeyGroup.getId());
757 Version version = VersioningUtil.resolveVersion(licenseKeyGroup.getVersion(),
758 getVersionInfo(licenseKeyGroup.getVendorLicenseModelId(), VersionableEntityAction.Write,
760 licenseKeyGroup.setVersion(version);
762 LicenseKeyGroupEntity retrieved = licenseKeyGroupDao.get(licenseKeyGroup);
764 .validateEntityExistence(retrieved, licenseKeyGroup, VendorLicenseModelEntity.ENTITY_TYPE);
766 for (String referencingFeatureGroupId : retrieved.getReferencingFeatureGroups()) {
767 featureGroupDao.removeLicenseKeyGroup(
768 new FeatureGroupEntity(licenseKeyGroup.getVendorLicenseModelId(), version,
769 referencingFeatureGroupId), licenseKeyGroup.getId());
772 deleteChildLimits(licenseKeyGroup.getVendorLicenseModelId(), licenseKeyGroup.getVersion(), licenseKeyGroup.getId(), user);
774 licenseKeyGroupDao.delete(licenseKeyGroup);
776 UniqueValueUtil.deleteUniqueValue(VendorLicenseConstants.UniqueValues.LICENSE_KEY_GROUP_NAME,
777 retrieved.getVendorLicenseModelId(), retrieved.getVersion().toString(),
778 retrieved.getName());
780 vendorLicenseFacade.updateVlmLastModificationTime(licenseKeyGroup.getVendorLicenseModelId(),
781 licenseKeyGroup.getVersion());
783 mdcDataDebugMessage.debugExitMessage("VLM id, LKG id", licenseKeyGroup
784 .getVendorLicenseModelId(), licenseKeyGroup.getId());
788 public LimitEntity createLimit(LimitEntity limit, String user) {
790 .debugEntryMessage("VLM id", limit.getVendorLicenseModelId(), "EP/LKGId", limit
793 .debugExitMessage("VLM id", limit.getVendorLicenseModelId(), "EP/LKGId", limit
795 validateLimit(limit, user);
796 return vendorLicenseFacade.createLimit(limit, user);
799 private void validateLimit(LimitEntity limit, String user) {
800 Version version = VersioningUtil.resolveVersion(limit.getVersion(),
801 getVersionInfo(limit.getVendorLicenseModelId(), VersionableEntityAction.Write,
803 Collection<LimitEntity> limitList = listLimits(limit.getVendorLicenseModelId(),version
804 ,limit.getEpLkgId(), user);
806 if (!isLimitNameUnique(limitList,limit.getName(), limit.getType(), limit.getId())) {
807 final ErrorCode duplicateLimitNameErrorBuilder =
808 LimitErrorBuilder.getDuplicateNameErrorbuilder(limit.getName(), limit.getType().name());
809 MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_DB,
810 LoggerServiceName.Create_LIMIT.toString(), ErrorLevel.ERROR.name(),
811 LoggerErrorCode.DATA_ERROR.getErrorCode(),
812 duplicateLimitNameErrorBuilder.message());
813 throw new CoreException(duplicateLimitNameErrorBuilder);
817 private boolean isLimitNameUnique(Collection<LimitEntity> limitList, String name, LimitType
819 for (LimitEntity limit : limitList) {
820 if(limit.getName().equalsIgnoreCase(name) &&
821 limit.getType().name().equalsIgnoreCase(type.name())) {
822 if(id != null && limit.getId().equals(id)){
832 public Collection<LimitEntity> listLimits(String vlmId, Version version, String epLkgId,
834 mdcDataDebugMessage.debugEntryMessage("VLM id", vlmId, "EP/LKGId", epLkgId);
835 mdcDataDebugMessage.debugExitMessage("VLM id", vlmId, "EP/LKGId", epLkgId);
836 return vendorLicenseFacade.listLimits(vlmId, version, epLkgId, user);
840 public void deleteLimit(LimitEntity limitEntity, String user) {
841 mdcDataDebugMessage.debugEntryMessage("VLM id, EP id, Limit Id", limitEntity
842 .getVendorLicenseModelId(), limitEntity.getEpLkgId(), limitEntity.getId());
844 Version version = VersioningUtil.resolveVersion(limitEntity.getVersion(),
845 getVersionInfo(limitEntity.getVendorLicenseModelId(), VersionableEntityAction.Write,
847 limitEntity.setVersion(version);
849 if(!isLimitPresent(limitEntity)){
851 .validateEntityExistence(null, limitEntity, VendorLicenseModelEntity.ENTITY_TYPE);
853 LimitEntity retrieved = limitDao.get(limitEntity);
855 .validateEntityExistence(retrieved, limitEntity, VendorLicenseModelEntity.ENTITY_TYPE);
857 limitDao.delete(limitEntity);
859 vendorLicenseFacade.updateVlmLastModificationTime(limitEntity.getVendorLicenseModelId(),
860 limitEntity.getVersion());
862 mdcDataDebugMessage.debugExitMessage("VLM id, EP id, Limit Id", limitEntity
863 .getVendorLicenseModelId(), limitEntity.getEpLkgId(), limitEntity.getId());
867 public void updateLimit(LimitEntity limit, String user) {
869 .debugEntryMessage("VLM id", limit.getVendorLicenseModelId(), "EP/LKGId", limit
871 getLimit(limit,user);
872 validateLimit(limit, user);
873 vendorLicenseFacade.updateLimit(limit, user);
875 .debugExitMessage("VLM id", limit.getVendorLicenseModelId(), "EP/LKGId", limit
879 private boolean isLimitPresent(LimitEntity limit) {
880 return limitDao.isLimitPresent(limit);
884 public LimitEntity getLimit(LimitEntity limitEntity,
886 mdcDataDebugMessage.debugEntryMessage("VLM id", limitEntity.getVendorLicenseModelId(),
887 "EP/LKGId", limitEntity.getEpLkgId());
889 limitEntity.setVersion(VersioningUtil.resolveVersion(limitEntity.getVersion(),
890 getVersionInfo(limitEntity.getVendorLicenseModelId(), VersionableEntityAction.Read,
892 if(!isLimitPresent(limitEntity)){
894 .validateEntityExistence(null, limitEntity, VendorLicenseModelEntity.ENTITY_TYPE);
896 LimitEntity retrieved = limitDao.get(limitEntity);
898 .validateEntityExistence(retrieved, limitEntity, VendorLicenseModelEntity.ENTITY_TYPE);
900 mdcDataDebugMessage.debugExitMessage("VLM id", limitEntity.getVendorLicenseModelId(),
901 "EP/LKGId", limitEntity.getEpLkgId());
905 private void addFeatureGroupsToLicenseAgreementRef(Set<String> featureGroupIds,
906 LicenseAgreementEntity licenseAgreement) {
907 if (featureGroupIds != null) {
908 for (String featureGroupId : featureGroupIds) {
909 featureGroupDao.addReferencingLicenseAgreement(
910 new FeatureGroupEntity(licenseAgreement.getVendorLicenseModelId(),
911 licenseAgreement.getVersion(), featureGroupId), licenseAgreement.getId());
916 private void removeFeatureGroupsToLicenseAgreementRef(Set<String> featureGroupIds,
917 LicenseAgreementEntity licenseAgreement) {
918 if (featureGroupIds != null) {
919 for (String featureGroupId : featureGroupIds) {
920 featureGroupDao.removeReferencingLicenseAgreement(
921 new FeatureGroupEntity(licenseAgreement.getVendorLicenseModelId(),
922 licenseAgreement.getVersion(), featureGroupId), licenseAgreement.getId());
927 private void addLicenseKeyGroupsToFeatureGroupsRef(Set<String> licenseKeyGroupIds,
928 FeatureGroupEntity featureGroup) {
929 if (licenseKeyGroupIds != null) {
930 for (String licenseKeyGroupId : licenseKeyGroupIds) {
931 licenseKeyGroupDao.addReferencingFeatureGroup(
932 new LicenseKeyGroupEntity(featureGroup.getVendorLicenseModelId(),
933 featureGroup.getVersion(), licenseKeyGroupId), featureGroup.getId());
938 private void removeLicenseKeyGroupsToFeatureGroupsRef(Set<String> licenseKeyGroupIds,
939 FeatureGroupEntity featureGroup) {
940 if (licenseKeyGroupIds != null) {
941 for (String licenseKeyGroupId : licenseKeyGroupIds) {
942 licenseKeyGroupDao.removeReferencingFeatureGroup(
943 new LicenseKeyGroupEntity(featureGroup.getVendorLicenseModelId(),
944 featureGroup.getVersion(), licenseKeyGroupId), featureGroup.getId());
949 private void addEntitlementPoolsToFeatureGroupsRef(Set<String> entitlementPoolIds,
950 FeatureGroupEntity featureGroup) {
951 if (entitlementPoolIds != null) {
952 for (String entitlementPoolId : entitlementPoolIds) {
953 entitlementPoolDao.addReferencingFeatureGroup(
954 new EntitlementPoolEntity(featureGroup.getVendorLicenseModelId(),
955 featureGroup.getVersion(), entitlementPoolId), featureGroup.getId());
960 private void removeEntitlementPoolsToFeatureGroupsRef(Set<String> entitlementPoolIds,
961 FeatureGroupEntity featureGroup) {
962 if (entitlementPoolIds != null) {
963 for (String entitlementPoolId : entitlementPoolIds) {
964 entitlementPoolDao.removeReferencingFeatureGroup(
965 new EntitlementPoolEntity(featureGroup.getVendorLicenseModelId(),
966 featureGroup.getVersion(), entitlementPoolId), featureGroup.getId());
971 private VersionInfo getVersionInfo(String vendorLicenseModelId, VersionableEntityAction action,
973 return vendorLicenseFacade.getVersionInfo(vendorLicenseModelId, action, user);