All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.cloudfoundry.multiapps.controller.persistence.services.ConfigurationEntryService Maven / Gradle / Ivy

package org.cloudfoundry.multiapps.controller.persistence.services;

import java.util.List;
import java.util.Objects;

import jakarta.inject.Inject;
import jakarta.inject.Named;
import jakarta.persistence.EntityManagerFactory;

import org.apache.commons.lang3.ObjectUtils;
import org.cloudfoundry.multiapps.common.ConflictException;
import org.cloudfoundry.multiapps.common.NotFoundException;
import org.cloudfoundry.multiapps.common.util.JsonUtil;
import org.cloudfoundry.multiapps.controller.persistence.Messages;
import org.cloudfoundry.multiapps.controller.persistence.dto.ConfigurationEntryDto;
import org.cloudfoundry.multiapps.controller.persistence.model.CloudTarget;
import org.cloudfoundry.multiapps.controller.persistence.model.ConfigurationEntry;
import org.cloudfoundry.multiapps.controller.persistence.model.PersistenceMetadata;
import org.cloudfoundry.multiapps.controller.persistence.query.ConfigurationEntryQuery;
import org.cloudfoundry.multiapps.controller.persistence.query.impl.ConfigurationEntryQueryImpl;
import org.cloudfoundry.multiapps.mta.model.Version;

import com.fasterxml.jackson.core.type.TypeReference;

@Named
public class ConfigurationEntryService extends PersistenceService {

    @Inject
    protected ConfigurationEntryMapper entryMapper;

    @Inject
    public ConfigurationEntryService(EntityManagerFactory entityManagerFactory) {
        super(entityManagerFactory);
    }

    public ConfigurationEntryQuery createQuery() {
        return new ConfigurationEntryQueryImpl(createEntityManager(), entryMapper);
    }

    @Override
    protected ConfigurationEntryDto merge(ConfigurationEntryDto existingEntry, ConfigurationEntryDto newEntry) {
        super.merge(existingEntry, newEntry);
        String providerNid = ObjectUtils.firstNonNull(removeDefault(newEntry.getProviderNid()), existingEntry.getProviderNid());
        String providerId = ObjectUtils.firstNonNull(newEntry.getProviderId(), existingEntry.getProviderId());
        String targetOrg = ObjectUtils.firstNonNull(newEntry.getTargetOrg(), existingEntry.getTargetOrg());
        String targetSpace = ObjectUtils.firstNonNull(newEntry.getTargetSpace(), existingEntry.getTargetSpace());
        String providerVersion = ObjectUtils.firstNonNull(removeDefault(newEntry.getProviderVersion()), existingEntry.getProviderVersion());
        String providerNamespace = ObjectUtils.firstNonNull(newEntry.getProviderNamespace(), existingEntry.getProviderNamespace());
        String content = ObjectUtils.firstNonNull(newEntry.getContent(), existingEntry.getContent());
        String visibility = ObjectUtils.firstNonNull(newEntry.getVisibility(), existingEntry.getVisibility());
        String spaceId = ObjectUtils.firstNonNull(newEntry.getSpaceId(), existingEntry.getSpaceId());
        String contentId = ObjectUtils.firstNonNull(newEntry.getContentId(), existingEntry.getContentId());
        return ConfigurationEntryDto.builder()
                                    .id(newEntry.getPrimaryKey())
                                    .providerNid(providerNid)
                                    .providerId(providerId)
                                    .providerVersion(providerVersion)
                                    .providerNamespace(providerNamespace)
                                    .targetOrg(targetOrg)
                                    .targetSpace(targetSpace)
                                    .content(content)
                                    .visibility(visibility)
                                    .spaceId(spaceId)
                                    .contentId(contentId)
                                    .build();
    }

    private String removeDefault(String value) {
        return value.equals(PersistenceMetadata.NOT_AVAILABLE) ? null : value;
    }

    @Override
    protected PersistenceObjectMapper getPersistenceObjectMapper() {
        return entryMapper;
    }

    @Override
    protected void onEntityConflict(ConfigurationEntryDto entry, Throwable t) {
        throw new ConflictException(t,
                                    Messages.CONFIGURATION_ENTRY_ALREADY_EXISTS,
                                    entry.getProviderNid(),
                                    entry.getProviderId(),
                                    entry.getProviderVersion(),
                                    entry.getProviderNamespace(),
                                    entry.getTargetOrg(),
                                    entry.getTargetSpace());
    }

    @Override
    protected void onEntityNotFound(Long id) {
        throw new NotFoundException(Messages.CONFIGURATION_ENTRY_NOT_FOUND, id);
    }

    @Named
    public static class ConfigurationEntryMapper implements PersistenceObjectMapper {

        @Override
        public ConfigurationEntry fromDto(ConfigurationEntryDto dto) {
            Long id = dto.getPrimaryKey();
            String providerNid = getOriginal(dto.getProviderNid());
            String providerId = dto.getProviderId();
            Version providerVersion = getParsedVersion(getOriginal(dto.getProviderVersion()));
            String providerNamespace = dto.getProviderNamespace();
            CloudTarget targetSpace = new CloudTarget(dto.getTargetOrg(), dto.getTargetSpace());
            String content = dto.getContent();
            List visibility = getParsedVisibility(dto.getVisibility());
            String spaceId = dto.getSpaceId();
            String contentId = dto.getContentId();
            return new ConfigurationEntry(id,
                                          providerNid,
                                          providerId,
                                          providerVersion,
                                          providerNamespace,
                                          targetSpace,
                                          content,
                                          visibility,
                                          spaceId,
                                          contentId);
        }

        protected String getOriginal(String source) {
            return Objects.equals(source, PersistenceMetadata.NOT_AVAILABLE) ? null : source;
        }

        protected Version getParsedVersion(String versionString) {
            return versionString == null ? null : Version.parseVersion(versionString);
        }

        protected List getParsedVisibility(String visibility) {
            return visibility == null ? null : JsonUtil.convertJsonToList(visibility, new TypeReference>() {
            });
        }

        @Override
        public ConfigurationEntryDto toDto(ConfigurationEntry entry) {
            long id = entry.getId();
            String providerNid = getNotNull(entry.getProviderNid());
            String providerId = entry.getProviderId();
            String providerVersion = getNotNull(entry.getProviderVersion());
            String providerNamespace = entry.getProviderNamespace();
            String targetOrg = entry.getTargetSpace() == null ? null
                : entry.getTargetSpace()
                       .getOrganizationName();
            String targetSpace = entry.getTargetSpace() == null ? null
                : entry.getTargetSpace()
                       .getSpaceName();
            String content = entry.getContent();
            String visibility = entry.getVisibility() == null ? null : JsonUtil.toJson(entry.getVisibility());
            String spaceId = entry.getSpaceId();
            String contentId = entry.getContentId();
            return ConfigurationEntryDto.builder()
                                        .id(id)
                                        .providerNid(providerNid)
                                        .providerId(providerId)
                                        .providerVersion(providerVersion)
                                        .providerNamespace(providerNamespace)
                                        .targetOrg(targetOrg)
                                        .targetSpace(targetSpace)
                                        .content(content)
                                        .visibility(visibility)
                                        .spaceId(spaceId)
                                        .contentId(contentId)
                                        .build();
        }

        private String getNotNull(Object source) {
            return source == null ? PersistenceMetadata.NOT_AVAILABLE : source.toString();
        }

    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy