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 Torello.Java.Function.IntIntTFunc;
012
013import java.util.stream.Stream;
014import java.util.function.Function;
015
016import javax.json.Json;
017import javax.json.JsonArray;
018import javax.json.JsonString;
019import javax.json.JsonObject;
020
021/**
022 * Utilities for parsing Json Array's and sending the parsed values into a Java Stream.
023 * 
024 * <EMBED CLASS='external-html' DATA-FILE-ID=ALL_CLASSES_NOTE>
025 * <EMBED CLASS='external-html' DATA-FILE-ID=RJA_INTO_STRM>
026 * <EMBED CLASS='external-html' DATA-FILE-ID=LOOP_OPTIMIZED_NOTE>
027 * <EMBED CLASS='external-html' DATA-FILE-ID=JO_DESERIALIZE>
028 * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_PT_STRM>
029 *
030 * @see Json
031 * @see JsonArray
032 */
033@StaticFunctional
034@JDHeaderBackgroundImg(EmbedTagFileID="RJA_JDHBI_STRM")
035public class RJArrIntoStream
036{
037    private RJArrIntoStream() { }
038
039
040    // ********************************************************************************************
041    // ********************************************************************************************
042    // Read Objects Into a Stream
043    // ********************************************************************************************
044    // ********************************************************************************************
045
046
047    /**
048     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_STREAM_OBJ1_STRM>
049     * @see ProcessJsonArray#objToJava(JsonArray, SettingsRec)
050     * @see #objRec(Object, int, Class)
051     */
052    @IntoHTMLTable(background=GreenDither, title="Generate a Java Stream of Object &lt;T&gt;")
053    public static <T> Stream<T> objArr(
054            final JsonArray ja,
055            final T         defaultValue,
056            final int       FLAGS,
057            final Class<T>  returnClass
058        )
059    { return ProcessJsonArray.objToJava(ja, objRec(defaultValue, FLAGS, returnClass)); }
060
061    /**
062     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_STREAM_OBJ2_STRM>
063     * @see ProcessJsonArray#objToJava(JsonArray, SettingsRec)
064     * @see #objRec(Object, int, Function, Class)
065     */
066    @IntoHTMLTable(
067        background=BlueDither,
068        title="Generate a Java Stream of Object &lt;T&gt;, Use User-Provided Static-Builder"
069    )
070    public static <T> Stream<T> objArr(
071            final JsonArray                 ja,
072            final T                         defaultValue,
073            final int                       FLAGS,
074            final Function<JsonObject, T>   objBuilder,
075            final Class<T>                  returnClass
076        )
077    { return ProcessJsonArray.objToJava(ja, objRec(defaultValue, FLAGS, objBuilder, returnClass)); }
078
079    /**
080     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_STREAM_OBJ3_STRM>
081     * @see ProcessJsonArray#objToJava(JsonArray, SettingsRec)
082     * @see #objRec(Object, int, IntIntTFunc, Class)
083     */
084    @IntoHTMLTable(
085        background=GreenDither,
086        title="Generate a Java Stream of Object &lt;T&gt;, Use User-Provided Static-Builder"
087    )
088    public static <T> Stream<T> objArr(
089            final JsonArray                     ja,
090            final T                             defaultValue,
091            final int                           FLAGS,
092            final IntIntTFunc<JsonObject, T>    objBuilder,
093            final Class<T>                      returnClass
094        )
095    {
096        return ProcessJsonArray.objToJava
097            (ja, objRec(defaultValue, FLAGS, objBuilder, returnClass));
098    }
099
100
101    // ********************************************************************************************
102    // ********************************************************************************************
103    // Generate a SettingsRec instance for reading JsonObjects
104    // ********************************************************************************************
105    // ********************************************************************************************
106
107
108    /** <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_STREAM_OBJ1_REC> */
109    @IntoHTMLTable(
110        background=BlueDither,
111        title="Generate a Java Settings-Record for producing Stream&lt;T&gt;"
112    )
113    @LinkJavaSource(handle="EXTENDED_TYPES", name="FROM_CTOR")
114    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="streams")
115    public static <T> SettingsRec<T, Stream<T>> objRec(
116            final T         defaultValue,
117            final int       FLAGS,
118            final Class<T>  returnClass
119        )
120    {
121        return new SETTINGS_REC_BUILDER<T, Stream<T>>
122            (defaultValue, FLAGS, null, EXTENDED_TYPES.FROM_CTOR(returnClass))
123            .streams();
124    }
125
126    /** <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_STREAM_OBJ2_REC> */
127    @IntoHTMLTable(
128        background=GreenDither,
129        title="Generate a Java Settings-Record for producing Stream&lt;T&gt;"
130    )
131    @LinkJavaSource(handle="EXTENDED_TYPES", name="ONE_ARG_FUNC")
132    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="streams")
133    public static <T> SettingsRec<T, Stream<T>> objRec(
134            final T                         defaultValue,
135            final int                       FLAGS,
136            final Function<JsonObject, T>   objBuilder,
137            final Class<T>                  returnClass
138        )
139    {
140        return new SETTINGS_REC_BUILDER<T, Stream<T>>
141            (defaultValue, FLAGS, null, EXTENDED_TYPES.ONE_ARG_FUNC(objBuilder, returnClass))
142            .streams();
143    }
144
145    /** <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_STREAM_OBJ3_REC> */
146    @IntoHTMLTable(
147        background=BlueDither,
148        title="Generate a Java Settings-Record for producing Stream&lt;T&gt;"
149    )
150    @LinkJavaSource(handle="EXTENDED_TYPES", name="THREE_ARG_FUNC")
151    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="streams")
152    public static <T> SettingsRec<T, Stream<T>> objRec(
153            final T                             defaultValue,
154            final int                           FLAGS,
155            final IntIntTFunc<JsonObject, T>    objBuilder,
156            final Class<T>                      returnClass
157        )
158    {
159        return new SETTINGS_REC_BUILDER<T, Stream<T>>
160            (defaultValue, FLAGS, null, EXTENDED_TYPES.THREE_ARG_FUNC(objBuilder, returnClass))
161            .streams();
162    }
163
164
165    // ********************************************************************************************
166    // ********************************************************************************************
167    // Read Strings Into a Stream
168    // ********************************************************************************************
169    // ********************************************************************************************
170
171
172    /**
173     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_STREAM_STR_STRM>
174     * @see ProcessJsonArray#strToJava(JsonArray, SettingsRec)
175     * @see #strRec(String, int)
176     */
177    @IntoHTMLTable(background=GreenDither, title="Generate a Java Stream of String's")
178    public static Stream<String> strArr(
179            final JsonArray ja,
180            final String    defaultValue,
181            final int       FLAGS
182        )
183    { return ProcessJsonArray.strToJava(ja, strRec(defaultValue, FLAGS)); }
184
185
186    // ********************************************************************************************
187    // ********************************************************************************************
188    // Generate a SettingsRec instance for reading Strings
189    // ********************************************************************************************
190    // ********************************************************************************************
191
192
193    /**  <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_STREAM_STR_REC> */
194    @IntoHTMLTable(
195        background=BlueDither,
196        title="Generate a Java Settings-Record for producing Stream&lt;String&gt;"
197    )
198    @LinkJavaSource(handle="BASIC_TYPES", name="STRING_REC")
199    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="streams")
200    public static SettingsRec<String, Stream<String>> strRec(
201            final String    defaultValue,
202            final int       FLAGS
203        )
204    {
205        return new SETTINGS_REC_BUILDER<String, Stream<String>>
206            (defaultValue, FLAGS, null, BASIC_TYPES.STRING_REC())
207            .streams();
208    }
209
210
211    // ********************************************************************************************
212    // ********************************************************************************************
213    // Read javax.json.JsonObject & JsonArray into a Stream
214    // ********************************************************************************************
215    // ********************************************************************************************
216
217
218    /**
219     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_STREAM_JO_STRM>
220     * @see ProcessJsonArray#joToJava(JsonArray, SettingsRec)
221     * @see #joRec(JsonObject, int)
222     */
223    @IntoHTMLTable(background=GreenDither, title="Generate a Java Stream of javax.json.JsonObject")
224    public static Stream<JsonObject> joArr(
225            final JsonArray     ja,
226            final JsonObject    defaultValue,
227            final int           FLAGS
228        )
229    { return ProcessJsonArray.joToJava(ja, joRec(defaultValue, FLAGS)); }
230
231    /**
232     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_STREAM_JA_STRM>
233     * @see ProcessJsonArray#jaToJava(JsonArray, SettingsRec)
234     * @see #jaRec(JsonArray, int)
235     */
236    @IntoHTMLTable(background=BlueDither, title="Generate a Java Stream of javax.json.JsonArray")
237    public static Stream<JsonArray> jaArr(
238            final JsonArray ja,
239            final JsonArray defaultValue,
240            final int       FLAGS
241        )
242    { return ProcessJsonArray.jaToJava(ja, jaRec(defaultValue, FLAGS)); }
243
244
245    // ********************************************************************************************
246    // ********************************************************************************************
247    // Generate a SettingsRec for reading javax.json.JsonObject & JsonArray's into Streams
248    // ********************************************************************************************
249    // ********************************************************************************************
250
251
252    /** <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_STREAM_JO_REC> */
253    @IntoHTMLTable(
254        background=GreenDither,
255        title="Generate a Java Settings-Record for producing Stream&lt;javax.json.JsonObject&gt;"
256    )
257    @LinkJavaSource(handle="BASIC_TYPES", name="JSON_OBJECT_REC")
258    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="streams")
259    public static SettingsRec<JsonObject, Stream<JsonObject>> joRec(
260            final JsonObject    defaultValue,
261            final int           FLAGS
262        )
263    {
264        return new SETTINGS_REC_BUILDER<JsonObject, Stream<JsonObject>>
265            (defaultValue, FLAGS, null, BASIC_TYPES.JSON_OBJECT_REC())
266            .streams();
267    }
268
269    /** <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_STREAM_JA_REC> */
270    @IntoHTMLTable(
271        background=BlueDither,
272        title="Generate a Java Settings-Record for producing Stream&lt;javax.json.JsonArray&gt;"
273    )
274    @LinkJavaSource(handle="BASIC_TYPES", name="JSON_ARRAY_REC")
275    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="streams")
276    public static SettingsRec<JsonArray, Stream<JsonArray>> jaRec(
277            final JsonArray defaultValue,
278            final int       FLAGS
279        )
280    {
281        return new SETTINGS_REC_BUILDER<JsonArray, Stream<JsonArray>>
282            (defaultValue, FLAGS, null, BASIC_TYPES.JSON_ARRAY_REC())
283            .streams();
284    }
285
286}