/// <summary>
        /// Gets the <see cref="McKnight.Similization.Server.City"/>, and if necessary,
        /// the <see cref="McKnight.Similization.Server.DiplomaticTie"/> from the user.
        /// </summary>
        protected virtual void SelectCity(string cityPickerTitle)
        {
            ClientApplication ca = ClientApplication.Instance;

            IDiplomaticTiePicker picker = (IDiplomaticTiePicker)ca.GetControl(typeof(IDiplomaticTiePicker));

            picker.PickerTitle = ClientResources.GetString("espionageTiePickerTitle");
            Collection <DiplomaticTie> ties = new Collection <DiplomaticTie>();

            foreach (DiplomaticTie t in ca.Player.DiplomaticTies)
            {
                //TODO:  account for needed improvements
                if (t.HasEmbassy)
                {
                    ties.Add(t);
                }
            }
            picker.InitializePicker(ties);
            picker.ShowSimilizationControl();
            this.tie = picker.DiplomaticTie;

            ICityPicker cityPicker = (ICityPicker)ca.GetControl(typeof(ICityPicker));

            cityPicker.PickerTitle = cityPickerTitle;
            cityPicker.InitializePicker(this.DiplomaticTie.ForeignCountry);
            cityPicker.ShowSimilizationControl();
            this.city = cityPicker.City;
        }
        /// <summary>
        /// Invokes the command.
        /// </summary>
        public override void Invoke()
        {
            OnInvoking();
            ClientApplication    ca     = ClientApplication.Instance;
            IDiplomaticTiePicker picker = (IDiplomaticTiePicker)ca.GetControl(typeof(IDiplomaticTiePicker));

            picker.ShowSimilizationControl();
            DiplomaticTie tie = picker.DiplomaticTie;

            if (tie == null)
            {
                OnCanceled();
                return;
            }
            ICityPicker cityPicker = (ICityPicker)ca.GetControl(typeof(ICityPicker));

            cityPicker.PickerTitle = ClientResources.GetString("investigateCity_cityPickerTitle");
            cityPicker.ShowSimilizationControl();
            City city = cityPicker.City;

            if (city == null)
            {
                OnCanceled();
                return;
            }
            bool   success = tie.InvestigateCity(city);
            string text    = string.Empty;

            if (success)
            {
                text = ClientResources.GetString("investigateCity_success");
                text = string.Format(CultureInfo.CurrentCulture, text, city.Name);
                ca.GameWindow.ShowMessageBox(text, ClientResources.GetString(StringKey.GameTitle));
                ICityControl cityControl = (ICityControl)ca.GetControl(typeof(ICityControl));
                cityControl.Editable = false;
                cityControl.City     = city;
                cityControl.ShowSimilizationControl();
            }
            else
            {
                text = ClientResources.GetString("investigateCity_immune");
                text = string.Format(
                    CultureInfo.CurrentCulture,
                    text,
                    tie.ForeignCountry.Civilization.Adjective);
                ca.GameWindow.ShowMessageBox(text, ClientResources.GetString(StringKey.GameTitle));
            }
            OnInvoked();
        }