package io.ebeaninternal.server.query;

import io.ebean.FutureList;
import io.ebean.Query;
import io.ebean.Transaction;

import javax.persistence.PersistenceException;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

Default implementation for FutureList.
/** * Default implementation for FutureList. */
public class QueryFutureList<T> extends BaseFuture<List<T>> implements FutureList<T> { private final CallableQueryList<T> call; public QueryFutureList(CallableQueryList<T> call) { super(new FutureTask<>(call)); this.call = call; } public FutureTask<List<T>> getFutureTask() { return futureTask; } public Transaction getTransaction() { return call.transaction; } @Override public Query<T> getQuery() { return call.query; } @Override public boolean cancel(boolean mayInterruptIfRunning) { call.query.cancel(); return super.cancel(mayInterruptIfRunning); } @Override public List<T> getUnchecked() { try { return get(); } catch (InterruptedException e) { // restore the interrupted status (so client can check for that) Thread.currentThread().interrupt(); throw new PersistenceException(e); } catch (ExecutionException e) { throw new PersistenceException(e); } } @Override public List<T> getUnchecked(long timeout, TimeUnit unit) throws TimeoutException { try { return get(timeout, unit); } catch (InterruptedException e) { // restore the interrupted status (so client can check for that) Thread.currentThread().interrupt(); throw new PersistenceException(e); } catch (ExecutionException e) { throw new PersistenceException(e); } } }