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 com.sequenceiq.cloudbreak.api.endpoint.LdapConfigEndpoint; import com.sequenceiq.cloudbreak.api.model.LdapConfigRequest; import com.sequenceiq.cloudbreak.api.model.LdapConfigResponse; import com.sequenceiq.cloudbreak.domain.CbUser; import com.sequenceiq.cloudbreak.domain.LdapConfig; import com.sequenceiq.cloudbreak.logger.MDCBuilder; import com.sequenceiq.cloudbreak.service.ldapconfig.LdapConfigService; public class LdapController implements LdapConfigEndpoint { @Autowired @Qualifier("conversionService") private ConversionService conversionService; @Autowired private AuthenticatedUserService authenticatedUserService; @Autowired private LdapConfigService ldapConfigService; @Override public LdapConfigResponse postPrivate(LdapConfigRequest ldapConfigRequest) { CbUser user = authenticatedUserService.getCbUser(); MDCBuilder.buildUserMdcContext(user); return createConfig(user, ldapConfigRequest, false); } @Override public LdapConfigResponse postPublic(LdapConfigRequest ldapConfigRequest) { CbUser user = authenticatedUserService.getCbUser(); MDCBuilder.buildUserMdcContext(user); return createConfig(user, ldapConfigRequest, true); } @Override public Set<LdapConfigResponse> getPrivates() { CbUser user = authenticatedUserService.getCbUser(); MDCBuilder.buildUserMdcContext(user); Set<LdapConfig> configs = ldapConfigService.retrievePrivateConfigs(user); return toJsonSet(configs); } @Override public Set<LdapConfigResponse> getPublics() { CbUser user = authenticatedUserService.getCbUser(); MDCBuilder.buildUserMdcContext(user); Set<LdapConfig> configs = ldapConfigService.retrieveAccountConfigs(user); return toJsonSet(configs); } @Override public LdapConfigResponse getPrivate(String name) { CbUser user = authenticatedUserService.getCbUser(); MDCBuilder.buildUserMdcContext(user); LdapConfig config = ldapConfigService.getPrivateConfig(name, user); return conversionService.convert(config, LdapConfigResponse.class); } @Override public LdapConfigResponse getPublic(String name) { CbUser user = authenticatedUserService.getCbUser(); MDCBuilder.buildUserMdcContext(user); LdapConfig config = ldapConfigService.getPublicConfig(name, user); return conversionService.convert(config, LdapConfigResponse.class); } @Override public LdapConfigResponse get(Long id) { CbUser user = authenticatedUserService.getCbUser(); MDCBuilder.buildUserMdcContext(user); LdapConfig config = ldapConfigService.get(id); return conversionService.convert(config, LdapConfigResponse.class); } @Override public void delete(Long id) { CbUser user = authenticatedUserService.getCbUser(); MDCBuilder.buildUserMdcContext(user); ldapConfigService.delete(id, user); } @Override public void deletePublic(String name) { CbUser user = authenticatedUserService.getCbUser(); MDCBuilder.buildUserMdcContext(user); ldapConfigService.delete(name, user); } @Override public void deletePrivate(String name) { CbUser user = authenticatedUserService.getCbUser(); MDCBuilder.buildUserMdcContext(user); ldapConfigService.delete(name, user); } private LdapConfigResponse createConfig(CbUser user, LdapConfigRequest request, boolean publicInAccount) { LdapConfig config = conversionService.convert(request, LdapConfig.class); config.setPublicInAccount(publicInAccount); config = ldapConfigService.create(user, config); return conversionService.convert(config, LdapConfigResponse.class); } private Set<LdapConfigResponse> toJsonSet(Set<LdapConfig> configs) { return (Set<LdapConfigResponse>) conversionService.convert(configs, TypeDescriptor.forObject(configs), TypeDescriptor.collection(Set.class, TypeDescriptor.valueOf(LdapConfigResponse.class))); } }