Skip to content

Commit b90cef7

Browse files
committed
HSEARCH-3319 Use single impl for field sort options
1 parent 899a4d0 commit b90cef7

File tree

4 files changed

+202
-220
lines changed

4 files changed

+202
-220
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.search.engine.search.sort.dsl.impl;
6+
7+
import java.util.function.Function;
8+
9+
import org.hibernate.search.engine.search.common.SortMode;
10+
import org.hibernate.search.engine.search.common.ValueConvert;
11+
import org.hibernate.search.engine.search.common.ValueModel;
12+
import org.hibernate.search.engine.search.predicate.SearchPredicate;
13+
import org.hibernate.search.engine.search.predicate.dsl.PredicateFinalStep;
14+
import org.hibernate.search.engine.search.predicate.dsl.SearchPredicateFactory;
15+
import org.hibernate.search.engine.search.reference.sort.FieldSortFieldReference;
16+
import org.hibernate.search.engine.search.sort.SearchSort;
17+
import org.hibernate.search.engine.search.sort.dsl.FieldSortMissingValueBehaviorGenericStep;
18+
import org.hibernate.search.engine.search.sort.dsl.FieldSortMissingValueBehaviorStep;
19+
import org.hibernate.search.engine.search.sort.dsl.FieldSortOptionsGenericStep;
20+
import org.hibernate.search.engine.search.sort.dsl.FieldSortOptionsStep;
21+
import org.hibernate.search.engine.search.sort.dsl.SortOrder;
22+
import org.hibernate.search.engine.search.sort.dsl.spi.AbstractSortThenStep;
23+
import org.hibernate.search.engine.search.sort.dsl.spi.SearchSortDslContext;
24+
import org.hibernate.search.engine.search.sort.spi.FieldSortBuilder;
25+
import org.hibernate.search.engine.search.sort.spi.SearchSortIndexScope;
26+
import org.hibernate.search.engine.search.sort.spi.SortTypeKeys;
27+
28+
public abstract class AbstractFieldSortOptionsGenericStep<
29+
SR,
30+
T,
31+
PDF extends SearchPredicateFactory<SR>,
32+
S extends AbstractFieldSortOptionsGenericStep<SR, T, PDF, S, N>,
33+
N extends FieldSortMissingValueBehaviorGenericStep<T, S>>
34+
extends AbstractSortThenStep<SR>
35+
implements
36+
FieldSortOptionsGenericStep<SR,
37+
T,
38+
S,
39+
N,
40+
PDF> {
41+
42+
43+
private final SearchSortDslContext<SR, ?, ? extends PDF> dslContext;
44+
protected final FieldSortBuilder builder;
45+
46+
public AbstractFieldSortOptionsGenericStep(SearchSortDslContext<SR, ?, ? extends PDF> dslContext,
47+
String fieldPath) {
48+
super( dslContext );
49+
this.dslContext = dslContext;
50+
this.builder = dslContext.scope().fieldQueryElement( fieldPath, SortTypeKeys.FIELD );
51+
}
52+
53+
public static <
54+
T,
55+
SR,
56+
SC extends SearchSortIndexScope<?>,
57+
PDF extends SearchPredicateFactory<
58+
SR>> FieldSortOptionsGenericStep<SR, T, ?, ?, ? extends SearchPredicateFactory<SR>> create(
59+
SearchSortDslContext<SR, SC, PDF> dslContext,
60+
FieldSortFieldReference<? super SR, T> fieldReference) {
61+
return new FieldReferenceFieldSortOptionsStep<>( dslContext, fieldReference );
62+
}
63+
64+
public static <
65+
PDF extends SearchPredicateFactory<SR>,
66+
SR,
67+
SC extends SearchSortIndexScope<?>> FieldSortOptionsStep<SR, ?, PDF> create(
68+
SearchSortDslContext<SR, SC, PDF> dslContext, String fieldPath) {
69+
return new StringFieldSortOptionsStep<>( dslContext, fieldPath );
70+
}
71+
72+
@Override
73+
public S order(SortOrder order) {
74+
builder.order( order );
75+
return thisAsS();
76+
}
77+
78+
@Override
79+
public S mode(SortMode mode) {
80+
builder.mode( mode );
81+
return thisAsS();
82+
}
83+
84+
@Override
85+
public N missing() {
86+
return thisAsN();
87+
}
88+
89+
@Override
90+
public S filter(
91+
Function<? super PDF, ? extends PredicateFinalStep> clauseContributor) {
92+
SearchPredicate predicate = clauseContributor.apply( dslContext.predicateFactory() ).toPredicate();
93+
94+
return filter( predicate );
95+
}
96+
97+
@Override
98+
public S filter(SearchPredicate searchPredicate) {
99+
builder.filter( searchPredicate );
100+
return thisAsS();
101+
}
102+
103+
public S first() {
104+
builder.missingFirst();
105+
return thisAsS();
106+
}
107+
108+
public S last() {
109+
builder.missingLast();
110+
return thisAsS();
111+
}
112+
113+
public S highest() {
114+
builder.missingHighest();
115+
return thisAsS();
116+
}
117+
118+
public S lowest() {
119+
builder.missingLowest();
120+
return thisAsS();
121+
}
122+
123+
124+
@Override
125+
protected SearchSort build() {
126+
return builder.build();
127+
}
128+
129+
protected abstract S thisAsS();
130+
131+
protected abstract N thisAsN();
132+
133+
134+
private static class FieldReferenceFieldSortOptionsStep<SR, T, PDF extends SearchPredicateFactory<SR>>
135+
extends
136+
AbstractFieldSortOptionsGenericStep<SR,
137+
T,
138+
PDF,
139+
FieldReferenceFieldSortOptionsStep<SR, T, PDF>,
140+
FieldReferenceFieldSortOptionsStep<SR, T, PDF>>
141+
implements FieldSortMissingValueBehaviorGenericStep<T, FieldReferenceFieldSortOptionsStep<SR, T, PDF>> {
142+
private final ValueModel valueModel;
143+
144+
public FieldReferenceFieldSortOptionsStep(SearchSortDslContext<SR, ?, ? extends PDF> dslContext,
145+
FieldSortFieldReference<? super SR, ?> fieldReference) {
146+
super( dslContext, fieldReference.absolutePath() );
147+
this.valueModel = fieldReference.valueModel();
148+
}
149+
150+
@Override
151+
public FieldReferenceFieldSortOptionsStep<SR, T, PDF> use(T value) {
152+
builder.missingAs( value, valueModel );
153+
return this;
154+
}
155+
156+
@Override
157+
protected FieldReferenceFieldSortOptionsStep<SR, T, PDF> thisAsS() {
158+
return this;
159+
}
160+
161+
@Override
162+
protected FieldReferenceFieldSortOptionsStep<SR, T, PDF> thisAsN() {
163+
return this;
164+
}
165+
}
166+
167+
private static class StringFieldSortOptionsStep<SR, PDF extends SearchPredicateFactory<SR>>
168+
extends
169+
AbstractFieldSortOptionsGenericStep<SR,
170+
Object,
171+
PDF,
172+
StringFieldSortOptionsStep<SR, PDF>,
173+
FieldSortMissingValueBehaviorStep<StringFieldSortOptionsStep<SR, PDF>>>
174+
implements FieldSortOptionsStep<SR, StringFieldSortOptionsStep<SR, PDF>, PDF>,
175+
FieldSortMissingValueBehaviorStep<StringFieldSortOptionsStep<SR, PDF>> {
176+
177+
public StringFieldSortOptionsStep(SearchSortDslContext<SR, ?, ? extends PDF> dslContext,
178+
String fieldPath) {
179+
super( dslContext, fieldPath );
180+
}
181+
182+
@Override
183+
public StringFieldSortOptionsStep<SR, PDF> use(Object value, ValueModel valueModel) {
184+
builder.missingAs( value, valueModel );
185+
return this;
186+
}
187+
188+
@Override
189+
protected StringFieldSortOptionsStep<SR, PDF> thisAsS() {
190+
return this;
191+
}
192+
193+
@Override
194+
protected StringFieldSortOptionsStep<SR, PDF> thisAsN() {
195+
return this;
196+
}
197+
}
198+
}

engine/src/main/java/org/hibernate/search/engine/search/sort/dsl/impl/FieldSortOptionsGenericStepImpl.java

-112
This file was deleted.

0 commit comments

Comments
 (0)