package com.sequenceiq.cloudbreak.reactor.api;
import com.sequenceiq.cloudbreak.cloud.event.Payload;
import com.sequenceiq.cloudbreak.cloud.event.Selectable;
import com.sequenceiq.cloudbreak.cloud.event.model.EventStatus;
import com.sequenceiq.cloudbreak.reactor.api.event.EventSelectorUtil;
public abstract class ClusterPlatformResult<R extends ClusterPlatformRequest> implements Payload, Selectable {
private EventStatus status;
private String statusReason;
private Exception errorDetails;
private R request;
public ClusterPlatformResult(R request) {
init(EventStatus.OK, null, null, request);
}
public ClusterPlatformResult(String statusReason, Exception errorDetails, R request) {
init(EventStatus.FAILED, statusReason, errorDetails, request);
}
protected void init(EventStatus status, String statusReason, Exception errorDetails, R request) {
this.status = status;
this.statusReason = statusReason;
this.errorDetails = errorDetails;
this.request = request;
}
@Override
public String selector() {
return status == EventStatus.OK ? EventSelectorUtil.selector(getClass()) : EventSelectorUtil.failureSelector(getClass());
}
public EventStatus getStatus() {
return status;
}
public String getStatusReason() {
return statusReason;
}
public Exception getErrorDetails() {
return errorDetails;
}
public R getRequest() {
return request;
}
@Override
public Long getStackId() {
return request.getStackId();
}
}