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

net.intelie.liverig.plugin.widgets.ChannelsExtractor Maven / Gradle / Ivy

The newest version!
package net.intelie.liverig.plugin.widgets;

import net.intelie.liverig.plugin.curves.CalculatedCurves;
import net.intelie.liverig.plugin.curves.Curve;
import net.intelie.liverig.plugin.curves.StandardCurves;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

public class ChannelsExtractor {

    private static final String QUANTITY_TYPE_TEXT = "text";

    @NotNull
    private final StandardCurves standardCurves;
    @NotNull
    private final CalculatedCurves calculatedCurves;

    public ChannelsExtractor(@NotNull StandardCurves standardCurves, @NotNull CalculatedCurves calculatedCurves) {
        this.standardCurves = standardCurves;
        this.calculatedCurves = calculatedCurves;
    }

    @NotNull
    public Set simpleChannels(@NotNull List channels) {
        return filter(channels, FILTER_TYPE.COMMON);
    }

    @NotNull
    public Set throttledChannels(@NotNull List channels) {
        return filter(channels, FILTER_TYPE.THROTTLE);
    }

    @NotNull
    public Set textChannels(@NotNull List channels) {
        return filter(channels, FILTER_TYPE.TEXT);
    }

    @Nullable
    private Curve findCurve(@Nullable AssetChannel channel) {
        if (channel == null) return null;
        Curve curve = standardCurves.getCurve(channel.getQualifier());
        return (curve != null) ? curve : calculatedCurves.getCurve(channel.getQualifier());
    }

    @NotNull
    private Set filter(@NotNull List channels, FILTER_TYPE type) {
        return channels.stream().filter(c -> {
            Curve curve = findCurve(c);
            String quantityType = (curve != null) ? curve.quantityType() : null;

            switch (type) {
                case TEXT:
                    return ChannelsExtractor.QUANTITY_TYPE_TEXT.equalsIgnoreCase(quantityType);

                case THROTTLE:
                    return c.shouldThrottle();

                case COMMON:
                    return !ChannelsExtractor.QUANTITY_TYPE_TEXT.equalsIgnoreCase(quantityType) && !c.shouldThrottle();

            }


            return false;
        }).map(AssetChannel::getQualifier).collect(Collectors.toSet());
    }

    private enum FILTER_TYPE {
        TEXT,
        THROTTLE,
        COMMON
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy