// Path: src/main/java/org/calrissian/flowmix/api/Policy.java
// public enum Policy implements Serializable {
// 
//     COUNT, TIME, TIME_DELTA_LT
// }
// 
// Path: src/main/java/org/calrissian/flowmix/core/model/RequiresPartitioning.java
// public interface RequiresPartitioning {
// }
// 
// Path: src/main/java/org/calrissian/flowmix/api/Aggregator.java
// public interface Aggregator extends Serializable {
// 
//     public static final String GROUP_BY = "groupBy";
//     public static final String GROUP_BY_DELIM = "\u0000";
// 
//     void configure(Map<String, String> configuration);
// 
//     void added(WindowItem item);
// 
//     void evicted(WindowItem item);
// 
//     List<AggregatedEvent> aggregate();
// }


import org.calrissian.flowmix.api.Policy;
import org.calrissian.flowmix.core.model.RequiresPartitioning;
import org.calrissian.flowmix.api.Aggregator;
import java.util.Map;

    private long windowEvictMillis;

    private Map<String,String> config;

    public AggregateOp(Class<? extends Aggregator> aggregatorClass, Policy triggerPolicy, long triggerThreshold,
                       Policy evictionPolicy, long evictionThreshold, Map<String,String> config, boolean clearOnTrigger,
                       long windowEvictMillis) {
        this.aggregatorClass = aggregatorClass;
        this.triggerPolicy = triggerPolicy;
        this.evictionPolicy = evictionPolicy;
        this.triggerThreshold = triggerThreshold;
        this.evictionThreshold = evictionThreshold;
        this.config = config;
        this.clearOnTrigger = clearOnTrigger;
        this.windowEvictMillis = windowEvictMillis;
    }

    public boolean isClearOnTrigger() {
      return clearOnTrigger;
    }

    public Class<? extends Aggregator> getAggregatorClass() {
        return aggregatorClass;
    }

    public Policy getTriggerPolicy() {
        return triggerPolicy;
    }

// Path: src/main/java/org/calrissian/flowmix/api/Policy.java
// public enum Policy implements Serializable {
// 
//     COUNT, TIME, TIME_DELTA_LT
// }
// 
// Path: src/main/java/org/calrissian/flowmix/core/model/RequiresPartitioning.java
// public interface RequiresPartitioning {
// }
// 
// Path: src/main/java/org/calrissian/flowmix/api/Aggregator.java
// public interface Aggregator extends Serializable {
// 
//     public static final String GROUP_BY = "groupBy";
//     public static final String GROUP_BY_DELIM = "\u0000";
// 
//     void configure(Map<String, String> configuration);
// 
//     void added(WindowItem item);
// 
//     void evicted(WindowItem item);
// 
//     List<AggregatedEvent> aggregate();
// }


// Path: src/main/java/org/calrissian/flowmix/core/model/op/AggregateOp.java
import org.calrissian.flowmix.api.Policy;
import org.calrissian.flowmix.core.model.RequiresPartitioning;
import org.calrissian.flowmix.api.Aggregator;
import java.util.Map;


    private long windowEvictMillis;

    private Map<String,String> config;

    public AggregateOp(Class<? extends Aggregator> aggregatorClass, Policy triggerPolicy, long triggerThreshold,
                       Policy evictionPolicy, long evictionThreshold, Map<String,String> config, boolean clearOnTrigger,
                       long windowEvictMillis) {
        this.aggregatorClass = aggregatorClass;
        this.triggerPolicy = triggerPolicy;
        this.evictionPolicy = evictionPolicy;
        this.triggerThreshold = triggerThreshold;
        this.evictionThreshold = evictionThreshold;
        this.config = config;
        this.clearOnTrigger = clearOnTrigger;
        this.windowEvictMillis = windowEvictMillis;
    }

    public boolean isClearOnTrigger() {
      return clearOnTrigger;
    }

    public Class<? extends Aggregator> getAggregatorClass() {
        return aggregatorClass;
    }

    public Policy getTriggerPolicy() {
        return triggerPolicy;
    }

    public Policy getEvictionPolicy() {