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

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

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

import io.sphere.sdk.models.Base;

import javax.annotation.Nullable;
import java.util.Optional;
import java.util.function.Function;

import static java.util.Objects.requireNonNull;

abstract class SearchModelExpression extends Base {
    private final SearchModel searchModel;
    private final Function typeSerializer;
    @Nullable
    protected final String alias;
    protected final Boolean isCountingProducts;

    protected SearchModelExpression(final SearchModel searchModel, final Function typeSerializer, @Nullable final String alias, final Boolean isCountingProducts) {
        this.searchModel = requireNonNull(searchModel);
        this.typeSerializer = requireNonNull(typeSerializer);
        this.alias = alias;
        this.isCountingProducts = isCountingProducts;
    }

    public final String expression() {
        return searchModel.attributePath() + Optional.ofNullable(value()).orElse("") + Optional.ofNullable(alias).map(a -> " as " + a).orElse("") + (isCountingProducts ? " counting products" : "");
    }

    public final String attributePath() {
        return searchModel.attributePath();
    }

    public final String resultPath() {
        return Optional.ofNullable(alias).orElse(searchModel.attributePath());
    }

    @Nullable
    protected String alias() {
        return alias;
    }

    protected Boolean isCountingProducts() {
        return isCountingProducts;
    }

    @Nullable
    protected abstract String value();

    protected Function serializer() {
        return typeSerializer;
    }

    @Override
    public String toString() {
        return expression();
    }

    @Override
    public final int hashCode() {
        return expression().hashCode();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy