1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package cz.zcu.mre.sparkle.gui.tools;
21
22 import cz.zcu.mre.sparkle.data.AbstractTermsStorage.StorageChangeListener;
23 import cz.zcu.mre.sparkle.data.AbstractTermsStorage.WeakStorageChangeListener;
24 import javafx.beans.InvalidationListener;
25 import javafx.beans.WeakInvalidationListener;
26 import javafx.beans.value.ChangeListener;
27 import javafx.beans.value.WeakChangeListener;
28 import javafx.collections.*;
29 import javafx.event.Event;
30 import javafx.event.EventHandler;
31 import javafx.event.WeakEventHandler;
32 import java.io.Serializable;
33 import java.util.LinkedList;
34
35
36
37
38
39
40
41
42
43
44
45 public final class ReferenceKeeper {
46
47 private final LinkedList<Object> objects = new LinkedList<>();
48
49 private <X> X add(final X o) {
50 objects.add(o);
51 return o;
52 }
53
54 public final <X> WeakChangeListener<X> toWeak(final ChangeListener<X> listener) {
55 return new WeakChangeListener<>(add(listener));
56 }
57
58 public final WeakInvalidationListener toWeak(final InvalidationListener listener) {
59 return new WeakInvalidationListener(add(listener));
60 }
61
62 public final <X> WeakListChangeListener<X> toWeak(final ListChangeListener<X> listener) {
63 return new WeakListChangeListener<>(add(listener));
64 }
65
66 public final <K, V> WeakMapChangeListener<K, V> toWeak(final MapChangeListener<K, V> listener) {
67 return new WeakMapChangeListener<>(add(listener));
68 }
69
70 public final <X> WeakSetChangeListener<X> toWeak(final SetChangeListener<X> listener) {
71 return new WeakSetChangeListener<>(add(listener));
72 }
73
74 public final <X extends Event> WeakEventHandler<X> toWeak(final EventHandler<X> handler) {
75 return new WeakEventHandler<>(add(handler));
76 }
77
78 public final <X extends Serializable> WeakStorageChangeListener<X> toWeak(final StorageChangeListener<X> listener) {
79 return new WeakStorageChangeListener<>(add(listener));
80 }
81
82 }