AbstractUIThreadAwareObservableNumberValue.java
001 /*
002  * Copyright 2008-2017 the original author or authors.
003  *
004  * Licensed under the Apache License, Version 2.0 (the "License");
005  * you may not use this file except in compliance with the License.
006  * You may obtain a copy of the License at
007  *
008  *     http://www.apache.org/licenses/LICENSE-2.0
009  *
010  * Unless required by applicable law or agreed to in writing, software
011  * distributed under the License is distributed on an "AS IS" BASIS,
012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013  * See the License for the specific language governing permissions and
014  * limitations under the License.
015  */
016 package griffon.javafx.beans.binding;
017 
018 import javafx.beans.InvalidationListener;
019 import javafx.beans.value.ChangeListener;
020 import javafx.beans.value.ObservableNumberValue;
021 
022 import javax.annotation.Nonnull;
023 
024 /**
025  @author Andres Almiray
026  @since 2.9.0
027  */
028 class AbstractUIThreadAwareObservableNumberValue<T> implements ObservableNumberValue, UIThreadAware {
029     private final ObservableNumberValue delegate;
030 
031     AbstractUIThreadAwareObservableNumberValue(ObservableNumberValue delegate) {
032         this.delegate = delegate;
033     }
034 
035     @Nonnull
036     public ObservableNumberValue getDelegate() {
037         return delegate;
038     }
039 
040     @Override
041     public int intValue() {
042         return delegate.intValue();
043     }
044 
045     @Override
046     public long longValue() {
047         return delegate.longValue();
048     }
049 
050     @Override
051     public float floatValue() {
052         return delegate.floatValue();
053     }
054 
055     @Override
056     public double doubleValue() {
057         return delegate.doubleValue();
058     }
059 
060     @Override
061     public Number getValue() {
062         return delegate.getValue();
063     }
064 
065     @Override
066     public void addListener(ChangeListener<? super Number> listener) {
067         if (listener instanceof UIThreadAware) {
068             delegate.addListener(listener);
069         else {
070             delegate.addListener(new UIThreadAwareChangeListener<>(listener));
071         }
072     }
073 
074     @Override
075     public void removeListener(ChangeListener<? super Number> listener) {
076         if (listener instanceof UIThreadAware) {
077             delegate.removeListener(listener);
078         else {
079             delegate.removeListener(new UIThreadAwareChangeListener<>(listener));
080         }
081     }
082 
083     @Override
084     public void addListener(InvalidationListener listener) {
085         if (listener instanceof UIThreadAware) {
086             delegate.addListener(listener);
087         else {
088             delegate.addListener(new UIThreadAwareInvalidationListener(listener));
089         }
090     }
091 
092     @Override
093     public void removeListener(InvalidationListener listener) {
094         if (listener instanceof UIThreadAware) {
095             delegate.removeListener(listener);
096         else {
097             delegate.removeListener(new UIThreadAwareInvalidationListener(listener));
098         }
099     }
100 
101     @Override
102     public boolean equals(Object o) {
103         return this == o || delegate.equals(o);
104     }
105 
106     @Override
107     public int hashCode() {
108         return delegate.hashCode();
109     }
110 
111     @Override
112     public String toString() {
113         return getClass().getName() ":" + delegate.toString();
114     }
115 }