package org.yamcs.xtce;
import java.io.Serializable;
/**
* Contains five ranges: Watch, Warning, Distress, Critical, and Severe each in increasing severity.
* Normally, only the Warning and Critical ranges are used and the color yellow is associated with Warning
* and the color red is associated with Critical. The ranges given are valid for numbers lower than the
* min and higher than the max values. These ranges should not overlap, but if they do, assume the most
* severe range is to be applied. All ranges are optional and it is quite allowed for there to be only one
* end of the range. Range values are in calibrated engineering units.
* @author nm
*
*/
public class AlarmRanges implements Serializable {
private static final long serialVersionUID = 200706052351L;
FloatRange watchRange=null;
FloatRange warningRange=null;
FloatRange distressRange=null;
FloatRange criticalRange=null;
FloatRange severeRange=null;
public void addWatchRange(FloatRange range) {
if(this.watchRange == null) {
this.watchRange = range;
} else {
this.watchRange = this.watchRange.intersectWith(range);
}
}
public void addWarningRange(FloatRange range) {
if(this.warningRange == null) {
this.warningRange = range;
} else {
this.warningRange = this.warningRange.intersectWith(range);
}
}
public void addDistressRange(FloatRange range) {
if(this.distressRange == null) {
this.distressRange = range;
} else {
this.distressRange = this.distressRange.intersectWith(range);
}
}
public void addCriticalRange(FloatRange range) {
if(this.criticalRange == null) {
this.criticalRange = range;
} else {
this.criticalRange = this.criticalRange.intersectWith(range);
}
}
public void addSevereRange(FloatRange range) {
if(this.severeRange == null) {
this.severeRange = range;
} else {
this.severeRange = this.severeRange.intersectWith(range);
}
}
public void addRange(FloatRange range, AlarmLevels level) {
switch(level) {
case watch:
addWatchRange(range);
break;
case warning:
addWarningRange(range);
break;
case distress:
addDistressRange(range);
break;
case critical:
addCriticalRange(range);
break;
case severe:
addSevereRange(range);
break;
default:
throw new RuntimeException("Level '"+level+"' not allowed for alarm ranges");
}
}
public FloatRange getWatchRange() {
return watchRange;
}
public FloatRange getWarningRange() {
return warningRange;
}
public FloatRange getDistressRange() {
return distressRange;
}
public FloatRange getCriticalRange() {
return criticalRange;
}
public FloatRange getSevereRange() {
return severeRange;
}
public void setWarningRange(FloatRange warningRange) {
this.warningRange=warningRange;
}
@Override
public String toString() {
return ((watchRange!=null)?" watchRange"+watchRange:"")+
((warningRange!=null)?" warningRange"+warningRange:"")+
((distressRange!=null)?" distressRange"+distressRange:"")+
((criticalRange!=null)?" criticalRange"+criticalRange:"")+
((severeRange!=null)?" severeRange"+severeRange:"");
}
}