package com.sequenceiq.cloudbreak.reactor.handler.cluster;
import javax.inject.Inject;
import org.springframework.stereotype.Component;
import com.sequenceiq.cloudbreak.cloud.event.Selectable;
import com.sequenceiq.cloudbreak.domain.Stack;
import com.sequenceiq.cloudbreak.reactor.api.event.EventSelectorUtil;
import com.sequenceiq.cloudbreak.reactor.api.event.cluster.WaitForAmbariServerFailed;
import com.sequenceiq.cloudbreak.reactor.api.event.cluster.WaitForAmbariServerRequest;
import com.sequenceiq.cloudbreak.reactor.api.event.cluster.WaitForAmbariServerSuccess;
import com.sequenceiq.cloudbreak.reactor.handler.ReactorEventHandler;
import com.sequenceiq.cloudbreak.service.cluster.flow.AmbariClusterConnector;
import com.sequenceiq.cloudbreak.service.stack.StackService;
import reactor.bus.Event;
import reactor.bus.EventBus;
@Component
public class WaitingAmbariServerHandler implements ReactorEventHandler<WaitForAmbariServerRequest> {
@Inject
private StackService stackService;
@Inject
private AmbariClusterConnector ambariClusterConnector;
@Inject
private EventBus eventBus;
@Override
public String selector() {
return EventSelectorUtil.selector(WaitForAmbariServerRequest.class);
}
@Override
public void accept(Event<WaitForAmbariServerRequest> event) {
Long stackId = event.getData().getStackId();
Selectable response;
try {
Stack stack = stackService.getById(stackId);
ambariClusterConnector.waitForAmbariServer(stack);
response = new WaitForAmbariServerSuccess(stackId);
} catch (Exception e) {
response = new WaitForAmbariServerFailed(stackId, e);
}
eventBus.notify(response.selector(), new Event(event.getHeaders(), response));
}
}