01 /*
02 * SPDX-License-Identifier: Apache-2.0
03 *
04 * Copyright 2008-2017 the original author or authors.
05 *
06 * Licensed under the Apache License, Version 2.0 (the "License");
07 * you may not use this file except in compliance with the License.
08 * You may obtain a copy of the License at
09 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18 package org.codehaus.griffon.runtime.core.threading;
19
20 import griffon.core.threading.ThreadingHandler;
21 import griffon.core.threading.UIThreadManager;
22
23 import javax.annotation.Nonnull;
24 import javax.annotation.Nullable;
25 import javax.inject.Inject;
26 import java.util.concurrent.Callable;
27 import java.util.concurrent.ExecutorService;
28 import java.util.concurrent.Future;
29
30 import static java.util.Objects.requireNonNull;
31
32 /**
33 * Base implementation of the ThreadingHandler interface.
34 *
35 * @author Andres Almiray
36 * @since 2.0.0
37 */
38 public abstract class AbstractThreadingHandler implements ThreadingHandler {
39 private UIThreadManager uiThreadManager;
40
41 @Inject
42 public void setUIThreadManager(@Nonnull UIThreadManager uiThreadManager) {
43 this.uiThreadManager = requireNonNull(uiThreadManager, "Argument 'uiThreadManager' must not be null");
44 }
45
46 public boolean isUIThread() {
47 return uiThreadManager.isUIThread();
48 }
49
50 public void runInsideUIAsync(@Nonnull Runnable runnable) {
51 uiThreadManager.runInsideUIAsync(runnable);
52 }
53
54 public void runInsideUISync(@Nonnull Runnable runnable) {
55 uiThreadManager.runInsideUISync(runnable);
56 }
57
58 public void runOutsideUI(@Nonnull Runnable runnable) {
59 uiThreadManager.runOutsideUI(runnable);
60 }
61
62 public void runOutsideUIAsync(@Nonnull Runnable runnable) {
63 uiThreadManager.runOutsideUIAsync(runnable);
64 }
65
66 @Nonnull
67 public <R> Future<R> runFuture(@Nonnull ExecutorService executorService, @Nonnull Callable<R> callable) {
68 return uiThreadManager.runFuture(executorService, callable);
69 }
70
71 @Nonnull
72 public <R> Future<R> runFuture(@Nonnull Callable<R> callable) {
73 return uiThreadManager.runFuture(callable);
74 }
75
76 @Nullable
77 @Override
78 public <R> R runInsideUISync(@Nonnull Callable<R> callable) {
79 return uiThreadManager.runInsideUISync(callable);
80 }
81 }
|