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

io.sphere.client.ProductSort Maven / Gradle / Ivy

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

/** Specifies how products are sorted in {@link SearchRequest#sort}.
 * Use e.g. {@code ProductSort.price.asc}, {@code ProductSort.name.desc}. */
public abstract class ProductSort {
    private static abstract class DirectedProductSearch extends ProductSort {
        private final SortDirection direction;

        protected DirectedProductSearch(SortDirection direction) {
            this.direction = direction;
        }

        public SortDirection getDirection() { return direction; }

        @Override
        public String toString() {
            return getClass().getCanonicalName() + "{" +
                    "direction=" + direction +
                    '}';
        }
    }

    // ---------------------------
    // Relevance
    // ---------------------------
    /** Specifies sorting by descending relevance (always from the most relevant products). This is the default. */
    public static final Relevance relevance = new Relevance();
    /** Specifies sorting by descending relevance (always from the most relevant products). This is the default. */
    public static class Relevance extends ProductSort {
        private Relevance() {}
        @Override public String toString() {
            return "[Relevance]";
        }
    }
    // ---------------------------
    // Price
    // ---------------------------
    /** Specifies sorting by price, ascending or descending. */
    public static final PriceSorts price = new PriceSorts();
    /** Specifies sorting by price, ascending or descending. */
    public static class PriceSorts {
        /** Specifies sorting by price, descending. */
        public final Price desc = new Price(SortDirection.DESC);
        /** Specifies sorting by price, ascending. */
        public final Price asc = new Price(SortDirection.ASC);
    }
    /** Specifies sorting by price. */
    public static class Price extends DirectedProductSearch {
        private Price(SortDirection direction) {
            super(direction);
        }
    }

    // ---------------------------
    // Name
    // ---------------------------
    /** Specifies sorting by name, ascending or descending. */
    public static final NameSorts name = new NameSorts();
    /** Specifies sorting by name, ascending or descending. */
    public static class NameSorts {
        /** Specifies sorting by name, descending. */
        public final Name desc = new Name(SortDirection.DESC);
        /** Specifies sorting by name, ascending. */
        public final Name asc = new Name(SortDirection.ASC);
    }
    /** Specifies sorting by name. */
    public static class Name extends DirectedProductSearch {
        private Name(SortDirection direction) {
            super(direction);
        }
    }

    // ---------------------------
    // attributes
    // ---------------------------
    public static final AttributeSorts attributes = new AttributeSorts();

    public static class AttributeSortsPreDirection {
        public final AttributeProductSort asc;
        public final AttributeProductSort desc;

        AttributeSortsPreDirection(final String fieldSortWithoutDirection) {
            asc = new AttributeProductSort(fieldSortWithoutDirection + " asc");
            desc = new AttributeProductSort(fieldSortWithoutDirection + " desc");
        }
    }

    public static class AttributeSorts {
        public AttributeSortsPreDirection text(final String fieldName) {
            return new AttributeSortsPreDirection(fieldName);
        }

        public AttributeSortsPreDirection date(final String fieldName) {
            return text(fieldName);
        }

        public AttributeSortsPreDirection time(final String fieldName) {
            return text(fieldName);
        }

        public AttributeSortsPreDirection datetime(final String fieldName) {
            return text(fieldName);
        }

        public AttributeSortsPreDirection bool(final String fieldName) {
            return text(fieldName);
        }

        public AttributeSortsPreDirection number(final String fieldName) {
            return text(fieldName);
        }

        public AttributeSortsPreDirection localizedString(final String fieldName, final String lang) {
            return new AttributeSortsPreDirection(fieldName + "." + lang.toLowerCase());
        }

        public AttributeSortsPreDirection enumKey(final String fieldName) {
            return new AttributeSortsPreDirection(fieldName + ".key");
        }

        public AttributeSortsPreDirection localizableEnumKey(final String fieldName) {
            return new AttributeSortsPreDirection(fieldName + ".key");
        }

        public AttributeSortsPreDirection enumLabel(final String fieldName) {
            return new AttributeSortsPreDirection(fieldName + ".label");
        }

        public AttributeSortsPreDirection localizableEnumLabel(final String fieldName, final String lang) {
            return new AttributeSortsPreDirection(fieldName + ".label." + lang.toLowerCase());
        }

        public AttributeSortsPreDirection moneyCentAmount(final String fieldName) {
            return new AttributeSortsPreDirection(fieldName + ".centAmount");
        }

        public AttributeSortsPreDirection moneyCurrencyCode(final String fieldName) {
            return new AttributeSortsPreDirection(fieldName + ".currencyCode");
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy