public IfNull(QueryExpression<T> nullableValue, T fallbackValue) { // <3> this(nullableValue, ConstantConverterExpression.create(fallbackValue)); }
@Override public Optional<QueryDslExpression> resolve(ConstantConverterExpression expression, QueryDslResolutionContext context) throws InvalidExpressionException { // validate expression.validate(); // return a constant return Optional.of(QueryDslExpression.create(ConstantImpl.create(expression.getModelValue()))); }
@SuppressWarnings("unchecked") @Override public Optional<FieldValue> resolve(ConstantConverterExpression expression, MongoResolutionContext context) throws InvalidExpressionException { // validate expression.validate(); // resolve return context.resolve(Value.create(expression.getValue(), expression), FieldValue.class); }
/** * Set given <code>path</code> to given constant value. * @param <T> Path type * @param path Path to be updated (not null) * @param value value to set * @return this * @see #setNull(Path) */ default <T> O set(Path<T> path, T value) { return set(path, ConstantConverterExpression.create(path, value)); }
/** * Set given <code>path</code> to given constant value. * @param <T> Path type * @param path Path to be updated (not null) * @param value value to set * @return this * @see #setNull(Path) */ default <T> O set(Path<T> path, T value) { return set(path, (value == null) ? NullExpression.create(path) : ConstantConverterExpression.create(path, value)); }
/** * Get given {@link PropertyBox} as a map of {@link Path} and {@link TypedExpression} values. * @param value The property box value (not null) * @param includeNullValues Whether to set <code>null</code> property box values to the <code>null</code> value * @return Values map */ @SuppressWarnings({ "unchecked", "rawtypes" }) protected Map<Path<?>, TypedExpression<?>> asPathValues(PropertyBox value, boolean includeNullValues) { ObjectUtils.argumentNotNull(value, "PropertyBox must be not null"); final Map<Path<?>, TypedExpression<?>> values = new HashMap<>(value.size()); final PathPropertyBoxAdapter propertyBoxAdapter = PathPropertyBoxAdapter.create(value); propertyBoxAdapter.paths().forEach(path -> { propertyBoxAdapter.getValueOrElse(path, pathWithNoValue -> { if (includeNullValues) { values.put(path, NullExpression.create(path)); } }).ifPresent(val -> { values.put(path, (val instanceof TypedExpression) ? (TypedExpression<?>) val : ConstantConverterExpression.create((Path) path, val)); }); }); return values; }
public void selectable8() { // tag::selectable8[] final TestData ONE = new TestData(1); final TestData TWO = new TestData(2); SingleSelect<TestData> singleSelect = Components.input.singleSelect(TestData.class) .dataSource(ItemDataProvider.create(q -> 2, (q, o, l) -> Stream.of(ONE, TWO)), filterText -> QueryFilter .startsWith(ConstantConverterExpression.create("description"), filterText, true)) .build(); // end::selectable8[] }
@SuppressWarnings("unchecked") @Override public T convert(MongoResolutionContext<?> context, Document document) { if (document != null) { final Object fieldValue = document.get(selection); Object value = context .resolveOrFail(FieldValue.create(fieldValue, ConstantConverterExpression.create(fieldValue, getConversionType())), Value.class) .getValue(); if (value != null && !TypeUtils.isAssignable(value.getClass(), getConversionType())) { throw new DataAccessException("Failed to convert document value [" + value + "] to required type [" + getConversionType() + "]: value type [" + value.getClass().getName() + "] is not compatible"); } return (T) value; } return null; }
@Override public <T> PredicateExpression visit(BetweenFilter<T> filter, QueryDslResolutionContext context) { ConstantConverterExpression<T, T> from = ConstantConverterExpression.create(filter.getFromValue()); ConstantConverterExpression<T, T> to = ConstantConverterExpression.create(filter.getToValue()); return PredicateExpression.create(Expressions.booleanOperation(Ops.BETWEEN, context.resolveOrFail(filter.getLeftOperand(), QueryDslExpression.class).getExpression(), context.resolveOrFail(from, QueryDslExpression.class).getExpression(), context.resolveOrFail(to, QueryDslExpression.class).getExpression())); }