Commit 0e493e43 authored by Anastasios Poimenidis's avatar Anastasios Poimenidis
Browse files

fix: introduce logic in PeeringHelper for removing specifications that are not...

fix: introduce logic in PeeringHelper for removing specifications that are not present anymore in an update message (checkdiff)
parent b2a0d20e
Loading
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -317,8 +317,7 @@ public class ServiceCatalogHelper {

    public List<ServiceSpecificationEntity> getServiceSpecificationEntitiesByOrganizationId(
            String organizationId) {
        return serviceSpecificationRepository.findServiceSpecificationIdsByOrganizationId(
                organizationId);
        return serviceSpecificationRepository.findServiceSpecificationsByOrganizationId(organizationId);
    }

    public Optional<ServiceSpecificationEntity> findSpecificationById(String specificationId) {
+1 −1
Original line number Diff line number Diff line
@@ -55,7 +55,7 @@ public class PeeringApiListener {
                "Received the updated peered organization %s service specs",
                peeredOrganizationData.getOrganizationId());
        try {
            peeringHelper.updatePeeredServiceSpecs(peeredOrganizationData);
            peeringHelper.updateServiceSpecsFromPeeringInfo(peeredOrganizationData);
        } catch (Exception e) {
            logger.errorf(
                    "Could not update the specs of organization %s because %s",
+20 −26
Original line number Diff line number Diff line
@@ -5,7 +5,6 @@ import static org.etsi.osl.hypo.api.tmf.ServiceCategoriesConstants.K8S_SERVICES;
import static org.etsi.osl.hypo.api.tmf.common.constants.OssConstants.PEERED_ORGANIZATION;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.transaction.Transactional;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -17,7 +16,6 @@ import org.etsi.osl.hypo.api.tmf.party.api.services.OrganizationService;
import org.etsi.osl.hypo.api.tmf.peering.PeeredOrganizationData;
import org.etsi.osl.hypo.api.tmf.peering.ServiceCatalog;
import org.etsi.osl.hypo.api.tmf.peering.ServiceCategory;
import org.etsi.osl.hypo.api.tmf.services.catalog.api.model.service.specification.ServiceSpecificationListsResult;
import org.etsi.osl.hypo.api.tmf.services.catalog.api.services.ServiceCandidateService;
import org.etsi.osl.hypo.api.tmf.services.catalog.api.services.ServiceCatalogService;
import org.etsi.osl.hypo.api.tmf.services.catalog.api.services.ServiceCategoryService;
@@ -94,45 +92,41 @@ public class PeeringHelper {
        updatePeeredOrganizationCharacteristicForSuccess(organizationId);
    }

    @Transactional
    public void updatePeeredServiceSpecs(PeeredOrganizationData peeredOrganizationData) {
    public void updateServiceSpecsFromPeeringInfo(PeeredOrganizationData peeredOrganizationData) {

        List<ServiceSpecificationEntity> serviceSpecificationEntities =
                peeredOrganizationData.getServiceSpecificationEntities();
        String relatedPartyId = peeredOrganizationData.getOrganizationId();
        String organizationId = peeredOrganizationData.getOrganizationId();

        List<String> serviceSpecificationIdsFromPeeringData =
                serviceSpecificationEntities.stream().map(BaseEntity::getId).toList();

        logger.debugf(
                "Received the updated peered organization service specs %s", serviceSpecificationEntities);
        ServiceSpecificationListsResult serviceSpecificationListsResult =
                serviceSpecificationService.getSpecsForPeeringUpdate(
                        serviceSpecificationEntities, relatedPartyId);

        List<ServiceSpecificationEntity> existingSpecs = serviceSpecificationListsResult.getMatched();

        if (CollectionUtils.isNotEmpty(existingSpecs)) {
            existingSpecs.forEach(
                    serviceSpecificationEntity ->
                            serviceSpecificationService.updateServiceSpecificationViaPeering(
                                    serviceSpecificationEntity.getId(), serviceSpecificationEntity));
        }
        List<String> specIdsThatNeedPersistence =
                serviceSpecificationService.filterSpecsForPeering(
                        serviceSpecificationEntities, organizationId);

        List<ServiceSpecificationEntity> notPersistedSpecs =
                serviceSpecificationListsResult.getNotMatched();

        if (CollectionUtils.isNotEmpty(notPersistedSpecs)) {
        if (CollectionUtils.isNotEmpty(serviceSpecificationIdsFromPeeringData)) {
            PeeredOrganizationData peeredOrganizationDataNew =
                    getPeeredOrganizationData(peeredOrganizationData, notPersistedSpecs);
            addPeeredServiceSpecs(peeredOrganizationDataNew);
                    this.getPeeredOrganizationDataFiltered(
                            peeredOrganizationData, specIdsThatNeedPersistence);
            this.addPeeredServiceSpecs(peeredOrganizationDataNew);
        }
    }

    private PeeredOrganizationData getPeeredOrganizationData(
            PeeredOrganizationData peeredOrganizationData,
            List<ServiceSpecificationEntity> notPersistedSpecs) {
    private PeeredOrganizationData getPeeredOrganizationDataFiltered(
            PeeredOrganizationData peeredOrganizationData, List<String> notPersistedSpecIds) {
        PeeredOrganizationData peeredOrganizationDataNew = new PeeredOrganizationData();
        peeredOrganizationDataNew.setOrganizationId(peeredOrganizationData.getOrganizationId());
        peeredOrganizationDataNew.setStatus(peeredOrganizationData.getStatus());
        List<ServiceCatalog> serviceCatalogs = peeredOrganizationData.getServiceCatalogs();
        List<ServiceSpecificationEntity> notPersistedSpecs =
                peeredOrganizationData.getServiceSpecificationEntities().stream()
                        .filter(
                                serviceSpecificationEntity ->
                                        notPersistedSpecIds.contains(serviceSpecificationEntity.getId()))
                        .toList();
        filterCatalogs(serviceCatalogs, notPersistedSpecs);
        peeredOrganizationDataNew.setServiceCatalogs(serviceCatalogs);
        peeredOrganizationDataNew.setServiceSpecificationEntities(notPersistedSpecs);
+4 −8
Original line number Diff line number Diff line
package org.etsi.osl.hypo.api.tmf.services.catalog.api.mapper;

import static org.etsi.osl.hypo.api.tmf.common.api.constants.ApiConstants.ID;

import org.etsi.osl.hypo.api.tmf.common.schema.ValueEntity;
import org.etsi.osl.hypo.api.tmf.services.catalog.schema.ServiceCandidateEntity;
import org.etsi.osl.hypo.api.tmf.services.catalog.schema.ServiceCatalogEntity;
@@ -24,15 +26,9 @@ public interface ServiceCatalogUpdateEntityMapper {
    String ENTITY_ID = "entityId";

    @Mapping(target = ENTITY_ID, ignore = true)
    @Mapping(target = ID, ignore = true)
    @Mapping(target = "relatedParties", ignore = true)
    ServiceSpecificationEntity updateServiceSpecificationEntity(
            ServiceSpecificationEntity newServiceSpecificationEntity,
            @MappingTarget ServiceSpecificationEntity oldServiceSpecificationEntity);

    @Mapping(target = ENTITY_ID, ignore = true)
    @Mapping(target = "relatedParties", ignore = true)
    @Mapping(target = "attachment", ignore = true)
    ServiceSpecificationEntity updateServiceSpecificationEntityViaPeering(
    void updateServiceSpecificationEntity(
            ServiceSpecificationEntity newServiceSpecificationEntity,
            @MappingTarget ServiceSpecificationEntity oldServiceSpecificationEntity);

+14 −0
Original line number Diff line number Diff line
package org.etsi.osl.hypo.api.tmf.services.catalog.api.model.service.specification;

import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ServiceSpecificationIdsListsResult {
    private List<String> matched;
    private List<String> notMatched;
}
Loading