String traitsToDataFormat()

in objectModel/Java/objectmodel/src/main/java/com/microsoft/commondatamodel/objectmodel/utilities/TraitToPropertyMap.java [560:669]


  String traitsToDataFormat(final boolean onlyFromProperty) {
    boolean isArray = false;
    boolean isBig = false;
    boolean isSmall = false;
    boolean isInteger = false;
    boolean probablyJson = false;
    Enum<CdmDataFormat> baseType = CdmDataFormat.Unknown;

    final CdmTraitCollection traits = this.getTraits();

    if (traits != null) {
      for (final CdmTraitReferenceBase trait : traits) {
        if (onlyFromProperty &&
                (trait instanceof CdmTraitGroupReference || !((CdmTraitReference)trait).isFromProperty())) {
          continue;
        }

        final String traitName = trait.fetchObjectDefinitionName();
        if (traitName != null) {
          switch (CdmDataFormatTrait.fromString(traitName)) {
            case ARRAY:
              isArray = true;
              break;
            case BIG:
              isBig = true;
              break;
            case SMALL:
              isSmall = true;
              break;
            case INTEGER:
              isInteger = true;
              break;
            case FLOATING_POINT:
              baseType = CdmDataFormat.Float;
              break;
            case CHARACTER:
              if (!CdmDataFormat.Guid.equals(baseType)) {
                baseType = CdmDataFormat.Char;
              }
              break;
            case BYTE:
              baseType = CdmDataFormat.Byte;
              break;
            case DATE:
              if (CdmDataFormat.Time.equals(baseType)) {
                baseType = CdmDataFormat.DateTime;
              } else {
                baseType = CdmDataFormat.Date;
              }
              break;
            case TIME:
              if (CdmDataFormat.Date.equals(baseType)) {
                baseType = CdmDataFormat.DateTime;
              } else {
                baseType = CdmDataFormat.Time;
              }
              break;
            case DATETIME_OFFSET:
              if (CdmDataFormat.DateTime.equals(baseType)) {
                baseType = CdmDataFormat.DateTimeOffset;
              }
              break;
            case BOOLEAN:
              baseType = CdmDataFormat.Boolean;
              break;
            case NUMERIC_SHAPED:
              baseType = CdmDataFormat.Decimal;
              break;
            case GUID:
              baseType = CdmDataFormat.Guid;
              break;
            case JSON:
              baseType = isArray ? CdmDataFormat.Json : CdmDataFormat.Unknown;
              probablyJson = true;
              break;
            case DEFAULT:
            default:
              break;
          }
        }
      }

      if (isArray) {
        if (probablyJson) {
          baseType = CdmDataFormat.Json;
        } else if (CdmDataFormat.Char.equals(baseType)) {
          baseType = CdmDataFormat.String;
        } else if (CdmDataFormat.Byte.equals(baseType)) {
          baseType = CdmDataFormat.Binary;
        } else if (!CdmDataFormat.Guid.equals(baseType)) {
          baseType = CdmDataFormat.Unknown;
        }
      }

      if (CdmDataFormat.Float.equals(baseType) && isBig) {
        baseType = CdmDataFormat.Double;
      }
      if (isInteger && isBig) {
        baseType = CdmDataFormat.Int64;
      }
      else if (isInteger && isSmall) {
        baseType = CdmDataFormat.Int16;
      }
      else if (isInteger) {
        baseType = CdmDataFormat.Int32;
      }
    }

    return baseType.name();
  }