001package Torello.Java.JSON;
002
003import Torello.Java.StringParse;
004import Torello.Java.UnreachableError;
005
006import Torello.Java.Additional.Ret3;
007import Torello.Java.Additional.EffectivelyFinal;
008import Torello.Java.Additional.Counter;
009
010import Torello.Java.Function.ToByteFunction;
011import Torello.Java.Function.ToFloatFunction;
012import Torello.Java.Function.ToShortFunction;
013
014import Torello.JavaDoc.StaticFunctional;
015import Torello.JavaDoc.JDHeaderBackgroundImg;
016import Torello.JavaDoc.LinkJavaSource;
017
018import Torello.JavaDoc.IntoHTMLTable;
019import static Torello.JavaDoc.IntoHTMLTable.Background.GreenDither;
020import static Torello.JavaDoc.IntoHTMLTable.Background.BlueDither;
021
022import java.util.Objects;
023
024import java.util.stream.Stream;
025import java.util.stream.IntStream;
026import java.util.stream.LongStream;
027import java.util.stream.DoubleStream;
028
029import java.util.function.ToIntFunction;
030import java.util.function.ToLongFunction;
031import java.util.function.ToDoubleFunction;
032import java.util.function.Predicate;
033import java.util.function.Function;
034
035import javax.json.JsonArray;
036import javax.json.Json;
037
038import static Torello.Java.JSON.JFlag.NOT_ALLOWED_RET_NULL_MASKS;
039
040
041/**
042 * Parses Multi-Dimensional JSON Array's into Multi-Dimensional Java Array's.
043 * 
044 * <EMBED CLASS='external-html' DATA-FILE-ID=GLASS_FISH_NOTE>
045 * <EMBED CLASS='external-html' DATA-FILE-ID=RJA_DIM_N>
046 * <EMBED CLASS='external-html' DATA-FILE-ID=JSON_BINDING_NOTE>
047 * 
048 * <BR /><HR> <BR />
049 * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_DIMN>
050 * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_PT_DIMN>
051 *
052 * <EMBED CLASS=globalDefs DATA-A_AN=A>
053 * @see Json
054 * @see JsonArray
055 */
056@StaticFunctional
057@JDHeaderBackgroundImg(EmbedTagFileID="RJA_JDHBI_DIM_N")
058public class RJArrDimN
059{
060    private RJArrDimN() { }
061
062
063    private static final boolean REFERENCE_1D_ARRAY = true;
064    private static final boolean BOXED_1D_ARRAY     = true;
065    private static final boolean PRIMITIVE_1D_ARRAY = false;
066
067
068    // ********************************************************************************************
069    // ********************************************************************************************
070    // Primitive Multi-Dimensional Array Methods
071    // ********************************************************************************************
072    // ********************************************************************************************
073
074
075    /**
076     * <EMBED CLASS=defs DATA-A_AN=An DATA-TYPE=int DATA-DEFVAL="-1">
077     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_DIMN_METH_PRIM>
078     */
079    @IntoHTMLTable(background=GreenDither, title="Multi-Dimensional Array of Primitive-Integers")
080    @LinkJavaSource(handle="BASIC_TYPES", name="INTEGER")
081    @LinkJavaSource(handle="STREAM_BUILDER", name="intStream")
082    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForDimNArrays")
083    public static <T> T intArr(
084            final JsonArray             ja,
085            final int                   defaultValue,
086            final int                   FLAGS,
087            final ToIntFunction<String> optionalUserParser,
088            final Class<T>              retArrClass
089        )
090    {
091        return ProcessMultiDimJsonArray.jsonArrayToJava(
092            ja,
093            // new SettingsRec<Integer, IntStream>(
094            SETTINGS_REC_BUILDER.createForDimNArrays(
095                defaultValue,
096                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
097                (optionalUserParser == null) ? null : optionalUserParser::applyAsInt,
098                BASIC_TYPES.PRIMITIVE_INTEGER(),
099                STREAM_BUILDER.intStream(),
100                PRIMITIVE_1D_ARRAY
101            ),
102            retArrClass
103        );
104    }
105
106    /**
107     * <EMBED CLASS=defs DATA-TYPE=long DATA-DEFVAL="-1">
108     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_DIMN_METH_PRIM>
109     */
110    @IntoHTMLTable(background=BlueDither,
111        title="Multi-Dimensional Array of Primitive Long-Integers")
112    @LinkJavaSource(handle="BASIC_TYPES", name="LONG")
113    @LinkJavaSource(handle="STREAM_BUILDER", name="longStream")
114    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForDimNArrays")
115    public static <T> T longArr(
116            final JsonArray                 ja,
117            final long                      defaultValue,
118            final int                       FLAGS,
119            final ToLongFunction<String>    optionalUserParser,
120            final Class<T>                  retArrClass
121        )
122    {
123        return ProcessMultiDimJsonArray.jsonArrayToJava(
124            ja,
125            // new SettingsRec<Long, LongStream>(
126            SETTINGS_REC_BUILDER.createForDimNArrays(
127                defaultValue,
128                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
129                (optionalUserParser == null) ? null : optionalUserParser::applyAsLong,
130                BASIC_TYPES.PRIMITIVE_LONG(),
131                STREAM_BUILDER.longStream(),
132                PRIMITIVE_1D_ARRAY
133            ),
134            retArrClass
135        );
136    }
137
138    /**
139     * <EMBED CLASS=defs DATA-TYPE=double DATA-DEFVAL="-1.0">
140     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_DIMN_METH_PRIM>
141     */
142    @IntoHTMLTable(background=GreenDither,
143        title="Multi-Dimensional Array of Primitive-Doubles")
144    @LinkJavaSource(handle="BASIC_TYPES", name="DOUBLE")
145    @LinkJavaSource(handle="STREAM_BUILDER", name="doubleStream")
146    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForDimNArrays")
147    public static <T> T doubleArr(
148            final JsonArray                 ja,
149            final double                    defaultValue,
150            final int                       FLAGS,
151            final ToDoubleFunction<String>  optionalUserParser,
152            final Class<T>                  retArrClass
153        )
154    {
155        return ProcessMultiDimJsonArray.jsonArrayToJava(
156            ja,
157            // new SettingsRec<Double, DoubleStream>(
158            SETTINGS_REC_BUILDER.createForDimNArrays(
159                defaultValue,
160                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,    
161                (optionalUserParser == null) ? null : optionalUserParser::applyAsDouble,
162                BASIC_TYPES.PRIMITIVE_DOUBLE(),
163                STREAM_BUILDER.doubleStream(),
164                PRIMITIVE_1D_ARRAY
165            ),
166            retArrClass
167        );
168    }
169
170    /**
171     * <EMBED CLASS=defs DATA-TYPE=short DATA-DEFVAL="-1">
172     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_DIMN_METH_PRIM>
173     */
174    @IntoHTMLTable(background=BlueDither,
175        title="Multi-Dimensional Array of Primitive Short-Integers")
176    @LinkJavaSource(handle="BASIC_TYPES", name="SHORT")
177    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
178    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForDimNArrays")
179    public static <T> T shortArr(
180            final JsonArray                 ja,
181            final short                     defaultValue,
182            final int                       FLAGS,
183            final ToShortFunction<String>   optionalUserParser,
184            final Class<T>                  retArrClass
185        )
186    {
187        return ProcessMultiDimJsonArray.jsonArrayToJava(
188            ja,
189            // new SettingsRec<Short, Stream<Short>>(
190            SETTINGS_REC_BUILDER.createForDimNArrays(
191                defaultValue,
192                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,    
193                (optionalUserParser == null) ? null : optionalUserParser::applyAsShort,
194                BASIC_TYPES.BOXED_SHORT(),
195                STREAM_BUILDER.normalStream(),
196                PRIMITIVE_1D_ARRAY
197            ),
198            retArrClass
199        );
200    }
201
202    /**
203     * <EMBED CLASS=defs DATA-TYPE=byte DATA-DEFVAL="-1">
204     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_DIMN_METH_PRIM>
205     */
206    @IntoHTMLTable(background=GreenDither,
207        title="Multi-Dimensional Array of Primitive-Bytes")
208    @LinkJavaSource(handle="BASIC_TYPES", name="BYTE")
209    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
210    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForDimNArrays")
211    public static <T> T byteArr(
212            final JsonArray                 ja,
213            final byte                      defaultValue,
214            final int                       FLAGS,
215            final ToByteFunction<String>    optionalUserParser,
216            final Class<T>                  retArrClass
217        )
218    {
219        return ProcessMultiDimJsonArray.jsonArrayToJava(
220            ja,
221            // new SettingsRec<Byte, Stream<Byte>>(
222            SETTINGS_REC_BUILDER.createForDimNArrays(
223                defaultValue,
224                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,    
225                (optionalUserParser == null) ? null : optionalUserParser::applyAsByte,
226                BASIC_TYPES.BOXED_BYTE(),
227                STREAM_BUILDER.normalStream(),
228                PRIMITIVE_1D_ARRAY
229            ),
230            retArrClass
231        );
232    }
233
234    /**
235     * <EMBED CLASS=defs DATA-TYPE=float DATA-DEFVAL="-1.0f">
236     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_DIMN_METH_PRIM>
237     */
238    @IntoHTMLTable(background=BlueDither,
239        title="Multi-Dimensional Array of Primitive-Floats")
240    @LinkJavaSource(handle="BASIC_TYPES", name="FLOAT")
241    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
242    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForDimNArrays")
243    public static <T> T floatArr(
244            final JsonArray                 ja,
245            final float                     defaultValue,
246            final int                       FLAGS,
247            final ToFloatFunction<String>   optionalUserParser,
248            final Class<T>                  retArrClass
249        )
250    {
251        return ProcessMultiDimJsonArray.jsonArrayToJava(
252            ja,
253            // new SettingsRec<Float, Stream<Float>>(
254            SETTINGS_REC_BUILDER.createForDimNArrays(
255                defaultValue,
256                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,    
257                (optionalUserParser == null) ? null : optionalUserParser::applyAsFloat,
258                BASIC_TYPES.BOXED_FLOAT(),
259                STREAM_BUILDER.normalStream(),
260                PRIMITIVE_1D_ARRAY
261            ),
262            retArrClass
263        );
264    }
265
266    /**
267     * <EMBED CLASS=defs DATA-TYPE=boolean DATA-DEFVAL="false">
268     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_DIMN_METH_PRIM>
269     */
270    @IntoHTMLTable(background=GreenDither, title="Multi-Dimensional Array of Primitive-Booleans")
271    @LinkJavaSource(handle="BASIC_TYPES", name="BOOLEAN")
272    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
273    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForDimNArrays")
274    public static <T> T booleanArr(
275            final JsonArray         ja,
276            final boolean           defaultValue,
277            final int               FLAGS,
278            final Predicate<String> optionalUserParser,
279            final Class<T>          retArrClass
280        )
281    {
282        return ProcessMultiDimJsonArray.jsonArrayToJava(
283            ja,
284            // new SettingsRec<Boolean, Stream<Boolean>>(
285            SETTINGS_REC_BUILDER.createForDimNArrays(
286                defaultValue,
287                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,    
288                (optionalUserParser == null) ? null : optionalUserParser::test,
289                BASIC_TYPES.BOXED_BOOLEAN(),
290                STREAM_BUILDER.normalStream(),
291                PRIMITIVE_1D_ARRAY
292            ),
293            retArrClass
294        );
295    }
296
297
298    // ********************************************************************************************
299    // ********************************************************************************************
300    // Boxed-Primitive Multi-Dimensional Array Methods
301    // ********************************************************************************************
302    // ********************************************************************************************
303
304
305    /**
306     * <EMBED CLASS=defs DATA-A_AN=An DATA-TYPE=Integer DATA-METH_NAME=INTEGER DATA-DEF_VAL="-1">
307     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_DIMN_METH_BOXED>
308     */
309    @IntoHTMLTable(background=BlueDither, title="Multi-Dimensional Array of Boxed-Integers")
310    @LinkJavaSource(handle="BASIC_TYPES", name="INTEGER")
311    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
312    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForDimNArrays")
313    public static <T> T arrINTEGER(
314            final JsonArray                 ja,
315            final int                       defaultValue,
316            final int                       FLAGS,
317            final Function<String, Integer> optionalUserParser,
318            final Class<T>                  retArrClass
319        )
320    {
321        return ProcessMultiDimJsonArray.jsonArrayToJava(
322            ja,
323            // new SettingsRec<Integer, Stream<Integer>>(
324            SETTINGS_REC_BUILDER.createForDimNArrays(
325                defaultValue,
326                FLAGS,
327                optionalUserParser,
328                BASIC_TYPES.BOXED_INTEGER(),
329                STREAM_BUILDER.normalStream(),
330                BOXED_1D_ARRAY
331            ),
332            retArrClass
333        );
334    }
335
336    /**
337     * <EMBED CLASS=defs DATA-TYPE=Long DATA-METH_NAME=LONG DATA-DEF_VAL="-1">
338     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_DIMN_METH_BOXED>
339     */
340    @IntoHTMLTable(background=GreenDither, title="Multi-Dimensional Array of Boxed Long-Integers")
341    @LinkJavaSource(handle="BASIC_TYPES", name="LONG")
342    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
343    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForDimNArrays")
344    public static <T> T arrLONG(
345            final JsonArray                 ja,
346            final long                      defaultValue,
347            final int                       FLAGS,
348            final Function<String, Long>    optionalUserParser,
349            final Class<T>                  retArrClass
350        )
351    {
352        return ProcessMultiDimJsonArray.jsonArrayToJava(
353            ja,
354            // new SettingsRec<Long, Stream<Long>>(
355            SETTINGS_REC_BUILDER.createForDimNArrays(
356                defaultValue,
357                FLAGS,
358                optionalUserParser,
359                BASIC_TYPES.BOXED_LONG(),
360                STREAM_BUILDER.normalStream(),
361                BOXED_1D_ARRAY
362            ),
363            retArrClass
364        );
365    }
366
367    /**
368     * <EMBED CLASS=defs DATA-TYPE=Double DATA-METH_NAME=DOUBLE DATA-DEF_VAL="-1.0">
369     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_DIMN_METH_BOXED>
370     */
371    @IntoHTMLTable(background=BlueDither, title="Multi-Dimensional Array of Boxed-Doubles")
372    @LinkJavaSource(handle="BASIC_TYPES", name="DOUBLE")
373    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
374    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForDimNArrays")
375    public static <T> T arrDOUBLE(
376            final JsonArray                 ja,
377            final double                    defaultValue,
378            final int                       FLAGS,
379            final Function<String, Double>  optionalUserParser,
380            final Class<T>                  retArrClass
381        )
382    {
383        return ProcessMultiDimJsonArray.jsonArrayToJava(
384            ja,
385            // new SettingsRec<Double, Stream<Double>>(
386            SETTINGS_REC_BUILDER.createForDimNArrays(
387                defaultValue,
388                FLAGS,
389                optionalUserParser,
390                BASIC_TYPES.BOXED_DOUBLE(),
391                STREAM_BUILDER.normalStream(),
392                BOXED_1D_ARRAY
393            ),
394            retArrClass
395        );
396    }
397
398    /**
399     * <EMBED CLASS=defs DATA-TYPE=Short DATA-METH_NAME=SHORT DATA-DEF_VAL="-1">
400     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_DIMN_METH_BOXED>
401     */
402    @IntoHTMLTable(background=GreenDither, title="Multi-Dimensional Array of Boxed Short-Integers")
403    @LinkJavaSource(handle="BASIC_TYPES", name="SHORT")
404    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
405    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForDimNArrays")
406    public static <T> T arrSHORT(
407            final JsonArray                 ja,
408            final short                     defaultValue,
409            final int                       FLAGS,
410            final Function<String, Short>   optionalUserParser,
411            final Class<T>                  retArrClass
412        )
413    {
414        return ProcessMultiDimJsonArray.jsonArrayToJava(
415            ja,
416            // new SettingsRec<Short, Stream<Short>>(
417            SETTINGS_REC_BUILDER.createForDimNArrays(
418                defaultValue,
419                FLAGS,
420                optionalUserParser,
421                BASIC_TYPES.BOXED_SHORT(),
422                STREAM_BUILDER.normalStream(),
423                BOXED_1D_ARRAY
424            ),
425            retArrClass
426        );
427    }
428
429    /**
430     * <EMBED CLASS=defs DATA-TYPE=Byte DATA-METH_NAME=BYTE DATA-DEF_VAL="-1">
431     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_DIMN_METH_BOXED>
432     */
433    @IntoHTMLTable(background=BlueDither, title="Multi-Dimensional Array of Boxed-Bytes")
434    @LinkJavaSource(handle="BASIC_TYPES", name="BYTE")
435    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
436    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForDimNArrays")
437    public static <T> T arrBYTE(
438            final JsonArray                 ja,
439            final byte                      defaultValue,
440            final int                       FLAGS,
441            final Function<String, Byte>    optionalUserParser,
442            final Class<T>                  retArrClass
443        )
444    {
445        return ProcessMultiDimJsonArray.jsonArrayToJava(
446            ja,
447            // new SettingsRec<Byte, Stream<Byte>>(
448            SETTINGS_REC_BUILDER.createForDimNArrays(
449                defaultValue,
450                FLAGS,
451                optionalUserParser,
452                BASIC_TYPES.BOXED_BYTE(),
453                STREAM_BUILDER.normalStream(),
454                BOXED_1D_ARRAY
455            ),
456            retArrClass
457        );
458    }
459
460    /**
461     * <EMBED CLASS=defs DATA-TYPE=Float DATA-METH_NAME=FLOAT DATA-DEF_VAL="-1.0f">
462     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_DIMN_METH_BOXED>
463     */
464    @IntoHTMLTable(background=GreenDither, title="Multi-Dimensional Array of Boxed-Floats")
465    @LinkJavaSource(handle="BASIC_TYPES", name="FLOAT")
466    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
467    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForDimNArrays")
468    public static <T> T arrFLOAT(
469            final JsonArray                 ja,
470            final float                     defaultValue,
471            final int                       FLAGS,
472            final Function<String, Float>   optionalUserParser,
473            final Class<T>                  retArrClass
474        )
475    {
476        return ProcessMultiDimJsonArray.jsonArrayToJava(
477            ja,
478            // new SettingsRec<Float, Stream<Float>>(
479            SETTINGS_REC_BUILDER.createForDimNArrays(
480                defaultValue,
481                FLAGS,
482                optionalUserParser,
483                BASIC_TYPES.BOXED_FLOAT(),
484                STREAM_BUILDER.normalStream(),
485                BOXED_1D_ARRAY
486            ),
487            retArrClass
488        );
489    }
490
491    /**
492     * <EMBED CLASS=defs DATA-TYPE=Boolean DATA-METH_NAME=BOOLEAN DATA-DEF_VAL=false>
493     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_DIMN_METH_BOXED>
494     */
495    @IntoHTMLTable(background=BlueDither, title="Multi-Dimensional Array of Boxed-Booleans")
496    @LinkJavaSource(handle="BASIC_TYPES", name="BOOLEAN")
497    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
498    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForDimNArrays")
499    public static <T> T arrBOOLEAN(
500            final JsonArray                 ja,
501            final boolean                   defaultValue,
502            final int                       FLAGS,
503            final Function<String, Boolean> optionalUserParser,
504            final Class<T>                  retArrClass
505        )
506    {
507        return ProcessMultiDimJsonArray.jsonArrayToJava(
508            ja,
509            // new SettingsRec<Boolean, Stream<Boolean>>(
510            SETTINGS_REC_BUILDER.createForDimNArrays(
511                defaultValue,
512                FLAGS,
513                optionalUserParser,
514                BASIC_TYPES.BOXED_BOOLEAN(),
515                STREAM_BUILDER.normalStream(),
516                BOXED_1D_ARRAY
517            ),
518            retArrClass
519        );
520    }
521
522    /**
523     * <EMBED CLASS=defs DATA-TYPE=Number DATA-METH_NAME=Number DATA-DEF_VAL=0>
524     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_DIMN_METH_BOXED>
525     */
526    @IntoHTMLTable(background=GreenDither, title="Multi-Dimensional Array of Best-Fit Boxed-Numbers")
527    @LinkJavaSource(handle="BASIC_TYPES", name="NUMBER")
528    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
529    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForDimNArrays")
530    public static <T> T arrNumber(
531            final JsonArray                 ja,
532            final Number                    defaultValue,
533            final int                       FLAGS,
534            final Function<String, Number>  optionalUserParser,
535            final Class<T>                  retArrClass
536        )
537    {
538        return ProcessMultiDimJsonArray.jsonArrayToJava(
539            ja,
540            // new SettingsRec<Number, Stream<Number>>(
541            SETTINGS_REC_BUILDER.createForDimNArrays(
542                defaultValue,
543                FLAGS,
544                optionalUserParser,
545                BASIC_TYPES.NUMBER_REC(),
546                STREAM_BUILDER.normalStream(),
547                BOXED_1D_ARRAY
548            ),
549            retArrClass
550        );
551    }
552
553
554    // *******************************************************************************************
555    // *******************************************************************************************
556    // Non-Primitive Multi-Dimensional Array Methods
557    // *******************************************************************************************
558    // *******************************************************************************************
559
560
561    /**
562     * <BR>Invokes: {@link ProcessMultiDimJsonArray#jsonArrayToJava(JsonArray, SettingsRec, Class)}
563     * <BR>Passes: {@code String} Configurations / SettingsRec
564     * <BR>See: Class {@link JFlag} for more information about parameter {@code 'FLAGS'}.
565     * <BR>Note: {@code retArrClass} must be a multi-dimensinal {@code String}-array.
566     * <BR>:(See last <B>"return-type"</B> parameter in example below)
567     * 
568     * <BR>COL-SPAN-2:
569     * <DIV CLASS=LOC>{@code
570     * String[][] arr = ReadArrJSON.DimN.strArr(jsonArray, null, 0, String[][].class);
571     * }</DIV>
572     */
573    @IntoHTMLTable(background=BlueDither, title="Multi-Dimensional Array of Strings")
574    @LinkJavaSource(handle="BASIC_TYPES", name="STRING")
575    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
576    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForDimNArrays")
577    public static <T> T strArr(
578            final JsonArray ja,
579            final String    defaultValue,
580            final int       FLAGS,
581            final Class<T>  retArrClass
582        )
583    {
584        return ProcessMultiDimJsonArray.jsonArrayToJava(
585            ja, 
586            // new SettingsRec<String, Stream<String>>(
587            SETTINGS_REC_BUILDER.createForDimNArrays(
588                defaultValue,
589                FLAGS,
590                null, // no optional user parser, input is supposed to be a string
591                BASIC_TYPES.STRING_REC(),
592                STREAM_BUILDER.normalStream(),
593                REFERENCE_1D_ARRAY
594            ),
595            retArrClass
596        );
597    }
598
599    /**
600     * <BR>Invokes: {@link ProcessMultiDimJsonArray#jsonArrayToJava(JsonArray, SettingsRec, Class)}
601     * <BR>Passes: {@code Object} Configurations / SettingsRec
602     * <BR>See: class {@link JFlag} for more information about parameter {@code 'FLAGS'}.
603     * <BR>Note: {@code retArrClass} must be a multi-dimensinal {@code Object}-array.
604     * <BR>:(See last <B>"return-type"</B> parameter in example below)
605     * 
606     * <BR>COL-SPAN-2:
607     * <DIV CLASS=LOC>{@code
608     * MyClass[][] arr = ReadArrJSON.DimN.strArr(jsonArray, null, 0, MyClass[][].class);
609     * }</DIV>
610     */
611    @SuppressWarnings({"rawtypes", "unchecked"})
612    @IntoHTMLTable(background=GreenDither, title="Multi-Dimensional Array of Object &lt;T&gt;")
613    @LinkJavaSource(handle="BASIC_TYPES", name="OBJECT", paramCount=1)
614    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
615    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForDimNArrays")
616    public static <T> T objArr(
617            final JsonArray ja,
618            final Object    defaultValue,
619            final int       FLAGS,
620            final Class<T>  retArrClass
621        )
622    {
623        throw new Torello.Java.ToDoException();
624
625        /*
626        Class baseClass = // (Class<U>)
627            RJArrDimN.GET_ARRAY_BASE_COMPONENT_CLASS_AND_CHECK
628                (retArrClass, defaultValue);
629
630        return ProcessMultiDimJsonArray.jsonArrayToJava(
631            ja,
632            new SettingsRec /* <T, Stream<T>> * /(
633                defaultValue,
634                FLAGS,
635                optionalUserParser,
636                BASIC_TYPES.OBJECT(baseClass),
637                STREAM_BUILDER.normalStream(),
638                REFERENCE_1D_ARRAY
639            ),
640            retArrClass
641        );
642        */
643    }
644
645}
646