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