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