001package Torello.Java.JSON;
002
003import Torello.JavaDoc.StaticFunctional;
004import Torello.JavaDoc.JDHeaderBackgroundImg;
005
006import Torello.JavaDoc.IntoHTMLTable;
007import static Torello.JavaDoc.IntoHTMLTable.Background.GreenDither;
008import static Torello.JavaDoc.IntoHTMLTable.Background.BlueDither;
009
010import static Torello.Java.JSON.JFlag.NOT_ALLOWED_RET_NULL_MASKS;
011
012import Torello.JavaDoc.JDHeaderBackgroundImg;
013import Torello.JavaDoc.LinkJavaSource;
014import Torello.JavaDoc.StaticFunctional;
015
016import java.util.stream.IntStream;
017import java.util.stream.LongStream;
018import java.util.stream.DoubleStream;
019
020import java.util.function.ToIntFunction;
021import java.util.function.ToLongFunction;
022import java.util.function.ToDoubleFunction;
023
024import javax.json.Json;
025import javax.json.JsonArray;
026
027/**
028 * Utilities for parsing Json Array's and sending the parsed values into a Java Primitive
029 * Stream.
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_PRIM_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_PRIM_STRM>
037 *
038 * @see Json
039 * @see JsonArray
040 */
041@StaticFunctional
042@JDHeaderBackgroundImg(EmbedTagFileID="RJA_JDHBI_PRIM_STRM")
043public class RJArrIntoPrimStream
044{
045    private RJArrIntoPrimStream() { }
046
047
048    // ********************************************************************************************
049    // ********************************************************************************************
050    // Stream Generators
051    // ********************************************************************************************
052    // ********************************************************************************************
053
054
055    /**
056     * <EMBED CLASS=defs DATA-TYPE=Integer DATA-TYPE_LC=int DATA-STRM_TYPE=IntStream DATA-A_AN=An>
057     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_PRIM_STREAM_STRM>
058     */
059    @IntoHTMLTable(background=GreenDither, title="Generate a Java (Primitive) IntStream")
060    @LinkJavaSource(handle="BASIC_TYPES", name="INTEGER")
061    @LinkJavaSource(handle="STREAM_BUILDER", name="intStream")
062    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
063    public static IntStream intArr(
064            final JsonArray             ja,
065            final int                   defaultValue,
066            final int                   FLAGS,
067            final ToIntFunction<String> optionalUserParser
068        )
069    {
070        return ProcessJsonArray.numericToJava(
071            ja,
072            SETTINGS_REC_BUILDER.createForStreams(
073                defaultValue,
074                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
075                (optionalUserParser == null) ? null : optionalUserParser::applyAsInt,
076                BASIC_TYPES.PRIMITIVE_INTEGER(),
077                STREAM_BUILDER.intStream()
078            ));
079    }
080
081    /**
082     * <EMBED CLASS=defs DATA-TYPE=Long DATA-TYPE_LC=long DATA-STRM_TYPE=LongStream>
083     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_PRIM_STREAM_STRM>
084     */
085    @IntoHTMLTable(background=BlueDither, title="Generate a Java (Primitive) LongStream")
086    @LinkJavaSource(handle="BASIC_TYPES", name="LONG")
087    @LinkJavaSource(handle="STREAM_BUILDER", name="longStream")
088    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
089    public static LongStream longArr(
090            final JsonArray                 ja,
091            final long                      defaultValue,
092            final int                       FLAGS,
093            final ToLongFunction<String>    optionalUserParser
094        )
095    {
096        return ProcessJsonArray.numericToJava(
097            ja,
098            SETTINGS_REC_BUILDER.createForStreams(
099                defaultValue,
100                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
101                (optionalUserParser == null) ? null : optionalUserParser::applyAsLong,
102                BASIC_TYPES.PRIMITIVE_LONG(),
103                STREAM_BUILDER.longStream()
104            ));
105    }
106
107    /**
108     * <EMBED CLASS=defs DATA-TYPE=Double DATA-TYPE_LC=double DATA-STRM_TYPE=DoubleStream>
109     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_PRIM_STREAM_STRM>
110     */
111    @IntoHTMLTable(background=GreenDither, title="Generate a Java (Primitive) DoubleStream")
112    @LinkJavaSource(handle="BASIC_TYPES", name="DOUBLE")
113    @LinkJavaSource(handle="STREAM_BUILDER", name="doubleStream")
114    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
115    public static DoubleStream doubleArr(
116            final JsonArray                 ja,
117            final double                    defaultValue,
118            final int                       FLAGS,
119            final ToDoubleFunction<String>  optionalUserParser
120        )
121    {
122        return ProcessJsonArray.numericToJava(
123            ja,
124            SETTINGS_REC_BUILDER.createForStreams(
125                defaultValue,
126                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
127                (optionalUserParser == null) ? null : optionalUserParser::applyAsDouble,
128                BASIC_TYPES.PRIMITIVE_DOUBLE(),
129                STREAM_BUILDER.doubleStream()
130            ));
131    }
132
133
134    // ********************************************************************************************
135    // ********************************************************************************************
136    // SettingsRec Generators
137    // ********************************************************************************************
138    // ********************************************************************************************
139
140
141    /**
142     * <EMBED CLASS=defs DATA-TYPE=Integer DATA-TYPE_LC=int DATA-STRM_TYPE=IntStream DATA-A_AN=An>
143     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_PRIM_STREAM_REC>
144     */
145    @IntoHTMLTable(background=BlueDither,
146        title="Generate a Java (Primitive) IntStream Configuration-Record")
147    @LinkJavaSource(handle="BASIC_TYPES", name="INTEGER")
148    @LinkJavaSource(handle="STREAM_BUILDER", name="intStream")
149    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
150    public static SettingsRec<Integer, IntStream> intRec(
151            final int                   defaultValue,
152            final int                   FLAGS,
153            final ToIntFunction<String> optionalUserParser
154        )
155    {
156        return SETTINGS_REC_BUILDER.createForStreams(
157            defaultValue,
158            FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
159            (optionalUserParser == null) ? null : optionalUserParser::applyAsInt,
160            BASIC_TYPES.PRIMITIVE_INTEGER(),
161            STREAM_BUILDER.intStream()
162        );
163    }
164
165    /**
166     * <EMBED CLASS=defs DATA-TYPE=Long DATA-TYPE_LC=long DATA-STRM_TYPE=LongStream>
167     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_PRIM_STREAM_REC>
168     */
169    @IntoHTMLTable(background=GreenDither,
170        title="Generate a Java (Primitive) LongStream Configuration-Recod")
171    @LinkJavaSource(handle="BASIC_TYPES", name="LONG")
172    @LinkJavaSource(handle="STREAM_BUILDER", name="longStream")
173    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
174    public static SettingsRec<Long, LongStream> longRec(
175            final long                      defaultValue,
176            final int                       FLAGS,
177            final ToLongFunction<String>    optionalUserParser
178        )
179    {
180        return SETTINGS_REC_BUILDER.createForStreams(
181            defaultValue,
182            FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
183            (optionalUserParser == null) ? null : optionalUserParser::applyAsLong,
184            BASIC_TYPES.PRIMITIVE_LONG(),
185            STREAM_BUILDER.longStream()
186        );
187    }
188
189    /**
190     * <EMBED CLASS=defs DATA-TYPE=Double DATA-TYPE_LC=double DATA-STRM_TYPE=DoubleStream>
191     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_PRIM_STREAM_REC>
192     */
193    @IntoHTMLTable(background=BlueDither,
194        title="Generate a Java (Primitive) DoubleStream Configuration-Record")
195    @LinkJavaSource(handle="BASIC_TYPES", name="DOUBLE")
196    @LinkJavaSource(handle="STREAM_BUILDER", name="doubleStream")
197    @LinkJavaSource(handle="SETTINGS_REC_BUILDER", name="createForStreams")
198    public static SettingsRec<Double, DoubleStream> doubleRec(
199            final double                    defaultValue,
200            final int                       FLAGS,
201            final ToDoubleFunction<String>  optionalUserParser
202        )
203    {
204        return SETTINGS_REC_BUILDER.createForStreams(
205            defaultValue,
206            FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
207            (optionalUserParser == null) ? null : optionalUserParser::applyAsDouble,
208            BASIC_TYPES.PRIMITIVE_DOUBLE(),
209            STREAM_BUILDER.doubleStream()
210        );
211    }    
212
213}