org.eclipse.che.api.promises.client.js.JsPromiseProvider.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.che.api.promises.client.js.JsPromiseProvider.java

Source

/*******************************************************************************
 * Copyright (c) 2012-2017 Codenvy, S.A.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *   Codenvy, S.A. - initial API and implementation
 *******************************************************************************/
package org.eclipse.che.api.promises.client.js;

import elemental.js.util.JsArrayOf;
import elemental.util.ArrayOf;
import elemental.util.Collections;

import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArrayMixed;

import org.eclipse.che.api.promises.client.Promise;
import org.eclipse.che.api.promises.client.PromiseError;
import org.eclipse.che.api.promises.client.PromiseProvider;
import org.eclipse.che.api.promises.client.callback.AsyncPromiseHelper;

/**
 * Default implementation of {@link PromiseProvider}.
 *
 * @author Vlad Zhukovskyi
 * @see PromiseProvider
 */
public class JsPromiseProvider implements PromiseProvider {

    /** {@inheritDoc} */
    @Override
    public native <V> Promise<V> create(Executor<V> executor) /*-{
                                                              return new Promise(executor);
                                                              }-*/;

    /** {@inheritDoc} */
    @Override
    public <V> Promise<V> create(AsyncPromiseHelper.RequestCall<V> call) {
        return AsyncPromiseHelper.createFromAsyncRequest(call);
    }

    /** {@inheritDoc} */
    @Override
    public native Promise<JsArrayMixed> all(ArrayOf<Promise<?>> promises) /*-{
                                                                          return Promise.all(promises);
                                                                          }-*/;

    /** {@inheritDoc} */
    @Override
    public Promise<JsArrayMixed> all(Promise<?>... promises) {
        final JsArrayOf<Promise<?>> promisesArray = JavaScriptObject.createArray().cast();
        for (final Promise<?> promise : promises) {
            promisesArray.push(promise);
        }
        return all(promisesArray);
    }

    @Override
    public Promise<ArrayOf<?>> all2(ArrayOf<Promise<?>> promises) {
        return internalAll(promises);
    }

    @Override
    public Promise<ArrayOf<?>> all2(Promise<?>... promises) {
        ArrayOf<Promise<?>> arrayOf = Collections.arrayOf();
        for (Promise<?> promise : promises) {
            arrayOf.push(promise);
        }
        return internalAll(arrayOf);
    }

    private native Promise<ArrayOf<?>> internalAll(ArrayOf<Promise<?>> promises) /*-{
                                                                                 return Promise.all(promises);
                                                                                 }-*/;

    /** {@inheritDoc} */
    @Override
    public native <U> Promise<U> reject(String message) /*-{
                                                        return Promise.reject(new Error(message));
                                                        }-*/;

    /** {@inheritDoc} */
    @Override
    public native <U> Promise<U> resolve(U value) /*-{
                                                  return Promise.resolve(value);
                                                  }-*/;

    /** {@inheritDoc} */
    @Override
    public <U> Promise<U> reject(Throwable reason) {
        return reject(JsPromiseError.create(reason));
    }

    /** {@inheritDoc} */
    public final native <U> JsPromise<U> reject(PromiseError reason) /*-{
                                                                     return Promise.reject(reason);
                                                                     }-*/;
}