package com.sequenceiq.cloudbreak.cloud.event; import com.sequenceiq.cloudbreak.cloud.event.model.EventStatus; public class CloudPlatformResult<R extends CloudPlatformRequest> implements Payload { private EventStatus status; private String statusReason; private Exception errorDetails; private R request; protected CloudPlatformResult() { } public CloudPlatformResult(R request) { init(EventStatus.OK, null, null, request); } public CloudPlatformResult(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; } public static String selector(Class clazz) { return clazz.getSimpleName().toUpperCase(); } public static String failureSelector(Class clazz) { return clazz.getSimpleName().toUpperCase() + "_ERROR"; } public String selector() { return status == EventStatus.OK ? selector(getClass()) : failureSelector(getClass()); } public EventStatus getStatus() { return status; } public String getStatusReason() { return statusReason; } public Exception getErrorDetails() { return errorDetails; } public R getRequest() { return request; } @Override public String toString() { return "CloudPlatformResult{" + "status=" + status + ", statusReason='" + statusReason + '\'' + ", errorDetails=" + errorDetails + ", request=" + request + '}'; } @Override public Long getStackId() { return request.getCloudContext().getId(); } }