/*
* Copyright 2012 LinkedIn, Inc
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.linkedin.parseq;
import com.linkedin.parseq.internal.ArgumentUtil;
import com.linkedin.parseq.promise.Promise;
import com.linkedin.parseq.promise.Promises;
import java.util.concurrent.Callable;
/**
* A {@link Task} that will run a {@link Callable} and will set the task's value
* to the value returned from the callable.
* <p>
* Use {@link Tasks#callable(String, java.util.concurrent.Callable)} to create
* instances of this class.
*
* @deprecated As of 2.0.0, replaced by {@link Task#callable(String, Callable) Task.callable}.
* @author Chris Pettitt (cpettitt@linkedin.com)
* @see Task#callable(String, Callable) Task.callable
*/
@Deprecated
public class CallableTask<T> extends BaseTask<T> {
private final ThrowableCallable<? extends T> _callable;
public CallableTask(final String name, final Callable<? extends T> callable) {
this(name, adaptCallable(callable));
}
public CallableTask(final String name, final ThrowableCallable<? extends T> callable) {
super(name);
ArgumentUtil.requireNotNull(callable, "callable");
_callable = callable;
}
@Override
protected Promise<? extends T> run(final Context context) throws Throwable {
return Promises.value(_callable.call());
}
private static <T> ThrowableCallable<T> adaptCallable(final Callable<? extends T> callable) {
return new ThrowableCallable<T>() {
@Override
public T call() throws Throwable {
return callable.call();
}
};
}
}