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

org.bidib.wizard.mvc.loco.model.LocoModel Maven / Gradle / Ivy

There is a newer version: 2.0.0-M1
Show newest version
package org.bidib.wizard.mvc.loco.model;

import java.util.BitSet;
import java.util.Collection;
import java.util.LinkedList;

import org.bidib.wizard.comm.Direction;
import org.bidib.wizard.comm.SpeedSteps;
import org.bidib.wizard.mvc.loco.model.listener.LocoModelListener;

public class LocoModel {
    private final Collection listeners = new LinkedList();

    private int address = 0;

    private int currentSpeed = 0;

    // default direction is forward
    private Direction direction = Direction.FORWARD;

    private int speed = 0;

    private SpeedSteps speedSteps = SpeedSteps.DCC128;

    private BitSet functions = new BitSet(29);

    public void addLocoModelListener(LocoModelListener l) {
        listeners.add(l);
    }

    public void removeLocoModelListener(LocoModelListener l) {
        listeners.remove(l);
    }

    public int getAddress() {
        return address;
    }

    public void setAddress(int address) {
        if (this.address != address) {
            this.address = address;
            fireAddressChanged(address);
        }
    }

    public int getCurrentSpeed() {
        return currentSpeed;
    }

    public void setCurrentSpeed(int currentSpeed) {
        if (this.currentSpeed != currentSpeed) {
            this.currentSpeed = currentSpeed;
            fireCurrentSpeedChanged(currentSpeed);
        }
    }

    public Direction getDirection() {
        return direction;
    }

    public void setDirection(Direction direction) {
        if (this.direction != direction) {
            this.direction = direction;
            fireDirectionChanged(direction);
        }
    }

    public boolean getFunction(int index) {
        return functions.get(index);
    }

    public BitSet getFunctions() {
        return (BitSet) functions.clone();
    }

    public void setFunction(int index, boolean value) {
        if (getFunction(index) != value) {
            functions.set(index, value);
            fireFunctionChanged(index, value);
        }
    }

    public int getSpeed() {
        return speed;
    }

    public void setSpeed(int speed) {
        if (this.speed != speed || speed == 0 || speed == 1) {
            this.speed = speed;
            fireSpeedChanged(speed);
        }
    }

    public SpeedSteps getSpeedSteps() {
        return speedSteps;
    }

    public void setSpeedSteps(SpeedSteps speedSteps) {
        if (this.speedSteps != speedSteps) {
            this.speedSteps = speedSteps;
            fireSpeedStepsChanged(speedSteps);
        }
    }

    private void fireAddressChanged(int address) {
        for (LocoModelListener l : listeners) {
            l.addressChanged(address);
        }
    }

    private void fireCurrentSpeedChanged(int currentSpeed) {
        for (LocoModelListener l : listeners) {
            l.currentSpeedChanged(currentSpeed);
        }
    }

    private void fireDirectionChanged(Direction direction) {
        for (LocoModelListener l : listeners) {
            l.directionChanged(direction);
        }
    }

    private void fireFunctionChanged(int index, boolean value) {
        for (LocoModelListener l : listeners) {
            l.functionChanged(index, value);
        }
    }

    private void fireSpeedChanged(int speed) {
        for (LocoModelListener l : listeners) {
            l.speedChanged(speed);
        }
    }

    private void fireSpeedStepsChanged(SpeedSteps speedSteps) {
        for (LocoModelListener l : listeners) {
            l.speedStepsChanged(speedSteps);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy