/** * Checks whether we have a custom conversion registered for the given value into an arbitrary simple Mongo type. * Returns the converted value if so. If not, we perform special enum handling or simply return the value as is. * * @param value * @return */ @Nullable private Object getPotentiallyConvertedSimpleWrite(@Nullable Object value) { if (value == null) { return null; } Optional<Class<?>> customTarget = conversions.getCustomWriteTarget(value.getClass()); if (customTarget.isPresent()) { return conversionService.convert(value, customTarget.get()); } if (ObjectUtils.isArray(value)) { if (value instanceof byte[]) { return value; } return asCollection(value); } return Enum.class.isAssignableFrom(value.getClass()) ? ((Enum<?>) value).name() : value; }
private void writeToBucket(String path, @Nullable Object value, RedisData sink, Class<?> propertyType) { if (value == null || (value instanceof Optional && !((Optional<?>) value).isPresent())) { return; } if (customConversions.hasCustomWriteTarget(value.getClass())) { Optional<Class<?>> targetType = customConversions.getCustomWriteTarget(value.getClass()); if (!propertyType.isPrimitive() && !targetType.filter(it -> ClassUtils.isAssignable(Map.class, it)).isPresent() && customConversions.isSimpleType(value.getClass()) && value.getClass() != propertyType) { typeMapper.writeType(value.getClass(), sink.getBucket().getPropertyPath(path)); } if (targetType.filter(it -> ClassUtils.isAssignable(Map.class, it)).isPresent()) { Map<?, ?> map = (Map<?, ?>) conversionService.convert(value, targetType.get()); for (Map.Entry<?, ?> entry : map.entrySet()) { sink.getBucket().put(path + (StringUtils.hasText(path) ? "." : "") + entry.getKey(), toBytes(entry.getValue())); } } else if (targetType.filter(it -> ClassUtils.isAssignable(byte[].class, it)).isPresent()) { sink.getBucket().put(path, toBytes(value)); } else { throw new IllegalArgumentException( String.format("Cannot convert value '%s' of type %s to bytes.", value, value.getClass())); } } }
Optional<Class<?>> customTarget = conversions.getCustomWriteTarget(entityType, Document.class);
Optional<Class<?>> target = conversions.getCustomWriteTarget(obj.getClass()); if (target.isPresent()) { return conversionService.convert(obj, target.get());
if (!StringUtils.hasText(path) && customConversions.getCustomWriteTarget(value.getClass()).equals(byte[].class)) { sink.getBucket().put(StringUtils.hasText(path) ? path : "_raw", conversionService.convert(value, byte[].class)); } else {
Optional<Class<?>> basicTargetType = conversions.getCustomWriteTarget(obj.getClass());
/** * Checks whether we have a custom conversion registered for the given value into an arbitrary simple Mongo type. * Returns the converted value if so. If not, we perform special enum handling or simply return the value as is. * * @param value * @return */ @Nullable private Object getPotentiallyConvertedSimpleWrite(@Nullable Object value) { if (value == null) { return null; } Optional<Class<?>> customTarget = conversions.getCustomWriteTarget(value.getClass()); if (customTarget.isPresent()) { return conversionService.convert(value, customTarget.get()); } if (ObjectUtils.isArray(value)) { if (value instanceof byte[]) { return value; } return asCollection(value); } return Enum.class.isAssignableFrom(value.getClass()) ? ((Enum<?>) value).name() : value; }
Optional<Class<?>> customTarget = conversions.getCustomWriteTarget(entityType, Document.class);
Optional<Class<?>> target = conversions.getCustomWriteTarget(obj.getClass()); if (target.isPresent()) { return conversionService.convert(obj, target.get());
/** * get the target conversion type * * @param type * @return */ protected Optional<Class<?>> getCustomWriteTargetType(Class<?> type) { return customConversions.getCustomWriteTarget(type); }
Optional<Class<?>> basicTargetType = conversions.getCustomWriteTarget(obj.getClass());
@Override public Class<?> getWriteClassFor(Class<?> clazz) { return this.conversions.getCustomWriteTarget(clazz).orElse(clazz); } }
@Override public Class<?> getWriteClassFor(Class<?> clazz) { return this.conversions.getCustomWriteTarget(clazz).orElse(clazz); } }
/** * Returns whether we have a custom conversion registered to readTargetWriteLocl into a Mongo native type. The * returned type might be a subclass of the given expected type though. * * @param sourceType must not be {@literal null} * @return */ public boolean hasCustomWriteTarget(Class<?> sourceType) { Assert.notNull(sourceType, "Source type must not be null!"); return getCustomWriteTarget(sourceType).isPresent(); }
private Object getPotentiallyConvertedSimpleWrite(final Object value) { if (value == null) { return null; } Optional<Class<?>> customTarget = conversions.getCustomWriteTarget(value.getClass()); return customTarget.map(it -> (Object) conversionService.convert(value, it)) .orElseGet(() -> Enum.class.isAssignableFrom(value.getClass()) ? ((Enum<?>) value).name() : value); }
@Override public Object convertForWriteIfNeeded(Object value) { if (value == null) { return null; } return this.conversions.getCustomWriteTarget(value.getClass()) // .map(it -> (Object) this.conversionService.convert(value, it)) // .orElse(value); }
@Override public Object convertForWriteIfNeeded(Object value) { if (value == null) { return null; } return this.conversions.getCustomWriteTarget(value.getClass()) // .map(it -> (Object) this.conversionService.convert(value, it)) // .orElse(value); }
private Object getPotentiallyConvertedSimpleWrite(final Object value) { if (value == null) { return null; } Optional<Class<?>> customTarget = conversions.getCustomWriteTarget(value.getClass()); return customTarget.map(it -> (Object) conversionService.convert(value, it)) .orElseGet(() -> Enum.class.isAssignableFrom(value.getClass()) ? ((Enum<?>) value).name() : value); }
/** * Retrieve the data type based on the given {@code type}. Cassandra {@link DataType types} are determined using * simple types and configured {@link org.springframework.data.convert.CustomConversions}. * * @param type must not be {@literal null}. * @return the Cassandra {@link DataType type}. * @see org.springframework.data.convert.CustomConversions * @see CassandraSimpleTypeHolder * @since 1.5 */ public DataType getDataType(Class<?> type) { return doGetDataType(type, this.customConversions.getCustomWriteTarget(type).orElse(type)); }
private Class<?> getTargetType(CassandraPersistentProperty property) { return getCustomConversions().getCustomWriteTarget(property.getType()).orElseGet(() -> { if (property.isAnnotationPresent(CassandraType.class)) { return getPropertyTargetType(property); } if (property.isCompositePrimaryKey() || property.isCollectionLike() || getCustomConversions().isSimpleType(property.getType())) { return property.getType(); } return getPropertyTargetType(property); }); }