private List transOdpsArrayToJavaList()

in odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/ReaderProxy.java [458:559]


    private List transOdpsArrayToJavaList(List odpsArray, ArrayTypeInfo typeInfo) {
        TypeInfo eleType = typeInfo.getElementTypeInfo();
        List result = new ArrayList();
        switch (eleType.getOdpsType()) {
          // warn:array<double> [1.2, 3.4]  被转为了:"["1.2", "3.4"]", 本来应该被转换成 "[1.2, 3.4]"
          // 注意回归Case覆盖
          case BIGINT:
          case DOUBLE:
          case INT:
          case FLOAT:
          case DECIMAL:
          case TINYINT:
          case SMALLINT:
              for (Object item : odpsArray) {
                  Object object = item;
                  result.add(object == null ? NULL_INDICATOR : object);
                }
                return result;
          case BOOLEAN: // 未调整array<Boolean> 问题
          case STRING:
          case VARCHAR:
          case CHAR:
          case TIMESTAMP:
          case DATE:
            for (Object item : odpsArray) {
              Object object = item;
              result.add(object == null ? NULL_INDICATOR : object.toString());
            }
            return result;
          /**
           * 日期类型
           */
          case DATETIME:
            for (Object item : odpsArray) {
              Date dateVal = (Date) item;
              result.add(dateVal == null ? NULL_INDICATOR : dateFormat.format(dateVal));
            }
            return result;
          /**
           * 字节数组
           */
          case BINARY:
            for (Object item : odpsArray) {
              Binary binaryVal = (Binary) item;
              result.add(binaryVal == null ? NULL_INDICATOR :
                  Base64.encodeBase64(binaryVal.data()));
            }
            return result;
          /**
           * 日期间隔
           */
          case INTERVAL_DAY_TIME:
            for (Object item : odpsArray) {
              IntervalDayTime dayTimeVal = (IntervalDayTime) item;
              result.add(dayTimeVal == null ? NULL_INDICATOR :
                  transIntervalDayTimeToJavaMap(dayTimeVal));
            }
            return result;
          /**
           * 年份间隔
           */
          case INTERVAL_YEAR_MONTH:
            for (Object item : odpsArray) {
              IntervalYearMonth yearMonthVal = (IntervalYearMonth) item;
              result.add(yearMonthVal == null ? NULL_INDICATOR :
                  transIntervalYearMonthToJavaMap(yearMonthVal));
            }
            return result;
          /**
           * 结构体
           */
          case STRUCT:
            for (Object item : odpsArray) {
              Struct structVal = (Struct) item;
              result.add(structVal == null ? NULL_INDICATOR :
                  transOdpsStructToJavaMap(structVal));
            }
            return result;
          /**
           * MAP类型
           */
          case MAP:
            for (Object item : odpsArray) {
              Map mapVal = (Map) item;
              result.add(mapVal == null ? NULL_INDICATOR :
                  transOdpsMapToJavaMap(mapVal, (MapTypeInfo) eleType));
            }
            return result;
          /**
           * ARRAY类型
           */
          case ARRAY:
            for (Object item : odpsArray) {
              List arrayVal = (List) item;
              result.add(arrayVal == null ? NULL_INDICATOR :
                  transOdpsArrayToJavaList(arrayVal, (ArrayTypeInfo) eleType));
            }
            return result;
          default:
            throw new IllegalArgumentException("decode record failed. column type: " +  eleType.getTypeName());
        }
      }