package org.yamcs.xtce; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class EnumeratedParameterType extends EnumeratedDataType implements ParameterType { private static final long serialVersionUID = 200805301432L; EnumerationAlarm defaultAlarm=null; ArrayList<EnumerationContextAlarm> contextAlarmList=null; public EnumeratedParameterType(String name){ super(name); } @Override public boolean hasAlarm() { return defaultAlarm!=null || (contextAlarmList!=null && !contextAlarmList.isEmpty()); } @Override public Set<Parameter> getDependentParameters() { if(contextAlarmList==null) return null; Set<Parameter>dependentParameters=new HashSet<Parameter>(); for(EnumerationContextAlarm eca:contextAlarmList) dependentParameters.addAll(eca.getContextMatch().getDependentParameters()); return dependentParameters; } public EnumerationAlarm getDefaultAlarm() { return defaultAlarm; } public void setDefaultAlarm(EnumerationAlarm enumerationAlarm) { this.defaultAlarm=enumerationAlarm; } public void addContextAlarm(EnumerationContextAlarm nca) { if(contextAlarmList==null) contextAlarmList=new ArrayList<EnumerationContextAlarm>(); contextAlarmList.add(nca); } public EnumerationContextAlarm getContextAlarm(MatchCriteria contextMatch) { if(contextAlarmList==null) return null; for(EnumerationContextAlarm eca:contextAlarmList) { if(eca.getContextMatch().equals(contextMatch)) { return eca; } } return null; } /** * Adds a new contextual alarm for the specified value * @param contextMatch use <tt>null</tt> for the default context */ public void addAlarm(MatchCriteria contextMatch, String enumLabel, AlarmLevels level) { createOrGetAlarm(contextMatch).addAlarm(enumLabel, level); } public EnumerationAlarm createOrGetAlarm(MatchCriteria contextMatch) { if(contextMatch==null) { if(defaultAlarm==null) { defaultAlarm=new EnumerationAlarm(); } return defaultAlarm; } else { EnumerationContextAlarm eca=getContextAlarm(contextMatch); if(eca==null) { eca=new EnumerationContextAlarm(); eca.setContextMatch(contextMatch); addContextAlarm(eca); } return eca; } } public List<EnumerationContextAlarm> getContextAlarmList() { return contextAlarmList; } public String calibrate(long raw) { ValueEnumeration v = enumeration.get(raw); if(v!=null) return v.label; if ( ranges != null ) { for (ValueEnumerationRange range:ranges) { if (range.isValueInRange(raw)) { return range.label; } } } return "UNDEF"; } public String getCalibrationDescription() { return "EnumeratedParameterType: "+enumeration; } @Override public String getTypeAsString() { return "enumeration"; } @Override public String toString() { return "EnumeratedParameterType: "+enumerationList+" encoding:"+encoding+((defaultAlarm!=null)?defaultAlarm:"")+((contextAlarmList!=null)?contextAlarmList:""); } }