AbstractUIThreadAwareProperty.java
01 /*
02  * Copyright 2008-2017 the original author or authors.
03  *
04  * Licensed under the Apache License, Version 2.0 (the "License");
05  * you may not use this file except in compliance with the License.
06  * You may obtain a copy of the License at
07  *
08  *     http://www.apache.org/licenses/LICENSE-2.0
09  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package griffon.javafx.beans.binding;
17 
18 import javafx.beans.InvalidationListener;
19 import javafx.beans.property.Property;
20 import javafx.beans.value.ChangeListener;
21 
22 import javax.annotation.Nonnull;
23 
24 /**
25  @author Andres Almiray
26  @since 2.9.0
27  */
28 abstract class AbstractUIThreadAwareProperty<T> extends PropertyDecorator<T> implements UIThreadAware {
29     AbstractUIThreadAwareProperty(@Nonnull Property<T> delegate) {
30         super(delegate);
31     }
32 
33     @Override
34     public void addListener(ChangeListener<? super T> listener) {
35         if (listener instanceof UIThreadAware) {
36             getDelegate().addListener(listener);
37         else {
38             getDelegate().addListener(new UIThreadAwareChangeListener<>(listener));
39         }
40     }
41 
42     @Override
43     public void removeListener(ChangeListener<? super T> listener) {
44         if (listener instanceof UIThreadAware) {
45             getDelegate().removeListener(listener);
46         else {
47             getDelegate().removeListener(new UIThreadAwareChangeListener<>(listener));
48         }
49     }
50 
51     @Override
52     public void addListener(InvalidationListener listener) {
53         if (listener instanceof UIThreadAware) {
54             getDelegate().addListener(listener);
55         else {
56             getDelegate().addListener(new UIThreadAwareInvalidationListener(listener));
57         }
58     }
59 
60     @Override
61     public void removeListener(InvalidationListener listener) {
62         if (listener instanceof UIThreadAware) {
63             getDelegate().removeListener(listener);
64         else {
65             getDelegate().removeListener(new UIThreadAwareInvalidationListener(listener));
66         }
67     }
68 }