-
Notifications
You must be signed in to change notification settings - Fork 242
/
LuceneSearchQueryHitTypeStepImpl.java
119 lines (102 loc) · 4.81 KB
/
LuceneSearchQueryHitTypeStepImpl.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/*
* Hibernate Search, full-text search for your domain model
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.search.backend.lucene.search.query.dsl.impl;
import java.util.List;
import java.util.function.Function;
import org.hibernate.search.backend.lucene.LuceneExtension;
import org.hibernate.search.backend.lucene.search.predicate.dsl.LuceneSearchPredicateFactory;
import org.hibernate.search.backend.lucene.search.projection.dsl.LuceneSearchProjectionFactory;
import org.hibernate.search.backend.lucene.search.query.dsl.LuceneSearchQueryOptionsStep;
import org.hibernate.search.backend.lucene.search.query.dsl.LuceneSearchQueryPredicateStep;
import org.hibernate.search.backend.lucene.search.query.dsl.LuceneSearchQueryHitTypeStep;
import org.hibernate.search.backend.lucene.search.impl.LuceneSearchQueryElementCollector;
import org.hibernate.search.backend.lucene.scope.impl.LuceneIndexScope;
import org.hibernate.search.backend.lucene.search.query.impl.LuceneSearchQueryBuilder;
import org.hibernate.search.engine.backend.session.spi.BackendSessionContext;
import org.hibernate.search.engine.search.predicate.SearchPredicate;
import org.hibernate.search.engine.search.projection.SearchProjection;
import org.hibernate.search.engine.search.predicate.dsl.PredicateFinalStep;
import org.hibernate.search.engine.search.projection.dsl.ProjectionFinalStep;
import org.hibernate.search.engine.search.query.dsl.spi.AbstractSearchQueryHitTypeStep;
import org.hibernate.search.engine.search.loading.context.spi.LoadingContextBuilder;
public class LuceneSearchQueryHitTypeStepImpl<R, E>
extends AbstractSearchQueryHitTypeStep<
LuceneSearchQueryOptionsStep<E>,
R,
E,
LuceneSearchProjectionFactory<R, E>,
LuceneSearchPredicateFactory,
LuceneSearchQueryElementCollector
>
implements LuceneSearchQueryHitTypeStep<R, E> {
private final LuceneIndexScope indexScope;
private final BackendSessionContext sessionContext;
private final LoadingContextBuilder<R, E> loadingContextBuilder;
public LuceneSearchQueryHitTypeStepImpl(LuceneIndexScope indexScope,
BackendSessionContext sessionContext,
LoadingContextBuilder<R, E> loadingContextBuilder) {
this.indexScope = indexScope;
this.sessionContext = sessionContext;
this.loadingContextBuilder = loadingContextBuilder;
}
@Override
public LuceneSearchQueryPredicateStep<E> asEntity() {
LuceneSearchQueryBuilder<E> builder = indexScope.getSearchQueryBuilderFactory()
.asEntity( sessionContext, loadingContextBuilder );
return createSearchQueryContext( builder );
}
@Override
public LuceneSearchQueryPredicateStep<R> asEntityReference() {
LuceneSearchQueryBuilder<R> builder = indexScope.getSearchQueryBuilderFactory()
.asReference( sessionContext, loadingContextBuilder );
return createSearchQueryContext( builder );
}
@Override
public <P> LuceneSearchQueryPredicateStep<P> asProjection(
Function<? super LuceneSearchProjectionFactory<R, E>, ? extends ProjectionFinalStep<P>> projectionContributor) {
LuceneSearchProjectionFactory<R, E> factoryContext =
createDefaultProjectionFactory().extension( LuceneExtension.get() );
SearchProjection<P> projection = projectionContributor.apply( factoryContext ).toProjection();
return asProjection( projection );
}
@Override
public <P> LuceneSearchQueryPredicateStep<P> asProjection(SearchProjection<P> projection) {
LuceneSearchQueryBuilder<P> builder = indexScope.getSearchQueryBuilderFactory()
.asProjection( sessionContext, loadingContextBuilder, projection );
return createSearchQueryContext( builder );
}
@Override
public LuceneSearchQueryPredicateStep<List<?>> asProjections(SearchProjection<?>... projections) {
LuceneSearchQueryBuilder<List<?>> builder = indexScope.getSearchQueryBuilderFactory()
.asProjections( sessionContext, loadingContextBuilder, projections );
return createSearchQueryContext( builder );
}
@Override
public LuceneSearchQueryOptionsStep<E> predicate(SearchPredicate predicate) {
return asEntity().predicate( predicate );
}
@Override
public LuceneSearchQueryOptionsStep<E> predicate(
Function<? super LuceneSearchPredicateFactory, ? extends PredicateFinalStep> predicateContributor) {
return asEntity().predicate( predicateContributor );
}
@Override
protected LuceneIndexScope getIndexScope() {
return indexScope;
}
@Override
protected BackendSessionContext getSessionContext() {
return sessionContext;
}
@Override
protected LoadingContextBuilder<R, E> getLoadingContextBuilder() {
return loadingContextBuilder;
}
private <H> LuceneSearchQueryPredicateStep<H> createSearchQueryContext(LuceneSearchQueryBuilder<H> builder) {
return new LuceneSearchQueryOptionsStepImpl<>( indexScope, builder );
}
}