11package com .hubspot .jinjava .lib .fn ;
22
3+ import static com .hubspot .jinjava .lib .filter .time .DateTimeFormatHelper .FIXED_DATE_TIME_FILTER_NULL_ARG ;
4+
35import com .google .common .collect .Lists ;
46import com .hubspot .jinjava .JinjavaConfig ;
57import com .hubspot .jinjava .doc .annotations .JinjavaDoc ;
68import com .hubspot .jinjava .doc .annotations .JinjavaParam ;
79import com .hubspot .jinjava .doc .annotations .JinjavaSnippet ;
810import com .hubspot .jinjava .el .ext .NamedParameter ;
11+ import com .hubspot .jinjava .features .DateTimeFeatureActivationStrategy ;
12+ import com .hubspot .jinjava .features .FeatureActivationStrategy ;
913import com .hubspot .jinjava .interpret .DeferredValueException ;
1014import com .hubspot .jinjava .interpret .InterpretException ;
1115import com .hubspot .jinjava .interpret .InvalidArgumentException ;
@@ -186,14 +190,15 @@ public static ZonedDateTime today(String... var) {
186190 )
187191 public static String dateTimeFormat (Object var , String ... format ) {
188192 ZoneId zoneOffset = ZoneId .of ("UTC" );
193+ JinjavaInterpreter interpreter = JinjavaInterpreter .getCurrent ();
189194
190195 if (format .length > 1 && format [1 ] != null ) {
191196 String timezone = format [1 ];
192197 try {
193198 zoneOffset = ZoneId .of (timezone );
194199 } catch (DateTimeException e ) {
195200 throw new InvalidArgumentException (
196- JinjavaInterpreter . getCurrent () ,
201+ interpreter ,
197202 "datetimeformat" ,
198203 String .format ("Invalid timezone: %s" , timezone )
199204 );
@@ -205,17 +210,24 @@ public static String dateTimeFormat(Object var, String... format) {
205210 }
206211
207212 if (var == null ) {
208- JinjavaInterpreter
209- .getCurrent ()
210- .addError (
211- TemplateError .fromMissingFilterArgException (
212- new InvalidArgumentException (
213- JinjavaInterpreter .getCurrent (),
214- "datetimeformat" ,
215- "datetimeformat filter called with null datetime"
216- )
213+ interpreter .addError (
214+ TemplateError .fromMissingFilterArgException (
215+ new InvalidArgumentException (
216+ interpreter ,
217+ "datetimeformat" ,
218+ "datetimeformat filter called with null datetime"
217219 )
218- );
220+ )
221+ );
222+
223+ FeatureActivationStrategy feat = interpreter
224+ .getConfig ()
225+ .getFeatures ()
226+ .getActivationStrategy (FIXED_DATE_TIME_FILTER_NULL_ARG );
227+
228+ if (feat .isActive (interpreter .getContext ())) {
229+ var = ((DateTimeFeatureActivationStrategy ) feat ).getActivateAt ();
230+ }
219231 }
220232
221233 ZonedDateTime d = getDateTimeArg (var , zoneOffset );
@@ -300,18 +312,28 @@ public static long unixtimestamp(Object... var) {
300312 Object filterVar = var == null || var .length == 0 ? null : var [0 ];
301313
302314 if (filterVar == null ) {
303- JinjavaInterpreter
304- .getCurrent ()
305- .addError (
306- TemplateError .fromMissingFilterArgException (
307- new InvalidArgumentException (
308- JinjavaInterpreter .getCurrent (),
309- "unixtimestamp" ,
310- "unixtimestamp filter called with null value"
311- )
315+ JinjavaInterpreter interpreter = JinjavaInterpreter .getCurrent ();
316+
317+ interpreter .addError (
318+ TemplateError .fromMissingFilterArgException (
319+ new InvalidArgumentException (
320+ interpreter ,
321+ "unixtimestamp" ,
322+ "unixtimestamp filter called with null datetime"
312323 )
313- );
324+ )
325+ );
326+
327+ FeatureActivationStrategy feat = interpreter
328+ .getConfig ()
329+ .getFeatures ()
330+ .getActivationStrategy (FIXED_DATE_TIME_FILTER_NULL_ARG );
331+
332+ if (feat .isActive (interpreter .getContext ())) {
333+ filterVar = ((DateTimeFeatureActivationStrategy ) feat ).getActivateAt ();
334+ }
314335 }
336+
315337 ZonedDateTime d = getDateTimeArg (filterVar , ZoneOffset .UTC );
316338
317339 if (d == null ) {
0 commit comments