package com.sequenceiq.cloudbreak.cloud.notification.model; import com.sequenceiq.cloudbreak.cloud.context.CloudContext; import com.sequenceiq.cloudbreak.cloud.exception.CloudConnectorException; import com.sequenceiq.cloudbreak.cloud.model.CloudResource; import reactor.rx.Promise; import reactor.rx.Promises; /** * Notification sent to Cloudbreak. */ public class ResourceNotification { private final CloudResource cloudResource; private final CloudContext cloudContext; private final Promise<ResourcePersisted> promise; private final ResourceNotificationType type; public ResourceNotification(CloudResource cloudResource, CloudContext cloudContext, ResourceNotificationType type) { this.cloudResource = cloudResource; this.cloudContext = cloudContext; this.promise = Promises.prepare(); this.type = type; } public CloudResource getCloudResource() { return cloudResource; } public Promise<ResourcePersisted> getPromise() { return promise; } public ResourcePersisted getResult() { try { return promise.await(); } catch (InterruptedException e) { throw new CloudConnectorException("ResourceNotification has been interrupted", e); } } public CloudContext getCloudContext() { return cloudContext; } public ResourceNotificationType getType() { return type; } @Override public String toString() { final StringBuilder sb = new StringBuilder("ResourceNotification{"); sb.append("cloudResource=").append(cloudResource); sb.append(", promise=").append(promise); sb.append(", cloudContext=").append(cloudContext); sb.append(", type=").append(type); sb.append('}'); return sb.toString(); } }