private static Object formattedTimestamp()

in flink/flink1.16-shims/src/main/java/org/apache/zeppelin/flink/PrintUtils.java [91:251]


  private static Object formattedTimestamp(
          Object field, LogicalType fieldType, ZoneId sessionTimeZone) {
    final LogicalTypeRoot typeRoot = fieldType.getTypeRoot();
    if (field == null) {
      return "null";
    }
    switch (typeRoot) {
      case TIMESTAMP_WITHOUT_TIME_ZONE:
      case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
        return formatTimestampField(field, fieldType, sessionTimeZone);
      case TIME_WITHOUT_TIME_ZONE:
        return formatTimeField(field);
      case ARRAY:
        LogicalType elementType = ((ArrayType) fieldType).getElementType();
        if (field instanceof List) {
          List<?> array = (List<?>) field;
          Object[] formattedArray = new Object[array.size()];
          for (int i = 0; i < array.size(); i++) {
            formattedArray[i] =
                    formattedTimestamp(array.get(i), elementType, sessionTimeZone);
          }
          return formattedArray;
        } else if (field.getClass().isArray()) {
          // primitive type
          if (field.getClass() == byte[].class) {
            byte[] array = (byte[]) field;
            Object[] formattedArray = new Object[array.length];
            for (int i = 0; i < array.length; i++) {
              formattedArray[i] =
                      formattedTimestamp(array[i], elementType, sessionTimeZone);
            }
            return formattedArray;
          } else if (field.getClass() == short[].class) {
            short[] array = (short[]) field;
            Object[] formattedArray = new Object[array.length];
            for (int i = 0; i < array.length; i++) {
              formattedArray[i] =
                      formattedTimestamp(array[i], elementType, sessionTimeZone);
            }
            return formattedArray;
          } else if (field.getClass() == int[].class) {
            int[] array = (int[]) field;
            Object[] formattedArray = new Object[array.length];
            for (int i = 0; i < array.length; i++) {
              formattedArray[i] =
                      formattedTimestamp(array[i], elementType, sessionTimeZone);
            }
            return formattedArray;
          } else if (field.getClass() == long[].class) {
            long[] array = (long[]) field;
            Object[] formattedArray = new Object[array.length];
            for (int i = 0; i < array.length; i++) {
              formattedArray[i] =
                      formattedTimestamp(array[i], elementType, sessionTimeZone);
            }
            return formattedArray;
          } else if (field.getClass() == float[].class) {
            float[] array = (float[]) field;
            Object[] formattedArray = new Object[array.length];
            for (int i = 0; i < array.length; i++) {
              formattedArray[i] =
                      formattedTimestamp(array[i], elementType, sessionTimeZone);
            }
            return formattedArray;
          } else if (field.getClass() == double[].class) {
            double[] array = (double[]) field;
            Object[] formattedArray = new Object[array.length];
            for (int i = 0; i < array.length; i++) {
              formattedArray[i] =
                      formattedTimestamp(array[i], elementType, sessionTimeZone);
            }
            return formattedArray;
          } else if (field.getClass() == boolean[].class) {
            boolean[] array = (boolean[]) field;
            Object[] formattedArray = new Object[array.length];
            for (int i = 0; i < array.length; i++) {
              formattedArray[i] =
                      formattedTimestamp(array[i], elementType, sessionTimeZone);
            }
            return formattedArray;
          } else if (field.getClass() == char[].class) {
            char[] array = (char[]) field;
            Object[] formattedArray = new Object[array.length];
            for (int i = 0; i < array.length; i++) {
              formattedArray[i] =
                      formattedTimestamp(array[i], elementType, sessionTimeZone);
            }
            return formattedArray;
          } else {
            // non-primitive type
            Object[] array = (Object[]) field;
            Object[] formattedArray = new Object[array.length];
            for (int i = 0; i < array.length; i++) {
              formattedArray[i] =
                      formattedTimestamp(array[i], elementType, sessionTimeZone);
            }
            return formattedArray;
          }
        } else {
          return field;
        }
      case ROW:
        if (fieldType instanceof RowType && field instanceof Row) {
          Row row = (Row) field;
          Row formattedRow = new Row(row.getKind(), row.getArity());
          for (int i = 0; i < ((RowType) fieldType).getFields().size(); i++) {
            LogicalType type = ((RowType) fieldType).getFields().get(i).getType();
            formattedRow.setField(
                    i, formattedTimestamp(row.getField(i), type, sessionTimeZone));
          }
          return formattedRow;

        } else if (fieldType instanceof RowType && field instanceof RowData) {
          RowData rowData = (RowData) field;
          Row formattedRow = new Row(rowData.getRowKind(), rowData.getArity());
          for (int i = 0; i < ((RowType) fieldType).getFields().size(); i++) {
            LogicalType type = ((RowType) fieldType).getFields().get(i).getType();
            RowData.FieldGetter fieldGetter = RowData.createFieldGetter(type, i);
            formattedRow.setField(
                    i,
                    formattedTimestamp(
                            fieldGetter.getFieldOrNull(rowData),
                            type,
                            sessionTimeZone));
          }
          return formattedRow;
        } else {
          return field;
        }
      case MAP:
        LogicalType keyType = ((MapType) fieldType).getKeyType();
        LogicalType valueType = ((MapType) fieldType).getValueType();
        if (fieldType instanceof MapType && field instanceof Map) {
          Map<Object, Object> map = ((Map) field);
          Map<Object, Object> formattedMap = new HashMap<>(map.size());
          for (Object key : map.keySet()) {
            formattedMap.put(
                    formattedTimestamp(key, keyType, sessionTimeZone),
                    formattedTimestamp(map.get(key), valueType, sessionTimeZone));
          }
          return formattedMap;
        } else if (fieldType instanceof MapType && field instanceof MapData) {
          MapData map = ((MapData) field);
          Map<Object, Object> formattedMap = new HashMap<>(map.size());
          Object[] keyArray =
                  (Object[]) formattedTimestamp(map.keyArray(), keyType, sessionTimeZone);
          Object[] valueArray =
                  (Object[])
                          formattedTimestamp(
                                  map.valueArray(), valueType, sessionTimeZone);
          for (int i = 0; i < keyArray.length; i++) {
            formattedMap.put(keyArray[i], valueArray[i]);
          }
          return formattedMap;
        } else {
          return field;
        }
      default:
        return field;
    }
  }