package com.sequenceiq.cloudbreak.controller; import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.TypeDescriptor; import org.springframework.stereotype.Component; import com.sequenceiq.cloudbreak.api.endpoint.SssdConfigEndpoint; import com.sequenceiq.cloudbreak.api.model.SssdConfigRequest; import com.sequenceiq.cloudbreak.api.model.SssdConfigResponse; import com.sequenceiq.cloudbreak.domain.CbUser; import com.sequenceiq.cloudbreak.domain.SssdConfig; import com.sequenceiq.cloudbreak.logger.MDCBuilder; import com.sequenceiq.cloudbreak.service.sssdconfig.SssdConfigService; @Component public class SssdConfigController implements SssdConfigEndpoint { @Autowired @Qualifier("conversionService") private ConversionService conversionService; @Autowired private AuthenticatedUserService authenticatedUserService; @Autowired private SssdConfigService sssdConfigService; @Override public SssdConfigResponse postPrivate(SssdConfigRequest sssdConfigRequest) { CbUser user = authenticatedUserService.getCbUser(); MDCBuilder.buildUserMdcContext(user); return createConfig(user, sssdConfigRequest, false); } @Override public SssdConfigResponse postPublic(SssdConfigRequest sssdConfigRequest) { CbUser user = authenticatedUserService.getCbUser(); MDCBuilder.buildUserMdcContext(user); return createConfig(user, sssdConfigRequest, true); } @Override public Set<SssdConfigResponse> getPrivates() { CbUser user = authenticatedUserService.getCbUser(); MDCBuilder.buildUserMdcContext(user); Set<SssdConfig> configs = sssdConfigService.retrievePrivateConfigs(user); return toJsonSet(configs); } @Override public Set<SssdConfigResponse> getPublics() { CbUser user = authenticatedUserService.getCbUser(); MDCBuilder.buildUserMdcContext(user); Set<SssdConfig> configs = sssdConfigService.retrieveAccountConfigs(user); return toJsonSet(configs); } @Override public SssdConfigResponse getPrivate(String name) { CbUser user = authenticatedUserService.getCbUser(); MDCBuilder.buildUserMdcContext(user); SssdConfig config = sssdConfigService.getPrivateConfig(name, user); return conversionService.convert(config, SssdConfigResponse.class); } @Override public SssdConfigResponse getPublic(String name) { CbUser user = authenticatedUserService.getCbUser(); MDCBuilder.buildUserMdcContext(user); SssdConfig config = sssdConfigService.getPublicConfig(name, user); return conversionService.convert(config, SssdConfigResponse.class); } @Override public SssdConfigResponse get(Long id) { CbUser user = authenticatedUserService.getCbUser(); MDCBuilder.buildUserMdcContext(user); SssdConfig config = sssdConfigService.get(id); return conversionService.convert(config, SssdConfigResponse.class); } @Override public void delete(Long id) { CbUser user = authenticatedUserService.getCbUser(); MDCBuilder.buildUserMdcContext(user); sssdConfigService.delete(id, user); } @Override public void deletePublic(String name) { CbUser user = authenticatedUserService.getCbUser(); MDCBuilder.buildUserMdcContext(user); sssdConfigService.delete(name, user); } @Override public void deletePrivate(String name) { CbUser user = authenticatedUserService.getCbUser(); MDCBuilder.buildUserMdcContext(user); sssdConfigService.delete(name, user); } private SssdConfigResponse createConfig(CbUser user, SssdConfigRequest request, boolean publicInAccount) { SssdConfig config = conversionService.convert(request, SssdConfig.class); config.setPublicInAccount(publicInAccount); config = sssdConfigService.create(user, config); return conversionService.convert(config, SssdConfigResponse.class); } private Set<SssdConfigResponse> toJsonSet(Set<SssdConfig> configs) { return (Set<SssdConfigResponse>) conversionService.convert(configs, TypeDescriptor.forObject(configs), TypeDescriptor.collection(Set.class, TypeDescriptor.valueOf(SssdConfigResponse.class))); } }