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

com.fluxtion.runtime.output.SinkPublisher Maven / Gradle / Ivy

package com.fluxtion.runtime.output;

import com.fluxtion.runtime.annotations.OnEventHandler;
import com.fluxtion.runtime.annotations.builder.AssignToField;
import com.fluxtion.runtime.annotations.runtime.ServiceDeregistered;
import com.fluxtion.runtime.annotations.runtime.ServiceRegistered;
import com.fluxtion.runtime.node.SingleNamedNode;

import java.util.function.Consumer;
import java.util.function.DoubleConsumer;
import java.util.function.IntConsumer;
import java.util.function.LongConsumer;

public class SinkPublisher extends SingleNamedNode {

    private transient final String filterString;
    private Consumer sink;
    private IntConsumer intConsumer;

    private LongConsumer longConsumer;

    private DoubleConsumer doubleConsumer;

    public SinkPublisher(@AssignToField("name") String filterString) {
        super(filterString);
        this.filterString = filterString;
    }

    @OnEventHandler(filterVariable = "filterString", propagate = false)
    public void sinkRegistration(SinkRegistration sinkRegistration) {
        sink = sinkRegistration.getConsumer();
        intConsumer = sinkRegistration.getIntConsumer();
        longConsumer = sinkRegistration.getLongConsumer();
        doubleConsumer = sinkRegistration.getDoubleConsumer();
    }

    @OnEventHandler(filterVariable = "filterString", propagate = false)
    public void unregisterSink(SinkDeregister sinkDeregister) {
        sink = null;
        intConsumer = null;
        longConsumer = null;
        doubleConsumer = null;
    }

    @ServiceRegistered
    public void messageSinkRegistered(MessageSink messageSink, String name){
        if(name.equals(getName())){
            auditLog.info("registeredMessageSink", name);
            sink = messageSink;
        }
    }

    @ServiceDeregistered
    public void messageSinkDeregistered(MessageSink messageSink, String name){
        if(name.equals(getName())){
            auditLog.info("deregisteredMessageSink", name);
            sink = null;
        }
    }

    public void publish(T publishItem) {
        if (sink != null)
            sink.accept(publishItem);
    }

    public void publishInt(int value) {
        if (intConsumer != null)
            intConsumer.accept(value);
    }

    public void publishDouble(double value) {
        if (doubleConsumer != null)
            doubleConsumer.accept(value);
    }

    public void publishLong(long value) {
        if (longConsumer != null)
            longConsumer.accept(value);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy