Skip to content

Commit 78faddf

Browse files
committed
fixed wrong listener invocation
1 parent 74ff952 commit 78faddf

19 files changed

+167
-24
lines changed

src/main/java/com/beans/observables/ObservableFactory.java

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.beans.observables;
22

33
import com.beans.observables.binding.AtomicPropertyBindingController;
4-
import com.beans.observables.listeners.ObservableEventController;
54
import com.beans.observables.properties.ObservableBooleanProperty;
65
import com.beans.observables.properties.ObservableDoubleProperty;
76
import com.beans.observables.properties.ObservableIntProperty;
@@ -29,70 +28,70 @@ public ObservableFactory(EventController eventController) {
2928

3029
public <T> ObservableProperty<T> newProperty(T initialValue) {
3130
return new SimpleObservableProperty<T>(
32-
new ObservableEventController.Impl<>(mEventController),
31+
mEventController,
3332
new AtomicPropertyBindingController<>(),
3433
initialValue);
3534
}
3635

3736
public <T> ObservableProperty<T> newConcurrentProperty(T initialValue) {
3837
return new AtomicObservableProperty<>(
39-
new ObservableEventController.Impl<>(mEventController),
38+
mEventController,
4039
new AtomicPropertyBindingController<>(),
4140
initialValue);
4241
}
4342

4443
public ObservableBooleanProperty newBooleanProperty(boolean initialValue) {
4544
return new SimpleObservableBooleanProperty(
46-
new ObservableEventController.Impl<>(mEventController),
45+
mEventController,
4746
new AtomicPropertyBindingController<>(),
4847
initialValue);
4948
}
5049

5150
public ObservableBooleanProperty newConcurrentBooleanProperty(boolean initialValue) {
5251
return new AtomicObservableBooleanProperty(
53-
new ObservableEventController.Impl<>(mEventController),
52+
mEventController,
5453
new AtomicPropertyBindingController<>(),
5554
initialValue);
5655
}
5756

5857
public ObservableIntProperty newIntProperty(int initialValue) {
5958
return new SimpleObservableIntProperty(
60-
new ObservableEventController.Impl<>(mEventController),
59+
mEventController,
6160
new AtomicPropertyBindingController<>(),
6261
initialValue);
6362
}
6463

6564
public ObservableIntProperty newConcurrentIntProperty(int initialValue) {
6665
return new AtomicObservableIntProperty(
67-
new ObservableEventController.Impl<>(mEventController),
66+
mEventController,
6867
new AtomicPropertyBindingController<>(),
6968
initialValue);
7069
}
7170

7271
public ObservableDoubleProperty newDoubleProperty(double initialValue) {
7372
return new SimpleObservableDoubleProperty(
74-
new ObservableEventController.Impl<>(mEventController),
73+
mEventController,
7574
new AtomicPropertyBindingController<>(),
7675
initialValue);
7776
}
7877

7978
public ObservableDoubleProperty newConcurrentDoubleProperty(double initialValue) {
8079
return new AtomicObservableDoubleProperty(
81-
new ObservableEventController.Impl<>(mEventController),
80+
mEventController,
8281
new AtomicPropertyBindingController<>(),
8382
initialValue);
8483
}
8584

8685
public ObservableLongProperty newLongProperty(long initialValue) {
8786
return new SimpleObservableLongProperty(
88-
new ObservableEventController.Impl<>(mEventController),
87+
mEventController,
8988
new AtomicPropertyBindingController<>(),
9089
initialValue);
9190
}
9291

9392
public ObservableLongProperty newConcurrentLongProperty(long initialValue) {
9493
return new AtomicObservableLongProperty(
95-
new ObservableEventController.Impl<>(mEventController),
94+
mEventController,
9695
new AtomicPropertyBindingController<>(),
9796
initialValue);
9897
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.beans.observables.listeners;
2+
3+
import com.beans.observables.ObservableValue;
4+
import com.notifier.Event;
5+
6+
import java.util.function.Predicate;
7+
8+
public class ListenerPredicate implements Predicate<Event> {
9+
10+
private final ObservableValue<?> mObservable;
11+
12+
public ListenerPredicate(ObservableValue<?> observable) {
13+
mObservable = observable;
14+
}
15+
16+
@Override
17+
public boolean test(Event event) {
18+
if (mObservable == null) {
19+
return true;
20+
}
21+
22+
return event instanceof ChangeEvent &&
23+
((ChangeEvent)event).getObservableValue().equals(mObservable);
24+
}
25+
}

src/main/java/com/beans/observables/listeners/ObservableEventController.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package com.beans.observables.listeners;
22

3+
import com.beans.observables.ObservableValue;
4+
import com.notifier.Event;
35
import com.notifier.EventController;
46

57
import java.util.Arrays;
8+
import java.util.function.Predicate;
69

710
public interface ObservableEventController<T> {
811

@@ -12,20 +15,23 @@ public interface ObservableEventController<T> {
1215

1316
class Impl<T> implements ObservableEventController<T> {
1417
private final EventController mEventController;
18+
private final Predicate<Event> mEventPredicate;
1519

16-
public Impl(EventController eventController) {
20+
public Impl(EventController eventController, ObservableValue<T> thisObservable) {
1721
mEventController = eventController;
22+
mEventPredicate = new ListenerPredicate(thisObservable);
1823
}
1924

2025
@SafeVarargs
21-
public Impl(EventController eventController, ChangeListener<? super T>... listeners) {
26+
public Impl(EventController eventController, ObservableValue<T> thisObservable, ChangeListener<? super T>... listeners) {
2227
mEventController = eventController;
28+
mEventPredicate = new ListenerPredicate(thisObservable);
2329
Arrays.asList(listeners).forEach(this::addListener);
2430
}
2531

2632
@Override
2733
public void addListener(ChangeListener<? super T> listener) {
28-
mEventController.registerListener(listener);
34+
mEventController.registerListener(listener, mEventPredicate);
2935
}
3036

3137
@Override

src/main/java/com/beans/observables/properties/ObservableBooleanProperty.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.beans.BooleanProperty;
44
import com.beans.observables.binding.PropertyBindingController;
55
import com.beans.observables.listeners.ObservableEventController;
6+
import com.notifier.EventController;
67

78
import java.util.Objects;
89
import java.util.Optional;
@@ -30,6 +31,11 @@ protected ObservableBooleanProperty(ObservableEventController<Boolean> eventCont
3031
super(eventController, bindingController);
3132
}
3233

34+
protected ObservableBooleanProperty(EventController eventController,
35+
PropertyBindingController<Boolean> bindingController) {
36+
super(eventController, bindingController);
37+
}
38+
3339
/**
3440
* {@inheritDoc}
3541
* <p>

src/main/java/com/beans/observables/properties/ObservableDoubleProperty.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.beans.DoubleProperty;
44
import com.beans.observables.binding.PropertyBindingController;
55
import com.beans.observables.listeners.ObservableEventController;
6+
import com.notifier.EventController;
67

78
import java.util.Objects;
89
import java.util.Optional;
@@ -30,6 +31,11 @@ protected ObservableDoubleProperty(ObservableEventController<Double> eventContro
3031
super(eventController, bindingController);
3132
}
3233

34+
protected ObservableDoubleProperty(EventController eventController,
35+
PropertyBindingController<Double> bindingController) {
36+
super(eventController, bindingController);
37+
}
38+
3339
/**
3440
* {@inheritDoc}
3541
* <p>

src/main/java/com/beans/observables/properties/ObservableIntProperty.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.beans.IntProperty;
44
import com.beans.observables.binding.PropertyBindingController;
55
import com.beans.observables.listeners.ObservableEventController;
6+
import com.notifier.EventController;
67

78
import java.util.Objects;
89
import java.util.Optional;
@@ -30,6 +31,10 @@ protected ObservableIntProperty(ObservableEventController<Integer> eventControll
3031
super(eventController, bindingController);
3132
}
3233

34+
protected ObservableIntProperty(EventController eventController,
35+
PropertyBindingController<Integer> bindingController) {
36+
super(eventController, bindingController);
37+
}
3338
/**
3439
* {@inheritDoc}
3540
* <p>

src/main/java/com/beans/observables/properties/ObservableLongProperty.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.beans.LongProperty;
44
import com.beans.observables.binding.PropertyBindingController;
55
import com.beans.observables.listeners.ObservableEventController;
6+
import com.notifier.EventController;
67

78
import java.util.Objects;
89
import java.util.Optional;
@@ -30,6 +31,11 @@ protected ObservableLongProperty(ObservableEventController<Long> eventController
3031
super(eventController, bindingController);
3132
}
3233

34+
protected ObservableLongProperty(EventController eventController,
35+
PropertyBindingController<Long> bindingController) {
36+
super(eventController, bindingController);
37+
}
38+
3339
/**
3440
* {@inheritDoc}
3541
* <p>

src/main/java/com/beans/observables/properties/ObservablePropertyBase.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.beans.observables.listeners.ChangeEvent;
77
import com.beans.observables.listeners.ChangeListener;
88
import com.beans.observables.listeners.ObservableEventController;
9+
import com.notifier.EventController;
910

1011
import java.util.Optional;
1112

@@ -40,6 +41,11 @@ protected ObservablePropertyBase(ObservableEventController<T> eventController, P
4041
mBindingController = bindingController;
4142
}
4243

44+
protected ObservablePropertyBase(EventController eventController, PropertyBindingController<T> bindingController) {
45+
mEventController = new ObservableEventController.Impl<>(eventController, this);
46+
mBindingController = bindingController;
47+
}
48+
4349
@Override
4450
public final void addChangeListener(ChangeListener<? super T> changeListener) {
4551
mEventController.addListener(changeListener);

src/main/java/com/beans/observables/properties/SimpleObservableBooleanProperty.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.beans.observables.binding.PropertyBindingController;
44
import com.beans.observables.listeners.ObservableEventController;
5+
import com.notifier.EventController;
56

67
/**
78
* <p>
@@ -23,6 +24,13 @@ public SimpleObservableBooleanProperty(ObservableEventController<Boolean> eventC
2324
mValue = initialValue;
2425
}
2526

27+
public SimpleObservableBooleanProperty(EventController eventController,
28+
PropertyBindingController<Boolean> bindingController,
29+
boolean initialValue) {
30+
super(eventController, bindingController);
31+
mValue = initialValue;
32+
}
33+
2634
public SimpleObservableBooleanProperty(ObservableEventController<Boolean> eventController,
2735
PropertyBindingController<Boolean> bindingController) {
2836
this(eventController, bindingController, false);

src/main/java/com/beans/observables/properties/SimpleObservableDoubleProperty.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.beans.observables.binding.PropertyBindingController;
44
import com.beans.observables.listeners.ObservableEventController;
5+
import com.notifier.EventController;
56

67
/**
78
* <p>
@@ -23,6 +24,13 @@ public SimpleObservableDoubleProperty(ObservableEventController<Double> eventCon
2324
mValue = initialValue;
2425
}
2526

27+
public SimpleObservableDoubleProperty(EventController eventController,
28+
PropertyBindingController<Double> bindingController,
29+
double initialValue) {
30+
super(eventController, bindingController);
31+
mValue = initialValue;
32+
}
33+
2634
public SimpleObservableDoubleProperty(ObservableEventController<Double> eventController,
2735
PropertyBindingController<Double> bindingController) {
2836
this(eventController, bindingController, 0.0);

0 commit comments

Comments
 (0)