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 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=GLASS_FISH_NOTE>
025 * <EMBED CLASS='external-html' DATA-FILE-ID=RJA_INTO_STRM>
026 * <EMBED CLASS='external-html' DATA-FILE-ID=JSON_BINDING_NOTE>
027 * <EMBED CLASS='external-html' DATA-FILE-ID=LOOP_OPTIMIZED_NOTE>
028 *
029 * @see Json
030 * @see JsonArray
031 */
032@StaticFunctional
033@JDHeaderBackgroundImg(EmbedTagFileID="RJA_JDHBI_STRM")
034public class RJArrIntoStream
035{
036    private RJArrIntoStream() { }
037
038
039    // ********************************************************************************************
040    // ********************************************************************************************
041    // Read Objects Into a Stream
042    // ********************************************************************************************
043    // ********************************************************************************************
044
045
046    /** <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_STREAM_OBJ1_STRM> */
047    @IntoHTMLTable(background=GreenDither, title="Generate a Java Stream of Object &lt;T&gt;")
048    @LinkJavaSource(handle="BASIC_TYPES", name="OBJECT", paramCount=1)
049    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
050    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
051    public static <T> Stream<T> objArr(
052            final JsonArray ja,
053            final T         defaultValue,
054            final int       FLAGS,
055            final Class<T>  returnClass
056        )
057    {
058        return ProcessJsonArray.objToJava(
059            ja,
060            SETTINGS_REC_BUILDER.createForStreams(
061                defaultValue,
062                FLAGS,
063                null,
064                BASIC_TYPES.OBJECT(returnClass),
065                STREAM_BUILDER.normalStream()
066            ));
067    }
068
069    /** <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_STREAM_OBJ2_STRM> */
070    @IntoHTMLTable(background=BlueDither,
071        title="Generate a Java Stream of Object &lt;T&gt;, Use User-Provided Static-Builder")
072    @LinkJavaSource(handle="BASIC_TYPES", name="OBJECT", paramCount=2)
073    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
074    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
075    public static <T> Stream<T> objArr(
076            final JsonArray                 ja,
077            final T                         defaultValue,
078            final int                       FLAGS,
079            final Function<JsonObject, T>   objBuilder,
080            final Class<T>                  returnClass
081        )
082    {
083        return ProcessJsonArray.objToJava(
084            ja,
085            SETTINGS_REC_BUILDER.createForStreams(
086                defaultValue,
087                FLAGS,
088                null,
089                BASIC_TYPES.OBJECT(objBuilder, returnClass),
090                STREAM_BUILDER.normalStream()
091            ));
092    }
093
094    /** <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_STREAM_OBJ3_STRM> */
095    @IntoHTMLTable(background=GreenDither,
096        title="Generate a Java Stream of Object &lt;T&gt;, Use User-Provided Static-Builder")
097    @LinkJavaSource(handle="BASIC_TYPES", name="OBJECT2", paramCount=2)
098    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
099    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
100    public static <T> Stream<T> objArr(
101            final JsonArray                     ja,
102            final T                             defaultValue,
103            final int                           FLAGS,
104            final IntIntTFunc<JsonObject, T>    objBuilder,
105            final Class<T>                      returnClass
106        )
107    {
108        return ProcessJsonArray.objToJava(
109            ja,
110            SETTINGS_REC_BUILDER.createForStreams(
111                defaultValue,
112                FLAGS,
113                null,
114                BASIC_TYPES.OBJECT2(objBuilder, returnClass),
115                STREAM_BUILDER.normalStream()
116            ));
117    }
118
119
120    // ********************************************************************************************
121    // ********************************************************************************************
122    // Read Strings Into a Stream
123    // ********************************************************************************************
124    // ********************************************************************************************
125
126
127    /** <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_STREAM_STR_STRM> */
128    @IntoHTMLTable(background=BlueDither, title="Generate a Java Stream of String's")
129    @LinkJavaSource(handle="BASIC_TYPES", name="STRING_REC")
130    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
131    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
132    public static Stream<String> strArr(
133            final JsonArray ja,
134            final String    defaultValue,
135            final int       FLAGS
136        )
137    {
138        return ProcessJsonArray.strToJava(
139            ja,
140            SETTINGS_REC_BUILDER.createForStreams(
141                defaultValue,
142                FLAGS,
143                null, // optionalUserParser
144                BASIC_TYPES.STRING_REC(),
145                STREAM_BUILDER.normalStream()
146            ));
147    }
148
149
150    // ********************************************************************************************
151    // ********************************************************************************************
152    // Generate a SettingsRec instance for reading JsonObjects
153    // ********************************************************************************************
154    // ********************************************************************************************
155
156
157    /** <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_STREAM_OBJ1_REC> */
158    @IntoHTMLTable(background=GreenDither,
159        title="Generate a Java Settings-Record for producing Stream&lt;T&gt;")
160    @LinkJavaSource(handle="BASIC_TYPES", name="OBJECT", paramCount=1)
161    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
162    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
163    public static <T> SettingsRec<T, Stream<T>> objRec(
164            final T         defaultValue,
165            final int       FLAGS,
166            final Class<T>  returnClass
167        )
168    {
169        return SETTINGS_REC_BUILDER.createForStreams(
170            defaultValue,
171            FLAGS,
172            null,
173            BASIC_TYPES.OBJECT(returnClass),
174            STREAM_BUILDER.normalStream()
175        );
176    }
177
178    /** <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_STREAM_OBJ2_REC> */
179    @IntoHTMLTable(background=BlueDither,
180        title="Generate a Java Settings-Record for producing Stream&lt;T&gt;")
181    @LinkJavaSource(handle="BASIC_TYPES", name="OBJECT", paramCount=2)
182    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
183    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
184    public static <T> SettingsRec<T, Stream<T>> objRec(
185            final T                         defaultValue,
186            final int                       FLAGS,
187            final Function<JsonObject, T>   objBuilder,
188            final Class<T>                  returnClass
189        )
190    {
191        return SETTINGS_REC_BUILDER.createForStreams(
192            defaultValue,
193            FLAGS,
194            null,
195            BASIC_TYPES.OBJECT(objBuilder, returnClass),
196            STREAM_BUILDER.normalStream()
197        );
198    }
199
200    /** <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_STREAM_OBJ3_REC> */
201    @IntoHTMLTable(background=GreenDither,
202        title="Generate a Java Settings-Record for producing Stream&lt;T&gt;")
203    @LinkJavaSource(handle="BASIC_TYPES", name="OBJECT2", paramCount=2)
204    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
205    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
206    public static <T> SettingsRec<T, Stream<T>> objRec(
207            final T                             defaultValue,
208            final int                           FLAGS,
209            final IntIntTFunc<JsonObject, T>    objBuilder,
210            final Class<T>                      returnClass
211        )
212    {
213        return SETTINGS_REC_BUILDER.createForStreams(
214            defaultValue,
215            FLAGS,
216            null,
217            BASIC_TYPES.OBJECT2(objBuilder, returnClass),
218            STREAM_BUILDER.normalStream()
219        );
220    }
221
222
223    // ********************************************************************************************
224    // ********************************************************************************************
225    // Generate a SettingsRec instance for reading Strings
226    // ********************************************************************************************
227    // ********************************************************************************************
228
229
230    /**  <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_STREAM_STR_REC> */
231    @IntoHTMLTable(background=BlueDither,
232        title="Generate a Java Settings-Record for producing Stream&lt;String&gt;")
233    @LinkJavaSource(handle="BASIC_TYPES", name="STRING_REC")
234    @LinkJavaSource(handle="STREAM_BUILDER", name="normalStream")
235    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
236    public static SettingsRec<String, Stream<String>> strRec(
237            final String    defaultValue,
238            final int       FLAGS
239        )
240    {
241        return SETTINGS_REC_BUILDER.createForStreams(
242            defaultValue,
243            FLAGS,
244            null, // optionalUserParser
245            BASIC_TYPES.STRING_REC(),
246            STREAM_BUILDER.normalStream()
247        );
248    }
249}