private Map transOdpsStructToJavaMap()

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


    private Map transOdpsStructToJavaMap(Struct odpsStruct) {
        Map result = new HashMap();
        for (int i = 0; i < odpsStruct.getFieldCount(); i++) {
          String fieldName = odpsStruct.getFieldName(i);
          Object fieldValue = odpsStruct.getFieldValue(i);
          TypeInfo fieldType = odpsStruct.getFieldTypeInfo(i);
          switch (fieldType.getOdpsType()) {
            case BIGINT:
            case DOUBLE:
            case BOOLEAN:
            case STRING:
            case DECIMAL:
            case TINYINT:
            case SMALLINT:
            case INT:
            case FLOAT:
            case VARCHAR:
            case CHAR:
            case TIMESTAMP:
            case DATE:
              result.put(fieldName, fieldValue == null ? NULL_INDICATOR : fieldValue.toString());
              break;
            /**
             * 日期类型
             */
            case DATETIME:
              Date dateVal = (Date) fieldValue;
              result.put(fieldName, dateVal == null ? NULL_INDICATOR : dateFormat.format(dateVal));
              break;
            /**
             * 字节数组
             */
            case BINARY:
              Binary binaryVal = (Binary) fieldValue;
              result.put(fieldName, binaryVal == null ? NULL_INDICATOR :
                  Base64.encodeBase64(binaryVal.data()));
              break;
            /**
             * 日期间隔
             */
            case INTERVAL_DAY_TIME:
              IntervalDayTime dayTimeVal = (IntervalDayTime) fieldValue;
              result.put(fieldName, dayTimeVal == null ? NULL_INDICATOR :
                      transIntervalDayTimeToJavaMap(dayTimeVal));
              break;
            /**
             * 年份间隔
             */
            case INTERVAL_YEAR_MONTH:
              IntervalYearMonth yearMonthVal = (IntervalYearMonth) fieldValue;
              result.put(fieldName, yearMonthVal == null ? NULL_INDICATOR :
                  transIntervalYearMonthToJavaMap(yearMonthVal));
              break;
              /**
             * 结构体
             */
            case STRUCT:
              Struct structVal = (Struct) fieldValue;
              result.put(fieldName, structVal == null ? NULL_INDICATOR :
                  transOdpsStructToJavaMap(structVal));
              break;
            /**
             * MAP类型
             */
            case MAP:
              Map mapVal = (Map) fieldValue;
              result.put(fieldName, mapVal == null ? NULL_INDICATOR :
                  transOdpsMapToJavaMap(mapVal, (MapTypeInfo) fieldType));
              break;
            /**
             * ARRAY类型
             */
            case ARRAY:
              List arrayVal = (List) fieldValue;
              result.put(fieldName, arrayVal == null ? NULL_INDICATOR :
                  transOdpsArrayToJavaList(arrayVal, (ArrayTypeInfo) fieldType));
              break;
            default:
              throw new IllegalArgumentException("decode record failed. column type: " + fieldType.getTypeName());
          }
        }

        return result;
      }