2020 */
2121package eu .openanalytics .containerproxy .spec .expression ;
2222
23+ import java .util .Arrays ;
24+ import java .util .Collection ;
25+ import java .util .List ;
2326import java .util .Map ;
2427import java .util .concurrent .ConcurrentHashMap ;
28+ import java .util .stream .Collectors ;
2529
2630import org .springframework .beans .factory .config .ConfigurableBeanFactory ;
2731import org .springframework .context .ApplicationContext ;
@@ -72,9 +76,9 @@ public SpecExpressionResolver(ApplicationContext appContext) {
7276 this .expressionParser = new SpelExpressionParser ();
7377 }
7478
75- public Object evaluate (String expression , SpecExpressionContext context ) {
79+ public < T > T evaluate (String expression , SpecExpressionContext context , Class < T > resType ) {
7680 if (expression == null ) return null ;
77- if (expression .isEmpty ()) return "" ;
81+ if (expression .isEmpty ()) return null ;
7882
7983 Expression expr = this .expressionParser .parseExpression (expression , this .beanExpressionParserContext );
8084
@@ -95,18 +99,27 @@ public Object evaluate(String expression, SpecExpressionContext context) {
9599 evaluationCache .put (context , sec );
96100 }
97101
98- return expr .getValue (sec );
102+ return expr .getValue (sec , resType );
99103 }
100104
101105 public String evaluateToString (String expression , SpecExpressionContext context ) {
102- return String .valueOf (evaluate (expression , context ));
106+ String res = evaluate (expression , context , String .class );
107+ if (res == null ) {
108+ return "" ;
109+ }
110+ return res ;
103111 }
104112
105113 public Long evaluateToLong (String expression , SpecExpressionContext context ) {
106- return Long . valueOf ( evaluateToString ( expression , context ) );
114+ return evaluate ( expression , context , Long . class );
107115 }
108116
109117 public Boolean evaluateToBoolean (String expression , SpecExpressionContext context ) {
110- return Boolean . valueOf ( evaluateToString ( expression , context ) );
118+ return evaluate ( expression , context , Boolean . class );
111119 }
120+
121+ public List <String > evaluateToList (String [] expressions , SpecExpressionContext context ) {
122+ return Arrays .stream (expressions ).flatMap ( (el ) ->
123+ ((List <String >) evaluate (el , context , List .class )).stream ()).collect (Collectors .toList ());
124+ }
112125}
0 commit comments