Skip to content

Commit cbfcec9

Browse files
committed
HSEARCH-3319 Address scope changes in the Lucene - next backend
1 parent 43b838c commit cbfcec9

17 files changed

+129
-116
lines changed

Diff for: lucene-next/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/LuceneExtension.java

+21-20
Original file line numberDiff line numberDiff line change
@@ -63,22 +63,23 @@
6363
*
6464
* @see #get()
6565
*/
66-
public final class LuceneExtension<H, R, E, LOS>
67-
implements SearchQueryDslExtension<LuceneSearchQuerySelectStep<R, E, LOS>, R, E, LOS>,
66+
public final class LuceneExtension<SR, H, R, E, LOS>
67+
implements SearchQueryDslExtension<SR, LuceneSearchQuerySelectStep<SR, R, E, LOS>, R, E, LOS>,
6868
SearchQueryExtension<LuceneSearchQuery<H>, H>,
69-
SearchPredicateFactoryExtension<LuceneSearchPredicateFactory>,
70-
SearchSortFactoryExtension<LuceneSearchSortFactory>,
71-
SearchProjectionFactoryExtension<LuceneSearchProjectionFactory<R, E>, R, E>,
72-
SearchAggregationFactoryExtension<LuceneSearchAggregationFactory>,
69+
SearchPredicateFactoryExtension<SR, LuceneSearchPredicateFactory<SR>>,
70+
SearchSortFactoryExtension<SR, LuceneSearchSortFactory<SR>>,
71+
SearchProjectionFactoryExtension<SR, LuceneSearchProjectionFactory<SR, R, E>, R, E>,
72+
SearchAggregationFactoryExtension<SR, LuceneSearchAggregationFactory<SR>>,
7373
IndexFieldTypeFactoryExtension<LuceneIndexFieldTypeFactory>,
7474
IndexScopeExtension<LuceneIndexScope>,
7575
SchemaExportExtension<LuceneIndexSchemaExport> {
7676

77-
private static final LuceneExtension<Object, Object, Object, Object> INSTANCE = new LuceneExtension<>();
77+
private static final LuceneExtension<Object, Object, Object, Object, Object> INSTANCE = new LuceneExtension<>();
7878

7979
/**
8080
* Get the extension with generic parameters automatically set as appropriate for the context in which it's used.
8181
*
82+
* @param <SR> Scope root type.
8283
* @param <H> The type of query hits.
8384
* Users should not have to care about this, as the parameter will automatically take the appropriate value when calling
8485
* {@code .extension( LuceneExtension.get() }.
@@ -94,8 +95,8 @@ public final class LuceneExtension<H, R, E, LOS>
9495
* @return The extension.
9596
*/
9697
@SuppressWarnings("unchecked") // The instance works for any H, R and E
97-
public static <H, R, E, LOS> LuceneExtension<H, R, E, LOS> get() {
98-
return (LuceneExtension<H, R, E, LOS>) INSTANCE;
98+
public static <SR, H, R, E, LOS> LuceneExtension<SR, H, R, E, LOS> get() {
99+
return (LuceneExtension<SR, H, R, E, LOS>) INSTANCE;
99100
}
100101

101102
private LuceneExtension() {
@@ -106,8 +107,8 @@ private LuceneExtension() {
106107
* {@inheritDoc}
107108
*/
108109
@Override
109-
public Optional<LuceneSearchQuerySelectStep<R, E, LOS>> extendOptional(
110-
SearchQuerySelectStep<?, R, E, LOS, ?, ?> original,
110+
public Optional<LuceneSearchQuerySelectStep<SR, R, E, LOS>> extendOptional(
111+
SearchQuerySelectStep<SR, ?, R, E, LOS, ?, ?> original,
111112
SearchQueryIndexScope<?> scope,
112113
BackendSessionContext sessionContext,
113114
SearchLoadingContextBuilder<E, LOS> loadingContextBuilder) {
@@ -139,9 +140,9 @@ public Optional<LuceneSearchQuery<H>> extendOptional(SearchQuery<H> original,
139140
* {@inheritDoc}
140141
*/
141142
@Override
142-
public Optional<LuceneSearchPredicateFactory> extendOptional(SearchPredicateFactory original) {
143+
public Optional<LuceneSearchPredicateFactory<SR>> extendOptional(SearchPredicateFactory<SR> original) {
143144
if ( original instanceof LuceneSearchPredicateFactory ) {
144-
return Optional.of( (LuceneSearchPredicateFactory) original );
145+
return Optional.of( (LuceneSearchPredicateFactory<SR>) original );
145146
}
146147
else {
147148
return Optional.empty();
@@ -152,10 +153,10 @@ public Optional<LuceneSearchPredicateFactory> extendOptional(SearchPredicateFact
152153
* {@inheritDoc}
153154
*/
154155
@Override
155-
public Optional<LuceneSearchSortFactory> extendOptional(
156-
SearchSortFactory original) {
156+
public Optional<LuceneSearchSortFactory<SR>> extendOptional(
157+
SearchSortFactory<SR> original) {
157158
if ( original instanceof LuceneSearchSortFactory ) {
158-
return Optional.of( (LuceneSearchSortFactory) original );
159+
return Optional.of( (LuceneSearchSortFactory<SR>) original );
159160
}
160161
else {
161162
return Optional.empty();
@@ -166,9 +167,9 @@ public Optional<LuceneSearchSortFactory> extendOptional(
166167
* {@inheritDoc}
167168
*/
168169
@Override
169-
public Optional<LuceneSearchProjectionFactory<R, E>> extendOptional(SearchProjectionFactory<R, E> original) {
170+
public Optional<LuceneSearchProjectionFactory<SR, R, E>> extendOptional(SearchProjectionFactory<SR, R, E> original) {
170171
if ( original instanceof LuceneSearchProjectionFactory ) {
171-
return Optional.of( (LuceneSearchProjectionFactory<R, E>) original );
172+
return Optional.of( (LuceneSearchProjectionFactory<SR, R, E>) original );
172173
}
173174
else {
174175
return Optional.empty();
@@ -179,9 +180,9 @@ public Optional<LuceneSearchProjectionFactory<R, E>> extendOptional(SearchProjec
179180
* {@inheritDoc}
180181
*/
181182
@Override
182-
public Optional<LuceneSearchAggregationFactory> extendOptional(SearchAggregationFactory original) {
183+
public Optional<LuceneSearchAggregationFactory<SR>> extendOptional(SearchAggregationFactory<SR> original) {
183184
if ( original instanceof LuceneSearchAggregationFactory ) {
184-
return Optional.of( (LuceneSearchAggregationFactory) original );
185+
return Optional.of( (LuceneSearchAggregationFactory<SR>) original );
185186
}
186187
else {
187188
return Optional.empty();

Diff for: lucene-next/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/scope/model/impl/LuceneSearchIndexScopeImpl.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -162,24 +162,24 @@ public <P> LuceneSearchQueryBuilder<P> select(BackendSessionContext sessionConte
162162
}
163163

164164
@Override
165-
public LuceneSearchPredicateFactory predicateFactory() {
166-
return new LuceneSearchPredicateFactoryImpl( SearchPredicateDslContext.root( this ) );
165+
public <SR> LuceneSearchPredicateFactory<SR> predicateFactory() {
166+
return new LuceneSearchPredicateFactoryImpl<>( SearchPredicateDslContext.root( this ) );
167167
}
168168

169169
@Override
170-
public LuceneSearchSortFactory sortFactory() {
171-
return new LuceneSearchSortFactoryImpl( SearchSortDslContext
170+
public <SR> LuceneSearchSortFactory<SR> sortFactory() {
171+
return new LuceneSearchSortFactoryImpl<SR>( SearchSortDslContext
172172
.root( this, LuceneSearchSortFactoryImpl::new, predicateFactory() ) );
173173
}
174174

175175
@Override
176-
public <R, E> LuceneSearchProjectionFactory<R, E> projectionFactory() {
176+
public <SR, R, E> LuceneSearchProjectionFactory<SR, R, E> projectionFactory() {
177177
return new LuceneSearchProjectionFactoryImpl<>( SearchProjectionDslContext.root( this ) );
178178
}
179179

180180
@Override
181-
public LuceneSearchAggregationFactory aggregationFactory() {
182-
return new LuceneSearchAggregationFactoryImpl( SearchAggregationDslContext.root( this, predicateFactory() ) );
181+
public <SR> LuceneSearchAggregationFactory<SR> aggregationFactory() {
182+
return new LuceneSearchAggregationFactoryImpl<SR>( SearchAggregationDslContext.root( this, predicateFactory() ) );
183183
}
184184

185185
@Override

Diff for: lucene-next/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/aggregation/dsl/LuceneSearchAggregationFactory.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import org.hibernate.search.backend.lucene.search.predicate.dsl.LuceneSearchPredicateFactory;
88
import org.hibernate.search.engine.search.aggregation.dsl.ExtendedSearchAggregationFactory;
99

10-
public interface LuceneSearchAggregationFactory
11-
extends ExtendedSearchAggregationFactory<LuceneSearchAggregationFactory, LuceneSearchPredicateFactory> {
10+
public interface LuceneSearchAggregationFactory<SR>
11+
extends ExtendedSearchAggregationFactory<SR, LuceneSearchAggregationFactory<SR>, LuceneSearchPredicateFactory<SR>> {
1212

1313
}

Diff for: lucene-next/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/aggregation/dsl/impl/LuceneSearchAggregationFactoryImpl.java

+10-7
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,24 @@
1010
import org.hibernate.search.engine.search.aggregation.dsl.spi.AbstractSearchAggregationFactory;
1111
import org.hibernate.search.engine.search.aggregation.dsl.spi.SearchAggregationDslContext;
1212

13-
public class LuceneSearchAggregationFactoryImpl
13+
public class LuceneSearchAggregationFactoryImpl<SR>
1414
extends AbstractSearchAggregationFactory<
15-
LuceneSearchAggregationFactory,
15+
SR,
16+
LuceneSearchAggregationFactory<SR>,
1617
LuceneSearchAggregationIndexScope<?>,
17-
LuceneSearchPredicateFactory>
18-
implements LuceneSearchAggregationFactory {
18+
LuceneSearchPredicateFactory<SR>>
19+
implements LuceneSearchAggregationFactory<SR> {
1920

2021
public LuceneSearchAggregationFactoryImpl(
21-
SearchAggregationDslContext<LuceneSearchAggregationIndexScope<?>, LuceneSearchPredicateFactory> dslContext) {
22+
SearchAggregationDslContext<SR,
23+
LuceneSearchAggregationIndexScope<?>,
24+
LuceneSearchPredicateFactory<SR>> dslContext) {
2225
super( dslContext );
2326
}
2427

2528
@Override
26-
public LuceneSearchAggregationFactory withRoot(String objectFieldPath) {
27-
return new LuceneSearchAggregationFactoryImpl( dslContext.rescope(
29+
public LuceneSearchAggregationFactory<SR> withRoot(String objectFieldPath) {
30+
return new LuceneSearchAggregationFactoryImpl<SR>( dslContext.rescope(
2831
dslContext.scope().withRoot( objectFieldPath ),
2932
dslContext.predicateFactory().withRoot( objectFieldPath ) ) );
3033
}

Diff for: lucene-next/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/predicate/dsl/LuceneSearchPredicateFactory.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
/**
1313
* A factory for search predicates with some Lucene-specific methods.
1414
*/
15-
public interface LuceneSearchPredicateFactory extends ExtendedSearchPredicateFactory<LuceneSearchPredicateFactory> {
15+
public interface LuceneSearchPredicateFactory<SR> extends ExtendedSearchPredicateFactory<SR, LuceneSearchPredicateFactory<SR>> {
1616

1717
/**
1818
* Create a predicate from a Lucene {@link Query}.

Diff for: lucene-next/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/predicate/dsl/impl/LuceneSearchPredicateFactoryImpl.java

+6-5
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,20 @@
1313

1414
import org.apache.lucene.search.Query;
1515

16-
public class LuceneSearchPredicateFactoryImpl
16+
public class LuceneSearchPredicateFactoryImpl<SR>
1717
extends AbstractSearchPredicateFactory<
18-
LuceneSearchPredicateFactory,
18+
SR,
19+
LuceneSearchPredicateFactory<SR>,
1920
LuceneSearchPredicateIndexScope<?>>
20-
implements LuceneSearchPredicateFactory {
21+
implements LuceneSearchPredicateFactory<SR> {
2122

2223
public LuceneSearchPredicateFactoryImpl(SearchPredicateDslContext<LuceneSearchPredicateIndexScope<?>> dslContext) {
2324
super( dslContext );
2425
}
2526

2627
@Override
27-
public LuceneSearchPredicateFactory withRoot(String objectFieldPath) {
28-
return new LuceneSearchPredicateFactoryImpl( dslContext.rescope(
28+
public LuceneSearchPredicateFactory<SR> withRoot(String objectFieldPath) {
29+
return new LuceneSearchPredicateFactoryImpl<SR>( dslContext.rescope(
2930
dslContext.scope().withRoot( objectFieldPath ) ) );
3031
}
3132

Diff for: lucene-next/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/predicate/impl/LuceneNamedPredicate.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ private static class Builder extends AbstractBuilder implements NamedPredicateBu
7070
private final PredicateDefinition definition;
7171
private final String predicateName;
7272
private final LuceneSearchIndexCompositeNodeContext field;
73-
private SearchPredicateFactory factory;
73+
private SearchPredicateFactory<?> factory;
7474
private final Map<String, Object> params = new LinkedHashMap<>();
7575

7676
Builder(PredicateDefinition definition, String predicateName, LuceneSearchIndexScope<?> scope,
@@ -82,7 +82,7 @@ private static class Builder extends AbstractBuilder implements NamedPredicateBu
8282
}
8383

8484
@Override
85-
public void factory(SearchPredicateFactory factory) {
85+
public void factory(SearchPredicateFactory<?> factory) {
8686
this.factory = factory;
8787
}
8888

@@ -93,8 +93,9 @@ public void param(String name, Object value) {
9393

9494
@Override
9595
public SearchPredicate build() {
96-
NamedValuesBasedPredicateDefinitionContext ctx = new NamedValuesBasedPredicateDefinitionContext( factory, params,
97-
name -> QueryLog.INSTANCE.paramNotDefined( name, predicateName, field.eventContext() ) );
96+
NamedValuesBasedPredicateDefinitionContext<?> ctx =
97+
new NamedValuesBasedPredicateDefinitionContext<>( factory, params,
98+
name -> QueryLog.INSTANCE.paramNotDefined( name, predicateName, field.eventContext() ) );
9899

99100
LuceneSearchPredicate providedPredicate = LuceneSearchPredicate.from( scope, definition.create( ctx ) );
100101

Diff for: lucene-next/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/projection/dsl/LuceneSearchProjectionFactory.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,13 @@
1515
/**
1616
* A factory for search projections with some Lucene-specific methods.
1717
*
18+
* @param <SR> Scope root type.
1819
* @param <R> The type of entity references.
1920
* @param <E> The type of entities.
2021
* @see SearchProjectionFactory
2122
*/
22-
public interface LuceneSearchProjectionFactory<R, E>
23-
extends ExtendedSearchProjectionFactory<LuceneSearchProjectionFactory<R, E>, R, E> {
23+
public interface LuceneSearchProjectionFactory<SR, R, E>
24+
extends ExtendedSearchProjectionFactory<SR, LuceneSearchProjectionFactory<SR, R, E>, R, E> {
2425

2526
/**
2627
* Project to a Lucene {@link Document} containing all the stored fields.

Diff for: lucene-next/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/projection/dsl/impl/LuceneSearchProjectionFactoryImpl.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,21 @@
1515
import org.apache.lucene.document.Document;
1616
import org.apache.lucene.search.Explanation;
1717

18-
public class LuceneSearchProjectionFactoryImpl<R, E>
18+
public class LuceneSearchProjectionFactoryImpl<SR, R, E>
1919
extends AbstractSearchProjectionFactory<
20-
LuceneSearchProjectionFactory<R, E>,
20+
SR,
21+
LuceneSearchProjectionFactory<SR, R, E>,
2122
LuceneSearchProjectionIndexScope<?>,
2223
R,
2324
E>
24-
implements LuceneSearchProjectionFactory<R, E> {
25+
implements LuceneSearchProjectionFactory<SR, R, E> {
2526

2627
public LuceneSearchProjectionFactoryImpl(SearchProjectionDslContext<LuceneSearchProjectionIndexScope<?>> dslContext) {
2728
super( dslContext );
2829
}
2930

3031
@Override
31-
public LuceneSearchProjectionFactory<R, E> withRoot(String objectFieldPath) {
32+
public LuceneSearchProjectionFactory<SR, R, E> withRoot(String objectFieldPath) {
3233
return new LuceneSearchProjectionFactoryImpl<>( dslContext.rescope(
3334
dslContext.scope().withRoot( objectFieldPath ) ) );
3435
}

Diff for: lucene-next/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/dsl/LuceneSearchQueryOptionsStep.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@
1010
import org.hibernate.search.backend.lucene.search.sort.dsl.LuceneSearchSortFactory;
1111
import org.hibernate.search.engine.search.query.dsl.SearchQueryOptionsStep;
1212

13-
public interface LuceneSearchQueryOptionsStep<H, LOS>
13+
public interface LuceneSearchQueryOptionsStep<SR, H, LOS>
1414
extends SearchQueryOptionsStep<
15-
LuceneSearchQueryOptionsStep<H, LOS>,
15+
SR,
16+
LuceneSearchQueryOptionsStep<SR, H, LOS>,
1617
H,
1718
LOS,
18-
LuceneSearchSortFactory,
19-
LuceneSearchAggregationFactory>,
19+
LuceneSearchSortFactory<SR>,
20+
LuceneSearchAggregationFactory<SR>>,
2021
LuceneSearchFetchable<H> {
2122

2223
@Override

Diff for: lucene-next/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/dsl/LuceneSearchQuerySelectStep.java

+13-12
Original file line numberDiff line numberDiff line change
@@ -13,33 +13,34 @@
1313
import org.hibernate.search.engine.search.projection.dsl.ProjectionFinalStep;
1414
import org.hibernate.search.engine.search.query.dsl.SearchQuerySelectStep;
1515

16-
public interface LuceneSearchQuerySelectStep<R, E, LOS>
16+
public interface LuceneSearchQuerySelectStep<SR, R, E, LOS>
1717
extends SearchQuerySelectStep<
18-
LuceneSearchQueryOptionsStep<E, LOS>,
18+
SR,
19+
LuceneSearchQueryOptionsStep<SR, E, LOS>,
1920
R,
2021
E,
2122
LOS,
22-
LuceneSearchProjectionFactory<R, E>,
23-
LuceneSearchPredicateFactory>,
24-
LuceneSearchQueryWhereStep<E, LOS> {
23+
LuceneSearchProjectionFactory<SR, R, E>,
24+
LuceneSearchPredicateFactory<SR>>,
25+
LuceneSearchQueryWhereStep<SR, E, LOS> {
2526

2627
@Override
27-
LuceneSearchQueryWhereStep<E, LOS> selectEntity();
28+
LuceneSearchQueryWhereStep<SR, E, LOS> selectEntity();
2829

2930
@Override
30-
LuceneSearchQueryWhereStep<R, LOS> selectEntityReference();
31+
LuceneSearchQueryWhereStep<SR, R, LOS> selectEntityReference();
3132

3233
@Override
33-
<P> LuceneSearchQueryWhereStep<P, LOS> select(Class<P> objectClass);
34+
<P> LuceneSearchQueryWhereStep<SR, P, LOS> select(Class<P> objectClass);
3435

3536
@Override
36-
<P> LuceneSearchQueryWhereStep<P, LOS> select(
37-
Function<? super LuceneSearchProjectionFactory<R, E>, ? extends ProjectionFinalStep<P>> projectionContributor);
37+
<P> LuceneSearchQueryWhereStep<SR, P, LOS> select(
38+
Function<? super LuceneSearchProjectionFactory<SR, R, E>, ? extends ProjectionFinalStep<P>> projectionContributor);
3839

3940
@Override
40-
<P> LuceneSearchQueryWhereStep<P, LOS> select(SearchProjection<P> projection);
41+
<P> LuceneSearchQueryWhereStep<SR, P, LOS> select(SearchProjection<P> projection);
4142

4243
@Override
43-
LuceneSearchQueryWhereStep<List<?>, LOS> select(SearchProjection<?>... projections);
44+
LuceneSearchQueryWhereStep<SR, List<?>, LOS> select(SearchProjection<?>... projections);
4445

4546
}

Diff for: lucene-next/backend/lucene/src/main/java/org/hibernate/search/backend/lucene/search/query/dsl/LuceneSearchQueryWhereStep.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import org.hibernate.search.backend.lucene.search.predicate.dsl.LuceneSearchPredicateFactory;
88
import org.hibernate.search.engine.search.query.dsl.SearchQueryWhereStep;
99

10-
public interface LuceneSearchQueryWhereStep<H, LOS>
11-
extends SearchQueryWhereStep<LuceneSearchQueryOptionsStep<H, LOS>, H, LOS, LuceneSearchPredicateFactory> {
10+
public interface LuceneSearchQueryWhereStep<SR, H, LOS>
11+
extends SearchQueryWhereStep<SR, LuceneSearchQueryOptionsStep<SR, H, LOS>, H, LOS, LuceneSearchPredicateFactory<SR>> {
1212

1313
}

0 commit comments

Comments
 (0)