package com.sequenceiq.cloudbreak.reactor;
import javax.inject.Inject;
import org.springframework.stereotype.Component;
import com.sequenceiq.cloudbreak.cloud.event.credential.InteractiveCredentialCreationRequest;
import com.sequenceiq.cloudbreak.cloud.model.ExtendedCloudCredential;
import com.sequenceiq.cloudbreak.controller.BadRequestException;
import com.sequenceiq.cloudbreak.controller.mapper.DuplicatedKeyValueExceptionMapper;
import com.sequenceiq.cloudbreak.converter.spi.ExtendedCloudCredentialToCredentialConverter;
import com.sequenceiq.cloudbreak.domain.Credential;
import com.sequenceiq.cloudbreak.service.DuplicateKeyValueException;
import com.sequenceiq.cloudbreak.service.credential.CredentialService;
import reactor.bus.Event;
/**
* Created by perdos on 9/23/16.
*/
@Component
public class InteractiveCredentialCreationHandler implements ClusterEventHandler<InteractiveCredentialCreationRequest> {
@Inject
private CredentialService credentialService;
@Inject
private ExtendedCloudCredentialToCredentialConverter extendedCloudCredentialToCredentialConverter;
@Override
public Class<InteractiveCredentialCreationRequest> type() {
return InteractiveCredentialCreationRequest.class;
}
@Override
public void accept(Event<InteractiveCredentialCreationRequest> interactiveCredentialCreationRequestEvent) {
InteractiveCredentialCreationRequest interactiveCredentialCreationRequest = interactiveCredentialCreationRequestEvent.getData();
ExtendedCloudCredential extendedCloudCredential = interactiveCredentialCreationRequest.getExtendedCloudCredential();
Credential credential = extendedCloudCredentialToCredentialConverter.convert(extendedCloudCredential);
try {
credentialService.createWithRetry(extendedCloudCredential.getOwner(), extendedCloudCredential.getAccount(), credential);
} catch (DuplicateKeyValueException e) {
credentialService.sendErrorNotification(extendedCloudCredential.getOwner(), extendedCloudCredential.getAccount(),
extendedCloudCredential.getCloudPlatform(), DuplicatedKeyValueExceptionMapper.errorMessage(e));
} catch (BadRequestException e) {
credentialService.sendErrorNotification(extendedCloudCredential.getOwner(), extendedCloudCredential.getAccount(),
extendedCloudCredential.getCloudPlatform(), e.getMessage());
}
}
}