@Override public QueryPredicate<T> where(final Function<EmbeddedProductVariantQueryModel, QueryPredicate<EmbeddedProductVariantQueryModel>> embeddedPredicate) { final EmbeddedProductVariantQueryModel m = EmbeddedProductVariantQueryModel.of(); return where(embeddedPredicate.apply(m)); } }
@Override public QueryPredicate<T> where(final Function<EmbeddedProductVariantQueryModel, QueryPredicate<EmbeddedProductVariantQueryModel>> embeddedPredicate) { final EmbeddedProductVariantQueryModel m = EmbeddedProductVariantQueryModel.of(); return where(embeddedPredicate.apply(m)); } }
@Test public void whereClosure() throws Exception { final ProductVariantQueryModel<String> model = ProductVariantQueryModel.of(null, "foo"); final QueryPredicate<String> normalWay = model.where(EmbeddedProductVariantQueryModel.of().sku().is("x")); final QueryPredicate<String> closureWay = model.where(m -> m.sku().is("x")); assertThat(normalWay.toSphereQuery()).isEqualTo(closureWay.toSphereQuery()).isEqualTo("foo(sku=\"x\")"); } }
default ProductQuery bySku(final String sku, final ProductProjectionType type) { final QueryPredicate<EmbeddedProductVariantQueryModel> skuPredicate = EmbeddedProductVariantQueryModel.of().sku().is(sku); final ProductDataQueryModel<Product> projection = ProductQueryModel.of().masterData().forProjection(type); final QueryPredicate<Product> masterVariantSkuPredicate = projection.masterVariant().where(skuPredicate); final QueryPredicate<Product> variantsSkuPredicate = projection.variants().where(skuPredicate); return withPredicates(masterVariantSkuPredicate.or(variantsSkuPredicate)); } }
default ProductQuery bySku(final String sku, final ProductProjectionType type) { final QueryPredicate<EmbeddedProductVariantQueryModel> skuPredicate = EmbeddedProductVariantQueryModel.of().sku().is(sku); final ProductDataQueryModel<Product> projection = ProductQueryModel.of().masterData().forProjection(type); final QueryPredicate<Product> masterVariantSkuPredicate = projection.masterVariant().where(skuPredicate); final QueryPredicate<Product> variantsSkuPredicate = projection.variants().where(skuPredicate); return withPredicates(masterVariantSkuPredicate.or(variantsSkuPredicate)); } }