public static Object fieldTypeFromStream()

in core/src/main/java/com/jetbrains/youtrackdb/internal/core/serialization/serializer/StringSerializerHelper.java [80:217]


  public static Object fieldTypeFromStream(
      DatabaseSessionEmbedded db, final EntityImpl entity, PropertyTypeInternal iType,
      final Object iValue) {
    if (iValue == null) {
      return null;
    }

    if (iType == null) {
      iType = PropertyTypeInternal.EMBEDDED;
    }

    switch (iType) {
      case STRING:
        if (iValue instanceof String s) {
          return decode(IOUtils.getStringContent(s));
        }
        return iValue.toString();

      case INTEGER: {
        if (iValue instanceof Integer) {
          return iValue;
        }
        final var valueString = IOUtils.getStringContent(iValue);
        if (valueString.isEmpty()) {
          return null;
        }
        return Integer.parseInt(valueString);
      }

      case BOOLEAN: {
        if (iValue instanceof Boolean) {
          return iValue;
        }
        final var valueString = IOUtils.getStringContent(iValue);
        if (valueString.isEmpty()) {
          return null;
        }
        return Boolean.parseBoolean(valueString);
      }

      case DECIMAL: {
        if (iValue instanceof BigDecimal) {
          return iValue;
        }
        final var valueString = IOUtils.getStringContent(iValue);
        if (valueString.isEmpty()) {
          return null;
        }
        return new BigDecimal(valueString);
      }

      case FLOAT: {
        if (iValue instanceof Float) {
          return iValue;
        }
        final var valueString = IOUtils.getStringContent(iValue);
        if (valueString.isEmpty()) {
          return null;
        }
        return Float.parseFloat(valueString);
      }

      case LONG: {
        if (iValue instanceof Long) {
          return iValue;
        }
        final var valueString = IOUtils.getStringContent(iValue);
        if (valueString.isEmpty()) {
          return null;
        }
        return Long.parseLong(valueString);
      }

      case DOUBLE: {
        if (iValue instanceof Double) {
          return iValue;
        }
        final var valueString = IOUtils.getStringContent(iValue);
        if (valueString.isEmpty()) {
          return null;
        }
        return Double.parseDouble(valueString);
      }

      case SHORT: {
        if (iValue instanceof Short) {
          return iValue;
        }
        final var valueString = IOUtils.getStringContent(iValue);
        if (valueString.isEmpty()) {
          return null;
        }
        return Short.parseShort(valueString);
      }

      case BYTE: {
        if (iValue instanceof Byte) {
          return iValue;
        }
        final var valueString = IOUtils.getStringContent(iValue);
        if (valueString.isEmpty()) {
          return null;
        }
        return Byte.parseByte(valueString);
      }

      case BINARY:
        return getBinaryContent(iValue);

      case DATE:
      case DATETIME:
        if (iValue instanceof Date) {
          return iValue;
        }
        return new Date(Long.parseLong(IOUtils.getStringContent(iValue)));

      case LINK:
        if (iValue instanceof RID) {
          return iValue.toString();
        } else if (iValue instanceof String) {
          return RecordIdInternal.fromString((String) iValue, false);
        } else {
          return ((DBRecord) iValue).getIdentity().toString();
        }

      case EMBEDDED:
        // EMBEDDED
        return null;
      case EMBEDDEDMAP:
        // RECORD
        final var value = (String) iValue;
        return RecordSerializerCSVAbstract.embeddedMapFromStream(db,
            entity, null, value, null);
    }

    throw new IllegalArgumentException(
        "Type " + iType + " does not support converting value: " + iValue);
  }