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

com.talanlabs.processmanager.messages.trigger.ThreadedTrigger Maven / Gradle / Ivy

The newest version!
package com.talanlabs.processmanager.messages.trigger;

import com.talanlabs.processmanager.messages.trigger.api.TriggerEventListener;
import com.talanlabs.processmanager.shared.logging.LogManager;
import com.talanlabs.processmanager.shared.logging.LogService;

public class ThreadedTrigger extends AbstractTrigger {

    private final ThreadedTriggerTask task;
    private final long wait;

    public ThreadedTrigger(String id, ThreadedTriggerTask task, long wait) {
        super(id);
        this.task = task;
        this.wait = wait;
        this.task.setTrigger(this);
    }

    public void doActivate(TriggerEventListener triggerEventListener) {
        task.clean();
        HostingThread hostingThread = new HostingThread(this, task, triggerEventListener, wait);
        hostingThread.start();
    }

    @Override
    public String toString() {
        return "THREADED TRIGGER (task = " + task.toString() + ")";
    }

    private class HostingThread extends Thread {

        private final LogService logService;

        private final ThreadedTrigger trigger;
        private final ThreadedTriggerTask task;
        private final TriggerEventListener triggerEventListener;
        private long wait;

        private HostingThread(ThreadedTrigger trigger, ThreadedTriggerTask task, TriggerEventListener triggerEventListener, long wait) {
            super("TriggerThread_" + trigger.getId());
            setDaemon(true);

            logService = LogManager.getLogService(getClass());

            this.trigger = trigger;
            this.task = task;
            this.triggerEventListener = triggerEventListener;
            this.wait = wait;
        }

        @Override
        public void run() {
            try {
                while (trigger.isActive()) {
                    task.execute(triggerEventListener);
                    Thread.sleep(wait);
                }
            } catch (InterruptedException e) {
                logService.error(() -> "Trigger {0} stopped! InterruptedException", e, ThreadedTrigger.this.getId());
            }
            task.clean();
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy