All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.sphere.sdk.search.model.TermFacetedSearchBaseSearchModel Maven / Gradle / Ivy

The newest version!
package io.sphere.sdk.search.model;

import io.sphere.sdk.models.Base;
import io.sphere.sdk.search.FilterExpression;
import io.sphere.sdk.search.TermFacetedSearchExpression;
import io.sphere.sdk.search.TermFacetExpression;

import java.util.List;

import static java.util.Collections.emptyList;
import static java.util.Collections.singletonList;

/**
 * Model to build term facets and filters.
 * This class is abstract to force the subclass to select the methods that need to be highlighted and/or extended.
 * @param  type of the resource
 */
abstract class TermFacetedSearchBaseSearchModel extends Base implements FacetedSearchSearchModel {
    protected static final TypeSerializer TYPE_SERIALIZER = TypeSerializer.ofString();
    protected final SearchModel searchModel;
    private final TermFacetExpression facetExpression;
    private final TermFilterSearchModel filterSearchModel;

    TermFacetedSearchBaseSearchModel(final SearchModel searchModel) {
        this.searchModel = searchModel;
        this.facetExpression = new TermFacetSearchModelImpl<>(searchModel, TYPE_SERIALIZER).allTerms();
        this.filterSearchModel = new TermFilterSearchModelImpl<>(searchModel, TYPE_SERIALIZER);
    }

    @Override
    public SearchModel getSearchModel() {
        return searchModel;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public TermFacetedSearchExpression allTerms() {
        return buildExpression(emptyList());
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public TermFacetedSearchExpression is(final String value) {
        return containsAny(singletonList(value));
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public TermFacetedSearchExpression containsAny(final Iterable values) {
        return buildExpression(filterSearchModel.containsAnyAsString(values));
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public TermFacetedSearchExpression containsAll(final Iterable values) {
        return buildExpression(filterSearchModel.containsAll(values));
    }

    private TermFacetedSearchExpression buildExpression(final List> filterExpressions) {
        return TermFacetedSearchExpression.of(facetExpression, filterExpressions);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy