public bool PerformSave()
        {
            if (!CanSave())
            {
                return(false);
            }

            Guid sAgencyId = AgencyId;
            Guid sUnitId   = UnitId;

            if (AgencyId == Guid.Empty && !string.IsNullOrWhiteSpace(AgencyName))
            {
                Common.AgencyInfo aInfo = Common.RadioInfoLookupHelper.Instance.AgencyList.FirstOrDefault(a => a.AgencyName.Equals(AgencyName, StringComparison.InvariantCultureIgnoreCase));
                if (aInfo != null)
                {
                    sAgencyId = aInfo.AgencyId;
                }
                else
                {
                    sAgencyId = Guid.NewGuid();
                    Common.RadioInfoLookupHelper.Instance.AddOrUpdateAgency(sAgencyId, AgencyName);
                }
            }
            if (UnitId == Guid.Empty && !string.IsNullOrWhiteSpace(UnitName))
            {
                //find or create unit...
                Common.UnitInfo uInfo = Common.RadioInfoLookupHelper.Instance.UnitList.FirstOrDefault(u => u.UnitName.Equals(UnitName, StringComparison.InvariantCultureIgnoreCase));
                if (uInfo != null)
                {
                    sUnitId = uInfo.UnitKeyId;
                }
                else
                {
                    sUnitId = Guid.NewGuid();
                    Common.RadioInfoLookupHelper.Instance.AddOrUpdateUnit(sUnitId, sAgencyId, UnitName);
                }
            }
            string signalingLookupKey = Common.RadioInfo.GenerateLookupKey(SignalingFormat, SignalingUnitId);

            if (!string.IsNullOrWhiteSpace(signalingLookupKey))
            {
                Common.RadioInfo radioInfo = Common.RadioInfoLookupHelper.Instance.RadioList.FirstOrDefault(r => r.SignalingLookupKey == signalingLookupKey);
                radioInfo.AgencyKeyId         = sAgencyId;
                radioInfo.PersonnelName       = PersonnelName;
                radioInfo.RadioName           = RadioName;
                radioInfo.RadioType           = RadioType;
                radioInfo.RoleName            = RoleName;
                radioInfo.UnitKeyId           = sUnitId;
                radioInfo.ExcludeFromRollCall = ExcludeFromRollCall;
                Cinch.Mediator.Instance.NotifyColleaguesAsync <bool>("REFRESH_RADIO_LOOKUPS", true);
            }
            else
            {
                Common.RadioInfoLookupHelper.Instance.AddOrUpdateRadio(sUnitId, sAgencyId, SignalingFormat, SignalingUnitId, RadioName, RoleName, PersonnelName, RadioType, ExcludeFromRollCall);
            }
            Common.RadioInfoLookupHelper.Instance.SaveInfo();
            return(true);
        }
        public SingleRadioEditorViewModel(RadioSignalItemModel radioSignal)
        {
            if (radioSignal == null)
            {
                throw new ArgumentNullException();
            }

            _radioSignal    = radioSignal;
            SignalingFormat = _radioSignal.SignalingFormat;
            SignalingUnitId = _radioSignal.UnitId;
            _unitName       = _radioSignal.UnitName;
            _agencyName     = _radioSignal.AgencyName;

            _radioTypes = new WPFCommon.ThreadSafeObservableCollection <SingleRadioEditorRadioType>();
            _radioTypes.Add(new SingleRadioEditorRadioType()
            {
                RadioType = Common.RadioTypeCode.Unknown, RadioTypeName = "<UNASSIGNED>"
            });
            _radioTypes.Add(new SingleRadioEditorRadioType()
            {
                RadioType = Common.RadioTypeCode.Mobile, RadioTypeName = "Mobile"
            });
            _radioTypes.Add(new SingleRadioEditorRadioType()
            {
                RadioType = Common.RadioTypeCode.Portable, RadioTypeName = "Portable"
            });
            _radioTypes.Add(new SingleRadioEditorRadioType()
            {
                RadioType = Common.RadioTypeCode.BaseStation, RadioTypeName = "Base Station"
            });

            _agencies = new WPFCommon.ThreadSafeObservableCollection <SingleRadioEditorAgency>();
            _agencies.Add(new SingleRadioEditorAgency()
            {
                AgencyId = Guid.Empty, AgencyName = "<UNASSIGNED>"
            });
            foreach (Common.AgencyInfo aInfo in RadioLog.Common.RadioInfoLookupHelper.Instance.AgencyList.OrderBy(a => a.AgencyName))
            {
                _agencies.Add(new SingleRadioEditorAgency()
                {
                    AgencyId = aInfo.AgencyId, AgencyName = aInfo.AgencyName
                });
            }

            _units = new WPFCommon.ThreadSafeObservableCollection <SingleRadioEditorUnit>();
            _units.Add(new SingleRadioEditorUnit()
            {
                UnitId = Guid.Empty, AgencyId = Guid.Empty, UnitName = "<UNASSIGNED>"
            });
            foreach (Common.UnitInfo uInfo in RadioLog.Common.RadioInfoLookupHelper.Instance.UnitList.OrderBy(u => u.UnitName))
            {
                _units.Add(new SingleRadioEditorUnit()
                {
                    UnitId = uInfo.UnitKeyId, AgencyId = uInfo.AgencyKeyId, UnitName = uInfo.UnitName
                });
            }

            if (!string.IsNullOrWhiteSpace(_radioSignal.SignalingFormat) && !string.IsNullOrWhiteSpace(_radioSignal.UnitId))
            {
                Common.RadioInfo radioInfo = Common.RadioInfoLookupHelper.Instance.RadioList.FirstOrDefault(r => r.SignalingLookupKey == _radioSignal.SignalingLookupKey);
                if (radioInfo != null)
                {
                    _unitId         = radioInfo.UnitKeyId;
                    _agencyId       = radioInfo.AgencyKeyId;
                    _radioName      = radioInfo.RadioName;
                    _roleName       = radioInfo.RoleName;
                    _personnelName  = radioInfo.PersonnelName;
                    _radioType      = radioInfo.RadioType;
                    SignalingFormat = radioInfo.SignalingFormat;
                    SignalingUnitId = radioInfo.SignalingUnitId;
                }
            }
        }