public QueryPredicate<T> where(final Function<PartialProductVariantQueryModel, QueryPredicate<PartialProductVariantQueryModel>> embeddedPredicate) { final PartialProductVariantQueryModel m = PartialProductVariantQueryModel.of(); return where(embeddedPredicate.apply(m)); }
public ProductAllVariantsQueryModel<T> allVariants() { return new ProductAllVariantsQueryModel<>(this); }
private QueryPredicate<T> where(final QueryPredicate<PartialProductVariantQueryModel> embeddedPredicate) { final ProductDataQueryModelBase<T> parent = Optional.ofNullable((ProductDataQueryModelBase<T>) getParent()) .orElseThrow(() -> new UnsupportedOperationException("A proper parent model is required.")); return parent.where(m -> m.masterVariant().where(embeddedPredicate).or(m.variants().where(embeddedPredicate))); }
default ProductProjectionQuery bySku(final String sku) { return withPredicates(m -> m.allVariants().where(n -> n.sku().is(sku))); }
default ProductProjectionQuery bySku(final List<String> skus) { return withPredicates(m -> m.allVariants().where(n -> n.sku().isIn(skus))); }
default ProductProjectionQuery bySku(final String sku) { return withPredicates(m -> m.allVariants().where(n -> n.sku().is(sku))); }
default ProductProjectionQuery bySku(final String sku) { return withPredicates(m -> m.allVariants().where(n -> n.sku().is(sku))); }
default ProductProjectionQuery bySku(final List<String> skus) { return withPredicates(m -> m.allVariants().where(n -> n.sku().isIn(skus))); }
default ProductProjectionQuery bySku(final List<String> skus) { return withPredicates(m -> m.allVariants().where(n -> n.sku().isIn(skus))); }
@Test public void allVariantsInProductProjection() throws Exception { assertThat(ProductProjectionQueryModel.of().allVariants().where(m -> m.sku().is("bar"))) .isEqualTo(ProductProjectionQueryModel.of().where(m -> m.masterVariant().sku().is("bar").or(m.variants().sku().is("bar")))) .isEqualTo(QueryPredicate.<ProductProjection>of(embeddedProductProjectionPredicate)); } }
@Test public void allVariantsInProduct() throws Exception { assertThat(ProductQueryModel.of().masterData().current().allVariants().where(m -> m.sku().is("bar"))) .isEqualTo(ProductQueryModel.of().masterData().current().where(m -> m.masterVariant().sku().is("bar").or(m.variants().sku().is("bar")))) .isEqualTo(QueryPredicate.<Product>of(embeddedProductPredicate)); }