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

io.sphere.client.model.SearchResult Maven / Gradle / Ivy

There is a newer version: 0.72.1
Show newest version
package io.sphere.client.model;

import io.sphere.client.SphereClientException;
import io.sphere.client.facets.*;
import io.sphere.client.model.facets.*;
import org.codehaus.jackson.annotate.JsonProperty;

import java.util.*;

/** Result of a search query to the Sphere backend. */
public class SearchResult {
    private int offset;
    private int count;
    private int total;
    private List results = new ArrayList();
    @JsonProperty("facets")
    private Map facets = new HashMap();
    private int pageSize = 1;

    public int getOffset() { return offset; }
    public int getCount() { return count; }
    public int getTotal() { return total; }
    public List getResults() { return results; }
    public int getPageSize() { return pageSize; }

    public SearchResult(int offset, int count, int total, Collection results, Map facets, int pageSize) {
        this.offset = offset;
        this.count = count;
        this.total = total;
        this.results = (results != null) ? new ArrayList(results) : null;
        this.facets = facets;
        this.pageSize = pageSize;
    }

    // for JSON deserializer
    private SearchResult() {
    }

    /** Returns the index of the current page, starting at zero. */
    public int getCurrentPage() {
        return offset / pageSize;
    }

    /** Returns the total number of pages. */
    public int getTotalPages() {
        return (total + pageSize - 1) / pageSize;
    }

    // --------------------------------------------------------------
    // Conversion to correct facet type
    // --------------------------------------------------------------

    // Terms

    /** Finds a facet result for a terms facet. */
    public TermFacetResult getTermFacet(TermFacet facet) {
        return getTermsFacet(facet.getAttributeName());
    }

    // Ranges

    /** Finds a facet result for a number range facet. */
    public NumberRangeFacetResult getNumberRangeFacet(RangeFacet facet) {
        return NumberRangeFacetResult.fromBackendDoubles(getRangeFacet(facet.getAttributeName()));
    }

    /** Finds a facet result for a Money range facet. */
    public MoneyRangeFacetResult getMoneyRangeFacet(MoneyRangeFacet facet) {
        return MoneyRangeFacetResult.fromCents(getRangeFacet(facet.getAttributeName()));
    }

    /** Finds a facet result for a DateTime range facet. */
    public DateTimeRangeFacetResult getDateTimeRangeFacet(DateTimeRangeFacet facet) {
        return DateTimeRangeFacetResult.fromMilliseconds(getRangeFacet(facet.getAttributeName()));
    }

    // --------------------------------------------------------------
    // Low-level API for returning the raw facets as parsed from JSON.
    // We might decide to make it public when needed.
    // --------------------------------------------------------------

    /** Returns all the facet results exactly in the format as they were returned by the backend.
     * This is a fairly low-level method that should be needed only if you need to do custom facet results manipulation. */
    public Map getFacetsRaw() {
        return facets;
    }

    private FacetResult getFacetRaw(String expression) {
        return facets.get(expression);
    }

    /** Gets a terms facet result for given facet expression. */
    private TermFacetResult getTermsFacet(String expression) {
        FacetResult facetResult = getFacetRaw(expression);
        if (facetResult == null)
            return null;
        checkCorrectType(expression, TermFacetResult.class, facetResult);
        return (TermFacetResult)facetResult;
    }

    /** Gets a range facet result for given facet expression. */
    private RangeFacetResultRaw getRangeFacet(String expression) {
        FacetResult facetResult = getFacetRaw(expression);
        if (facetResult == null)
            return null;
        checkCorrectType(expression, RangeFacetResultRaw.class, facetResult);
        return (RangeFacetResultRaw)facetResult;
    }

    // ----------------------------
    // Helpers
    // ----------------------------

    /** Before downcasting, checks that the type of result is correct. */
    private void checkCorrectType(String attributeName, Class expectedClass, FacetResult facetResult) {
        if (!(expectedClass.isInstance(facetResult))) {
            throw new SphereClientException(attributeName + " is a " + facetResult.getClass().getSimpleName() + ", not " + expectedClass.getSimpleName());
        }
    }

    @Override
    public String toString() {
        return "SearchResult{" +
                "offset=" + offset +
                ", count=" + count +
                ", total=" + total +
                ", results=" + results +
                ", facets=" + facets +
                ", pageSize=" + pageSize +
                '}';
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy