UIThreadAwareSetChangeListener.java
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 griffon.javafx.beans.binding;
19 
20 import javafx.collections.SetChangeListener;
21 
22 import javax.annotation.Nonnull;
23 
24 import static javafx.application.Platform.isFxApplicationThread;
25 import static javafx.application.Platform.runLater;
26 
27 /**
28  @author Andres Almiray
29  @since 2.9.0
30  */
31 class UIThreadAwareSetChangeListener<E> extends SetChangeListenerDecorator<E> implements UIThreadAware {
32     UIThreadAwareSetChangeListener(@Nonnull SetChangeListener<E> delegate) {
33         super(delegate);
34     }
35 
36     @Override
37     public void onChanged(final Change<? extends E> change) {
38         if (isFxApplicationThread()) {
39             getDelegate().onChanged(change);
40         else {
41             runLater(() -> getDelegate().onChanged(change));
42         }
43     }
44 }