Skip to content

Commit

Permalink
HSEARCH-4568 Avoid builders that only expose a build() method in proj…
Browse files Browse the repository at this point in the history
…ection SPI
  • Loading branch information
yrodiere committed May 9, 2022
1 parent 12a68bd commit 5c27d8a
Show file tree
Hide file tree
Showing 34 changed files with 93 additions and 451 deletions.
Expand Up @@ -10,8 +10,6 @@
import org.hibernate.search.engine.backend.common.DocumentReference;
import org.hibernate.search.engine.search.loading.spi.LoadingResult;
import org.hibernate.search.engine.search.loading.spi.ProjectionHitMapper;
import org.hibernate.search.engine.search.projection.SearchProjection;
import org.hibernate.search.engine.search.projection.spi.DocumentReferenceProjectionBuilder;

import com.google.gson.JsonObject;

Expand All @@ -21,7 +19,7 @@ class ElasticsearchDocumentReferenceProjection

private final DocumentReferenceExtractionHelper helper;

private ElasticsearchDocumentReferenceProjection(ElasticsearchSearchIndexScope<?> scope,
ElasticsearchDocumentReferenceProjection(ElasticsearchSearchIndexScope<?> scope,
DocumentReferenceExtractionHelper helper) {
super( scope );
this.helper = helper;
Expand Down Expand Up @@ -49,20 +47,4 @@ public DocumentReference transform(LoadingResult<?, ?> loadingResult, DocumentRe
ProjectionTransformContext context) {
return extractedData;
}

static class Builder extends AbstractElasticsearchProjection.AbstractBuilder<DocumentReference>
implements DocumentReferenceProjectionBuilder {

private final ElasticsearchDocumentReferenceProjection projection;

Builder(ElasticsearchSearchIndexScope<?> scope, DocumentReferenceExtractionHelper helper) {
super( scope );
this.projection = new ElasticsearchDocumentReferenceProjection( scope, helper );
}

@Override
public SearchProjection<DocumentReference> build() {
return projection;
}
}
}
Expand Up @@ -9,8 +9,6 @@
import org.hibernate.search.backend.elasticsearch.search.common.impl.ElasticsearchSearchIndexScope;
import org.hibernate.search.engine.search.loading.spi.LoadingResult;
import org.hibernate.search.engine.search.loading.spi.ProjectionHitMapper;
import org.hibernate.search.engine.search.projection.SearchProjection;
import org.hibernate.search.engine.search.projection.spi.EntityProjectionBuilder;

import com.google.gson.JsonObject;

Expand All @@ -19,7 +17,7 @@ public class ElasticsearchEntityProjection<E> extends AbstractElasticsearchProje

private final DocumentReferenceExtractionHelper helper;

private ElasticsearchEntityProjection(ElasticsearchSearchIndexScope<?> scope,
ElasticsearchEntityProjection(ElasticsearchSearchIndexScope<?> scope,
DocumentReferenceExtractionHelper helper) {
super( scope );
this.helper = helper;
Expand Down Expand Up @@ -53,19 +51,4 @@ public E transform(LoadingResult<?, ?> loadingResult, Object extractedData,
return loaded;
}

static class Builder<E> extends AbstractElasticsearchProjection.AbstractBuilder<E>
implements EntityProjectionBuilder<E> {

private final ElasticsearchEntityProjection<E> projection;

Builder(ElasticsearchSearchIndexScope<?> scope, DocumentReferenceExtractionHelper helper) {
super( scope );
this.projection = new ElasticsearchEntityProjection<>( scope, helper );
}

@Override
public SearchProjection<E> build() {
return projection;
}
}
}
Expand Up @@ -10,8 +10,6 @@
import org.hibernate.search.engine.backend.common.DocumentReference;
import org.hibernate.search.engine.search.loading.spi.LoadingResult;
import org.hibernate.search.engine.search.loading.spi.ProjectionHitMapper;
import org.hibernate.search.engine.search.projection.SearchProjection;
import org.hibernate.search.engine.search.projection.spi.EntityReferenceProjectionBuilder;

import com.google.gson.JsonObject;

Expand All @@ -20,7 +18,7 @@ public class ElasticsearchEntityReferenceProjection<R> extends AbstractElasticse

private final DocumentReferenceExtractionHelper helper;

private ElasticsearchEntityReferenceProjection(ElasticsearchSearchIndexScope<?> scope, DocumentReferenceExtractionHelper helper) {
ElasticsearchEntityReferenceProjection(ElasticsearchSearchIndexScope<?> scope, DocumentReferenceExtractionHelper helper) {
super( scope );
this.helper = helper;
}
Expand Down Expand Up @@ -49,19 +47,4 @@ public R transform(LoadingResult<?, ?> loadingResult, DocumentReference extracte
return (R) loadingResult.convertReference( extractedData );
}

static class Builder<R> extends AbstractElasticsearchProjection.AbstractBuilder<R>
implements EntityReferenceProjectionBuilder<R> {

private final ElasticsearchEntityReferenceProjection<R> projection;

Builder(ElasticsearchSearchIndexScope<?> scope, DocumentReferenceExtractionHelper helper) {
super( scope );
this.projection = new ElasticsearchEntityReferenceProjection<>( scope, helper );
}

@Override
public SearchProjection<R> build() {
return projection;
}
}
}
Expand Up @@ -11,7 +11,6 @@
import org.hibernate.search.backend.elasticsearch.search.common.impl.ElasticsearchSearchIndexScope;
import org.hibernate.search.engine.search.loading.spi.LoadingResult;
import org.hibernate.search.engine.search.loading.spi.ProjectionHitMapper;
import org.hibernate.search.engine.search.projection.SearchProjection;

import com.google.gson.JsonObject;

Expand All @@ -21,7 +20,7 @@ class ElasticsearchExplanationProjection extends AbstractElasticsearchProjection
private static final JsonAccessor<Boolean> REQUEST_EXPLAIN_ACCESSOR = JsonAccessor.root().property( "explain" ).asBoolean();
private static final JsonObjectAccessor HIT_EXPLANATION_ACCESSOR = JsonAccessor.root().property( "_explanation" ).asObject();

private ElasticsearchExplanationProjection(ElasticsearchSearchIndexScope<?> scope) {
ElasticsearchExplanationProjection(ElasticsearchSearchIndexScope<?> scope) {
super( scope );
}

Expand All @@ -48,19 +47,4 @@ public JsonObject transform(LoadingResult<?, ?> loadingResult, JsonObject extrac
ProjectionTransformContext context) {
return extractedData;
}

static class Builder extends AbstractElasticsearchProjection.AbstractBuilder<JsonObject> {

private final ElasticsearchExplanationProjection projection;

Builder(ElasticsearchSearchIndexScope<?> scope) {
super( scope );
this.projection = new ElasticsearchExplanationProjection( scope );
}

@Override
public SearchProjection<JsonObject> build() {
return projection;
}
}
}
Expand Up @@ -10,8 +10,6 @@
import org.hibernate.search.engine.backend.types.converter.spi.ProjectionConverter;
import org.hibernate.search.engine.search.loading.spi.LoadingResult;
import org.hibernate.search.engine.search.loading.spi.ProjectionHitMapper;
import org.hibernate.search.engine.search.projection.SearchProjection;
import org.hibernate.search.engine.search.projection.spi.IdProjectionBuilder;

import com.google.gson.JsonObject;

Expand All @@ -21,7 +19,7 @@ public class ElasticsearchIdProjection<I> extends AbstractElasticsearchProjectio
private final ProjectionExtractionHelper<String> extractionHelper;
private final ProjectionConverter<String, ? extends I> converter;

private ElasticsearchIdProjection(ElasticsearchSearchIndexScope<?> scope,
ElasticsearchIdProjection(ElasticsearchSearchIndexScope<?> scope,
ProjectionExtractionHelper<String> extractionHelper,
ProjectionConverter<String, ? extends I> converter) {
super( scope );
Expand Down Expand Up @@ -51,20 +49,4 @@ public I transform(LoadingResult<?, ?> loadingResult, String extractedData,
ProjectionTransformContext context) {
return converter.fromDocumentValue( extractedData, context.fromDocumentValueConvertContext() );
}

static class Builder<I> extends AbstractBuilder<I> implements IdProjectionBuilder<I> {

private final ElasticsearchIdProjection<I> projection;

Builder(ElasticsearchSearchIndexScope<?> scope, ProjectionExtractionHelper<String> extractionHelper,
ProjectionConverter<String, I> converter) {
super( scope );
this.projection = new ElasticsearchIdProjection<>( scope, extractionHelper, converter );
}

@Override
public SearchProjection<I> build() {
return projection;
}
}
}
Expand Up @@ -9,15 +9,13 @@
import org.hibernate.search.backend.elasticsearch.search.common.impl.ElasticsearchSearchIndexScope;
import org.hibernate.search.engine.search.loading.spi.LoadingResult;
import org.hibernate.search.engine.search.loading.spi.ProjectionHitMapper;
import org.hibernate.search.engine.search.projection.SearchProjection;
import org.hibernate.search.engine.search.projection.spi.SearchProjectionBuilder;

import com.google.gson.JsonObject;

class ElasticsearchJsonHitProjection extends AbstractElasticsearchProjection<JsonObject>
implements ElasticsearchSearchProjection.Extractor<JsonObject, JsonObject> {

private ElasticsearchJsonHitProjection(ElasticsearchSearchIndexScope<?> scope) {
ElasticsearchJsonHitProjection(ElasticsearchSearchIndexScope<?> scope) {
super( scope );
}

Expand All @@ -42,18 +40,4 @@ public JsonObject transform(LoadingResult<?, ?> loadingResult, JsonObject extrac
ProjectionTransformContext context) {
return extractedData;
}

static class Builder implements SearchProjectionBuilder<JsonObject> {

private final ElasticsearchJsonHitProjection projection;

Builder(ElasticsearchSearchIndexScope<?> scope) {
this.projection = new ElasticsearchJsonHitProjection( scope );
}

@Override
public SearchProjection<JsonObject> build() {
return projection;
}
}
}
Expand Up @@ -10,8 +10,6 @@
import org.hibernate.search.backend.elasticsearch.search.common.impl.ElasticsearchSearchIndexScope;
import org.hibernate.search.engine.search.loading.spi.LoadingResult;
import org.hibernate.search.engine.search.loading.spi.ProjectionHitMapper;
import org.hibernate.search.engine.search.projection.SearchProjection;
import org.hibernate.search.engine.search.projection.spi.ScoreProjectionBuilder;

import com.google.gson.JsonObject;

Expand All @@ -21,7 +19,7 @@ class ElasticsearchScoreProjection extends AbstractElasticsearchProjection<Float
private static final JsonAccessor<Boolean> TRACK_SCORES_ACCESSOR = JsonAccessor.root().property( "track_scores" )
.asBoolean();

private ElasticsearchScoreProjection(ElasticsearchSearchIndexScope<?> scope) {
ElasticsearchScoreProjection(ElasticsearchSearchIndexScope<?> scope) {
super( scope );
}

Expand All @@ -48,19 +46,4 @@ public Float transform(LoadingResult<?, ?> loadingResult, Float extractedData,
return extractedData;
}

static class Builder extends AbstractElasticsearchProjection.AbstractBuilder<Float>
implements ScoreProjectionBuilder {

private final ElasticsearchScoreProjection projection;

Builder(ElasticsearchSearchIndexScope<?> scope) {
super( scope );
this.projection = new ElasticsearchScoreProjection( scope );
}

@Override
public SearchProjection<Float> build() {
return projection;
}
}
}
Expand Up @@ -7,14 +7,10 @@
package org.hibernate.search.backend.elasticsearch.search.projection.impl;

import org.hibernate.search.backend.elasticsearch.search.common.impl.ElasticsearchSearchIndexScope;
import org.hibernate.search.engine.backend.common.DocumentReference;
import org.hibernate.search.engine.search.common.spi.SearchIndexIdentifierContext;
import org.hibernate.search.engine.search.projection.SearchProjection;
import org.hibernate.search.engine.search.projection.spi.CompositeProjectionBuilder;
import org.hibernate.search.engine.search.projection.spi.DocumentReferenceProjectionBuilder;
import org.hibernate.search.engine.search.projection.spi.EntityProjectionBuilder;
import org.hibernate.search.engine.search.projection.spi.EntityReferenceProjectionBuilder;
import org.hibernate.search.engine.search.projection.spi.IdProjectionBuilder;
import org.hibernate.search.engine.search.projection.spi.ScoreProjectionBuilder;
import org.hibernate.search.engine.search.projection.spi.SearchProjectionBuilder;
import org.hibernate.search.engine.search.projection.spi.SearchProjectionBuilderFactory;

import com.google.gson.JsonObject;
Expand All @@ -33,47 +29,47 @@ public ElasticsearchSearchProjectionBuilderFactory(SearchProjectionBackendContex
}

@Override
public DocumentReferenceProjectionBuilder documentReference() {
return new ElasticsearchDocumentReferenceProjection.Builder( scope, documentReferenceExtractionHelper );
public SearchProjection<DocumentReference> documentReference() {
return new ElasticsearchDocumentReferenceProjection( scope, documentReferenceExtractionHelper );
}

@Override
public <E> EntityProjectionBuilder<E> entity() {
return new ElasticsearchEntityProjection.Builder<>( scope, documentReferenceExtractionHelper );
public <E> SearchProjection<E> entity() {
return new ElasticsearchEntityProjection<>( scope, documentReferenceExtractionHelper );
}

@Override
public <R> EntityReferenceProjectionBuilder<R> entityReference() {
return new ElasticsearchEntityReferenceProjection.Builder<>( scope, documentReferenceExtractionHelper );
public <R> SearchProjection<R> entityReference() {
return new ElasticsearchEntityReferenceProjection<>( scope, documentReferenceExtractionHelper );
}

@Override
public <I> IdProjectionBuilder<I> id(Class<I> identifierType) {
public <I> SearchProjection<I> id(Class<I> identifierType) {
SearchIndexIdentifierContext identifier = scope.identifier();
return new ElasticsearchIdProjection.Builder<>( scope, idProjectionExtractionHelper,
return new ElasticsearchIdProjection<>( scope, idProjectionExtractionHelper,
identifier.projectionConverter().withConvertedType( identifierType, identifier ) );
}

@Override
public ScoreProjectionBuilder score() {
return new ElasticsearchScoreProjection.Builder( scope );
public SearchProjection<Float> score() {
return new ElasticsearchScoreProjection( scope );
}

@Override
public CompositeProjectionBuilder composite() {
return new ElasticsearchCompositeProjection.Builder( scope );
}

public SearchProjectionBuilder<JsonObject> source() {
return new ElasticsearchSourceProjection.Builder( scope );
public SearchProjection<JsonObject> source() {
return new ElasticsearchSourceProjection( scope );
}

public SearchProjectionBuilder<JsonObject> explanation() {
return new ElasticsearchExplanationProjection.Builder( scope );
public SearchProjection<JsonObject> explanation() {
return new ElasticsearchExplanationProjection( scope );
}

public SearchProjectionBuilder<JsonObject> jsonHit() {
return new ElasticsearchJsonHitProjection.Builder( scope );
public SearchProjection<JsonObject> jsonHit() {
return new ElasticsearchJsonHitProjection( scope );
}

}
Expand Up @@ -11,7 +11,6 @@
import org.hibernate.search.backend.elasticsearch.search.common.impl.ElasticsearchSearchIndexScope;
import org.hibernate.search.engine.search.loading.spi.LoadingResult;
import org.hibernate.search.engine.search.loading.spi.ProjectionHitMapper;
import org.hibernate.search.engine.search.projection.SearchProjection;

import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
Expand All @@ -22,7 +21,7 @@ class ElasticsearchSourceProjection extends AbstractElasticsearchProjection<Json
private static final JsonArrayAccessor REQUEST_SOURCE_ACCESSOR = JsonAccessor.root().property( "_source" ).asArray();
private static final JsonPrimitive WILDCARD_ALL = new JsonPrimitive( "*" );

private ElasticsearchSourceProjection(ElasticsearchSearchIndexScope<?> scope) {
ElasticsearchSourceProjection(ElasticsearchSearchIndexScope<?> scope) {
super( scope );
}

Expand All @@ -48,19 +47,4 @@ public JsonObject transform(LoadingResult<?, ?> loadingResult, JsonObject extrac
ProjectionTransformContext context) {
return extractedData;
}

static class Builder extends AbstractElasticsearchProjection.AbstractBuilder<JsonObject> {

private final ElasticsearchSourceProjection projection;

Builder(ElasticsearchSearchIndexScope<?> scope) {
super( scope );
this.projection = new ElasticsearchSourceProjection( scope );
}

@Override
public SearchProjection<JsonObject> build() {
return projection;
}
}
}
Expand Up @@ -54,12 +54,12 @@ public ElasticsearchSearchQuerySelectStepImpl(ElasticsearchSearchQueryIndexScope

@Override
public ElasticsearchSearchQueryWhereStep<E, LOS> selectEntity() {
return select( scope.projectionBuilders().<E>entity().build() );
return select( scope.projectionBuilders().entity() );
}

@Override
public ElasticsearchSearchQueryWhereStep<R, LOS> selectEntityReference() {
return select( scope.projectionBuilders().<R>entityReference().build() );
return select( scope.projectionBuilders().entityReference() );
}

@Override
Expand Down

0 comments on commit 5c27d8a

Please sign in to comment.