@@ -119,61 +119,14 @@ public static Object fromJson(Type type, JsonNode defaultValue) {
119119 }
120120 return uuid ;
121121 case DATE :
122- if (defaultValue .isTextual ()) {
123- return DateTimeUtil .isoDateToDays (defaultValue .textValue ());
124- } else if (defaultValue .isIntegralNumber () && defaultValue .canConvertToInt ()) {
125- return defaultValue .intValue ();
126- } else {
127- throw new IllegalArgumentException (
128- String .format ("Cannot parse default as a %s value: %s" , type , defaultValue ));
129- }
122+ return parseDateValue (type , defaultValue );
130123 case TIME :
131- if (defaultValue .isTextual ()) {
132- return DateTimeUtil .isoTimeToMicros (defaultValue .textValue ());
133- } else if (defaultValue .isIntegralNumber () && defaultValue .canConvertToLong ()) {
134- return defaultValue .longValue ();
135- } else {
136- throw new IllegalArgumentException (
137- String .format ("Cannot parse default as a %s value: %s" , type , defaultValue ));
138- }
124+ return parseTimeValue (type , defaultValue );
139125 case TIMESTAMP :
140- if (defaultValue .isTextual ()) {
141- if (((Types .TimestampType ) type ).shouldAdjustToUTC ()) {
142- String timestampTz = defaultValue .textValue ();
143- Preconditions .checkArgument (
144- DateTimeUtil .isUTCTimestamptz (timestampTz ),
145- "Cannot parse default as a %s value: %s, offset must be +00:00" ,
146- type ,
147- defaultValue );
148- return DateTimeUtil .isoTimestamptzToMicros (timestampTz );
149- } else {
150- return DateTimeUtil .isoTimestampToMicros (defaultValue .textValue ());
151- }
152- } else if (defaultValue .isIntegralNumber () && defaultValue .canConvertToLong ()) {
153- return defaultValue .longValue ();
154- } else {
155- throw new IllegalArgumentException (
156- String .format ("Cannot parse default as a %s value: %s" , type , defaultValue ));
157- }
126+ return parseTimestampValue (type , defaultValue );
158127 case TIMESTAMP_NANO :
159- if (defaultValue .isTextual ()) {
160- if (((Types .TimestampNanoType ) type ).shouldAdjustToUTC ()) {
161- String timestampTzNano = defaultValue .textValue ();
162- Preconditions .checkArgument (
163- DateTimeUtil .isUTCTimestamptz (timestampTzNano ),
164- "Cannot parse default as a %s value: %s, offset must be +00:00" ,
165- type ,
166- defaultValue );
167- return DateTimeUtil .isoTimestamptzToNanos (timestampTzNano );
168- } else {
169- return DateTimeUtil .isoTimestampToNanos (defaultValue .textValue ());
170- }
171- } else if (defaultValue .isIntegralNumber () && defaultValue .canConvertToLong ()) {
172- return defaultValue .longValue ();
173- } else {
174- throw new IllegalArgumentException (
175- String .format ("Cannot parse default as a %s value: %s" , type , defaultValue ));
176- }
128+ return parseTimestampNanoValue (type , defaultValue );
129+
177130 case FIXED :
178131 Preconditions .checkArgument (
179132 defaultValue .isTextual (), "Cannot parse default as a %s value: %s" , type , defaultValue );
@@ -434,4 +387,68 @@ public static void toJson(Type type, Object defaultValue, JsonGenerator generato
434387 throw new UnsupportedOperationException (String .format ("Type: %s is not supported" , type ));
435388 }
436389 }
390+
391+ private static Object parseDateValue (Type type , JsonNode value ) {
392+ if (value .isTextual ()) {
393+ return DateTimeUtil .isoDateToDays (value .textValue ());
394+ } else if (value .isIntegralNumber () && value .canConvertToInt ()) {
395+ return value .intValue ();
396+ } else {
397+ throw new IllegalArgumentException (
398+ String .format ("Cannot parse default as a %s value: %s" , type , value ));
399+ }
400+ }
401+
402+ private static Object parseTimeValue (Type type , JsonNode value ) {
403+ if (value .isTextual ()) {
404+ return DateTimeUtil .isoTimeToMicros (value .textValue ());
405+ } else if (value .isIntegralNumber () && value .canConvertToLong ()) {
406+ return value .longValue ();
407+ } else {
408+ throw new IllegalArgumentException (
409+ String .format ("Cannot parse default as a %s value: %s" , type , value ));
410+ }
411+ }
412+
413+ private static Object parseTimestampValue (Type type , JsonNode value ) {
414+ if (value .isTextual ()) {
415+ if (((Types .TimestampType ) type ).shouldAdjustToUTC ()) {
416+ String timestampTz = value .textValue ();
417+ Preconditions .checkArgument (
418+ DateTimeUtil .isUTCTimestamptz (timestampTz ),
419+ "Cannot parse default as a %s value: %s, offset must be +00:00" ,
420+ type ,
421+ value );
422+ return DateTimeUtil .isoTimestamptzToMicros (timestampTz );
423+ } else {
424+ return DateTimeUtil .isoTimestampToMicros (value .textValue ());
425+ }
426+ } else if (value .isIntegralNumber () && value .canConvertToLong ()) {
427+ return value .longValue ();
428+ } else {
429+ throw new IllegalArgumentException (
430+ String .format ("Cannot parse default as a %s value: %s" , type , value ));
431+ }
432+ }
433+
434+ private static Object parseTimestampNanoValue (Type type , JsonNode value ) {
435+ if (value .isTextual ()) {
436+ if (((Types .TimestampNanoType ) type ).shouldAdjustToUTC ()) {
437+ String timestampTzNano = value .textValue ();
438+ Preconditions .checkArgument (
439+ DateTimeUtil .isUTCTimestamptz (timestampTzNano ),
440+ "Cannot parse default as a %s value: %s, offset must be +00:00" ,
441+ type ,
442+ value );
443+ return DateTimeUtil .isoTimestamptzToNanos (timestampTzNano );
444+ } else {
445+ return DateTimeUtil .isoTimestampToNanos (value .textValue ());
446+ }
447+ } else if (value .isIntegralNumber () && value .canConvertToLong ()) {
448+ return value .longValue ();
449+ } else {
450+ throw new IllegalArgumentException (
451+ String .format ("Cannot parse default as a %s value: %s" , type , value ));
452+ }
453+ }
437454}
0 commit comments