
org.bidib.wizard.mvc.loco.model.LocoModel Maven / Gradle / Ivy
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