CollectionBindingsExtension.groovy
001 /*
002  * SPDX-License-Identifier: Apache-2.0
003  *
004  * Copyright 2008-2017 the original author or authors.
005  *
006  * Licensed under the Apache License, Version 2.0 (the "License");
007  * you may not use this file except in compliance with the License.
008  * You may obtain a copy of the License at
009  *
010  *     http://www.apache.org/licenses/LICENSE-2.0
011  *
012  * Unless required by applicable law or agreed to in writing, software
013  * distributed under the License is distributed on an "AS IS" BASIS,
014  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015  * See the License for the specific language governing permissions and
016  * limitations under the License.
017  */
018 package griffon.javafx
019 
020 import griffon.javafx.beans.binding.CollectionBindings
021 import groovy.transform.CompileStatic
022 import javafx.beans.binding.NumberBinding
023 import javafx.beans.binding.StringBinding
024 import javafx.beans.value.ObservableValue
025 import javafx.collections.ObservableList
026 import javafx.collections.ObservableMap
027 import javafx.collections.ObservableSet
028 
029 import javax.annotation.Nonnull
030 import javax.annotation.Nullable
031 import java.util.function.Function
032 import java.util.function.Supplier
033 import java.util.function.ToDoubleFunction
034 
035 /**
036  @author Andres Almiray
037  @since 2.13.0
038  */
039 @CompileStatic
040 final class CollectionBindingsExtension {
041     @Nonnull
042     static StringBinding join(@Nonnull ObservableList<?> self, @Nullable String delimiter) {
043         CollectionBindings.joinList(self, delimiter)
044     }
045 
046     @Nonnull
047     static <T> StringBinding join(
048         @Nonnull ObservableList<T> self, @Nullable String delimiter, @Nonnull Function<? super T, String> mapper) {
049         CollectionBindings.joinList(self, delimiter, mapper)
050     }
051 
052     @Nonnull
053     static StringBinding join(@Nonnull ObservableList<?> self, @Nonnull ObservableValue<String> delimiter) {
054         CollectionBindings.joinList(self, delimiter)
055     }
056 
057     @Nonnull
058     static <T> StringBinding join(
059         @Nonnull ObservableList<T> self,
060         @Nonnull ObservableValue<String> delimiter, @Nonnull ObservableValue<Function<? super T, String>> mapper) {
061         CollectionBindings.joinList(self, delimiter, mapper)
062     }
063 
064     @Nonnull
065     static StringBinding join(@Nonnull ObservableSet<?> self, @Nullable String delimiter) {
066         CollectionBindings.joinSet(self, delimiter)
067     }
068 
069     @Nonnull
070     static <T> StringBinding join(
071         @Nonnull ObservableSet<T> self, @Nullable String delimiter, @Nonnull Function<? super T, String> mapper) {
072         CollectionBindings.joinSet(self, delimiter, mapper)
073     }
074 
075     @Nonnull
076     static StringBinding join(@Nonnull ObservableSet<?> self, @Nonnull ObservableValue<String> delimiter) {
077         CollectionBindings.joinSet(self, delimiter)
078     }
079 
080     @Nonnull
081     static <T> StringBinding join(
082         @Nonnull ObservableSet<T> self,
083         @Nonnull ObservableValue<String> delimiter, @Nonnull ObservableValue<Function<? super T, String>> mapper) {
084         CollectionBindings.joinSet(self, delimiter, mapper)
085     }
086 
087     @Nonnull
088     static <K, V> StringBinding join(@Nonnull ObservableMap<K, V> self, @Nullable String delimiter) {
089         CollectionBindings.joinMap(self, delimiter)
090     }
091 
092     @Nonnull
093     static <K, V> StringBinding join(
094         @Nonnull ObservableMap<K, V> self,
095         @Nullable String delimiter, @Nonnull Function<Map.Entry<K, V>, String> mapper) {
096         CollectionBindings.joinMap(self, delimiter, mapper)
097     }
098 
099     @Nonnull
100     static <K, V> StringBinding join(@Nonnull ObservableMap<K, V> self, @Nonnull ObservableValue<String> delimiter) {
101         CollectionBindings.joinMap(self, delimiter)
102     }
103 
104     @Nonnull
105     static <K, V> StringBinding join(
106         @Nonnull ObservableMap<K, V> self,
107         @Nonnull ObservableValue<String> delimiter,
108         @Nonnull ObservableValue<Function<Map.Entry<K, V>, String>> mapper) {
109         CollectionBindings.joinMap(self, delimiter, mapper)
110     }
111 
112     @Nonnull
113     static NumberBinding min(@Nonnull ObservableList<? extends Number> self, @Nonnull Number defaultValue) {
114         CollectionBindings.minInList(self, defaultValue)
115     }
116 
117     @Nonnull
118     static NumberBinding min(
119         @Nonnull ObservableList<? extends Number> self, @Nonnull Supplier<? extends Number> supplier) {
120         CollectionBindings.minInList(self, supplier)
121     }
122 
123     @Nonnull
124     static NumberBinding max(@Nonnull ObservableList<? extends Number> self, @Nonnull Number defaultValue) {
125         CollectionBindings.maxInList(self, defaultValue)
126     }
127 
128     @Nonnull
129     static NumberBinding max(
130         @Nonnull ObservableList<? extends Number> self, @Nonnull Supplier<? extends Number> supplier) {
131         CollectionBindings.maxInList(self, supplier)
132     }
133 
134     @Nonnull
135     static NumberBinding average(@Nonnull ObservableList<? extends Number> self, @Nonnull Number defaultValue) {
136         CollectionBindings.averageInList(self, defaultValue)
137     }
138 
139     @Nonnull
140     static NumberBinding average(
141         @Nonnull ObservableList<? extends Number> self, @Nonnull Supplier<? extends Number> supplier) {
142         CollectionBindings.averageInList(self, supplier)
143     }
144 
145     @Nonnull
146     static NumberBinding sum(@Nonnull ObservableList<? extends Number> self) {
147         CollectionBindings.sumOfList(self)
148     }
149 
150     @Nonnull
151     static <T> NumberBinding min(
152         @Nonnull ObservableList<T> self, @Nonnull Number defaultValue, @Nonnull ToDoubleFunction<? super T> mapper) {
153         CollectionBindings.minInList(self, defaultValue, mapper)
154     }
155 
156     @Nonnull
157     static <T> NumberBinding min(
158         @Nonnull ObservableList<T> self,
159         @Nonnull Supplier<? extends Number> supplier, @Nonnull ToDoubleFunction<? super T> mapper) {
160         CollectionBindings.minInList(self, supplier, mapper)
161     }
162 
163     @Nonnull
164     static <T> NumberBinding max(
165         @Nonnull ObservableList<T> self, @Nonnull Number defaultValue, @Nonnull ToDoubleFunction<? super T> mapper) {
166         CollectionBindings.maxInList(self, defaultValue, mapper)
167     }
168 
169     @Nonnull
170     static <T> NumberBinding max(
171         @Nonnull ObservableList<T> self,
172         @Nonnull Supplier<? extends Number> supplier, @Nonnull ToDoubleFunction<? super T> mapper) {
173         CollectionBindings.maxInList(self, supplier, mapper)
174     }
175 
176     @Nonnull
177     static <T> NumberBinding average(
178         @Nonnull ObservableList<T> self, @Nonnull Number defaultValue, @Nonnull ToDoubleFunction<? super T> mapper) {
179         CollectionBindings.averageInList(self, defaultValue, mapper)
180     }
181 
182     @Nonnull
183     static <T> NumberBinding average(
184         @Nonnull ObservableList<T> self,
185         @Nonnull Supplier<? extends Number> supplier, @Nonnull ToDoubleFunction<? super T> mapper) {
186         CollectionBindings.averageInList(self, supplier, mapper)
187     }
188 
189     @Nonnull
190     static <T> NumberBinding sum(@Nonnull ObservableList<T> self, @Nonnull ToDoubleFunction<? super T> mapper) {
191         CollectionBindings.sumOfList(self, mapper)
192     }
193 
194     @Nonnull
195     static <T> NumberBinding min(
196         @Nonnull ObservableList<T> self,
197         @Nonnull Number defaultValue, @Nonnull ObservableValue<ToDoubleFunction<? super T>> mapper) {
198         CollectionBindings.minInList(self, defaultValue, mapper)
199     }
200 
201     @Nonnull
202     static <T> NumberBinding min(
203         @Nonnull ObservableList<T> self,
204         @Nonnull Supplier<? extends Number> supplier, @Nonnull ObservableValue<ToDoubleFunction<? super T>> mapper) {
205         CollectionBindings.minInList(self, supplier, mapper)
206     }
207 
208     @Nonnull
209     static <T> NumberBinding max(
210         @Nonnull ObservableList<T> self,
211         @Nonnull Number defaultValue, @Nonnull ObservableValue<ToDoubleFunction<? super T>> mapper) {
212         CollectionBindings.maxInList(self, defaultValue, mapper)
213     }
214 
215     @Nonnull
216     static <T> NumberBinding max(
217         @Nonnull ObservableList<T> self,
218         @Nonnull Supplier<? extends Number> supplier, @Nonnull ObservableValue<ToDoubleFunction<? super T>> mapper) {
219         CollectionBindings.maxInList(self, supplier, mapper)
220     }
221 
222     @Nonnull
223     static <T> NumberBinding average(
224         @Nonnull ObservableList<T> self,
225         @Nonnull Number defaultValue, @Nonnull ObservableValue<ToDoubleFunction<? super T>> mapper) {
226         CollectionBindings.averageInList(self, defaultValue, mapper)
227     }
228 
229     @Nonnull
230     static <T> NumberBinding average(
231         @Nonnull ObservableList<T> self,
232         @Nonnull Supplier<? extends Number> supplier, @Nonnull ObservableValue<ToDoubleFunction<? super T>> mapper) {
233         CollectionBindings.averageInList(self, supplier, mapper)
234     }
235 
236     @Nonnull
237     static <T> NumberBinding sum(
238         @Nonnull ObservableList<T> self, @Nonnull ObservableValue<ToDoubleFunction<? super T>> mapper) {
239         CollectionBindings.sumOfList(self, mapper)
240     }
241 
242     @Nonnull
243     static NumberBinding min(@Nonnull ObservableSet<? extends Number> self, @Nonnull Number defaultValue) {
244         CollectionBindings.minInSet(self, defaultValue)
245     }
246 
247     @Nonnull
248     static NumberBinding min(
249         @Nonnull ObservableSet<? extends Number> self, @Nonnull Supplier<? extends Number> supplier) {
250         CollectionBindings.minInSet(self, supplier)
251     }
252 
253     @Nonnull
254     static NumberBinding max(@Nonnull ObservableSet<? extends Number> self, @Nonnull Number defaultValue) {
255         CollectionBindings.maxInSet(self, defaultValue)
256     }
257 
258     @Nonnull
259     static NumberBinding max(
260         @Nonnull ObservableSet<? extends Number> self, @Nonnull Supplier<? extends Number> supplier) {
261         CollectionBindings.maxInSet(self, supplier)
262     }
263 
264     @Nonnull
265     static NumberBinding average(@Nonnull ObservableSet<? extends Number> self, @Nonnull Number defaultValue) {
266         CollectionBindings.averageInSet(self, defaultValue)
267     }
268 
269     @Nonnull
270     static NumberBinding average(
271         @Nonnull ObservableSet<? extends Number> self, @Nonnull Supplier<? extends Number> supplier) {
272         CollectionBindings.averageInSet(self, supplier)
273     }
274 
275     @Nonnull
276     static NumberBinding sum(@Nonnull ObservableSet<? extends Number> self) {
277         CollectionBindings.sumOfSet(self)
278     }
279 
280     @Nonnull
281     static <T> NumberBinding min(
282         @Nonnull ObservableSet<T> self, @Nonnull Number defaultValue, @Nonnull ToDoubleFunction<? super T> mapper) {
283         CollectionBindings.minInSet(self, defaultValue, mapper)
284     }
285 
286     @Nonnull
287     static <T> NumberBinding min(
288         @Nonnull ObservableSet<T> self,
289         @Nonnull Supplier<? extends Number> supplier, @Nonnull ToDoubleFunction<? super T> mapper) {
290         CollectionBindings.minInSet(self, supplier, mapper)
291     }
292 
293     @Nonnull
294     static <T> NumberBinding max(
295         @Nonnull ObservableSet<T> self, @Nonnull Number defaultValue, @Nonnull ToDoubleFunction<? super T> mapper) {
296         CollectionBindings.maxInSet(self, defaultValue, mapper)
297     }
298 
299     @Nonnull
300     static <T> NumberBinding max(
301         @Nonnull ObservableSet<T> self,
302         @Nonnull Supplier<? extends Number> supplier, @Nonnull ToDoubleFunction<? super T> mapper) {
303         CollectionBindings.maxInSet(self, supplier, mapper)
304     }
305 
306     @Nonnull
307     static <T> NumberBinding average(
308         @Nonnull ObservableSet<T> self, @Nonnull Number defaultValue, @Nonnull ToDoubleFunction<? super T> mapper) {
309         CollectionBindings.averageInSet(self, defaultValue, mapper)
310     }
311 
312     @Nonnull
313     static <T> NumberBinding average(
314         @Nonnull ObservableSet<T> self,
315         @Nonnull Supplier<? extends Number> supplier, @Nonnull ToDoubleFunction<? super T> mapper) {
316         CollectionBindings.averageInSet(self, supplier, mapper)
317     }
318 
319     @Nonnull
320     static <T> NumberBinding sum(@Nonnull ObservableSet<T> self, @Nonnull ToDoubleFunction<? super T> mapper) {
321         CollectionBindings.sumOfSet(self, mapper)
322     }
323 
324     @Nonnull
325     static <T> NumberBinding min(
326         @Nonnull ObservableSet<T> self,
327         @Nonnull Number defaultValue, @Nonnull ObservableValue<ToDoubleFunction<? super T>> mapper) {
328         CollectionBindings.minInSet(self, defaultValue, mapper)
329     }
330 
331     @Nonnull
332     static <T> NumberBinding min(
333         @Nonnull ObservableSet<T> self,
334         @Nonnull Supplier<? extends Number> supplier, @Nonnull ObservableValue<ToDoubleFunction<? super T>> mapper) {
335         CollectionBindings.minInSet(self, supplier, mapper)
336     }
337 
338     @Nonnull
339     static <T> NumberBinding max(
340         @Nonnull ObservableSet<T> self,
341         @Nonnull Number defaultValue, @Nonnull ObservableValue<ToDoubleFunction<? super T>> mapper) {
342         CollectionBindings.maxInSet(self, defaultValue, mapper)
343     }
344 
345     @Nonnull
346     static <T> NumberBinding max(
347         @Nonnull ObservableSet<T> self,
348         @Nonnull Supplier<? extends Number> supplier, @Nonnull ObservableValue<ToDoubleFunction<? super T>> mapper) {
349         CollectionBindings.maxInSet(self, supplier, mapper)
350     }
351 
352     @Nonnull
353     static <T> NumberBinding average(
354         @Nonnull ObservableSet<T> self,
355         @Nonnull Number defaultValue, @Nonnull ObservableValue<ToDoubleFunction<? super T>> mapper) {
356         CollectionBindings.averageInSet(self, defaultValue, mapper)
357     }
358 
359     @Nonnull
360     static <T> NumberBinding average(
361         @Nonnull ObservableSet<T> self,
362         @Nonnull Supplier<? extends Number> supplier, @Nonnull ObservableValue<ToDoubleFunction<? super T>> mapper) {
363         CollectionBindings.averageInSet(self, supplier, mapper)
364     }
365 
366     @Nonnull
367     static <T> NumberBinding sum(
368         @Nonnull ObservableSet<T> self, @Nonnull ObservableValue<ToDoubleFunction<? super T>> mapper) {
369         CollectionBindings.sumOfSet(self, mapper)
370     }
371 
372     @Nonnull
373     static <K> NumberBinding min(
374         @Nonnull ObservableMap<K, ? extends Number> self, @Nonnull Number defaultValue) {
375         CollectionBindings.minInMap(self, defaultValue)
376     }
377 
378     @Nonnull
379     static <K> NumberBinding min(
380         @Nonnull ObservableMap<K, ? extends Number> self, @Nonnull Supplier<? extends Number> supplier) {
381         CollectionBindings.minInMap(self, supplier)
382     }
383 
384     @Nonnull
385     static <K> NumberBinding max(
386         @Nonnull ObservableMap<K, ? extends Number> self, @Nonnull Number defaultValue) {
387         CollectionBindings.maxInMap(self, defaultValue)
388     }
389 
390     @Nonnull
391     static <K> NumberBinding max(
392         @Nonnull ObservableMap<K, ? extends Number> self, @Nonnull Supplier<? extends Number> supplier) {
393         CollectionBindings.maxInMap(self, supplier)
394     }
395 
396     @Nonnull
397     static <K> NumberBinding average(
398         @Nonnull ObservableMap<K, ? extends Number> self, @Nonnull Number defaultValue) {
399         CollectionBindings.averageInMap(self, defaultValue)
400     }
401 
402     @Nonnull
403     static <K> NumberBinding average(
404         @Nonnull ObservableMap<K, ? extends Number> self, @Nonnull Supplier<? extends Number> supplier) {
405         CollectionBindings.averageInMap(self, supplier)
406     }
407 
408     @Nonnull
409     static <K> NumberBinding sum(@Nonnull ObservableMap<K, ? extends Number> self) {
410         CollectionBindings.sumOfMap(self)
411     }
412 
413     @Nonnull
414     static <K, V> NumberBinding min(
415         @Nonnull ObservableMap<K, V> self,
416         @Nonnull Number defaultValue, @Nonnull ToDoubleFunction<? super V> mapper) {
417         CollectionBindings.minInMap(self, defaultValue, mapper)
418     }
419 
420     @Nonnull
421     static <K, V> NumberBinding min(
422         @Nonnull ObservableMap<K, V> self,
423         @Nonnull Supplier<? extends Number> supplier, @Nonnull ToDoubleFunction<? super V> mapper) {
424         CollectionBindings.minInMap(self, supplier, mapper)
425     }
426 
427     @Nonnull
428     static <K, V> NumberBinding max(
429         @Nonnull ObservableMap<K, V> self,
430         @Nonnull Number defaultValue, @Nonnull ToDoubleFunction<? super V> mapper) {
431         CollectionBindings.maxInMap(self, defaultValue, mapper)
432     }
433 
434     @Nonnull
435     static <K, V> NumberBinding max(
436         @Nonnull ObservableMap<K, V> self,
437         @Nonnull Supplier<? extends Number> supplier, @Nonnull ToDoubleFunction<? super V> mapper) {
438         CollectionBindings.maxInMap(self, supplier, mapper)
439     }
440 
441     @Nonnull
442     static <K, V> NumberBinding average(
443         @Nonnull ObservableMap<K, V> self,
444         @Nonnull Number defaultValue, @Nonnull ToDoubleFunction<? super V> mapper) {
445         CollectionBindings.averageInMap(self, defaultValue, mapper)
446     }
447 
448     @Nonnull
449     static <K, V> NumberBinding average(
450         @Nonnull ObservableMap<K, V> self,
451         @Nonnull Supplier<? extends Number> supplier, @Nonnull ToDoubleFunction<? super V> mapper) {
452         CollectionBindings.averageInMap(self, supplier, mapper)
453     }
454 
455     @Nonnull
456     static <K, V> NumberBinding sum(
457         @Nonnull ObservableMap<K, V> self, @Nonnull ToDoubleFunction<? super V> mapper) {
458         CollectionBindings.sumOfMap(self, mapper)
459     }
460 
461     @Nonnull
462     static <K, V> NumberBinding min(
463         @Nonnull ObservableMap<K, V> self,
464         @Nonnull Number defaultValue, @Nonnull ObservableValue<ToDoubleFunction<? super V>> mapper) {
465         CollectionBindings.minInMap(self, defaultValue, mapper)
466     }
467 
468     @Nonnull
469     static <K, V> NumberBinding min(
470         @Nonnull ObservableMap<K, V> self,
471         @Nonnull Supplier<? extends Number> supplier, @Nonnull ObservableValue<ToDoubleFunction<? super V>> mapper) {
472         CollectionBindings.minInMap(self, supplier, mapper)
473     }
474 
475     @Nonnull
476     static <K, V> NumberBinding max(
477         @Nonnull ObservableMap<K, V> self,
478         @Nonnull Number defaultValue, @Nonnull ObservableValue<ToDoubleFunction<? super V>> mapper) {
479         CollectionBindings.maxInMap(self, defaultValue, mapper)
480     }
481 
482     @Nonnull
483     static <K, V> NumberBinding max(
484         @Nonnull ObservableMap<K, V> self,
485         @Nonnull Supplier<? extends Number> supplier, @Nonnull ObservableValue<ToDoubleFunction<? super V>> mapper) {
486         CollectionBindings.maxInMap(self, supplier, mapper)
487     }
488 
489     @Nonnull
490     static <K, V> NumberBinding average(
491         @Nonnull ObservableMap<K, V> self,
492         @Nonnull Number defaultValue, @Nonnull ObservableValue<ToDoubleFunction<? super V>> mapper) {
493         CollectionBindings.averageInMap(self, defaultValue, mapper)
494     }
495 
496     @Nonnull
497     static <K, V> NumberBinding average(
498         @Nonnull ObservableMap<K, V> self,
499         @Nonnull Supplier<? extends Number> supplier, @Nonnull ObservableValue<ToDoubleFunction<? super V>> mapper) {
500         CollectionBindings.averageInMap(self, supplier, mapper)
501     }
502 
503     @Nonnull
504     static <K, V> NumberBinding sum(
505         @Nonnull ObservableMap<K, V> self, @Nonnull ObservableValue<ToDoubleFunction<? super V>> mapper) {
506         CollectionBindings.sumOfMap(self, mapper)
507     }
508 }