1 package com.atlassian.sal.core.executor;
2
3 import com.atlassian.sal.api.executor.ThreadLocalContextManager;
4
5 import java.util.concurrent.Callable;
6 import java.util.concurrent.ScheduledExecutorService;
7 import java.util.concurrent.ScheduledFuture;
8 import java.util.concurrent.TimeUnit;
9
10 import static com.google.common.base.Preconditions.*;
11
12
13
14
15
16
17
18 public class ThreadLocalDelegateScheduledExecutorService<C> extends ThreadLocalDelegateExecutorService<C> implements ScheduledExecutorService
19 {
20 private final ScheduledExecutorService delegate;
21
22 public ThreadLocalDelegateScheduledExecutorService(ThreadLocalContextManager<C> manager, ScheduledExecutorService delegate)
23 {
24 super(checkNotNull(manager), checkNotNull(delegate));
25 this.delegate = delegate;
26 }
27
28
29
30
31
32 public ThreadLocalDelegateScheduledExecutorService(com.atlassian.sal.core.executor.ThreadLocalContextManager<C> manager, ScheduledExecutorService delegate)
33 {
34 super(checkNotNull(manager), checkNotNull(delegate));
35 this.delegate = delegate;
36 }
37
38 public ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit)
39 {
40 return delegate.schedule(new ThreadLocalDelegateRunnable<C>(manager, command), delay, unit);
41 }
42
43 public <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit)
44 {
45 return delegate.schedule(new ThreadLocalDelegateCallable<C, V>(manager, callable), delay, unit);
46 }
47
48 public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
49 {
50 return delegate.scheduleAtFixedRate(new ThreadLocalDelegateRunnable<C>(manager, command), initialDelay, period, unit);
51 }
52
53 public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
54 {
55 return delegate.scheduleWithFixedDelay(new ThreadLocalDelegateRunnable<C>(manager, command), initialDelay, delay, unit);
56 }
57 }