public ReactiveMongoParameterAccessor(MongoQueryMethod method, Object[] values) { super(method, values); this.values = values; this.subscriptions = new ArrayList<>(values.length); for (int i = 0; i < values.length; i++) { Object value = values[i]; if (value == null || !ReactiveWrappers.supports(value.getClass())) { subscriptions.add(null); continue; } if (ReactiveWrappers.isSingleValueType(value.getClass())) { subscriptions.add(ReactiveWrapperConverters.toWrapper(value, Mono.class).toProcessor()); } else { subscriptions.add(ReactiveWrapperConverters.toWrapper(value, Flux.class).collectList().toProcessor()); } } }
/** * Creates a new {@link ElasticsearchParametersParameterAccessor}. * * @param method must not be {@literal null}. * @param values must not be {@literal null}. */ ReactiveElasticsearchParametersParameterAccessor(ReactiveElasticsearchQueryMethod method, Object[] values) { super(method, values); this.subscriptions = new ArrayList<>(values.length); for (int i = 0; i < values.length; i++) { Object value = values[i]; if (value == null || !ReactiveWrappers.supports(value.getClass())) { subscriptions.add(null); continue; } if (ReactiveWrappers.isSingleValueType(value.getClass())) { subscriptions.add(ReactiveWrapperConverters.toWrapper(value, Mono.class).toProcessor()); } else { subscriptions.add(ReactiveWrapperConverters.toWrapper(value, Flux.class).collectList().toProcessor()); } } }
public ReactiveElasticsearchQueryMethod(Method method, RepositoryMetadata metadata, ProjectionFactory factory, MappingContext<? extends ElasticsearchPersistentEntity<?>, ElasticsearchPersistentProperty> mappingContext) { super(method, metadata, factory, mappingContext); this.method = method; if (hasParameterOfType(method, Pageable.class)) { TypeInformation<?> returnType = ClassTypeInformation.fromReturnTypeOf(method); boolean multiWrapper = ReactiveWrappers.isMultiValueType(returnType.getType()); boolean singleWrapperWithWrappedPageableResult = ReactiveWrappers.isSingleValueType(returnType.getType()) && (PAGE_TYPE.isAssignableFrom(returnType.getRequiredComponentType()) || SLICE_TYPE.isAssignableFrom(returnType.getRequiredComponentType())); if (singleWrapperWithWrappedPageableResult) { throw new InvalidDataAccessApiUsageException( String.format("'%s.%s' must not use sliced or paged execution. Please use Flux.buffer(size, skip).", ClassUtils.getShortName(method.getDeclaringClass()), method.getName())); } if (!multiWrapper) { throw new IllegalStateException(String.format( "Method has to use a either multi-item reactive wrapper return type or a wrapped Page/Slice type. Offending method: %s", method.toString())); } if (hasParameterOfType(method, Sort.class)) { throw new IllegalStateException(String.format("Method must not have Pageable *and* Sort parameter. " + "Use sorting capabilities on Pageble instead! Offending method: %s", method.toString())); } } }
boolean singleWrapperWithWrappedPageableResult = ReactiveWrappers.isSingleValueType(returnType.getType()) && (PAGE_TYPE.isAssignableFrom(returnType.getRequiredComponentType()) || SLICE_TYPE.isAssignableFrom(returnType.getRequiredComponentType()));
public ReactiveMongoParameterAccessor(MongoQueryMethod method, Object[] values) { super(method, values); this.values = values; this.subscriptions = new ArrayList<>(values.length); for (int i = 0; i < values.length; i++) { Object value = values[i]; if (value == null || !ReactiveWrappers.supports(value.getClass())) { subscriptions.add(null); continue; } if (ReactiveWrappers.isSingleValueType(value.getClass())) { subscriptions.add(ReactiveWrapperConverters.toWrapper(value, Mono.class).toProcessor()); } else { subscriptions.add(ReactiveWrapperConverters.toWrapper(value, Flux.class).collectList().toProcessor()); } } }
boolean singleWrapperWithWrappedPageableResult = ReactiveWrappers.isSingleValueType(returnType.getType()) && (PAGE_TYPE.isAssignableFrom(returnType.getRequiredComponentType()) || SLICE_TYPE.isAssignableFrom(returnType.getRequiredComponentType()));
/** * Returns {@literal true} if {@code type} is a reactive wrapper type supporting multiple values ({@code 0..N} * elements). * * @param type must not be {@literal null}. * @return {@literal true} if {@code type} is a reactive wrapper type supporting multiple values ({@code 0..N} * elements). */ public static boolean isMultiValueType(Class<?> type) { Assert.notNull(type, "Candidate type must not be null!"); // Prevent single-types with a multi-hierarchy supertype to be reported as multi type // See Mono implements Publisher return isSingleValueType(type) ? false : findDescriptor(type).map(ReactiveTypeDescriptor::isMultiValue).orElse(false); }
/** * Returns whether the given type is a reactive wrapper type. * * @param type must not be {@literal null}. * @return */ private static boolean isWrapper(Class<?> type) { Assert.notNull(type, "Candidate type must not be null!"); return isNoValueType(type) || isSingleValueType(type) || isMultiValueType(type); }
@SuppressWarnings("ConstantConditions") ReactiveCassandraParameterAccessor(CassandraQueryMethod method, Object[] values) { super(method, values); this.values = values; this.subscriptions = new ArrayList<>(values.length); for (Object value : values) { if (value == null || !ReactiveWrappers.supports(value.getClass())) { subscriptions.add(null); continue; } if (ReactiveWrappers.isSingleValueType(value.getClass())) { subscriptions.add(ReactiveWrapperConverters.toWrapper(value, Mono.class).toProcessor()); } else { subscriptions.add(ReactiveWrapperConverters.toWrapper(value, Flux.class).collectList().toProcessor()); } } }
public ReactiveCouchbaseParameterAccessor(CouchbaseQueryMethod method, Object[] values) { super(method.getParameters(), values); this.subscriptions = new ArrayList<>(values.length); for (int i = 0; i < values.length; i++) { Object value = values[i]; if (value == null || !ReactiveWrappers.supports(value.getClass())) { subscriptions.add(null); continue; } if (ReactiveWrappers.isSingleValueType(value.getClass())) { subscriptions.add(ReactiveWrapperConverters.toWrapper(value, Mono.class).toProcessor()); } else { subscriptions.add(ReactiveWrapperConverters.toWrapper(value, Flux.class).collectList().toProcessor()); } } }
/** * Creates a new {@link R2dbcParameterAccessor}. */ public R2dbcParameterAccessor(R2dbcQueryMethod method, Object... values) { super(method, values); this.values = values; this.subscriptions = new ArrayList<>(values.length); for (int i = 0; i < values.length; i++) { Object value = values[i]; if (value == null || !ReactiveWrappers.supports(value.getClass())) { subscriptions.add(null); continue; } if (ReactiveWrappers.isSingleValueType(value.getClass())) { subscriptions.add(ReactiveWrapperConverters.toWrapper(value, Mono.class).toProcessor()); } else { subscriptions.add(ReactiveWrapperConverters.toWrapper(value, Flux.class).collectList().toProcessor()); } } }
public ReactiveCouchbaseParameterAccessor(CouchbaseQueryMethod method, Object[] values) { super(method.getParameters(), values); this.subscriptions = new ArrayList<>(values.length); for (int i = 0; i < values.length; i++) { Object value = values[i]; if (value == null || !ReactiveWrappers.supports(value.getClass())) { subscriptions.add(null); continue; } if (ReactiveWrappers.isSingleValueType(value.getClass())) { subscriptions.add(ReactiveWrapperConverters.toWrapper(value, Mono.class).toProcessor()); } else { subscriptions.add(ReactiveWrapperConverters.toWrapper(value, Flux.class).collectList().toProcessor()); } } }
/** * Creates a new {@link R2dbcParameterAccessor}. */ public R2dbcParameterAccessor(R2dbcQueryMethod method, Object... values) { super(method, values); this.values = values; this.subscriptions = new ArrayList<>(values.length); for (int i = 0; i < values.length; i++) { Object value = values[i]; if (value == null || !ReactiveWrappers.supports(value.getClass())) { subscriptions.add(null); continue; } if (ReactiveWrappers.isSingleValueType(value.getClass())) { subscriptions.add(ReactiveWrapperConverters.toWrapper(value, Mono.class).toProcessor()); } else { subscriptions.add(ReactiveWrapperConverters.toWrapper(value, Flux.class).collectList().toProcessor()); } } }
boolean singleWrapperWithWrappedPageableResult = ReactiveWrappers.isSingleValueType(returnType.getType()) && (PAGE_TYPE.isAssignableFrom(returnType.getRequiredComponentType()) || SLICE_TYPE.isAssignableFrom(returnType.getRequiredComponentType()));
boolean singleWrapperWithWrappedPageableResult = ReactiveWrappers.isSingleValueType(returnType.getType()) && (PAGE_TYPE.isAssignableFrom(returnType.getRequiredComponentType()) || SLICE_TYPE.isAssignableFrom(returnType.getRequiredComponentType()));