8
8
import javafx .scene .control .ToggleButton ;
9
9
import javafx .scene .layout .BorderPane ;
10
10
import javafx .scene .layout .Pane ;
11
+ import javaslang .Tuple ;
12
+ import javaslang .Tuple2 ;
11
13
import javaslang .collection .Array ;
12
14
import javaslang .collection .HashMap ;
13
15
import javaslang .collection .Map ;
@@ -23,31 +25,31 @@ public class Accessors {
23
25
24
26
private final Consumer <Object > dispatcher ;
25
27
26
- private Map <PropertyKey , Accessor > accessorMap = HashMap .empty ();
27
- private Map <PropertyKey , Accessor > layoutAccessorMap = HashMap .empty ();
28
+ private Map <Tuple2 < Class <?>, String > , Accessor > accessorMap = HashMap .empty ();
29
+ private Map <Tuple2 < Class <?>, String > , Accessor > layoutAccessorMap = HashMap .empty ();
28
30
29
31
public Accessors (Consumer <Object > dispatcher ) {
30
32
this .dispatcher = dispatcher ;
31
33
}
32
34
33
35
public void init (NodeBuilder nodeBuilder ) {
34
- registerAccessor (new PropertyKey (ToggleButton .class , "toggleGroup" ), new ToggleGroupAccessor (getPropertyGetter (ToggleButton .class , "toggleGroup" ).get (), dispatcher ));
35
- registerAccessor (new PropertyKey (Labeled .class , "graphic" ), new NodeAccessor (getPropertyGetter (Labeled .class , "graphic" ).get (), dispatcher , nodeBuilder ));
36
- registerAccessor (new PropertyKey (BorderPane .class , "top" ), new NodeAccessor (getPropertyGetter (BorderPane .class , "top" ).get (), dispatcher , nodeBuilder ));
37
- registerAccessor (new PropertyKey (BorderPane .class , "right" ), new NodeAccessor (getPropertyGetter (BorderPane .class , "right" ).get (), dispatcher , nodeBuilder ));
38
- registerAccessor (new PropertyKey (BorderPane .class , "bottom" ), new NodeAccessor (getPropertyGetter (BorderPane .class , "bottom" ).get (), dispatcher , nodeBuilder ));
39
- registerAccessor (new PropertyKey (BorderPane .class , "left" ), new NodeAccessor (getPropertyGetter (BorderPane .class , "left" ).get (), dispatcher , nodeBuilder ));
40
- registerAccessor (new PropertyKey (BorderPane .class , "center" ), new NodeAccessor (getPropertyGetter (BorderPane .class , "center" ).get (), dispatcher , nodeBuilder ));
41
- registerAccessor (new PropertyKey (Node .class , "focused" ), new FocusedAccessor (getPropertyGetter (Node .class , "focused" ).get (), dispatcher ));
36
+ registerAccessor (Tuple . of (ToggleButton .class , "toggleGroup" ), new ToggleGroupAccessor (getPropertyGetter (ToggleButton .class , "toggleGroup" ).get (), dispatcher ));
37
+ registerAccessor (Tuple . of (Labeled .class , "graphic" ), new NodeAccessor (getPropertyGetter (Labeled .class , "graphic" ).get (), dispatcher , nodeBuilder ));
38
+ registerAccessor (Tuple . of (BorderPane .class , "top" ), new NodeAccessor (getPropertyGetter (BorderPane .class , "top" ).get (), dispatcher , nodeBuilder ));
39
+ registerAccessor (Tuple . of (BorderPane .class , "right" ), new NodeAccessor (getPropertyGetter (BorderPane .class , "right" ).get (), dispatcher , nodeBuilder ));
40
+ registerAccessor (Tuple . of (BorderPane .class , "bottom" ), new NodeAccessor (getPropertyGetter (BorderPane .class , "bottom" ).get (), dispatcher , nodeBuilder ));
41
+ registerAccessor (Tuple . of (BorderPane .class , "left" ), new NodeAccessor (getPropertyGetter (BorderPane .class , "left" ).get (), dispatcher , nodeBuilder ));
42
+ registerAccessor (Tuple . of (BorderPane .class , "center" ), new NodeAccessor (getPropertyGetter (BorderPane .class , "center" ).get (), dispatcher , nodeBuilder ));
43
+ registerAccessor (Tuple . of (Node .class , "focused" ), new FocusedAccessor (getPropertyGetter (Node .class , "focused" ).get (), dispatcher ));
42
44
}
43
45
44
- public void registerAccessor (PropertyKey propertyKey , Accessor accessor ) {
46
+ public void registerAccessor (Tuple2 < Class <?>, String > propertyKey , Accessor accessor ) {
45
47
cacheAccessor (propertyKey , accessor );
46
48
}
47
49
48
50
public Option <Accessor > getAccessor (Node node , String propertyName ) {
49
51
final Class <? extends Node > nodeClass = node .getClass ();
50
- final PropertyKey propertyKey = new PropertyKey (nodeClass , propertyName );
52
+ final Tuple2 < Class <?>, String > propertyKey = Tuple . of (nodeClass , propertyName );
51
53
52
54
return accessorMap .get (propertyKey )
53
55
.orElse (() -> searchInCache (accessorMap , propertyKey )
@@ -59,7 +61,7 @@ public Option<Accessor> getAccessor(Node node, String propertyName) {
59
61
return Option .none ();
60
62
}
61
63
final Class <? extends Parent > parentClass = node .getParent ().getClass ();
62
- final PropertyKey layoutKey = new PropertyKey (parentClass , propertyName );
64
+ final Tuple2 < Class <?>, String > layoutKey = Tuple . of (parentClass , propertyName );
63
65
return Pane .class .isAssignableFrom (parentClass ) ?
64
66
layoutAccessorMap .get (layoutKey )
65
67
.orElse (() -> searchInCache (layoutAccessorMap , layoutKey )
@@ -70,36 +72,36 @@ public Option<Accessor> getAccessor(Node node, String propertyName) {
70
72
});
71
73
}
72
74
73
- private Option <Accessor > searchInCache (Map <PropertyKey , Accessor > map , PropertyKey propertyKey ) {
74
- final String propertyName = propertyKey .getName () ;
75
- for (Class <?> clazz = propertyKey .getNodeClass () .getSuperclass (); clazz != null ; clazz = clazz .getSuperclass ()) {
76
- final Option <Accessor > accessor = map .get (new PropertyKey (clazz , propertyName ));
75
+ private Option <Accessor > searchInCache (Map <Tuple2 < Class <?>, String >, Accessor > map , Tuple2 < Class <?>, String > propertyKey ) {
76
+ final String propertyName = propertyKey ._2 ;
77
+ for (Class <?> clazz = propertyKey ._1 .getSuperclass (); clazz != null ; clazz = clazz .getSuperclass ()) {
78
+ final Option <Accessor > accessor = map .get (Tuple . of (clazz , propertyName ));
77
79
if (accessor .isDefined ()) {
78
80
return accessor ;
79
81
}
80
82
}
81
83
return Option .none ();
82
84
}
83
85
84
- private Accessor cacheAccessor (PropertyKey propertyKey , Accessor accessor ) {
86
+ private Accessor cacheAccessor (Tuple2 < Class <?>, String > propertyKey , Accessor accessor ) {
85
87
accessorMap = doCacheAccessor (accessorMap , propertyKey , accessor );
86
88
return accessor ;
87
89
}
88
90
89
- private Accessor cacheLayoutAccessor (PropertyKey propertyKey , Accessor accessor ) {
91
+ private Accessor cacheLayoutAccessor (Tuple2 < Class <?>, String > propertyKey , Accessor accessor ) {
90
92
layoutAccessorMap = doCacheAccessor (layoutAccessorMap , propertyKey , accessor );
91
93
return accessor ;
92
94
}
93
95
94
- private Map <PropertyKey , Accessor > doCacheAccessor (Map <PropertyKey , Accessor > map , PropertyKey propertyKey , Accessor accessor ) {
95
- final Option <Method > getter = getGetterMethod (propertyKey .getNodeClass () , propertyKey .getName () );
96
+ private Map <Tuple2 < Class <?>, String >, Accessor > doCacheAccessor (Map <Tuple2 < Class <?>, String >, Accessor > map , Tuple2 < Class <?>, String > propertyKey , Accessor accessor ) {
97
+ final Option <Method > getter = getGetterMethod (propertyKey ._1 , propertyKey ._2 );
96
98
if (getter .isDefined ()) {
97
99
final Class <?> declaringClass = getter .get ().getDeclaringClass ();
98
- final String propertyName = propertyKey .getName () ;
99
- for (Class <?> clazz = propertyKey .getNodeClass () ; !declaringClass .equals (clazz ); clazz = clazz .getSuperclass ()) {
100
- map = map .put (new PropertyKey (clazz , propertyName ), accessor );
100
+ final String propertyName = propertyKey ._2 ;
101
+ for (Class <?> clazz = propertyKey ._1 ; !declaringClass .equals (clazz ); clazz = clazz .getSuperclass ()) {
102
+ map = map .put (Tuple . of (clazz , propertyName ), accessor );
101
103
}
102
- map = map .put (new PropertyKey (declaringClass , propertyName ), accessor );
104
+ map = map .put (Tuple . of (declaringClass , propertyName ), accessor );
103
105
}
104
106
return map ;
105
107
}
0 commit comments