| 1 | package org.jtoolkit.essence.concurrency; |
| 2 | |
| 3 | import org.jtoolkit.essence.concurrency.impl.CallbackWrapper; |
| 4 | import org.jtoolkit.essence.concurrency.impl.ThreadedCallbackImpl; |
| 5 | |
| 6 | public class CallbackUtils { |
| 7 | private CallbackUtils() { |
| 8 | } |
| 9 | |
| 10 | public static <T> CallbackEx<T> makeCallbackEx(Callback<T> callback) { |
| 11 | if (callback instanceof CallbackEx) |
| 12 | return (CallbackEx<T>) callback; |
| 13 | return new CallbackWrapper<T>(callback); |
| 14 | } |
| 15 | |
| 16 | public static boolean isImmediate(Callback callback) { |
| 17 | if (callback instanceof CallbackWrapper) |
| 18 | callback = ((CallbackWrapper) callback).getCallback(); |
| 19 | return callback.getClass().getAnnotation(Callback.Immediate.class) != null; |
| 20 | } |
| 21 | |
| 22 | public static boolean isThreaded(Callback callback) { |
| 23 | if (callback instanceof CallbackWrapper) |
| 24 | callback = ((CallbackWrapper) callback).getCallback(); |
| 25 | return callback.getClass().getAnnotation(Callback.Threaded.class) != null; |
| 26 | } |
| 27 | |
| 28 | public static <T> CallbackEx<T> makeThreaded(Callback<T> callback) { |
| 29 | if (isImmediate(callback) || isThreaded(callback)) |
| 30 | return makeCallbackEx(callback); |
| 31 | return new ThreadedCallbackImpl<T>(callback); |
| 32 | } |
| 33 | } |