001package Torello.Java.JSON;
002
003
004// *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
005// These are the User-Provided Lambda's / Functional-Interfaces
006// *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
007
008import java.util.function.IntConsumer;
009import Torello.Java.Function.TriIntCons;
010import java.util.function.ToIntFunction;
011
012import Torello.Java.Function.ShortConsumer;
013import Torello.Java.Function.IntIntShortCons;
014import Torello.Java.Function.ToShortFunction;
015
016import Torello.Java.Function.ByteConsumer;
017import Torello.Java.Function.IntIntByteCons;
018import Torello.Java.Function.ToByteFunction;
019
020import java.util.function.LongConsumer;
021import Torello.Java.Function.IntIntLongCons;
022import java.util.function.ToLongFunction;
023
024import Torello.Java.Function.FloatConsumer;
025import Torello.Java.Function.IntIntFloatCons;
026import Torello.Java.Function.ToFloatFunction;
027
028import java.util.function.DoubleConsumer;
029import Torello.Java.Function.IntIntDoubleCons;
030import java.util.function.ToDoubleFunction;
031
032import Torello.Java.Function.BoolConsumer;
033import Torello.Java.Function.IntIntBoolCons;
034import java.util.function.Predicate;
035
036
037// *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
038// The Rest of the imports
039// *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
040
041import Torello.JavaDoc.StaticFunctional;
042import Torello.JavaDoc.LinkJavaSource;
043import Torello.JavaDoc.JDHeaderBackgroundImg;
044
045import Torello.JavaDoc.IntoHTMLTable;
046import static Torello.JavaDoc.IntoHTMLTable.Background.GreenDither;
047import static Torello.JavaDoc.IntoHTMLTable.Background.BlueDither;
048
049import Torello.Java.JSON.JFlag;
050
051import javax.json.Json;
052import javax.json.JsonString;
053import javax.json.JsonArray;
054import javax.json.JsonValue;
055
056import java.util.Objects;
057
058import static javax.json.JsonValue.TRUE;
059import static javax.json.JsonValue.FALSE;
060
061import static Torello.Java.JSON.JFlag.NOT_ALLOWED_RET_NULL_MASKS;
062import static Torello.Java.JSON.BASIC_TYPES.PRIMITIVE;
063
064
065/**
066 * Utilities for parsing Json Array's and sending the parsed values into a Java
067 * Consumer of Boxed-Primitives.
068 * 
069 * <EMBED CLASS='external-html' DATA-FILE-ID=GLASS_FISH_NOTE>
070 * <EMBED CLASS='external-html' DATA-FILE-ID=RJA_INTO_PRIM_CONS>
071 * <EMBED CLASS='external-html' DATA-FILE-ID=JSON_BINDING_NOTE>
072 *
073 * @see Json
074 * @see JsonArray
075 */
076@StaticFunctional
077@JDHeaderBackgroundImg(EmbedTagFileID="RJA_JDHBI_PRIM_CONS")
078public class RJArrIntoPrimConsumer
079{
080    private RJArrIntoPrimConsumer() { }
081
082    /**
083     * <EMBED CLASS=defs DATA-METH_NAME=numeric DATA-CONS_TYPE=Int DATA-PRIM_TYPE=int>
084     * <EMBED CLASS='external-html' DATA-TYPE=Integer DATA-FILE-ID=RJ_ARR_INTO_PRIM_CONS>
085     */
086    @IntoHTMLTable(background=GreenDither, title="Java-Consumer which accepts Primitive-Integers")
087    @LinkJavaSource(handle="BASIC_TYPES", name="INTEGER")
088    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForConsumers")
089    public static void intArr(
090            final JsonArray             ja,
091            final int                   defaultValue,
092            final int                   FLAGS,
093            final ToIntFunction<String> optionalUserParser,
094            final IntConsumer           c
095        )
096    {
097        Objects.requireNonNull(c, "IntConsumer parameter 'c' is null");
098
099        ProcessJsonArray.numericToJava(
100            ja,
101            // new SettingsRec<Integer, Void>(
102            SETTINGS_REC_BUILDER.createForConsumers(
103                defaultValue,
104                FLAGS,
105                (optionalUserParser == null) ? null : optionalUserParser::applyAsInt,
106                c::accept,
107                BASIC_TYPES.PRIMITIVE_INTEGER()
108            ));
109    }
110
111    /**
112     * <EMBED CLASS=defs DATA-METH_NAME=numeric DATA-CONS_TYPE=Short DATA-PRIM_TYPE=short>
113     * <EMBED CLASS='external-html' DATA-TYPE=Short DATA-FILE-ID=RJ_ARR_INTO_PRIM_CONS>
114     */
115    @IntoHTMLTable(background=BlueDither,
116        title="Java-Consumer which accepts Primitive Short-Integers")
117    @LinkJavaSource(handle="BASIC_TYPES", name="SHORT")
118    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForConsumers")
119    public static void shortArr(
120            final JsonArray                 ja,
121            final short                     defaultValue,
122            final int                       FLAGS,
123            final ToShortFunction<String>   optionalUserParser,
124            final ShortConsumer             c
125        )
126    {
127        Objects.requireNonNull(c, "ShortConsumer parameter 'c' is null");
128
129        ProcessJsonArray.numericToJava(
130            ja,
131            // new SettingsRec<Short, Void>(
132            SETTINGS_REC_BUILDER.createForConsumers(
133                defaultValue,
134                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
135                (optionalUserParser == null) ? null : optionalUserParser::applyAsShort,
136                c::accept,
137                BASIC_TYPES.PRIMITIVE_SHORT()
138            ));
139    }
140
141    /**
142     * <EMBED CLASS=defs DATA-METH_NAME=numeric DATA-CONS_TYPE=Byte DATA-PRIM_TYPE=byte>
143     * <EMBED CLASS='external-html' DATA-TYPE=Byte DATA-FILE-ID=RJ_ARR_INTO_PRIM_CONS>
144     */
145    @IntoHTMLTable(background=GreenDither, title="Java-Consumer which accepts Primitive-Bytes")
146    @LinkJavaSource(handle="BASIC_TYPES", name="BYTE")
147    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForConsumers")
148    public static void byteArr(
149            final JsonArray                 ja,
150            final byte                      defaultValue,
151            final int                       FLAGS,
152            final ToByteFunction<String>    optionalUserParser,
153            final ByteConsumer              c
154        )
155    {
156        Objects.requireNonNull(c, "ByteConsumer parameter 'c' is null");
157
158        ProcessJsonArray.numericToJava(
159            ja,
160            // new SettingsRec<Byte, Void>(
161            SETTINGS_REC_BUILDER.createForConsumers(
162                defaultValue,
163                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
164                (optionalUserParser == null) ? null : optionalUserParser::applyAsByte,
165                c::accept,
166                BASIC_TYPES.PRIMITIVE_BYTE()
167            ));
168    }
169
170    /**
171     * <EMBED CLASS=defs DATA-METH_NAME=numeric DATA-CONS_TYPE=Long DATA-PRIM_TYPE=long>
172     * <EMBED CLASS='external-html' DATA-TYPE=Long DATA-FILE-ID=RJ_ARR_INTO_PRIM_CONS>
173     */
174    @IntoHTMLTable(background=BlueDither,
175        title="Java-Consumer which accepts Primitive Long-Integers")
176    @LinkJavaSource(handle="BASIC_TYPES", name="LONG")
177    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForConsumers")
178    public static void longArr(
179            final JsonArray                 ja,
180            final long                      defaultValue,
181            final int                       FLAGS,
182            final ToLongFunction<String>    optionalUserParser,
183            final LongConsumer              c
184        )
185    {
186        Objects.requireNonNull(c, "LongConsumer parameter 'c' is null");
187
188        ProcessJsonArray.numericToJava(
189            ja,
190            // new SettingsRec<Long, Void>(
191            SETTINGS_REC_BUILDER.createForConsumers(
192                defaultValue,
193                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
194                (optionalUserParser == null) ? null : optionalUserParser::applyAsLong,
195                c::accept,
196                BASIC_TYPES.PRIMITIVE_LONG()
197            ));
198    }
199
200    /**
201     * <EMBED CLASS=defs DATA-METH_NAME=numeric DATA-CONS_TYPE=Double DATA-PRIM_TYPE=double>
202     * <EMBED CLASS='external-html' DATA-TYPE=Double DATA-FILE-ID=RJ_ARR_INTO_PRIM_CONS>
203     */
204    @IntoHTMLTable(background=GreenDither, title="Java-Consumer which accepts Primitive-Doubles")
205    @LinkJavaSource(handle="BASIC_TYPES", name="DOUBLE")
206    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForConsumers")
207    public static void doubleArr(
208            final JsonArray                 ja,
209            final double                    defaultValue,
210            final int                       FLAGS,
211            final ToDoubleFunction<String>  optionalUserParser,
212            final DoubleConsumer            c
213        )
214    {
215        Objects.requireNonNull(c, "DoubleConsumer parameter 'c' is null");
216
217        ProcessJsonArray.numericToJava(
218            ja,
219            // new SettingsRec<Double, Void>(
220            SETTINGS_REC_BUILDER.createForConsumers(
221                defaultValue,
222                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
223                (optionalUserParser == null) ? null : optionalUserParser::applyAsDouble,
224                c::accept,
225                BASIC_TYPES.PRIMITIVE_DOUBLE()
226            ));
227    }
228
229    /**
230     * <EMBED CLASS=defs DATA-METH_NAME=numeric DATA-CONS_TYPE=Float DATA-PRIM_TYPE=float>
231     * <EMBED CLASS='external-html' DATA-TYPE=Float DATA-FILE-ID=RJ_ARR_INTO_PRIM_CONS>
232     */
233    @IntoHTMLTable(background=BlueDither, title="Java-Consumer which accepts Primitive-Floats")
234    @LinkJavaSource(handle="BASIC_TYPES", name="FLOAT")
235    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForConsumers")
236    public static void floatArr(
237            final JsonArray                 ja,
238            final float                     defaultValue,
239            final int                       FLAGS,
240            final ToFloatFunction<String>   optionalUserParser,
241            final FloatConsumer             c
242        )
243    {
244        Objects.requireNonNull(c, "FloatConsumer parameter 'c' is null");
245
246        ProcessJsonArray.numericToJava(
247            ja,
248            // new SettingsRec<Float, Void>(
249            SETTINGS_REC_BUILDER.createForConsumers(
250                defaultValue,
251                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
252                (optionalUserParser == null) ? null : optionalUserParser::applyAsFloat,
253                c::accept,
254                BASIC_TYPES.PRIMITIVE_FLOAT()
255            ));
256    }
257
258    /**
259     * <EMBED CLASS=defs DATA-METH_NAME=boolean DATA-CONS_TYPE=Bool DATA-PRIM_TYPE=boolean>
260     * <EMBED CLASS='external-html' DATA-TYPE=Boolean DATA-FILE-ID=RJ_ARR_INTO_PRIM_CONS>
261     */
262    @IntoHTMLTable(background=GreenDither, title="Java-Consumer which accepts Primitive-Booleans")
263    @LinkJavaSource(handle="BASIC_TYPES", name="BOOLEAN")
264    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForConsumers")
265    public static void booleanArr(
266            final JsonArray         ja,
267            final boolean           defaultValue,
268            final int               FLAGS,
269            final Predicate<String> optionalUserParser,
270            final BoolConsumer      c
271        )
272    {
273        Objects.requireNonNull(c, "BoolConsumer parameter 'c' is null");
274
275        ProcessJsonArray.booleanToJava(
276            ja,
277            // new SettingsRec<Boolean, Void>(
278            SETTINGS_REC_BUILDER.createForConsumers(
279                defaultValue,
280                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
281                (optionalUserParser == null) ? null : optionalUserParser::test,
282                c::accept,
283                BASIC_TYPES.PRIMITIVE_BOOLEAN()
284            ));
285    }
286
287
288
289
290    // ********************************************************************************************
291    // ********************************************************************************************
292    // IntInt (w/ Array-Indices) Primitive-Consumer Variant
293    // ********************************************************************************************
294    // ********************************************************************************************
295
296
297
298
299    /** <EMBED CLASS='external-html' DATA-TYPE=Integer DATA-FILE-ID=RJ_ARR_INTO_PRIM_TRIINT> */
300    @IntoHTMLTable(
301        background=BlueDither,
302        title="Java-Consumer which accepts Primitive-Integers &amp; Array-Indices"
303    )
304    @LinkJavaSource(handle="BASIC_TYPES", name="INTEGER")
305    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForIIConsumers")
306    public static void intArr2(
307            final JsonArray             ja,
308            final int                   defaultValue,
309            final int                   FLAGS,
310            final ToIntFunction<String> optionalUserParser,
311            final TriIntCons            c
312        )
313    {
314        Objects.requireNonNull(c, "TriIntCons parameter 'c' is null");
315
316        ProcessJsonArray.numericToJava(
317            ja,
318            // new SettingsRec<Integer, Void>(
319            SETTINGS_REC_BUILDER.createForIIConsumers(
320                defaultValue,
321                FLAGS,
322                (optionalUserParser == null) ? null : optionalUserParser::applyAsInt,
323                c::accept,
324                BASIC_TYPES.PRIMITIVE_INTEGER()
325            ));
326    }
327
328    /**
329     * <EMBED CLASS=defs DATA-METH_NAME=numeric DATA-CONS_TYPE=Short DATA-PRIM_TYPE=short>
330     * <EMBED CLASS='external-html' DATA-TYPE=Short DATA-FILE-ID=RJ_ARR_INTO_PRIM_CONS2>
331     */
332    @IntoHTMLTable(
333        background=GreenDither,
334        title="Java-Consumer which accepts Primitive Short-Integers &amp; Array-Indices"
335    )
336    @LinkJavaSource(handle="BASIC_TYPES", name="SHORT")
337    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForIIConsumers")
338    public static void shortArr2(
339            final JsonArray                 ja,
340            final short                     defaultValue,
341            final int                       FLAGS,
342            final ToShortFunction<String>   optionalUserParser,
343            final IntIntShortCons           c
344        )
345    {
346        Objects.requireNonNull(c, "IntIntShortCons parameter 'c' is null");
347
348        ProcessJsonArray.numericToJava(
349            ja,
350            // new SettingsRec<Short, Void>(
351            SETTINGS_REC_BUILDER.createForIIConsumers(
352                defaultValue,
353                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
354                (optionalUserParser == null) ? null : optionalUserParser::applyAsShort,
355                c::accept,
356                BASIC_TYPES.PRIMITIVE_SHORT()
357            ));
358    }
359
360    /**
361     * <EMBED CLASS=defs DATA-METH_NAME=numeric DATA-CONS_TYPE=Byte DATA-PRIM_TYPE=byte>
362     * <EMBED CLASS='external-html' DATA-TYPE=Byte DATA-FILE-ID=RJ_ARR_INTO_PRIM_CONS2>
363     */
364    @IntoHTMLTable(
365        background=BlueDither,
366        title="Java-Consumer which accepts Primitive-Bytes &amp; Array-Indices"
367    )
368    @LinkJavaSource(handle="BASIC_TYPES", name="BYTE")
369    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForIIConsumers")
370    public static void byteArr2(
371            final JsonArray                 ja,
372            final byte                      defaultValue,
373            final int                       FLAGS,
374            final ToByteFunction<String>    optionalUserParser,
375            final IntIntByteCons            c
376        )
377    {
378        Objects.requireNonNull(c, "IntIntByteCons parameter 'c' is null");
379
380        ProcessJsonArray.numericToJava(
381            ja,
382            // new SettingsRec<Byte, Void>(
383            SETTINGS_REC_BUILDER.createForIIConsumers(
384                defaultValue,
385                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
386                (optionalUserParser == null) ? null : optionalUserParser::applyAsByte,
387                c::accept,
388                BASIC_TYPES.PRIMITIVE_BYTE()
389            ));
390    }
391
392    /**
393     * <EMBED CLASS=defs DATA-METH_NAME=numeric DATA-CONS_TYPE=Long DATA-PRIM_TYPE=long>
394     * <EMBED CLASS='external-html' DATA-TYPE=Long DATA-FILE-ID=RJ_ARR_INTO_PRIM_CONS2>
395     */
396    @IntoHTMLTable(
397        background=GreenDither,
398        title="Java-Consumer which accepts Primitive Long-Integers &amp; Array-Indices"
399    )
400    @LinkJavaSource(handle="BASIC_TYPES", name="LONG")
401    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForIIConsumers")
402    public static void longArr2(
403            final JsonArray                 ja,
404            final long                      defaultValue,
405            final int                       FLAGS,
406            final ToLongFunction<String>    optionalUserParser,
407            final IntIntLongCons            c
408        )
409    {
410        Objects.requireNonNull(c, "IntIntLongCons parameter 'c' is null");
411
412        ProcessJsonArray.numericToJava(
413            ja,
414            // new SettingsRec<Long, Void>(
415            SETTINGS_REC_BUILDER.createForIIConsumers(
416                defaultValue,
417                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
418                (optionalUserParser == null) ? null : optionalUserParser::applyAsLong,
419                c::accept,
420                BASIC_TYPES.PRIMITIVE_LONG()
421            ));
422    }
423
424    /**
425     * <EMBED CLASS=defs DATA-METH_NAME=numeric DATA-CONS_TYPE=Double DATA-PRIM_TYPE=double>
426     * <EMBED CLASS='external-html' DATA-TYPE=Double DATA-FILE-ID=RJ_ARR_INTO_PRIM_CONS2>
427     */
428    @IntoHTMLTable(
429        background=BlueDither,
430        title="Java-Consumer which accepts Primitive-Doubles &amp; Array-Indices"
431    )
432    @LinkJavaSource(handle="BASIC_TYPES", name="DOUBLE")
433    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForIIConsumers")
434    public static void doubleArr2(
435            final JsonArray                 ja,
436            final double                    defaultValue,
437            final int                       FLAGS,
438            final ToDoubleFunction<String>  optionalUserParser,
439            final IntIntDoubleCons          c
440        )
441    {
442        Objects.requireNonNull(c, "IntIntDoubleCons parameter 'c' is null");
443
444        ProcessJsonArray.numericToJava(
445            ja,
446            // new SettingsRec<Double, Void>(
447            SETTINGS_REC_BUILDER.createForIIConsumers(
448                defaultValue,
449                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
450                (optionalUserParser == null) ? null : optionalUserParser::applyAsDouble,
451                c::accept,
452                BASIC_TYPES.PRIMITIVE_DOUBLE()
453            ));
454    }
455
456    /**
457     * <EMBED CLASS=defs DATA-METH_NAME=numeric DATA-CONS_TYPE=Float DATA-PRIM_TYPE=float>
458     * <EMBED CLASS='external-html' DATA-TYPE=Float DATA-FILE-ID=RJ_ARR_INTO_PRIM_CONS2>
459     */
460    @IntoHTMLTable(
461        background=GreenDither,
462        title="Java-Consumer which accepts Primitive-Floats &amp; Array-Indices"
463    )
464    @LinkJavaSource(handle="BASIC_TYPES", name="FLOAT")
465    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForIIConsumers")
466    public static void floatArr2(
467            final JsonArray                 ja,
468            final float                     defaultValue,
469            final int                       FLAGS,
470            final ToFloatFunction<String>   optionalUserParser,
471            final IntIntFloatCons           c
472        )
473    {
474        Objects.requireNonNull(c, "IntIntFloatCons parameter 'c' is null");
475
476        ProcessJsonArray.numericToJava(
477            ja,
478            // new SettingsRec<Float, Void>(
479            SETTINGS_REC_BUILDER.createForIIConsumers(
480                defaultValue,
481                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
482                (optionalUserParser == null) ? null : optionalUserParser::applyAsFloat,
483                c::accept,
484                BASIC_TYPES.PRIMITIVE_FLOAT()
485            ));
486    }
487
488    /**
489     * <EMBED CLASS=defs DATA-METH_NAME=boolean DATA-CONS_TYPE=Bool DATA-PRIM_TYPE=boolean>
490     * <EMBED CLASS='external-html' DATA-TYPE=Boolean DATA-FILE-ID=RJ_ARR_INTO_PRIM_CONS2>
491     */
492    @IntoHTMLTable(
493        background=BlueDither,
494        title="Java-Consumer which accepts Primitive-Booleans &amp; Array-Indices"
495    )
496    @LinkJavaSource(handle="BASIC_TYPES", name="BOOLEAN")
497    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForIIConsumers")
498    public static void booleanArr2(
499            final JsonArray             ja,
500            final boolean               defaultValue,
501            final int                   FLAGS,
502            final Predicate<String>     optionalUserParser,
503            final IntIntBoolCons        c
504        )
505    {
506        Objects.requireNonNull(c, "IntIntBoolCons parameter 'c' is null");
507
508        ProcessJsonArray.booleanToJava(
509            ja,
510            // new SettingsRec<Boolean, Void>(
511            SETTINGS_REC_BUILDER.createForIIConsumers(
512                defaultValue,
513                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
514                (optionalUserParser == null) ? null : optionalUserParser::test,
515                c::accept,
516                BASIC_TYPES.PRIMITIVE_BOOLEAN()
517            ));
518    }
519
520
521}