diff options
author | talig <talig@amdocs.com> | 2017-12-20 14:30:43 +0200 |
---|---|---|
committer | Vitaly Emporopulo <Vitaliy.Emporopulo@amdocs.com> | 2017-12-21 11:12:33 +0000 |
commit | 8e9c0653dd6c6862123c9609ae34e1206d86456e (patch) | |
tree | 5eeef00ec0677133baa439ca8d7ffd7aca4804b6 /openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/services/VendorLicenseModelsImpl.java | |
parent | 785ebcc95de3e064e843bec04ba7a209d854fc7c (diff) |
Add collaboration feature
Issue-ID: SDC-767
Change-Id: I14fb4c1f54086ed03a56a7ff7fab9ecd40381795
Signed-off-by: talig <talig@amdocs.com>
Diffstat (limited to 'openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/services/VendorLicenseModelsImpl.java')
-rw-r--r-- | openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/services/VendorLicenseModelsImpl.java | 348 |
1 files changed, 243 insertions, 105 deletions
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/services/VendorLicenseModelsImpl.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/services/VendorLicenseModelsImpl.java index 6d88e4cacb..2b8e5a343e 100644 --- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/services/VendorLicenseModelsImpl.java +++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/services/VendorLicenseModelsImpl.java @@ -20,37 +20,67 @@ package org.openecomp.sdcrests.vendorlicense.rest.services; +import org.openecomp.core.util.UniqueValueUtil; +import org.openecomp.sdc.activitylog.ActivityLogManager; +import org.openecomp.sdc.activitylog.ActivityLogManagerFactory; +import org.openecomp.sdc.activitylog.dao.type.ActivityLogEntity; +import org.openecomp.sdc.activitylog.dao.type.ActivityType; +import org.openecomp.sdc.common.errors.Messages; +import org.openecomp.sdc.datatypes.model.ItemType; +import org.openecomp.sdc.healing.factory.HealingManagerFactory; +import org.openecomp.sdc.itempermissions.ItemPermissionsManager; +import org.openecomp.sdc.itempermissions.ItemPermissionsManagerFactory; +import org.openecomp.sdc.itempermissions.impl.types.PermissionTypes; import org.openecomp.sdc.logging.api.Logger; import org.openecomp.sdc.logging.api.LoggerFactory; import org.openecomp.sdc.logging.context.MdcUtil; import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage; import org.openecomp.sdc.logging.messages.AuditMessages; -import org.openecomp.sdc.logging.types.LoggerConstants; import org.openecomp.sdc.logging.types.LoggerServiceName; +import org.openecomp.sdc.notification.dtos.Event; +import org.openecomp.sdc.notification.factories.NotificationPropagationManagerFactory; +import org.openecomp.sdc.notification.services.NotificationPropagationManager; +import org.openecomp.sdc.vendorlicense.VendorLicenseConstants; import org.openecomp.sdc.vendorlicense.VendorLicenseManager; import org.openecomp.sdc.vendorlicense.VendorLicenseManagerFactory; import org.openecomp.sdc.vendorlicense.dao.types.VendorLicenseModelEntity; -import org.openecomp.sdc.vendorlicense.types.VersionedVendorLicenseModel; -import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductManager; -import org.openecomp.sdc.vendorsoftwareproduct.VspManagerFactory; +import org.openecomp.sdc.versioning.ItemManager; +import org.openecomp.sdc.versioning.ItemManagerFactory; +import org.openecomp.sdc.versioning.VersioningManager; +import org.openecomp.sdc.versioning.VersioningManagerFactory; import org.openecomp.sdc.versioning.dao.types.Version; +import org.openecomp.sdc.versioning.dao.types.VersionStatus; +import org.openecomp.sdc.versioning.types.Item; +import org.openecomp.sdc.versioning.types.NotificationEventTypes; +import org.openecomp.sdcrests.item.rest.mapping.MapItemToDto; +import org.openecomp.sdcrests.item.rest.mapping.MapVersionToDto; +import org.openecomp.sdcrests.item.types.ItemCreationDto; +import org.openecomp.sdcrests.item.types.ItemDto; +import org.openecomp.sdcrests.item.types.VersionDto; import org.openecomp.sdcrests.vendorlicense.rest.VendorLicenseModels; +import org.openecomp.sdcrests.vendorlicense.rest.mapping.MapVendorLicenseModelEntityToDto; import org.openecomp.sdcrests.vendorlicense.rest.mapping.MapVendorLicenseModelRequestDtoToVendorLicenseModelEntity; -import org.openecomp.sdcrests.vendorlicense.rest.mapping.MapVersionedVendorLicenseModelToVendorLicenseModelEntityDto; import org.openecomp.sdcrests.vendorlicense.types.VendorLicenseModelActionRequestDto; import org.openecomp.sdcrests.vendorlicense.types.VendorLicenseModelEntityDto; import org.openecomp.sdcrests.vendorlicense.types.VendorLicenseModelRequestDto; import org.openecomp.sdcrests.wrappers.GenericCollectionWrapper; -import org.openecomp.sdcrests.wrappers.StringWrapperResponse; -import org.slf4j.MDC; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.inject.Named; import javax.ws.rs.core.Response; -import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.function.Predicate; + +import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.PERMISSION_USER; +import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.ITEM_ID; +import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.ITEM_NAME; +import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.SUBMIT_DESCRIPTION; +import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.VERSION_ID; +import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.VERSION_NAME; @Named @Service("vendorLicenseModels") @@ -59,140 +89,248 @@ import java.util.Collection; public class VendorLicenseModelsImpl implements VendorLicenseModels { private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage(); + private static final Logger logger = LoggerFactory.getLogger(VendorLicenseModelsImpl.class); + public static final String SUBMIT_ITEM = "Submit_Item"; + private ItemPermissionsManager permissionsManager = ItemPermissionsManagerFactory.getInstance() + .createInterface(); + private NotificationPropagationManager notifier = + NotificationPropagationManagerFactory.getInstance().createInterface(); + + private ItemManager itemManager = ItemManagerFactory.getInstance().createInterface(); + private VersioningManager versioningManager = + VersioningManagerFactory.getInstance().createInterface(); private VendorLicenseManager vendorLicenseManager = VendorLicenseManagerFactory.getInstance().createInterface(); + private ActivityLogManager activityLogManager = + ActivityLogManagerFactory.getInstance().createInterface(); + + @Override + public Response listLicenseModels(String versionStatus, String user) { + mdcDataDebugMessage.debugEntryMessage(null); + MdcUtil.initMdc(LoggerServiceName.List_VLM.toString()); + + Predicate<Item> itemPredicate; + if (VersionStatus.Certified.name().equals(versionStatus)) { + itemPredicate = item -> ItemType.vlm.name().equals(item.getType()) && + item.getVersionStatusCounters().containsKey(VersionStatus.Certified); + + } else if (VersionStatus.Draft.name().equals(versionStatus)) { + itemPredicate = item -> ItemType.vlm.name().equals(item.getType()) && + item.getVersionStatusCounters().containsKey(VersionStatus.Draft) && + userHasPermission(item.getId(), user); + + } else { + itemPredicate = item -> ItemType.vlm.name().equals(item.getType()); + } - private static final Logger logger = - LoggerFactory.getLogger(VendorLicenseModelsImpl.class); + GenericCollectionWrapper<ItemDto> results = new GenericCollectionWrapper<>(); + MapItemToDto mapper = new MapItemToDto(); + itemManager.list(itemPredicate).stream() + .sorted((o1, o2) -> o2.getModificationTime().compareTo(o1.getModificationTime())) + .forEach(vspItem -> results.add(mapper.applyMapping(vspItem, ItemDto.class))); - @Override - public Response listLicenseModels(String versionFilter, String user) { - - mdcDataDebugMessage.debugEntryMessage(null, null); - MdcUtil.initMdc(LoggerServiceName.List_VLM.toString()); - Collection<VersionedVendorLicenseModel> versionedVendorLicenseModels = - vendorLicenseManager.listVendorLicenseModels(versionFilter, user); - - GenericCollectionWrapper<VendorLicenseModelEntityDto> results = - new GenericCollectionWrapper<>(); - MapVersionedVendorLicenseModelToVendorLicenseModelEntityDto outputMapper = - new MapVersionedVendorLicenseModelToVendorLicenseModelEntityDto(); - for (VersionedVendorLicenseModel versionedVlm : versionedVendorLicenseModels) { - results.add(outputMapper.applyMapping(versionedVlm, VendorLicenseModelEntityDto.class)); - } + mdcDataDebugMessage.debugExitMessage(null); + return Response.ok(results).build(); + } - mdcDataDebugMessage.debugExitMessage(null, null); + @Override + public Response createLicenseModel(VendorLicenseModelRequestDto request, String user) { + mdcDataDebugMessage.debugEntryMessage(null); + logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.CREATE_VLM + request.getVendorName()); + MdcUtil.initMdc(LoggerServiceName.Create_VLM.toString()); - return Response.ok(results).build(); - } + Item item = new Item(); + item.setType(ItemType.vlm.name()); + item.setName(request.getVendorName()); + item.setDescription(request.getDescription()); - @Override - public Response createLicenseModel(VendorLicenseModelRequestDto request, String user) { + UniqueValueUtil + .validateUniqueValue(VendorLicenseConstants.UniqueValues.VENDOR_NAME, item.getName()); + item = itemManager.create(item); + UniqueValueUtil + .createUniqueValue(VendorLicenseConstants.UniqueValues.VENDOR_NAME, item.getName()); - mdcDataDebugMessage.debugEntryMessage(null, null); + Version version = versioningManager.create(item.getId(), new Version(), null); - logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.CREATE_VLM - + request.getVendorName()); + VendorLicenseModelEntity vlm = new MapVendorLicenseModelRequestDtoToVendorLicenseModelEntity() + .applyMapping(request, VendorLicenseModelEntity.class); + vlm.setId(item.getId()); + vlm.setVersion(version); - MdcUtil.initMdc(LoggerServiceName.Create_VLM.toString()); - VendorLicenseModelEntity vendorLicenseModelEntity = + vendorLicenseManager.createVendorLicenseModel(vlm); + versioningManager.publish(item.getId(), version, "Initial vlm:" + vlm.getVendorName()); + + ItemCreationDto itemCreationDto = new ItemCreationDto(); + itemCreationDto.setItemId(item.getId()); + itemCreationDto.setVersion(new MapVersionToDto().applyMapping(version, VersionDto.class)); + + activityLogManager.logActivity(new ActivityLogEntity(vlm.getId(), version, + ActivityType.Create, user, true, "", "")); + + mdcDataDebugMessage.debugExitMessage(null); + return Response.ok(itemCreationDto).build(); + } + + @Override + public Response updateLicenseModel(VendorLicenseModelRequestDto request, String vlmId, + String versionId, String user) { + mdcDataDebugMessage.debugEntryMessage("VLM id", vlmId); + MdcUtil.initMdc(LoggerServiceName.Update_VLM.toString()); + + VendorLicenseModelEntity vlm = new MapVendorLicenseModelRequestDtoToVendorLicenseModelEntity() .applyMapping(request, VendorLicenseModelEntity.class); - VendorLicenseModelEntity createdVendorLicenseModel = - vendorLicenseManager.createVendorLicenseModel(vendorLicenseModelEntity, user); - StringWrapperResponse result = createdVendorLicenseModel != null ? new StringWrapperResponse( - createdVendorLicenseModel.getId()) : null; + vlm.setId(vlmId); + vlm.setVersion(new Version(versionId)); + + vendorLicenseManager.updateVendorLicenseModel(vlm); + + mdcDataDebugMessage.debugExitMessage("VLM id", vlmId); + return Response.ok().build(); + } + + @Override + public Response getLicenseModel(String vlmId, String versionId, String user) { + mdcDataDebugMessage.debugEntryMessage("VLM id", vlmId); + MdcUtil.initMdc(LoggerServiceName.Get_VLM.toString()); + + Version version = versioningManager.get(vlmId, new Version(versionId)); + VendorLicenseModelEntity vlm = vendorLicenseManager.getVendorLicenseModel(vlmId, version); + vlm.setWritetimeMicroSeconds(version.getModificationTime().getTime()); + + try { + Optional<Version> healedVersion = HealingManagerFactory.getInstance().createInterface() + .healItemVersion(vlmId, version, ItemType.vlm, false); + healedVersion.ifPresent(vlm::setVersion); + + if (healedVersion.isPresent() && version.getStatus() == VersionStatus.Certified) { + try { + submit(vlmId, healedVersion.get(), "Submit after heal", user); + } catch (Exception ex) { + logger.error("VLM Id {}: Error while submitting version {} " + + "created based on Certified version {} for healing purpose.", + vlmId, healedVersion.get().getId(), versionId, ex.getMessage()); + } + } + } catch (Exception e) { + logger.error(String.format("Error while auto healing VLM with Id %s and version %s: %s", + vlmId, versionId, e.getMessage())); + } - mdcDataDebugMessage.debugExitMessage(null, null); + VendorLicenseModelEntityDto vlmDto = + new MapVendorLicenseModelEntityToDto().applyMapping(vlm, VendorLicenseModelEntityDto.class); - return Response.ok(result).build(); - } + mdcDataDebugMessage.debugExitMessage("VLM id", vlmId); + return Response.ok(vlmDto).build(); + } - @Override - public Response updateLicenseModel(VendorLicenseModelRequestDto request, String vlmId, - String versionId, String user) { + @Override + public Response deleteLicenseModel(String vlmId, String versionId, String user) { + mdcDataDebugMessage.debugEntryMessage("VLM id", vlmId); + + MdcUtil.initMdc(LoggerServiceName.Delete_VLM.toString()); + vendorLicenseManager.deleteVendorLicenseModel(vlmId, new Version(versionId)); - mdcDataDebugMessage.debugEntryMessage("VLM id", vlmId); + mdcDataDebugMessage.debugExitMessage("VLM id", vlmId); - MdcUtil.initMdc(LoggerServiceName.Update_VLM.toString()); - VendorLicenseModelEntity vendorLicenseModelEntity = - new MapVendorLicenseModelRequestDtoToVendorLicenseModelEntity() - .applyMapping(request, VendorLicenseModelEntity.class); - vendorLicenseModelEntity.setId(vlmId); + return Response.ok().build(); + } - vendorLicenseManager.updateVendorLicenseModel(vendorLicenseModelEntity, user); + @Override + public Response actOnLicenseModel(VendorLicenseModelActionRequestDto request, String vlmId, + String versionId, String user) { + Version version = new Version(versionId); - mdcDataDebugMessage.debugExitMessage("VLM id", vlmId); + switch (request.getAction()) { + case Submit: + if (!permissionsManager.isAllowed(vlmId, user, SUBMIT_ITEM)) { + return Response.status(Response.Status.FORBIDDEN).entity + (new Exception(Messages.PERMISSIONS_ERROR.getErrorMessage())).build(); + } + String message = + request.getSubmitRequest() == null ? "" : request.getSubmitRequest().getMessage(); + submit(vlmId, version, message, user); - return Response.ok().build(); + notifyUsers(vlmId, version, message, user, NotificationEventTypes.SUBMIT); + break; + default: } - @Override - public Response getLicenseModel(String vlmId, String versionId, String user) { + return Response.ok().build(); + } - mdcDataDebugMessage.debugEntryMessage("VLM id", vlmId); + private void submit(String vlmId, Version version, String message, String user) { + MdcUtil.initMdc(LoggerServiceName.Submit_VLM.toString()); + logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.SUBMIT_VLM + vlmId); - MdcUtil.initMdc(LoggerServiceName.Get_VLM.toString()); - VersionedVendorLicenseModel versionedVlm = - vendorLicenseManager.getVendorLicenseModel(vlmId, Version.valueOf(versionId), user); + vendorLicenseManager.validate(vlmId, version); + versioningManager.submit(vlmId, version, message); - VendorLicenseModelEntityDto vlmDto = versionedVlm == null ? null : - new MapVersionedVendorLicenseModelToVendorLicenseModelEntityDto() - .applyMapping(versionedVlm, VendorLicenseModelEntityDto.class); + activityLogManager.logActivity( + new ActivityLogEntity(vlmId, version, ActivityType.Submit, user, true, "", message)); + } - mdcDataDebugMessage.debugExitMessage("VLM id", vlmId); + private void notifyUsers(String itemId, Version version, String message, + String userName, NotificationEventTypes eventType) { + Map<String, Object> eventProperties = new HashMap<>(); + eventProperties.put(ITEM_NAME, itemManager.get(itemId).getName()); + eventProperties.put(ITEM_ID, itemId); - return Response.ok(vlmDto).build(); - } + Version ver = versioningManager.get(itemId, version); + eventProperties.put(VERSION_NAME, ver.getName()); + eventProperties.put(VERSION_ID, ver.getId()); - @Override - public Response deleteLicenseModel(String vlmId, String versionId, String user) { + eventProperties.put(SUBMIT_DESCRIPTION, message); + eventProperties.put(PERMISSION_USER, userName); - mdcDataDebugMessage.debugEntryMessage("VLM id", vlmId); + Event syncEvent = new SyncEvent(eventType.getEventName(), itemId, eventProperties, itemId); + try { + notifier.notifySubscribers(syncEvent, userName); + } catch (Exception e) { + logger.error("Failed to send sync notification to users subscribed o item '" + itemId); + } + } - MdcUtil.initMdc(LoggerServiceName.Delete_VLM.toString()); - vendorLicenseManager.deleteVendorLicenseModel(vlmId, user); + private class SyncEvent implements Event { - mdcDataDebugMessage.debugExitMessage("VLM id", vlmId); + private String eventType; + private String originatorId; + private Map<String, Object> attributes; + private String entityId; - return Response.ok().build(); + public SyncEvent(String eventType, String originatorId, + Map<String, Object> attributes, String entityId) { + this.eventType = eventType; + this.originatorId = originatorId; + this.attributes = attributes; + this.entityId = entityId; } @Override - public Response actOnLicenseModel(VendorLicenseModelActionRequestDto request, String vlmId, - String versionId, String user) { + public String getEventType() { + return eventType; + } - switch (request.getAction()) { - case Checkout: - MDC.put(LoggerConstants.SERVICE_NAME, - LoggerServiceName.Checkout_VLM.toString()); - logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.CHECK_OUT_VLM - + vlmId); - vendorLicenseManager.checkout(vlmId, user); - break; - case Undo_Checkout: - MDC.put(LoggerConstants.SERVICE_NAME, - LoggerServiceName.Undo_Checkout_VLM.toString()); - vendorLicenseManager.undoCheckout(vlmId, user); - break; - case Checkin: - MDC.put(LoggerConstants.SERVICE_NAME, - LoggerServiceName.Checkin_VLM.toString()); - logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.CHECK_IN_VLM - + vlmId); - vendorLicenseManager.checkin(vlmId, user); - break; - case Submit: - MDC.put(LoggerConstants.SERVICE_NAME, - LoggerServiceName.Submit_VLM.toString()); - logger.audit(AuditMessages.AUDIT_MSG + AuditMessages.SUBMIT_VLM - + vlmId); - vendorLicenseManager.submit(vlmId, user); - break; - default: + @Override + public String getOriginatorId() { + return originatorId; } - return Response.ok().build(); + @Override + public Map<String, Object> getAttributes() { + return attributes; } + + @Override + public String getEntityId() { + return entityId; + } + } + + private boolean userHasPermission(String itemId, String userId) { + String permission = permissionsManager.getUserItemPermiission(itemId, userId); + return (permission != null && permission + .matches(PermissionTypes.Contributor.name() + "|" + PermissionTypes.Owner.name())); + } } |