2121import com .ezylang .evalex .data .conversion .DefaultEvaluationValueConverter ;
2222import com .ezylang .evalex .data .conversion .EvaluationValueConverterIfc ;
2323import com .ezylang .evalex .functions .FunctionIfc ;
24- import com .ezylang .evalex .functions .basic .*;
25- import com .ezylang .evalex .functions .datetime .*;
26- import com .ezylang .evalex .functions .string .*;
27- import com .ezylang .evalex .functions .trigonometric .*;
24+ import com .ezylang .evalex .functions .basic .AbsFunction ;
25+ import com .ezylang .evalex .functions .basic .AverageFunction ;
26+ import com .ezylang .evalex .functions .basic .CeilingFunction ;
27+ import com .ezylang .evalex .functions .basic .CoalesceFunction ;
28+ import com .ezylang .evalex .functions .basic .FactFunction ;
29+ import com .ezylang .evalex .functions .basic .FloorFunction ;
30+ import com .ezylang .evalex .functions .basic .IfFunction ;
31+ import com .ezylang .evalex .functions .basic .Log10Function ;
32+ import com .ezylang .evalex .functions .basic .LogFunction ;
33+ import com .ezylang .evalex .functions .basic .MaxFunction ;
34+ import com .ezylang .evalex .functions .basic .MinFunction ;
35+ import com .ezylang .evalex .functions .basic .NotFunction ;
36+ import com .ezylang .evalex .functions .basic .RandomFunction ;
37+ import com .ezylang .evalex .functions .basic .RoundFunction ;
38+ import com .ezylang .evalex .functions .basic .SqrtFunction ;
39+ import com .ezylang .evalex .functions .basic .SumFunction ;
40+ import com .ezylang .evalex .functions .basic .SwitchFunction ;
41+ import com .ezylang .evalex .functions .datetime .DateTimeFormatFunction ;
42+ import com .ezylang .evalex .functions .datetime .DateTimeNewFunction ;
43+ import com .ezylang .evalex .functions .datetime .DateTimeNowFunction ;
44+ import com .ezylang .evalex .functions .datetime .DateTimeParseFunction ;
45+ import com .ezylang .evalex .functions .datetime .DateTimeToEpochFunction ;
46+ import com .ezylang .evalex .functions .datetime .DateTimeTodayFunction ;
47+ import com .ezylang .evalex .functions .datetime .DurationFromMillisFunction ;
48+ import com .ezylang .evalex .functions .datetime .DurationNewFunction ;
49+ import com .ezylang .evalex .functions .datetime .DurationParseFunction ;
50+ import com .ezylang .evalex .functions .datetime .DurationToMillisFunction ;
51+ import com .ezylang .evalex .functions .string .StringContains ;
52+ import com .ezylang .evalex .functions .string .StringEndsWithFunction ;
53+ import com .ezylang .evalex .functions .string .StringFormatFunction ;
54+ import com .ezylang .evalex .functions .string .StringLeftFunction ;
55+ import com .ezylang .evalex .functions .string .StringLengthFunction ;
56+ import com .ezylang .evalex .functions .string .StringLowerFunction ;
57+ import com .ezylang .evalex .functions .string .StringMatchesFunction ;
58+ import com .ezylang .evalex .functions .string .StringRightFunction ;
59+ import com .ezylang .evalex .functions .string .StringStartsWithFunction ;
60+ import com .ezylang .evalex .functions .string .StringSubstringFunction ;
61+ import com .ezylang .evalex .functions .string .StringTrimFunction ;
62+ import com .ezylang .evalex .functions .string .StringUpperFunction ;
63+ import com .ezylang .evalex .functions .trigonometric .AcosFunction ;
64+ import com .ezylang .evalex .functions .trigonometric .AcosHFunction ;
65+ import com .ezylang .evalex .functions .trigonometric .AcosRFunction ;
66+ import com .ezylang .evalex .functions .trigonometric .AcotFunction ;
67+ import com .ezylang .evalex .functions .trigonometric .AcotHFunction ;
68+ import com .ezylang .evalex .functions .trigonometric .AcotRFunction ;
69+ import com .ezylang .evalex .functions .trigonometric .AsinFunction ;
70+ import com .ezylang .evalex .functions .trigonometric .AsinHFunction ;
71+ import com .ezylang .evalex .functions .trigonometric .AsinRFunction ;
72+ import com .ezylang .evalex .functions .trigonometric .Atan2Function ;
73+ import com .ezylang .evalex .functions .trigonometric .Atan2RFunction ;
74+ import com .ezylang .evalex .functions .trigonometric .AtanFunction ;
75+ import com .ezylang .evalex .functions .trigonometric .AtanHFunction ;
76+ import com .ezylang .evalex .functions .trigonometric .AtanRFunction ;
77+ import com .ezylang .evalex .functions .trigonometric .CosFunction ;
78+ import com .ezylang .evalex .functions .trigonometric .CosHFunction ;
79+ import com .ezylang .evalex .functions .trigonometric .CosRFunction ;
80+ import com .ezylang .evalex .functions .trigonometric .CotFunction ;
81+ import com .ezylang .evalex .functions .trigonometric .CotHFunction ;
82+ import com .ezylang .evalex .functions .trigonometric .CotRFunction ;
83+ import com .ezylang .evalex .functions .trigonometric .CscFunction ;
84+ import com .ezylang .evalex .functions .trigonometric .CscHFunction ;
85+ import com .ezylang .evalex .functions .trigonometric .CscRFunction ;
86+ import com .ezylang .evalex .functions .trigonometric .DegFunction ;
87+ import com .ezylang .evalex .functions .trigonometric .RadFunction ;
88+ import com .ezylang .evalex .functions .trigonometric .SecFunction ;
89+ import com .ezylang .evalex .functions .trigonometric .SecHFunction ;
90+ import com .ezylang .evalex .functions .trigonometric .SecRFunction ;
91+ import com .ezylang .evalex .functions .trigonometric .SinFunction ;
92+ import com .ezylang .evalex .functions .trigonometric .SinHFunction ;
93+ import com .ezylang .evalex .functions .trigonometric .SinRFunction ;
94+ import com .ezylang .evalex .functions .trigonometric .TanFunction ;
95+ import com .ezylang .evalex .functions .trigonometric .TanHFunction ;
96+ import com .ezylang .evalex .functions .trigonometric .TanRFunction ;
2897import com .ezylang .evalex .operators .OperatorIfc ;
29- import com .ezylang .evalex .operators .arithmetic .*;
30- import com .ezylang .evalex .operators .booleans .*;
98+ import com .ezylang .evalex .operators .arithmetic .InfixDivisionOperator ;
99+ import com .ezylang .evalex .operators .arithmetic .InfixMinusOperator ;
100+ import com .ezylang .evalex .operators .arithmetic .InfixModuloOperator ;
101+ import com .ezylang .evalex .operators .arithmetic .InfixMultiplicationOperator ;
102+ import com .ezylang .evalex .operators .arithmetic .InfixPlusOperator ;
103+ import com .ezylang .evalex .operators .arithmetic .InfixPowerOfOperator ;
104+ import com .ezylang .evalex .operators .arithmetic .PrefixMinusOperator ;
105+ import com .ezylang .evalex .operators .arithmetic .PrefixPlusOperator ;
106+ import com .ezylang .evalex .operators .booleans .InfixAndOperator ;
107+ import com .ezylang .evalex .operators .booleans .InfixEqualsOperator ;
108+ import com .ezylang .evalex .operators .booleans .InfixGreaterEqualsOperator ;
109+ import com .ezylang .evalex .operators .booleans .InfixGreaterOperator ;
110+ import com .ezylang .evalex .operators .booleans .InfixLessEqualsOperator ;
111+ import com .ezylang .evalex .operators .booleans .InfixLessOperator ;
112+ import com .ezylang .evalex .operators .booleans .InfixNotEqualsOperator ;
113+ import com .ezylang .evalex .operators .booleans .InfixOrOperator ;
114+ import com .ezylang .evalex .operators .booleans .PrefixNotOperator ;
31115import java .math .BigDecimal ;
32116import java .math .MathContext ;
33117import java .math .RoundingMode ;
34118import java .time .ZoneId ;
35119import java .time .format .DateTimeFormatter ;
36- import java .util .*;
120+ import java .util .ArrayList ;
121+ import java .util .Arrays ;
122+ import java .util .Collections ;
123+ import java .util .List ;
124+ import java .util .Locale ;
125+ import java .util .Map ;
126+ import java .util .TreeMap ;
37127import java .util .function .Supplier ;
38128import lombok .Builder ;
39129import lombok .Getter ;
@@ -183,9 +273,11 @@ public class ExpressionConfiguration {
183273 Map .entry ("STR_CONTAINS" , new StringContains ()),
184274 Map .entry ("STR_ENDS_WITH" , new StringEndsWithFunction ()),
185275 Map .entry ("STR_FORMAT" , new StringFormatFunction ()),
276+ Map .entry ("STR_LEFT" , new StringLeftFunction ()),
186277 Map .entry ("STR_LENGTH" , new StringLengthFunction ()),
187278 Map .entry ("STR_LOWER" , new StringLowerFunction ()),
188279 Map .entry ("STR_MATCHES" , new StringMatchesFunction ()),
280+ Map .entry ("STR_RIGHT" , new StringRightFunction ()),
189281 Map .entry ("STR_STARTS_WITH" , new StringStartsWithFunction ()),
190282 Map .entry ("STR_SUBSTRING" , new StringSubstringFunction ()),
191283 Map .entry ("STR_TRIM" , new StringTrimFunction ()),
@@ -305,17 +397,44 @@ public static ExpressionConfiguration defaultConfiguration() {
305397 return ExpressionConfiguration .builder ().build ();
306398 }
307399
400+ private static Map <String , EvaluationValue > getStandardConstants () {
401+
402+ Map <String , EvaluationValue > constants = new TreeMap <>(String .CASE_INSENSITIVE_ORDER );
403+
404+ constants .put ("TRUE" , EvaluationValue .TRUE );
405+ constants .put ("FALSE" , EvaluationValue .FALSE );
406+ constants .put (
407+ "PI" ,
408+ EvaluationValue .numberValue (
409+ new BigDecimal (
410+ "3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679" )));
411+ constants .put (
412+ "E" ,
413+ EvaluationValue .numberValue (
414+ new BigDecimal (
415+ "2.71828182845904523536028747135266249775724709369995957496696762772407663" )));
416+ constants .put ("NULL" , EvaluationValue .NULL_VALUE );
417+
418+ constants .put (
419+ "DT_FORMAT_ISO_DATE_TIME" ,
420+ EvaluationValue .stringValue ("yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]['['VV']']" ));
421+ constants .put (
422+ "DT_FORMAT_LOCAL_DATE_TIME" , EvaluationValue .stringValue ("yyyy-MM-dd'T'HH:mm:ss[.SSS]" ));
423+ constants .put ("DT_FORMAT_LOCAL_DATE" , EvaluationValue .stringValue ("yyyy-MM-dd" ));
424+
425+ return constants ;
426+ }
427+
308428 /**
309429 * Adds additional operators to this configuration.
310430 *
311431 * @param operators variable number of arguments with a map entry holding the operator name and
312432 * implementation. <br>
313433 * Example: <code>
314- * ExpressionConfiguration.defaultConfiguration()
315- * .withAdditionalOperators(
316- * Map.entry("++", new PrefixPlusPlusOperator()),
317- * Map.entry("++", new PostfixPlusPlusOperator()));
318- * </code>
434+ * ExpressionConfiguration.defaultConfiguration() .withAdditionalOperators(
435+ * Map.entry("++", new PrefixPlusPlusOperator()), Map.entry("++", new
436+ * PostfixPlusPlusOperator()));
437+ * </code>
319438 * @return The modified configuration, to allow chaining of methods.
320439 */
321440 @ SafeVarargs
@@ -332,11 +451,10 @@ public final ExpressionConfiguration withAdditionalOperators(
332451 * @param functions variable number of arguments with a map entry holding the functions name and
333452 * implementation. <br>
334453 * Example: <code>
335- * ExpressionConfiguration.defaultConfiguration()
336- * .withAdditionalFunctions(
337- * Map.entry("save", new SaveFunction()),
338- * Map.entry("update", new UpdateFunction()));
339- * </code>
454+ * ExpressionConfiguration.defaultConfiguration() .withAdditionalFunctions(
455+ * Map.entry("save", new SaveFunction()), Map.entry("update", new
456+ * UpdateFunction()));
457+ * </code>
340458 * @return The modified configuration, to allow chaining of methods.
341459 */
342460 @ SafeVarargs
@@ -346,32 +464,4 @@ public final ExpressionConfiguration withAdditionalFunctions(
346464 .forEach (entry -> functionDictionary .addFunction (entry .getKey (), entry .getValue ()));
347465 return this ;
348466 }
349-
350- private static Map <String , EvaluationValue > getStandardConstants () {
351-
352- Map <String , EvaluationValue > constants = new TreeMap <>(String .CASE_INSENSITIVE_ORDER );
353-
354- constants .put ("TRUE" , EvaluationValue .TRUE );
355- constants .put ("FALSE" , EvaluationValue .FALSE );
356- constants .put (
357- "PI" ,
358- EvaluationValue .numberValue (
359- new BigDecimal (
360- "3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679" )));
361- constants .put (
362- "E" ,
363- EvaluationValue .numberValue (
364- new BigDecimal (
365- "2.71828182845904523536028747135266249775724709369995957496696762772407663" )));
366- constants .put ("NULL" , EvaluationValue .NULL_VALUE );
367-
368- constants .put (
369- "DT_FORMAT_ISO_DATE_TIME" ,
370- EvaluationValue .stringValue ("yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]['['VV']']" ));
371- constants .put (
372- "DT_FORMAT_LOCAL_DATE_TIME" , EvaluationValue .stringValue ("yyyy-MM-dd'T'HH:mm:ss[.SSS]" ));
373- constants .put ("DT_FORMAT_LOCAL_DATE" , EvaluationValue .stringValue ("yyyy-MM-dd" ));
374-
375- return constants ;
376- }
377467}
0 commit comments