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

com.fluxtion.runtime.node.DefaultEventHandlerNode Maven / Gradle / Ivy

/*
 * Copyright (C) 2018 2024 gregory higgins.
 *
 * 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.node;

import com.fluxtion.runtime.EventProcessorContext;
import com.fluxtion.runtime.annotations.Initialise;
import com.fluxtion.runtime.annotations.TearDown;
import com.fluxtion.runtime.annotations.builder.AssignToField;
import com.fluxtion.runtime.annotations.builder.Inject;
import com.fluxtion.runtime.audit.EventLogNode;
import com.fluxtion.runtime.dataflow.TriggeredFlowFunction;
import com.fluxtion.runtime.event.Event;
import com.fluxtion.runtime.lifecycle.Lifecycle;

import java.util.Objects;
import java.util.function.BooleanSupplier;

/**
 * {@inheritDoc}
 */
public final class DefaultEventHandlerNode
        extends EventLogNode
        implements
        Lifecycle,
        NamedNode,
        EventHandlerNode,
        TriggeredFlowFunction {

    private final int filterId;
    private final String filterString;
    private final Class eventClass;
    private final String name;
    private T event;
    private BooleanSupplier dirtySupplier;
    @Inject
    private final EventProcessorContext eventProcessorContext;

    public DefaultEventHandlerNode(Class eventClass) {
        this(Event.NO_INT_FILTER, Event.NO_STRING_FILTER, eventClass);
    }

    public DefaultEventHandlerNode(int filterId, Class eventClass) {
        this(filterId, Event.NO_STRING_FILTER, eventClass);
    }

    public DefaultEventHandlerNode(String filterString, Class eventClass) {
        this(Event.NO_INT_FILTER, filterString, eventClass);
    }

    public DefaultEventHandlerNode(
            int filterId,
            String filterString,
            Class eventClass
    ) {
        this.filterId = filterId;
        this.filterString = filterString;
        this.eventClass = eventClass;
        if (filterId != Event.NO_INT_FILTER) {
            name = "handler" + eventClass.getSimpleName() + "_" + filterId;
        } else if (!filterString.equals(Event.NO_STRING_FILTER)) {
            name = "handler" + eventClass.getSimpleName() + "_" + filterString;
        } else {
            name = "handler" + eventClass.getSimpleName();
        }
        eventProcessorContext = null;
    }

    public DefaultEventHandlerNode(
            int filterId,
            @AssignToField("filterString") String filterString,
            Class eventClass,
            @AssignToField("name") String name,
            EventProcessorContext eventProcessorContext) {
        this.eventProcessorContext = eventProcessorContext;
        this.filterId = filterId;
        this.filterString = filterString;
        this.eventClass = eventClass;
        this.name = name;
    }

    @Override
    public void parallel() {

    }

    @Override
    public boolean parallelCandidate() {
        return false;
    }

    @Override
    public int filterId() {
        return filterId;
    }

    @Override
    public  boolean onEvent(E e) {
        auditLog.info("inputEvent", e.getClass().getSimpleName());
        this.event = e;
        return true;
    }

    @Override
    public String filterString() {
        return filterString;
    }

    @Override
    public Class eventClass() {
        return eventClass;
    }


    @Override
    public boolean hasChanged() {
        return dirtySupplier.getAsBoolean();
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 13 * hash + this.filterId;
        hash = 13 * hash + Objects.hashCode(this.eventClass);
        hash = 13 * hash + Objects.hashCode(this.filterString);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final DefaultEventHandlerNode other = (DefaultEventHandlerNode) obj;
        if (this.filterId != other.filterId) {
            return false;
        }
        if (this.filterString != other.filterString) {
            return false;
        }
        if (!Objects.equals(this.eventClass, other.eventClass)) {
            return false;
        }
        return true;
    }

    @Initialise
    @Override
    public void init() {
        dirtySupplier = eventProcessorContext.getDirtyStateMonitor().dirtySupplier(this);
    }

    @Override
    @TearDown
    public void tearDown() {
    }

    @Override
    public T get() {
        return event;
    }

    @Override
    public void setUpdateTriggerNode(Object updateTriggerNode) {
        //do nothing
    }

    @Override
    public void setPublishTriggerNode(Object publishTriggerNode) {
        //do nothing
    }

    @Override
    public void setResetTriggerNode(Object resetTriggerNode) {
        //do nothing
    }

    @Override
    public void setPublishTriggerOverrideNode(Object publishTriggerOverrideNode) {
    }

    @Override
    public String getName() {
        return name;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy