001package Torello.Java.JSON;
002
003import Torello.JavaDoc.LinkJavaSource;
004import Torello.JavaDoc.StaticFunctional;
005import Torello.JavaDoc.JDHeaderBackgroundImg;
006
007import Torello.JavaDoc.IntoHTMLTable;
008import static Torello.JavaDoc.IntoHTMLTable.Background.GreenDither;
009import static Torello.JavaDoc.IntoHTMLTable.Background.BlueDither;
010
011import static Torello.JavaDoc.Entity.CONSTRUCTOR;
012
013import static Torello.Java.JSON.BASIC_TYPES.BOXED;
014
015import java.util.stream.Stream;
016
017import java.util.function.Function;
018
019import javax.json.Json;
020import javax.json.JsonArray;
021
022// Needed for Java-Doc Links
023import javax.json.JsonValue;
024import javax.json.JsonString;
025
026
027/**
028 * Utilities for parsing Json Array's and sending the parsed values into a Java Strea 
029 * of Boxed-Primitives.
030 * 
031 * <EMBED CLASS='globalDefs' DATA-A_AN=A>
032 * <EMBED CLASS='external-html' DATA-FILE-ID=GLASS_FISH_NOTE>
033 * <EMBED CLASS='external-html' DATA-FILE-ID=RJA_INTO_BOXED_STRM>
034 * <EMBED CLASS='external-html' DATA-FILE-ID=JSON_BINDING_NOTE>
035 * <EMBED CLASS='external-html' DATA-FILE-ID=LOOP_OPTIMIZED_NOTE>
036 * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_PT_BOXED_STRM>
037 *
038 * @see Json
039 * @see JsonArray
040 */
041@StaticFunctional
042@JDHeaderBackgroundImg(EmbedTagFileID="RJA_JDHBI_BOXED_STRM")
043public class RJArrIntoBoxedStream
044{
045    private RJArrIntoBoxedStream() { }
046
047
048    // ********************************************************************************************
049    // ********************************************************************************************
050    // Stream Generators
051    // ********************************************************************************************
052    // ********************************************************************************************
053
054
055    /**
056     * <EMBED CLASS=defs DATA-TYPE=Integer DATA-DEFVAL=0 DATA-TYPE_LC=int DATA-METH_NAME=numeric
057     *      DATA-A_AN=An>
058     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_BOX_STREAM_STRM>
059     */
060    @IntoHTMLTable(background=GreenDither, title="Generate a Java Stream of Boxed-Integers")
061    @LinkJavaSource(handle="BASIC_TYPES", name="INTEGER")
062    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
063    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
064    public static Stream<Integer> intArr(
065            final JsonArray                 ja,
066            final int                       defaultValue,
067            final int                       FLAGS,
068            final Function<String, Integer> optionalUserParser
069        )
070    {
071        return ProcessJsonArray.numericToJava(
072            ja,
073            SETTINGS_REC_BUILDER.createForStreams(
074                defaultValue, FLAGS, optionalUserParser,
075                BASIC_TYPES.BOXED_INTEGER(),
076                STREAM_BUILDER.normalStream()
077            ));
078    }
079
080    /**
081     * <EMBED CLASS=defs DATA-TYPE=Short DATA-DEFVAL=0 DATA-TYPE_LC=short DATA-METH_NAME=numeric>
082     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_BOX_STREAM_STRM>
083     */
084    @IntoHTMLTable(background=BlueDither, title="Generate a Java Stream of Boxed Short-Integers")
085    @LinkJavaSource(handle="BASIC_TYPES", name="SHORT")
086    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
087    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
088    public static Stream<Short> shortArr(
089            final JsonArray                 ja,
090            final short                     defaultValue,
091            final int                       FLAGS,
092            final Function<String, Short>   optionalUserParser
093        )
094    {
095        return ProcessJsonArray.numericToJava(
096            ja,
097            SETTINGS_REC_BUILDER.createForStreams(
098                defaultValue, FLAGS, optionalUserParser,
099                BASIC_TYPES.BOXED_SHORT(),
100                STREAM_BUILDER.normalStream()
101            ));
102    }
103
104    /**
105     * <EMBED CLASS=defs DATA-TYPE=Byte DATA-DEFVAL=0 DATA-TYPE_LC=byte DATA-METH_NAME=numeric>
106     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_BOX_STREAM_STRM>
107     */
108    @IntoHTMLTable(background=GreenDither, title="Generate a Java Stream of Boxed-Bytes")
109    @LinkJavaSource(handle="BASIC_TYPES", name="BYTE")
110    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
111    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
112    public static Stream<Byte> byteArr(
113            final JsonArray                 ja,
114            final byte                      defaultValue,
115            final int                       FLAGS,
116            final Function<String, Byte>    optionalUserParser
117        )
118    {
119        return ProcessJsonArray.numericToJava(
120            ja,
121            SETTINGS_REC_BUILDER.createForStreams(
122                defaultValue, FLAGS, optionalUserParser,
123                BASIC_TYPES.BOXED_BYTE(),
124                STREAM_BUILDER.normalStream()
125            ));
126    }
127
128    /**
129     * <EMBED CLASS=defs DATA-TYPE=Long DATA-DEFVAL=0 DATA-TYPE_LC=long DATA-METH_NAME=numeric>
130     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_BOX_STREAM_STRM>
131     */
132    @IntoHTMLTable(background=BlueDither, title="Generate a Java Stream of Boxed Long-Integers")
133    @LinkJavaSource(handle="BASIC_TYPES", name="LONG")
134    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
135    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
136    public static Stream<Long> longArr(
137            final JsonArray                 ja,
138            final long                      defaultValue,
139            final int                       FLAGS,
140            final Function<String, Long>    optionalUserParser
141        )
142    {
143        return ProcessJsonArray.numericToJava(
144            ja,
145            SETTINGS_REC_BUILDER.createForStreams(
146                defaultValue, FLAGS, optionalUserParser,
147                BASIC_TYPES.BOXED_LONG(),
148                STREAM_BUILDER.normalStream()
149            ));
150    }
151
152    /**
153     * <EMBED CLASS=defs DATA-TYPE=Double DATA-DEFVAL=0 DATA-TYPE_LC=double DATA-METH_NAME=numeric>
154     * <EMBED CLASS='external-html' DATA-DEFVAL=0 DATA-FILE-ID=RJ_ARR_BOX_STREAM_STRM>
155     */
156    @IntoHTMLTable(background=GreenDither, title="Generate a Java Stream of Boxed-Doubles")
157    @LinkJavaSource(handle="BASIC_TYPES", name="DOUBLE")
158    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
159    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
160    public static Stream<Double> doubleArr(
161            final JsonArray                 ja,
162            final double                    defaultValue,
163            final int                       FLAGS,
164            final Function<String, Double>  optionalUserParser
165        )
166    {
167        return ProcessJsonArray.numericToJava(
168            ja,
169            SETTINGS_REC_BUILDER.createForStreams(
170                defaultValue, FLAGS, optionalUserParser,
171                BASIC_TYPES.BOXED_DOUBLE(),
172                STREAM_BUILDER.normalStream()
173            ));
174    }
175
176    /**
177     * <EMBED CLASS=defs DATA-TYPE=Float DATA-DEFVAL=0 DATA-TYPE_LC=float DATA-METH_NAME=numeric>
178     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_BOX_STREAM_STRM>
179     */
180    @IntoHTMLTable(background=BlueDither, title="Generate a Java Stream of Boxed-Floats")
181    @LinkJavaSource(handle="BASIC_TYPES", name="FLOAT")
182    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
183    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
184    public static Stream<Float> floatArr(
185            final JsonArray                 ja,
186            final float                     defaultValue,
187            final int                       FLAGS,
188            final Function<String, Float>   optionalUserParser
189        )
190    {
191        return ProcessJsonArray.numericToJava(
192            ja,
193            SETTINGS_REC_BUILDER.createForStreams(
194                defaultValue, FLAGS, optionalUserParser,
195                BASIC_TYPES.BOXED_FLOAT(),
196                STREAM_BUILDER.normalStream()
197            ));
198    }
199
200    /**
201     * <EMBED CLASS=defs DATA-TYPE=Boolean DATA-DEFVAL=true DATA-TYPE_LC=boolean DATA-METH_NAME=boolean>
202     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_BOX_STREAM_STRM>
203     */
204    @IntoHTMLTable(background=GreenDither, title="Generate a Java Stream of Boxed-Booleans")
205    @LinkJavaSource(handle="BASIC_TYPES", name="BOOLEAN")
206    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
207    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
208    public static Stream<Boolean> booleanArr(
209            final JsonArray                 ja,
210            final boolean                   defaultValue,
211            final int                       FLAGS,
212            final Function<String, Boolean> optionalUserParser
213        )
214    {
215        return ProcessJsonArray.booleanToJava(
216            ja,
217            SETTINGS_REC_BUILDER.createForStreams(
218                defaultValue, FLAGS, optionalUserParser,
219                BASIC_TYPES.BOXED_BOOLEAN(),
220                STREAM_BUILDER.normalStream()
221            ));
222    }
223
224    /**
225     * <EMBED CLASS=defs DATA-TYPE=Number DATA-DEFVAL=0 DATA-TYPE_LC=number DATA-METH_NAME=numeric>
226     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_BOX_STREAM_STRM>
227     */
228    @IntoHTMLTable(background=BlueDither, title="Generate a Java Stream of Best-Fit Boxed-Numbers")
229    @LinkJavaSource(handle="BASIC_TYPES", name="NUMBER_REC")
230    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
231    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
232    public static Stream<Number> numberArr(
233            final JsonArray                 ja,
234            final Number                    defaultValue,
235            final int                       FLAGS,
236            final Function<String, Number>  optionalUserParser
237        )
238    {
239        return ProcessJsonArray.numericToJava(
240            ja,
241            SETTINGS_REC_BUILDER.createForStreams(
242                defaultValue, FLAGS, optionalUserParser,
243                BASIC_TYPES.NUMBER_REC(),
244                STREAM_BUILDER.normalStream()
245            ));
246    }
247
248
249    // ********************************************************************************************
250    // ********************************************************************************************
251    // SettingsRec Generators
252    // ********************************************************************************************
253    // ********************************************************************************************
254
255
256    /**
257     * <EMBED CLASS=defs DATA-TYPE=Integer DATA-TYPE_LC=int DATA-DEFVAL=0 DATA-METH_NAME=numeric
258     *      DATA-A_AN=An>
259     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_BOX_STREAM_REC>
260     */
261    @IntoHTMLTable(background=GreenDither,
262        title="Generate a Settings-Record for a Stream of Boxed-Integers")
263    @LinkJavaSource(handle="BASIC_TYPES", name="INTEGER")
264    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
265    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
266    public static SettingsRec<Integer, Stream<Integer>> intRec(
267            final int                       defaultValue,
268            final int                       FLAGS,
269            final Function<String, Integer> optionalUserParser
270        )
271    {
272        return SETTINGS_REC_BUILDER.createForStreams(
273            defaultValue, FLAGS, optionalUserParser,
274            BASIC_TYPES.BOXED_INTEGER(),
275            STREAM_BUILDER.normalStream()
276        );
277    }
278
279    /**
280     * <EMBED CLASS=defs DATA-TYPE=Short DATA-TYPE_LC=short DATA-DEFVAL=0 DATA-METH_NAME=numeric>
281     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_BOX_STREAM_REC>
282     */
283    @IntoHTMLTable(background=BlueDither,
284        title="Generate a Settings-Record for a Stream of Boxed Short-Integers")
285    @LinkJavaSource(handle="BASIC_TYPES", name="SHORT")
286    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
287    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
288    public static SettingsRec<Short, Stream<Short>> shortRec(
289            final short                     defaultValue,
290            final int                       FLAGS,
291            final Function<String, Short>   optionalUserParser
292        )
293    {
294        return SETTINGS_REC_BUILDER.createForStreams(
295            defaultValue, FLAGS, optionalUserParser,
296            BASIC_TYPES.BOXED_SHORT(),
297            STREAM_BUILDER.normalStream()
298        );
299    }
300
301    /**
302     * <EMBED CLASS=defs DATA-TYPE=Byte DATA-TYPE_LC=byte DATA-DEFVAL=0 DATA-METH_NAME=numeric>
303     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_BOX_STREAM_REC>
304     */
305    @IntoHTMLTable(background=GreenDither,
306        title="Generate a Settings-Record for a Stream of Boxed-Bytes")
307    @LinkJavaSource(handle="BASIC_TYPES", name="BYTE")
308    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
309    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
310    public static SettingsRec<Byte, Stream<Byte>> byteRec(
311            final byte                      defaultValue,
312            final int                       FLAGS,
313            final Function<String, Byte>    optionalUserParser
314        )
315    {
316        return SETTINGS_REC_BUILDER.createForStreams(
317            defaultValue, FLAGS, optionalUserParser,
318            BASIC_TYPES.BOXED_BYTE(),
319            STREAM_BUILDER.normalStream()
320        );
321    }
322
323    /**
324     * <EMBED CLASS=defs DATA-TYPE=Long DATA-TYPE_LC=long DATA-DEFVAL=0 DATA-METH_NAME=numeric>
325     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_BOX_STREAM_REC>
326     */
327    @IntoHTMLTable(background=BlueDither,
328        title="Generate a Settings-Record for a Stream of Boxed Long-Integers")
329    @LinkJavaSource(handle="BASIC_TYPES", name="LONG")
330    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
331    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
332    public static SettingsRec<Long, Stream<Long>> longRec(
333            final long                      defaultValue,
334            final int                       FLAGS,
335            final Function<String, Long>    optionalUserParser
336        )
337    {
338        return SETTINGS_REC_BUILDER.createForStreams(
339            defaultValue, FLAGS, optionalUserParser,
340            BASIC_TYPES.BOXED_LONG(),
341            STREAM_BUILDER.normalStream()
342        );
343    }
344
345    /**
346     * <EMBED CLASS=defs DATA-TYPE=Double DATA-TYPE_LC=double DATA-DEFVAL=0 DATA-METH_NAME=numeric>
347     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_BOX_STREAM_REC>
348     */
349    @IntoHTMLTable(background=GreenDither,
350        title="Generate a Settings-Record for a Stream of Boxed-Doubles")
351    @LinkJavaSource(handle="BASIC_TYPES", name="DOUBLE")
352    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
353    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
354    public static SettingsRec<Double, Stream<Double>> doubleRec(
355            final double                    defaultValue,
356            final int                       FLAGS,
357            final Function<String, Double>  optionalUserParser
358        )
359    {
360        return SETTINGS_REC_BUILDER.createForStreams(
361            defaultValue, FLAGS, optionalUserParser,
362            BASIC_TYPES.BOXED_DOUBLE(),
363            STREAM_BUILDER.normalStream()
364        );
365    }
366
367    /**
368     * <EMBED CLASS=defs DATA-TYPE=Float DATA-TYPE_LC=float DATA-DEFVAL=0 DATA-METH_NAME=numeric>
369     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_BOX_STREAM_REC>
370     */
371    @IntoHTMLTable(background=BlueDither,
372        title="Generate a Settings-Record for a Stream of Boxed-Floats")
373    @LinkJavaSource(handle="BASIC_TYPES", name="FLOAT")
374    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
375    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
376    public static SettingsRec<Float, Stream<Float>> floatRec(
377            final float                     defaultValue,
378            final int                       FLAGS,
379            final Function<String, Float>   optionalUserParser
380        )
381    {
382        return SETTINGS_REC_BUILDER.createForStreams(
383            defaultValue, FLAGS, optionalUserParser,
384            BASIC_TYPES.BOXED_FLOAT(),
385            STREAM_BUILDER.normalStream()
386        );
387    }
388
389    /**
390     * <EMBED CLASS=defs DATA-TYPE=Boolean DATA-TYPE_LC=boolean DATA-METH_NAME=boolean>
391     * <EMBED CLASS=defs DATA-DEFVAL=true>
392     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_BOX_STREAM_REC>
393     */
394    @IntoHTMLTable(background=GreenDither,
395        title="Generate a Settings-Record for a Stream of Boxed-Booleans")
396    @LinkJavaSource(handle="BASIC_TYPES", name="BOOLEAN")
397    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
398    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
399    public static SettingsRec<Boolean, Stream<Boolean>> booleanRec(
400            final boolean                   defaultValue,
401            final int                       FLAGS,
402            final Function<String, Boolean> optionalUserParser
403        )
404    {
405        return SETTINGS_REC_BUILDER.createForStreams(
406            defaultValue, FLAGS, optionalUserParser,
407            BASIC_TYPES.BOXED_BOOLEAN(),
408            STREAM_BUILDER.normalStream()
409        );
410    }
411
412    /**
413     * <EMBED CLASS=defs DATA-TYPE=Number DATA-TYPE_LC=number DATA-DEFVAL=0 DATA-METH_NAME=numeric>
414     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_BOX_STREAM_REC>
415     */
416    @IntoHTMLTable(background=BlueDither,
417        title="Generate a Settings-Record for a Stream of Best-Fit Boxed-Numbers")
418    @LinkJavaSource(handle="BASIC_TYPES", name="NUMBER_REC")
419    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
420    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
421    public static SettingsRec<Number, Stream<Number>> numberRec(
422            final Number                    defaultValue,
423            final int                       FLAGS,
424            final Function<String, Number>  optionalUserParser
425        )
426    {
427        return SETTINGS_REC_BUILDER.createForStreams(
428            defaultValue, FLAGS, optionalUserParser,
429            BASIC_TYPES.NUMBER_REC(),
430            STREAM_BUILDER.normalStream()
431        );
432    }
433}