/******************************************************************************* * 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); }-*/; }