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