/*******************************************************************************
* Copyright (c) 2003-2005, 2013 Till Zoppke.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Public License v3.0
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/gpl.html
*
* Contributors:
* Till Zoppke - initial API and implementation
******************************************************************************/
/*
* Created on 29.05.2004
*/
package eniac.data.model.parent;
import java.util.Observable;
import java.util.Observer;
import eniac.data.model.EData;
import eniac.data.model.sw.Switch;
import eniac.data.model.unit.ConstantTransmitter1;
import eniac.data.type.EType;
/**
* @author zoppke
*/
public class ConstantTransmittionLights extends ParentData implements Observer {
public static final String PAINT_LIGHTS = "PAINT_LIGHTS"; //$NON-NLS-1$
public void init() {
super.init();
// observe the constant transmitter unit
EData data = getUnit();
assertInit(data);
data.addObserver(this);
// observe the constant lights
data = getConfiguration().getGarten().getKind(EType.CONSTANT_2_LIGHTS, 0);
assertInit(data);
data.addObserver(this);
}
public boolean hasPower() {
ConstantTransmitter1 unit = getUnit();
return unit.hasPower() && unit.isTransmitting();
}
private ConstantTransmitter1 getUnit() {
EData unit = getConfiguration().getGarten().getKind(EType.CONSTANT_TRANSMITTER_1_UNIT, 0);
return (ConstantTransmitter1) unit;
}
/**
* @param o
* @param arg
* @see java.util.Observer#update(java.util.Observable, java.lang.Object)
*/
public void update(Observable o, Object arg) {
if (arg == PAINT_LIGHTS) {
// set number to our ciphers
EData[] ciphers = getGarten().getKinder(EType.CONSTANT_TRANSMITTION_CIPHER);
ConstantTransmitter1 unit = getUnit();
long number = unit.getNumber();
for (int i = ciphers.length - 1; i >= 0; --i) {
((Switch) ciphers[i]).setValue((int) (number % 10));
number /= 10;
}
// set sign
EData sign = getGarten().getKind(EType.CONSTANT_TRANSMITTION_SIGN, 0);
((Switch) sign).setValue(unit.isNegative() ? 0 : 1);
// notify for repaint
setChanged();
notifyObservers(EData.REPAINT);
}
}
}