private ChannelMapEntryWrapper(ChannelMapEntry entry)
 {
     channel_map_entry_ = entry;
     qam_status_ = DetermineQAMChannelStatus(entry, out exists_as_ota_);
     selected_action_ = CorrectiveAction.None;
 }
 private static CorrectiveAction GetDefaultActionByStatus(QAMChannelStatus status)
 {
     switch (status)
     {
         case QAMChannelStatus.IncorrectQAM:
             return CorrectiveAction.ReplaceIncorrectQAM;
         case QAMChannelStatus.ConflictingCCFirst:
             return CorrectiveAction.RemoveOtherCCChannel;
         case QAMChannelStatus.ConflictingCCNotFirst:
             return CorrectiveAction.RemoveThisCCChannel;
         case QAMChannelStatus.NoCCChannelWithQAM:
             return CorrectiveAction.MergeCCChannelToQAMWithNumberUpdate;
         case QAMChannelStatus.NoCCChannelOrQAM:
             return CorrectiveAction.CreateCCChannel;
         case QAMChannelStatus.ProperlyMergedWithExtraneousCCard:
             return CorrectiveAction.RemoveBogusCCChannel;
         case QAMChannelStatus.OTAOnly:
             return CorrectiveAction.CreateQAMAndMerge;
         case QAMChannelStatus.ExistingDupeCCard:
         case QAMChannelStatus.ExistingUnmerged:
             return CorrectiveAction.MergeQAM;
         case QAMChannelStatus.NotExisting:
         case QAMChannelStatus.ProperlyMerged:
             return CorrectiveAction.None;
         default:
             throw new Exception("Unknown status value in GetDefaultActionByStatus!");
     }
 }
 public void UpdateStatus()
 {
     merged_channels_ = null;
     listings_ = null;
     QAMChannelStatus old_status = qam_status_;
     qam_status_ = DetermineQAMChannelStatus(channel_map_entry_, out exists_as_ota_);
     if (qam_status_ != old_status)
     {
         CorrectiveAction old_corrective_action = selected_action_;
         selected_action_ = CorrectiveAction.None;
         NotifyStatusChanged(new StatusChangedEventArgs(old_corrective_action, old_status, qam_status_));
     }
 }
 private static CorrectiveAction[] GetCorrectiveActionsForStatus(QAMChannelStatus status)
 {
     if (actions_by_status_ == null)
     {
         actions_by_status_ = new CorrectiveAction[(int)QAMChannelStatus.StatusValueCount][];
         actions_by_status_[(int)QAMChannelStatus.IncorrectQAM] = new CorrectiveAction[] {
                 CorrectiveAction.None,
                 CorrectiveAction.ReplaceIncorrectQAM,
                 CorrectiveAction.RemoveIncorrectQAM };
         actions_by_status_[(int)QAMChannelStatus.ConflictingCCFirst] = new CorrectiveAction[] {
                 CorrectiveAction.None,
                 CorrectiveAction.RemoveOtherCCChannel,
                 CorrectiveAction.RemoveThisCCChannel };
         // same options whether this channel has the 1st tuner info or not, may as well make it same actual array.
         actions_by_status_[(int)QAMChannelStatus.ConflictingCCNotFirst] = actions_by_status_[(int)QAMChannelStatus.ConflictingCCFirst];
         actions_by_status_[(int)QAMChannelStatus.NoCCChannelWithQAM] = new CorrectiveAction[] {
                 CorrectiveAction.None,
                 CorrectiveAction.CreateCCChannel,
                 CorrectiveAction.MergeCCChannelToQAMWithNumberUpdate };
         actions_by_status_[(int)QAMChannelStatus.NoCCChannelOrQAM] = new CorrectiveAction[] {
                 CorrectiveAction.None,
                 CorrectiveAction.CreateCCChannel,
                 CorrectiveAction.CreateMergedCCAndQAMChannels,
                 CorrectiveAction.CreateUnmergedCCAndQAMChannels };
         actions_by_status_[(int)QAMChannelStatus.ProperlyMergedWithExtraneousCCard] = new CorrectiveAction[] {
                 CorrectiveAction.None,
                 CorrectiveAction.RemoveBogusCCChannel };
         actions_by_status_[(int)QAMChannelStatus.OTAOnly] = new CorrectiveAction[] {
                 CorrectiveAction.None,
                 CorrectiveAction.CreateQAMAndMerge,
                 CorrectiveAction.CreateQAMWithoutMerge };
         actions_by_status_[(int)QAMChannelStatus.ExistingDupeCCard] = new CorrectiveAction[] {
                 CorrectiveAction.None,
                 CorrectiveAction.MergeQAM };
         actions_by_status_[(int)QAMChannelStatus.ExistingUnmerged] = actions_by_status_[(int)QAMChannelStatus.ExistingDupeCCard];
         actions_by_status_[(int)QAMChannelStatus.NotExisting] = actions_by_status_[(int)QAMChannelStatus.OTAOnly];
         actions_by_status_[(int)QAMChannelStatus.ProperlyMerged] = new CorrectiveAction[] { CorrectiveAction.None };
     }
     return actions_by_status_[(int)status];
 }
 public StatusChangedEventArgs(
     CorrectiveAction old_corrective_action,
     QAMChannelStatus old_status, QAMChannelStatus new_status)
     : base()
 {
     old_corrective_action_ = old_corrective_action;
     old_status_ = old_status;
     new_status_ = new_status;
 }