All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.windowsazure.messaging.SyncCallback Maven / Gradle / Ivy

//----------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//----------------------------------------------------------------

package com.windowsazure.messaging;

import java.util.concurrent.CountDownLatch;

import org.apache.http.concurrent.FutureCallback;

public class SyncCallback implements FutureCallback {
    private T result;
    private RuntimeException runtimeException;
    private NotificationHubsException nhException;
    private final CountDownLatch waitLatch = new CountDownLatch(1);

    public T getResult() throws NotificationHubsException {
        try {
            this.waitLatch.await();
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }

        if (this.runtimeException != null)
            throw this.runtimeException;

        if (this.nhException != null)
            throw this.nhException;

        return result;
    }

    @Override
    public void completed(T result) {
        this.result = result;
        this.waitLatch.countDown();
    }

    @Override
    public void failed(final Exception ex) {
        if (ex instanceof NotificationHubsException) {
            this.nhException = (NotificationHubsException) ex;
        } else {
            this.runtimeException = new RuntimeException(ex);
        }

        this.waitLatch.countDown();
    }


    @Override
    public void cancelled() {
        runtimeException = new RuntimeException("Operation was cancelled.");
        this.waitLatch.countDown();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy