
package uk.co.wingpath.modbusgui;

import java.util.*;
import java.awt.EventQueue;

public class BackendState
{
    public final boolean isRunning;
    public final boolean isStopped;
    public final boolean isMaster;
    public final boolean isSlave;

    public interface Listener
        extends EventListener
    {
        void stateChanged (BackendState state);
    }

    public BackendState (boolean isRunning, boolean isStopped, boolean isMaster,
        boolean isSlave)
    {
        this.isRunning = isRunning;
        this.isStopped = isStopped;
        this.isMaster = isMaster;
        this.isSlave = isSlave;
    }

    public static class Source
    {
        private List<Listener> listeners = new LinkedList<Listener> ();

        public synchronized void addListener (Listener l)
        {
            listeners.add (l);
        }

        public synchronized void removeListener (Listener l)
        {
            listeners.remove (l);
        }

        public void reportState (final BackendState state)
        {
            for (final Listener listener : listeners)
            {
                EventQueue.invokeLater (
                    new Runnable ()
                    {
                        public void run ()
                        {
                            listener.stateChanged (state);
                        }
                    });
            }
        }

    }
}

