-
Notifications
You must be signed in to change notification settings - Fork 5
/
ObservableListExtractor.java
143 lines (117 loc) · 5.47 KB
/
ObservableListExtractor.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package org.genericsystem.reactor.context;
import java.util.Arrays;
import java.util.function.Function;
import java.util.stream.Collectors;
import org.genericsystem.common.Generic;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
@FunctionalInterface
public interface ObservableListExtractor extends Function<Generic[], ObservableList<Generic>> {
public static ObservableListExtractor from(Class<?>... genericClasses) {
return gs -> FXCollections.observableArrayList(Arrays.stream(genericClasses).map(gs[0].getRoot()::<Generic> find).collect(Collectors.toList()));
}
public static final ObservableListExtractor INSTANCES = generics -> {
// System.out.println("INSTANCES : " + Arrays.toString(generics) + " " + generics[0].getObservableInstances());
return generics[0].getObservableInstances();
};
public static final ObservableListExtractor SUBINSTANCES = generics -> {
// System.out.println("INSTANCES : " + Arrays.toString(generics) + " " + generics[0].getObservableSubInstances());
return generics[0].getObservableSubInstances();
};
public static final ObservableListExtractor SUBINSTANCES_OF_META = generics -> {
return generics[0].getMeta().getObservableSubInstances();
};
public static final ObservableListExtractor ATTRIBUTES_OF_TYPE = generics -> {
// System.out.println("ATTRIBUTES_OF_TYPE : " + Arrays.toString(generics) + " " + generics[0].getObservableAttributes().filtered(attribute ->
// attribute.isCompositeForInstances(generics[0])));
return generics[0].getObservableAttributes().filtered(attribute -> attribute.isCompositeForInstances(generics[0]));
};
public static final ObservableListExtractor ATTRIBUTES_OF_INSTANCES = generics -> {
// System.out.println("ATTRIBUTES_OF_INSTANCES : " + Arrays.toString(generics) + " " + generics[1].getObservableAttributes().filtered(attribute ->
// attribute.isCompositeForInstances(generics[1])));
return generics[1].getObservableAttributes().filtered(attribute -> attribute.isCompositeForInstances(generics[1]));
};
public static final ObservableListExtractor COMPONENTS = generics -> {
// System.out.println("COMPONENTS : " + Arrays.toString(generics) + " " + generics[0].getComponents());
return FXCollections.observableList(generics[0].getComponents());
};
public static final ObservableListExtractor HOLDERS = generics -> {
// System.out.println("HOLDERS : " + Arrays.toString(generics) + " " + generics[1].getObservableHolders(generics[0]));
ObservableList<Generic> holders = generics[1].getObservableHolders(generics[0]);
return holders;
};
public static final ObservableListExtractor OTHER_COMPONENTS_1 = gs -> ObservableListExtractor.COMPONENTS.apply(gs).filtered(g -> !gs[1].inheritsFrom(g));
public static final ObservableListExtractor OTHER_COMPONENTS_2 = gs -> ObservableListExtractor.COMPONENTS.apply(gs).filtered(g -> !gs[2].inheritsFrom(g));
public static class ATTRIBUTES_OF_TYPE implements ObservableListExtractor {
@Override
public ObservableList<Generic> apply(Generic[] generics) {
return ATTRIBUTES_OF_TYPE.apply(generics);
}
}
public static class COMPONENTS implements ObservableListExtractor {
@Override
public ObservableList<Generic> apply(Generic[] generics) {
return COMPONENTS.apply(generics);
}
}
public static class OTHER_COMPONENTS_1 implements ObservableListExtractor {
@Override
public ObservableList<Generic> apply(Generic[] generics) {
return OTHER_COMPONENTS_1.apply(generics);
}
}
public static class OTHER_COMPONENTS_2 implements ObservableListExtractor {
@Override
public ObservableList<Generic> apply(Generic[] generics) {
return OTHER_COMPONENTS_2.apply(generics);
}
}
public static class INSTANCES implements ObservableListExtractor {
@Override
public ObservableList<Generic> apply(Generic[] generics) {
return INSTANCES.apply(generics);
}
}
public static class SUBINSTANCES implements ObservableListExtractor {
@Override
public ObservableList<Generic> apply(Generic[] generics) {
return SUBINSTANCES.apply(generics);
}
}
public static class SUBINSTANCES_OF_META implements ObservableListExtractor {
@Override
public ObservableList<Generic> apply(Generic[] generics) {
return SUBINSTANCES_OF_META.apply(generics);
}
}
public static class SUBINSTANCES_OF_LINK_COMPONENT implements ObservableListExtractor {
@Override
public ObservableList<Generic> apply(Generic[] generics) {
return ObservableListExtractor.SUBINSTANCES.apply(ObservableListExtractor.COMPONENTS.apply(generics).filtered(g -> !generics[2].inheritsFrom(g)).stream().toArray(Generic[]::new));
}
}
public static class SUBINSTANCES_OF_RELATION_COMPONENT implements ObservableListExtractor {
@Override
public ObservableList<Generic> apply(Generic[] generics) {
return ObservableListExtractor.SUBINSTANCES.apply(ObservableListExtractor.COMPONENTS.apply(generics).filtered(g -> !generics[1].inheritsFrom(g)).stream().toArray(Generic[]::new));
}
}
public static class ATTRIBUTES_OF_INSTANCES implements ObservableListExtractor {
@Override
public ObservableList<Generic> apply(Generic[] generics) {
return ATTRIBUTES_OF_INSTANCES.apply(generics);
}
}
public static class HOLDERS implements ObservableListExtractor {
@Override
public ObservableList<Generic> apply(Generic[] generics) {
return HOLDERS.apply(generics);
}
}
public static class NO_FOR_EACH implements ObservableListExtractor {
@Override
public ObservableList<Generic> apply(Generic[] generics) {
throw new IllegalStateException();
}
}
}