package com.sequenceiq.cloudbreak.controller; import java.util.Map; import javax.ws.rs.core.Response; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.core.convert.ConversionService; import org.springframework.stereotype.Component; import com.google.common.collect.ImmutableMap; import com.sequenceiq.cloudbreak.api.endpoint.AccountPreferencesEndpoint; import com.sequenceiq.cloudbreak.api.model.AccountPreferencesJson; import com.sequenceiq.cloudbreak.common.type.CbUserRole; import com.sequenceiq.cloudbreak.domain.AccountPreferences; import com.sequenceiq.cloudbreak.domain.CbUser; import com.sequenceiq.cloudbreak.logger.MDCBuilder; import com.sequenceiq.cloudbreak.service.account.AccountPreferencesService; import com.sequenceiq.cloudbreak.service.account.ScheduledAccountPreferencesValidator; @Component public class AccountPreferencesController implements AccountPreferencesEndpoint { @Autowired private AccountPreferencesService service; @Autowired private ScheduledAccountPreferencesValidator validator; @Autowired private AuthenticatedUserService authenticatedUserService; @Autowired @Qualifier("conversionService") private ConversionService conversionService; @Override public AccountPreferencesJson get() { CbUser user = authenticatedUserService.getCbUser(); MDCBuilder.buildUserMdcContext(user); AccountPreferences preferences = service.getOneByAccount(user); return convert(preferences); } @Override public AccountPreferencesJson put(AccountPreferencesJson updateRequest) { CbUser user = authenticatedUserService.getCbUser(); MDCBuilder.buildUserMdcContext(user); return convert(service.saveOne(user, convert(updateRequest))); } @Override public AccountPreferencesJson post(AccountPreferencesJson updateRequest) { CbUser user = authenticatedUserService.getCbUser(); MDCBuilder.buildUserMdcContext(user); return convert(service.saveOne(user, convert(updateRequest))); } @Override public Map<String, Boolean> isPlatformSelectionDisabled() { return ImmutableMap.of("disabled", service.isPlatformSelectionDisabled()); } @Override public Response validate() { CbUser user = authenticatedUserService.getCbUser(); MDCBuilder.buildUserMdcContext(user); if (user.getRoles().contains(CbUserRole.ADMIN)) { validator.validate(); } return Response.status(Response.Status.ACCEPTED).build(); } private AccountPreferencesJson convert(AccountPreferences preferences) { return conversionService.convert(preferences, AccountPreferencesJson.class); } private AccountPreferences convert(AccountPreferencesJson preferences) { return conversionService.convert(preferences, AccountPreferences.class); } }