001package Torello.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.Annotations.StaticFunctional;
042import Torello.JavaDoc.Annotations.LinkJavaSource;
043import Torello.JavaDoc.Annotations.JDHeaderBackgroundImg;
044
045import Torello.JavaDoc.Annotations.IntoHTMLTable;
046import static Torello.JavaDoc.Annotations.IntoHTMLTable.Background.GreenDither;
047import static Torello.JavaDoc.Annotations.IntoHTMLTable.Background.BlueDither;
048
049import Torello.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.JSON.JFlag.NOT_ALLOWED_RET_NULL_MASKS;
062import static Torello.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=ALL_CLASSES_NOTE>
070 * <EMBED CLASS='external-html' DATA-FILE-ID=RJA_INTO_PRIM_CONS>
071 * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_PT_PRIM_CONS>
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="oneArgConsumer")
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 SETTINGS_REC_BUILDER<Integer, Void>(
102                defaultValue,
103                FLAGS,
104                (optionalUserParser == null) ? null : optionalUserParser::applyAsInt,
105                BASIC_TYPES.PRIMITIVE_INTEGER()
106            )
107            .oneArgConsumer(c::accept)
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(
116        background=BlueDither,
117        title="Java-Consumer which accepts Primitive Short-Integers"
118    )
119    @LinkJavaSource(handle="BASIC_TYPES", name="SHORT")
120    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="oneArgConsumer")
121    public static void shortArr(
122            final JsonArray                 ja,
123            final short                     defaultValue,
124            final int                       FLAGS,
125            final ToShortFunction<String>   optionalUserParser,
126            final ShortConsumer             c
127        )
128    {
129        Objects.requireNonNull(c, "ShortConsumer parameter 'c' is null");
130
131        ProcessJsonArray.numericToJava(
132            ja,
133            new SETTINGS_REC_BUILDER<Short, Void>(
134                defaultValue,
135                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
136                (optionalUserParser == null) ? null : optionalUserParser::applyAsShort,
137                BASIC_TYPES.PRIMITIVE_SHORT()
138            )
139            .oneArgConsumer(c::accept)
140        );
141    }
142
143    /**
144     * <EMBED CLASS=defs DATA-METH_NAME=numeric DATA-CONS_TYPE=Byte DATA-PRIM_TYPE=byte>
145     * <EMBED CLASS='external-html' DATA-TYPE=Byte DATA-FILE-ID=RJ_ARR_INTO_PRIM_CONS>
146     */
147    @IntoHTMLTable(background=GreenDither, title="Java-Consumer which accepts Primitive-Bytes")
148    @LinkJavaSource(handle="BASIC_TYPES", name="BYTE")
149    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="oneArgConsumer")
150    public static void byteArr(
151            final JsonArray                 ja,
152            final byte                      defaultValue,
153            final int                       FLAGS,
154            final ToByteFunction<String>    optionalUserParser,
155            final ByteConsumer              c
156        )
157    {
158        Objects.requireNonNull(c, "ByteConsumer parameter 'c' is null");
159
160        ProcessJsonArray.numericToJava(
161            ja,
162            new SETTINGS_REC_BUILDER<Byte, Void>(
163                defaultValue,
164                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
165                (optionalUserParser == null) ? null : optionalUserParser::applyAsByte,
166                BASIC_TYPES.PRIMITIVE_BYTE()
167            )
168            .oneArgConsumer(c::accept)
169        );
170    }
171
172    /**
173     * <EMBED CLASS=defs DATA-METH_NAME=numeric DATA-CONS_TYPE=Long DATA-PRIM_TYPE=long>
174     * <EMBED CLASS='external-html' DATA-TYPE=Long DATA-FILE-ID=RJ_ARR_INTO_PRIM_CONS>
175     */
176    @IntoHTMLTable(
177        background=BlueDither,
178        title="Java-Consumer which accepts Primitive Long-Integers"
179    )
180    @LinkJavaSource(handle="BASIC_TYPES", name="LONG")
181    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="oneArgConsumer")
182    public static void longArr(
183            final JsonArray                 ja,
184            final long                      defaultValue,
185            final int                       FLAGS,
186            final ToLongFunction<String>    optionalUserParser,
187            final LongConsumer              c
188        )
189    {
190        Objects.requireNonNull(c, "LongConsumer parameter 'c' is null");
191
192        ProcessJsonArray.numericToJava(
193            ja,
194            new SETTINGS_REC_BUILDER<Long, Void>(
195                defaultValue,
196                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
197                (optionalUserParser == null) ? null : optionalUserParser::applyAsLong,
198                BASIC_TYPES.PRIMITIVE_LONG()
199            )
200            .oneArgConsumer(c::accept)
201        );
202    }
203
204    /**
205     * <EMBED CLASS=defs DATA-METH_NAME=numeric DATA-CONS_TYPE=Double DATA-PRIM_TYPE=double>
206     * <EMBED CLASS='external-html' DATA-TYPE=Double DATA-FILE-ID=RJ_ARR_INTO_PRIM_CONS>
207     */
208    @IntoHTMLTable(background=GreenDither, title="Java-Consumer which accepts Primitive-Doubles")
209    @LinkJavaSource(handle="BASIC_TYPES", name="DOUBLE")
210    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="oneArgConsumer")
211    public static void doubleArr(
212            final JsonArray                 ja,
213            final double                    defaultValue,
214            final int                       FLAGS,
215            final ToDoubleFunction<String>  optionalUserParser,
216            final DoubleConsumer            c
217        )
218    {
219        Objects.requireNonNull(c, "DoubleConsumer parameter 'c' is null");
220
221        ProcessJsonArray.numericToJava(
222            ja,
223            new SETTINGS_REC_BUILDER<Double, Void>(
224                defaultValue,
225                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
226                (optionalUserParser == null) ? null : optionalUserParser::applyAsDouble,
227                BASIC_TYPES.PRIMITIVE_DOUBLE()
228            )
229            .oneArgConsumer(c::accept)
230        );
231    }
232
233    /**
234     * <EMBED CLASS=defs DATA-METH_NAME=numeric DATA-CONS_TYPE=Float DATA-PRIM_TYPE=float>
235     * <EMBED CLASS='external-html' DATA-TYPE=Float DATA-FILE-ID=RJ_ARR_INTO_PRIM_CONS>
236     */
237    @IntoHTMLTable(background=BlueDither, title="Java-Consumer which accepts Primitive-Floats")
238    @LinkJavaSource(handle="BASIC_TYPES", name="FLOAT")
239    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="oneArgConsumer")
240    public static void floatArr(
241            final JsonArray                 ja,
242            final float                     defaultValue,
243            final int                       FLAGS,
244            final ToFloatFunction<String>   optionalUserParser,
245            final FloatConsumer             c
246        )
247    {
248        Objects.requireNonNull(c, "FloatConsumer parameter 'c' is null");
249
250        ProcessJsonArray.numericToJava(
251            ja,
252            new SETTINGS_REC_BUILDER<Float, Void>(
253                defaultValue,
254                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
255                (optionalUserParser == null) ? null : optionalUserParser::applyAsFloat,
256                BASIC_TYPES.PRIMITIVE_FLOAT()
257            )
258            .oneArgConsumer(c::accept)   
259        );
260    }
261
262    /**
263     * <EMBED CLASS=defs DATA-METH_NAME=boolean DATA-CONS_TYPE=Bool DATA-PRIM_TYPE=boolean>
264     * <EMBED CLASS='external-html' DATA-TYPE=Boolean DATA-FILE-ID=RJ_ARR_INTO_PRIM_CONS>
265     */
266    @IntoHTMLTable(background=GreenDither, title="Java-Consumer which accepts Primitive-Booleans")
267    @LinkJavaSource(handle="BASIC_TYPES", name="BOOLEAN")
268    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="oneArgConsumer")
269    public static void booleanArr(
270            final JsonArray         ja,
271            final boolean           defaultValue,
272            final int               FLAGS,
273            final Predicate<String> optionalUserParser,
274            final BoolConsumer      c
275        )
276    {
277        Objects.requireNonNull(c, "BoolConsumer parameter 'c' is null");
278
279        ProcessJsonArray.booleanToJava(
280            ja,
281            new SETTINGS_REC_BUILDER<Boolean, Void>(
282                defaultValue,
283                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
284                (optionalUserParser == null) ? null : optionalUserParser::test,
285                BASIC_TYPES.PRIMITIVE_BOOLEAN()
286            )
287            .oneArgConsumer(c::accept)   
288        );
289    }
290
291
292
293
294    // ********************************************************************************************
295    // ********************************************************************************************
296    // IntInt (w/ Array-Indices) Primitive-Consumer Variant
297    // ********************************************************************************************
298    // ********************************************************************************************
299
300
301
302
303    /** <EMBED CLASS='external-html' DATA-TYPE=Integer DATA-FILE-ID=RJ_ARR_INTO_PRIM_TRIINT> */
304    @IntoHTMLTable(
305        background=BlueDither,
306        title="Java-Consumer which accepts Primitive-Integers &amp; Array-Indices"
307    )
308    @LinkJavaSource(handle="BASIC_TYPES", name="INTEGER")
309    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="threeArgConsumer")
310    public static void intArr2(
311            final JsonArray             ja,
312            final int                   defaultValue,
313            final int                   FLAGS,
314            final ToIntFunction<String> optionalUserParser,
315            final TriIntCons            c
316        )
317    {
318        Objects.requireNonNull(c, "TriIntCons parameter 'c' is null");
319
320        ProcessJsonArray.numericToJava(
321            ja,
322            new SETTINGS_REC_BUILDER<Integer, Void>(
323                defaultValue,
324                FLAGS,
325                (optionalUserParser == null) ? null : optionalUserParser::applyAsInt,
326                BASIC_TYPES.PRIMITIVE_INTEGER()
327            )
328            .threeArgConsumer(c::accept)
329        );
330    }
331
332    /**
333     * <EMBED CLASS=defs DATA-METH_NAME=numeric DATA-CONS_TYPE=Short DATA-PRIM_TYPE=short>
334     * <EMBED CLASS='external-html' DATA-TYPE=Short DATA-FILE-ID=RJ_ARR_INTO_PRIM_CONS2>
335     */
336    @IntoHTMLTable(
337        background=GreenDither,
338        title="Java-Consumer which accepts Primitive Short-Integers &amp; Array-Indices"
339    )
340    @LinkJavaSource(handle="BASIC_TYPES", name="SHORT")
341    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="threeArgConsumer")
342    public static void shortArr2(
343            final JsonArray                 ja,
344            final short                     defaultValue,
345            final int                       FLAGS,
346            final ToShortFunction<String>   optionalUserParser,
347            final IntIntShortCons           c
348        )
349    {
350        Objects.requireNonNull(c, "IntIntShortCons parameter 'c' is null");
351
352        ProcessJsonArray.numericToJava(
353            ja,
354            new SETTINGS_REC_BUILDER<Short, Void>(
355                defaultValue,
356                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
357                (optionalUserParser == null) ? null : optionalUserParser::applyAsShort,
358                BASIC_TYPES.PRIMITIVE_SHORT()
359            )
360            .threeArgConsumer(c::accept)
361        );
362    }
363
364    /**
365     * <EMBED CLASS=defs DATA-METH_NAME=numeric DATA-CONS_TYPE=Byte DATA-PRIM_TYPE=byte>
366     * <EMBED CLASS='external-html' DATA-TYPE=Byte DATA-FILE-ID=RJ_ARR_INTO_PRIM_CONS2>
367     */
368    @IntoHTMLTable(
369        background=BlueDither,
370        title="Java-Consumer which accepts Primitive-Bytes &amp; Array-Indices"
371    )
372    @LinkJavaSource(handle="BASIC_TYPES", name="BYTE")
373    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="threeArgConsumer")
374    public static void byteArr2(
375            final JsonArray                 ja,
376            final byte                      defaultValue,
377            final int                       FLAGS,
378            final ToByteFunction<String>    optionalUserParser,
379            final IntIntByteCons            c
380        )
381    {
382        Objects.requireNonNull(c, "IntIntByteCons parameter 'c' is null");
383
384        ProcessJsonArray.numericToJava(
385            ja,
386            new SETTINGS_REC_BUILDER<Byte, Void>(
387                defaultValue,
388                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
389                (optionalUserParser == null) ? null : optionalUserParser::applyAsByte,
390                BASIC_TYPES.PRIMITIVE_BYTE()
391            )
392            .threeArgConsumer(c::accept)
393        );
394    }
395
396    /**
397     * <EMBED CLASS=defs DATA-METH_NAME=numeric DATA-CONS_TYPE=Long DATA-PRIM_TYPE=long>
398     * <EMBED CLASS='external-html' DATA-TYPE=Long DATA-FILE-ID=RJ_ARR_INTO_PRIM_CONS2>
399     */
400    @IntoHTMLTable(
401        background=GreenDither,
402        title="Java-Consumer which accepts Primitive Long-Integers &amp; Array-Indices"
403    )
404    @LinkJavaSource(handle="BASIC_TYPES", name="LONG")
405    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="threeArgConsumer")
406    public static void longArr2(
407            final JsonArray                 ja,
408            final long                      defaultValue,
409            final int                       FLAGS,
410            final ToLongFunction<String>    optionalUserParser,
411            final IntIntLongCons            c
412        )
413    {
414        Objects.requireNonNull(c, "IntIntLongCons parameter 'c' is null");
415
416        ProcessJsonArray.numericToJava(
417            ja,
418            new SETTINGS_REC_BUILDER<Long, Void>(
419                defaultValue,
420                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
421                (optionalUserParser == null) ? null : optionalUserParser::applyAsLong,
422                BASIC_TYPES.PRIMITIVE_LONG()
423            )
424            .threeArgConsumer(c::accept)
425        );
426    }
427
428    /**
429     * <EMBED CLASS=defs DATA-METH_NAME=numeric DATA-CONS_TYPE=Double DATA-PRIM_TYPE=double>
430     * <EMBED CLASS='external-html' DATA-TYPE=Double DATA-FILE-ID=RJ_ARR_INTO_PRIM_CONS2>
431     */
432    @IntoHTMLTable(
433        background=BlueDither,
434        title="Java-Consumer which accepts Primitive-Doubles &amp; Array-Indices"
435    )
436    @LinkJavaSource(handle="BASIC_TYPES", name="DOUBLE")
437    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="threeArgConsumer")
438    public static void doubleArr2(
439            final JsonArray                 ja,
440            final double                    defaultValue,
441            final int                       FLAGS,
442            final ToDoubleFunction<String>  optionalUserParser,
443            final IntIntDoubleCons          c
444        )
445    {
446        Objects.requireNonNull(c, "IntIntDoubleCons parameter 'c' is null");
447
448        ProcessJsonArray.numericToJava(
449            ja,
450            new SETTINGS_REC_BUILDER<Double, Void>(
451                defaultValue,
452                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
453                (optionalUserParser == null) ? null : optionalUserParser::applyAsDouble,
454                BASIC_TYPES.PRIMITIVE_DOUBLE()
455            )
456            .threeArgConsumer(c::accept)
457        );
458    }
459
460    /**
461     * <EMBED CLASS=defs DATA-METH_NAME=numeric DATA-CONS_TYPE=Float DATA-PRIM_TYPE=float>
462     * <EMBED CLASS='external-html' DATA-TYPE=Float DATA-FILE-ID=RJ_ARR_INTO_PRIM_CONS2>
463     */
464    @IntoHTMLTable(
465        background=GreenDither,
466        title="Java-Consumer which accepts Primitive-Floats &amp; Array-Indices"
467    )
468    @LinkJavaSource(handle="BASIC_TYPES", name="FLOAT")
469    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="threeArgConsumer")
470    public static void floatArr2(
471            final JsonArray                 ja,
472            final float                     defaultValue,
473            final int                       FLAGS,
474            final ToFloatFunction<String>   optionalUserParser,
475            final IntIntFloatCons           c
476        )
477    {
478        Objects.requireNonNull(c, "IntIntFloatCons parameter 'c' is null");
479
480        ProcessJsonArray.numericToJava(
481            ja,
482            new SETTINGS_REC_BUILDER<Float, Void>(
483                defaultValue,
484                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
485                (optionalUserParser == null) ? null : optionalUserParser::applyAsFloat,
486                BASIC_TYPES.PRIMITIVE_FLOAT()
487            )
488            .threeArgConsumer(c::accept)
489        );
490    }
491
492    /**
493     * <EMBED CLASS=defs DATA-METH_NAME=boolean DATA-CONS_TYPE=Bool DATA-PRIM_TYPE=boolean>
494     * <EMBED CLASS='external-html' DATA-TYPE=Boolean DATA-FILE-ID=RJ_ARR_INTO_PRIM_CONS2>
495     */
496    @IntoHTMLTable(
497        background=BlueDither,
498        title="Java-Consumer which accepts Primitive-Booleans &amp; Array-Indices"
499    )
500    @LinkJavaSource(handle="BASIC_TYPES", name="BOOLEAN")
501    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="threeArgConsumer")
502    public static void booleanArr2(
503            final JsonArray             ja,
504            final boolean               defaultValue,
505            final int                   FLAGS,
506            final Predicate<String>     optionalUserParser,
507            final IntIntBoolCons        c
508        )
509    {
510        Objects.requireNonNull(c, "IntIntBoolCons parameter 'c' is null");
511
512        ProcessJsonArray.booleanToJava(
513            ja,
514            new SETTINGS_REC_BUILDER<Boolean, Void>(
515                defaultValue,
516                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
517                (optionalUserParser == null) ? null : optionalUserParser::test,
518                BASIC_TYPES.PRIMITIVE_BOOLEAN()
519            )
520            .threeArgConsumer(c::accept)
521        );
522    }
523
524}