/*
* Copyright (c) 2013 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.services.util;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
import java.util.concurrent.RunnableFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
/**
* Implementation of RunnableFuture which supports a name
*
*/
class NamedTask<V> implements RunnableFuture<V> {
protected final RunnableFuture<V> future;
protected final String name;
protected NamedTask(String name, RunnableFuture<V> future) {
this.future = future;
this.name = name;
}
public NamedTask(String name, Callable<V> c) {
this.name = name;
this.future = new FutureTask<V>(c);
}
public NamedTask(String name, Runnable r, V v) {
this.name = name;
this.future = new FutureTask<V>(r, v);
}
public String getName() {
return this.name;
}
@Override
public void run() {
future.run();
}
@Override
public boolean cancel(boolean mayInterruptIfRunning) {
return future.cancel(mayInterruptIfRunning);
}
@Override
public V get() throws InterruptedException, ExecutionException {
return future.get();
}
@Override
public V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException,
TimeoutException {
return future.get(timeout, unit);
}
@Override
public boolean isCancelled() {
return future.isCancelled();
}
@Override
public boolean isDone() {
return future.isDone();
}
}