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