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