package org.yamcs.xtce;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class IntegerParameterType extends IntegerDataType implements ParameterType {
private static final long serialVersionUID = 2L;
List<NumericContextAlarm> contextAlarmList = null;
NumericAlarm defaultAlarm=null;
public IntegerParameterType(String name){
super(name);
}
public NumericAlarm createOrGetAlarm(MatchCriteria contextMatch) {
if(contextMatch==null) {
if(defaultAlarm==null) {
defaultAlarm=new NumericAlarm();
}
return defaultAlarm;
} else {
NumericContextAlarm nca=getNumericContextAlarm(contextMatch);
if(nca==null) {
nca=new NumericContextAlarm();
nca.setContextMatch(contextMatch);
addContextAlarm(nca);
}
return nca;
}
}
private AlarmRanges getAlarmRanges(MatchCriteria contextMatch) {
NumericAlarm alarm=createOrGetAlarm(contextMatch);
return alarm.getStaticAlarmRanges();
}
public void setDefaultWatchAlarmRange(FloatRange watchRange) {
getAlarmRanges(null).watchRange=watchRange;
}
public void setDefaultWarningAlarmRange(FloatRange warningRange) {
getAlarmRanges(null).warningRange=warningRange;
}
public void setDefaultDistressAlarmRange(FloatRange distressRange) {
getAlarmRanges(null).distressRange=distressRange;
}
public void setDefaultCriticalAlarmRange(FloatRange criticalRange) {
getAlarmRanges(null).criticalRange=criticalRange;
}
public void setDefaultSevereAlarmRange(FloatRange severeRange) {
getAlarmRanges(null).severeRange=severeRange;
}
/**
* Adds a new, or unions with an existing range for the specified context and level
* @param contextMatch use <tt>null</tt> for the default context
*/
public void addAlarmRange(MatchCriteria contextMatch, FloatRange range, AlarmLevels level) {
getAlarmRanges(contextMatch).addRange(range, level);
}
/**
* Adds a new, or unions with an existing watch range for the specified context
* @param contextMatch use <tt>null</tt> for the default context
*/
public void addWatchAlarmRange(MatchCriteria contextMatch, FloatRange watchRange) {
getAlarmRanges(contextMatch).addWatchRange(watchRange);
}
/**
* Adds a new, or unions with an existing warning range for the specified context
* @param contextMatch use <tt>null</tt> for the default context
*/
public void addWarningAlarmRange(MatchCriteria contextMatch, FloatRange warningRange) {
getAlarmRanges(contextMatch).addWarningRange(warningRange);
}
/**
* Adds a new, or unions with an existing distress range for the specified context
* @param contextMatch use <tt>null</tt> for the default context
*/
public void addDistressAlarmRange(MatchCriteria contextMatch, FloatRange distressRange) {
getAlarmRanges(contextMatch).addDistressRange(distressRange);
}
/**
* Adds a new, or unions with an existing critical range for the specified context
* @param contextMatch use <tt>null</tt> for the default context
*/
public void addCriticalAlarmRange(MatchCriteria contextMatch, FloatRange criticalRange) {
getAlarmRanges(contextMatch).addCriticalRange(criticalRange);
}
/**
* Adds a new, or unions with an existing severe range for the specified context
* @param contextMatch use <tt>null</tt> for the default context
*/
public void addSevereAlarmRange(MatchCriteria contextMatch, FloatRange severeRange) {
getAlarmRanges(contextMatch).addSevereRange(severeRange);
}
public void addContextAlarm(NumericContextAlarm nca) {
if(contextAlarmList==null) {
contextAlarmList=new ArrayList<>();
}
contextAlarmList.add(nca);
}
public void addContextAlarms(Collection<NumericContextAlarm> ncas) {
if(contextAlarmList==null) {
contextAlarmList=new ArrayList<>();
}
contextAlarmList.addAll(ncas);
}
public NumericAlarm getDefaultAlarm() {
return defaultAlarm;
}
public NumericContextAlarm getNumericContextAlarm(MatchCriteria context) {
if(contextAlarmList==null) {
return null;
}
for(NumericContextAlarm nca:contextAlarmList) {
if(nca.getContextMatch().equals(context)) {
return nca;
}
}
return null;
}
public List<NumericContextAlarm> getContextAlarmList() {
return contextAlarmList;
}
public void setContextAlarmList( List<NumericContextAlarm> contextAlarmList) {
this.contextAlarmList = contextAlarmList;
}
@Override
public boolean hasAlarm() {
return defaultAlarm!=null || (contextAlarmList!=null && !contextAlarmList.isEmpty());
}
@Override
public Set<Parameter> getDependentParameters() {
if(getContextAlarmList()==null)
return null;
Set<Parameter>dependentParameters=new HashSet<Parameter>();
for(NumericContextAlarm nca:contextAlarmList)
dependentParameters.addAll(nca.getContextMatch().getDependentParameters());
return dependentParameters;
}
@Override
public String toString() {
return "IntegerDataType name:"+name+" sizeInBits:"+sizeInBits+" signed:"+signed+" encoding:"+encoding+((defaultAlarm!=null)?defaultAlarm:"");
}
@Override
public String getTypeAsString() {
return "integer";
}
}