001package Torello.Java.JSON;
002
003import Torello.Java.Function.ToShortFunction;
004import Torello.Java.Function.ToByteFunction;
005import Torello.Java.Function.ToFloatFunction;
006
007import java.util.function.ToIntFunction;
008import java.util.function.ToLongFunction;
009import java.util.function.ToDoubleFunction;
010import java.util.function.Predicate;
011
012import Torello.JavaDoc.LinkJavaSource;
013import Torello.JavaDoc.StaticFunctional;
014import Torello.JavaDoc.JDHeaderBackgroundImg;
015import Torello.JavaDoc.IntoHTMLTable;
016
017// import Torello.JavaDoc.IntoHTMLTable.Background;
018import static Torello.JavaDoc.IntoHTMLTable.Background.*;
019
020import static Torello.Java.JSON.JFlag.NOT_ALLOWED_RET_NULL_MASKS;
021
022import java.util.function.Predicate;
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-Array
029 * 
030 * <EMBED CLASS='external-html' DATA-FILE-ID=GLASS_FISH_NOTE>
031 * <EMBED CLASS='external-html' DATA-FILE-ID=RJA_INTO_PRIM_ARR>
032 * <EMBED CLASS='external-html' DATA-FILE-ID=JSON_BINDING_NOTE>
033 * 
034 * <BR /><HR><BR />
035 * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_PRIM_ARR>
036 * 
037 * @see Json
038 * @see JsonArray
039 */
040@StaticFunctional
041@JDHeaderBackgroundImg(EmbedTagFileID="RJA_JDHBI_PRIM_ARR")
042public class RJArrIntoPrimArray
043{
044    private RJArrIntoPrimArray() {}
045
046    /**
047     * <EMBED CLASS=defs DATA-TYPE=short DATA-INTERIM=Short>
048     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_PRIM_ARR_M_DOC>
049     */
050    @IntoHTMLTable(background=BlueDither, title="JsonArray of Short")
051    @LinkJavaSource(handle="GENERATE_1DARRAY", name="boxedStreamToPrimitiveArray")
052    public static short[] shortArr(
053            final JsonArray                 ja,
054            final short                     defaultValue,
055            final int                       FLAGS,
056            final ToShortFunction<String>   optionalUserParser
057        )
058    {
059        final short[] retArr = new short[ja.size()];
060
061        return GENERATE_1DARRAY.boxedStreamToPrimitiveArray(
062            RJArrIntoBoxedStream.shortArr(
063                ja,
064                defaultValue,
065                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
066                (optionalUserParser == null) ? null : optionalUserParser::applyAsShort
067            ),
068            ja,
069            short.class,
070            (Short s, int i) -> retArr[i] = s.shortValue(),
071            retArr
072        );
073    }
074
075    /**
076     * <EMBED CLASS=defs DATA-TYPE=byte DATA-INTERIM=Byte>
077     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_PRIM_ARR_M_DOC>
078     */
079    @IntoHTMLTable(background=GreenDither, title="JsonArray of Bytes")
080    @LinkJavaSource(handle="GENERATE_1DARRAY", name="boxedStreamToPrimitiveArray")
081    public static byte[] byteArr(
082            final JsonArray                 ja,
083            final byte                      defaultValue,
084            final int                       FLAGS,
085            final ToByteFunction<String>    optionalUserParser
086        )
087    {
088        final byte[] retArr = new byte[ja.size()];
089
090        return GENERATE_1DARRAY.boxedStreamToPrimitiveArray(
091            RJArrIntoBoxedStream.byteArr(
092                ja,
093                defaultValue,
094                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
095                (optionalUserParser == null) ? null : optionalUserParser::applyAsByte
096            ),
097            ja,
098            byte.class,
099            (Byte s, int i) -> retArr[i] = s.byteValue(),
100            retArr
101        );
102    }
103
104    /**
105     * <EMBED CLASS=defs DATA-TYPE=float DATA-INTERIM=Float>
106     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_PRIM_ARR_M_DOC>
107     */
108    @IntoHTMLTable(background=BlueDither, title="JsonArray of Floats")
109    @LinkJavaSource(handle="GENERATE_1DARRAY", name="boxedStreamToPrimitiveArray")
110    public static float[] floatArr(
111            final JsonArray                 ja,
112            final float                     defaultValue,
113            final int                       FLAGS,
114            final ToFloatFunction<String>   optionalUserParser
115        )
116    {
117        final float[] retArr = new float[ja.size()];
118
119        return GENERATE_1DARRAY.boxedStreamToPrimitiveArray(
120            RJArrIntoBoxedStream.floatArr(
121                ja,
122                defaultValue,
123                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
124                (optionalUserParser == null) ? null : optionalUserParser::applyAsFloat
125            ),
126            ja,
127            float.class,
128            (Float s, int i) -> retArr[i] = s.floatValue(),
129            retArr
130        );
131    }
132
133    /**
134     * <EMBED CLASS=defs DATA-TYPE=boolean DATA-INTERIM=Boolean>
135     * <EMBED CLASS='external-html' DATA-FILE-ID=RJ_ARR_PRIM_ARR_M_DOC>
136     */
137    @IntoHTMLTable(background=GreenDither, title="JsonArray of Booleans")
138    @LinkJavaSource(handle="GENERATE_1DARRAY", name="boxedStreamToPrimitiveArray")
139    public static boolean[] booleanArr(
140            final JsonArray         ja,
141            final boolean           defaultValue,
142            final int               FLAGS,
143            final Predicate<String> optionalUserParser
144        )
145    {
146        final boolean[] retArr = new boolean[ja.size()];
147
148        return GENERATE_1DARRAY.boxedStreamToPrimitiveArray(
149            RJArrIntoBoxedStream.booleanArr(
150                ja,
151                defaultValue,
152                FLAGS & NOT_ALLOWED_RET_NULL_MASKS,
153                (optionalUserParser == null) ? null : optionalUserParser::test
154            ),
155            ja,
156            boolean.class,
157            (Boolean s, int i) -> retArr[i] = s.booleanValue(),
158            retArr
159        );
160    }
161
162    /**
163     * <BR>Invokes: {@link RJArrIntoPrimStream#intArr(JsonArray, int, int, ToIntFunction)}
164     * <BR>And-Then: {@code toArray()}, as explained in the comments at the top of this class
165     */
166    @IntoHTMLTable(background=BlueDither, title="JsonArray of Integers")
167    public static int[] intArr(
168            final JsonArray             ja,
169            final int                   defaultValue,
170            final int                   FLAGS,
171            final ToIntFunction<String> optionalUserParser
172        )
173    {
174        return RJArrIntoPrimStream
175            .intArr(ja, defaultValue, FLAGS, optionalUserParser)
176            .toArray();
177    }
178
179    /**
180     * <BR>Invokes: {@link RJArrIntoPrimStream#longArr(JsonArray, long, int, ToLongFunction)}
181     * <BR>And-Then: {@code toArray()}, as explained in the comments at the top of this class
182     */
183    @IntoHTMLTable(background=GreenDither, title="JsonArray of Longs")
184    public static long[] longArr(
185            final JsonArray                 ja,
186            final long                      defaultValue,
187            final int                       FLAGS,
188            final ToLongFunction<String>    optionalUserParser
189        )
190    {
191        return RJArrIntoPrimStream
192            .longArr(ja, defaultValue, FLAGS, optionalUserParser)
193            .toArray();
194    }
195
196    /**
197     * <BR>Invokes:
198     *  {@link RJArrIntoPrimStream#doubleArr(JsonArray, double, int, ToDoubleFunction)}
199     * <BR>And-Then: {@code toArray()}, as explained in the comments at the top of this class
200     */
201    @IntoHTMLTable(background=BlueDither, title="JsonArray of Doubles")
202    public static double[] doubleArr(
203            final JsonArray                 ja,
204            final double                    defaultValue,
205            final int                       FLAGS,
206            final ToDoubleFunction<String>  optionalUserParser
207        )
208    {
209        return RJArrIntoPrimStream
210            .doubleArr(ja, defaultValue, FLAGS, optionalUserParser)
211            .toArray();
212    }
213
214}