EntandoBundleJobListProcessor.java

package org.entando.kubernetes.service.digitalexchange.job;

import java.util.Comparator;
import java.util.List;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Stream;
import org.apache.commons.lang3.StringUtils;
import org.entando.kubernetes.model.job.EntandoBundleJobEntity;
import org.entando.kubernetes.model.web.request.Filter;
import org.entando.kubernetes.model.web.request.FilterUtils;
import org.entando.kubernetes.model.web.request.PagedListRequest;
import org.entando.kubernetes.model.web.request.RequestListProcessor;

public class EntandoBundleJobListProcessor extends RequestListProcessor<EntandoBundleJobEntity> {

    public static final String ID = "id";
    public static final String STATUS = "status";
    public static final String STARTED_AT = "startedAt";
    public static final String FINISHED_AT = "finishedAt";
    public static final String COMPONENT_ID = "componentId";
    public static final String COMPONENT_NAME = "componentName";
    public static final String COMPONENT_VERSION = "componentVersion";

    public EntandoBundleJobListProcessor(PagedListRequest pagedListRequest,
            Stream<EntandoBundleJobEntity> stream) {
        super(pagedListRequest, stream);
    }

    public EntandoBundleJobListProcessor(PagedListRequest pagedListRequest,
            List<EntandoBundleJobEntity> items) {
        super(pagedListRequest, items);
    }

    @Override
    protected Function<Filter, Predicate<EntandoBundleJobEntity>> getPredicates() {
        return filter -> {
            switch (filter.getAttribute()) {
                case ID:
                    return c -> FilterUtils.filterString(filter, c.getId().toString());
                case COMPONENT_ID:
                    return c -> FilterUtils.filterString(filter, c.getComponentId());
                case COMPONENT_NAME:
                    return c -> FilterUtils.filterString(filter, c.getComponentName());
                case COMPONENT_VERSION:
                    return c -> FilterUtils.filterString(filter, c.getComponentVersion());
                case STATUS:
                    return c -> FilterUtils.filterString(filter, c.getStatus().name());
                case STARTED_AT:
                    return c -> FilterUtils.filterDate(filter, c.getStartedAt());
                case FINISHED_AT:
                    return c -> FilterUtils.filterDate(filter, c.getFinishedAt());
                default:
                    return null;
            }
        };
    }

    @Override
    protected Function<String, Comparator<EntandoBundleJobEntity>> getComparators() {
        return sort -> {
            switch (sort) {
                case COMPONENT_ID:
                    return (a, b) -> StringUtils.compareIgnoreCase(a.getComponentId(), b.getComponentId());
                case COMPONENT_NAME:
                    return (a, b) -> StringUtils.compareIgnoreCase(a.getComponentName(), b.getComponentName());
                case COMPONENT_VERSION:
                    return (a, b) -> StringUtils.compareIgnoreCase(a.getComponentVersion(), b.getComponentVersion());
                case STARTED_AT:
                    return Comparator.comparing(EntandoBundleJobEntity::getStartedAt);
                case FINISHED_AT:
                    return Comparator.comparing(EntandoBundleJobEntity::getFinishedAt);
                case ID:
                default:
                    return Comparator.comparing(EntandoBundleJobEntity::getId);
            }
        };
    }
}