
com.fluxtion.runtime.dataflow.aggregate.function.SizedSlidingWindow Maven / Gradle / Ivy
/*
* Copyright (c) 2025 gregory higgins.
* All rights reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the Server Side Public License, version 1,
* as published by MongoDB, Inc.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* Server Side Public License for more details.
*
* You should have received a copy of the Server Side Public License
* along with this program. If not, see
* .
*/
package com.fluxtion.runtime.dataflow.aggregate.function;
import com.fluxtion.runtime.annotations.OnParentUpdate;
import com.fluxtion.runtime.annotations.OnTrigger;
import com.fluxtion.runtime.dataflow.FlowFunction;
import com.fluxtion.runtime.dataflow.TriggeredFlowFunction;
import com.fluxtion.runtime.dataflow.aggregate.AggregateFlowFunction;
import com.fluxtion.runtime.dataflow.function.AbstractFlowFunction;
import com.fluxtion.runtime.partition.LambdaReflection;
import com.fluxtion.runtime.partition.LambdaReflection.SerializableSupplier;
public class SizedSlidingWindow
, F extends AggregateFlowFunction>
extends AbstractFlowFunction
implements TriggeredFlowFunction {
private final LambdaReflection.SerializableSupplier windowFunctionSupplier;
private final int buckets;
protected transient final BucketedSlidingWindow windowFunction;
private R value;
public SizedSlidingWindow(
S inputEventStream,
SerializableSupplier windowFunctionSupplier,
int buckets) {
super(inputEventStream, null);
this.windowFunctionSupplier = windowFunctionSupplier;
this.buckets = buckets;
this.windowFunction = new BucketedSlidingWindow<>(windowFunctionSupplier, buckets);
}
@Override
public R get() {
return value;
}
protected void cacheWindowValue() {
value = windowFunction.get();
}
protected void aggregateInputValue(S inputEventStream) {
windowFunction.aggregate(inputEventStream.get());
windowFunction.roll();
if (windowFunction.isAllBucketsFilled()) {
cacheWindowValue();
publishOverrideTriggered = !overridePublishTrigger & !overrideUpdateTrigger;
inputStreamTriggered_1 = true;
inputStreamTriggered = true;
}
}
@OnParentUpdate
public void inputUpdated(S inputEventStream) {
aggregateInputValue(inputEventStream);
inputStreamTriggered_1 = false;
inputStreamTriggered = false;
}
@OnTrigger
public boolean triggered() {
return fireEventUpdateNotification();
}
@Override
protected void resetOperation() {
windowFunction.init();
value = null;
}
@Override
public boolean isStatefulFunction() {
return true;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy