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