public override bool IsResolvedBy(Question Question)
        {
            if (Question is CanControlQuestion CanControlQuestion)
            {
                if (this.JID != CanControlQuestion.JID)
                {
                    return(false);
                }

                switch (this.range)
                {
                case OperationRange.Caller:
                    return(this.RemoteJID == CanControlQuestion.RemoteJID);

                case OperationRange.Domain:
                    return(IsFriendQuestion.GetDomain(this.RemoteJID) == IsFriendQuestion.GetDomain(CanControlQuestion.RemoteJID));

                case OperationRange.All:
                    return(true);

                case OperationRange.ServiceToken:
                    return(CanReadQuestion.MatchesToken(this.parameter, CanControlQuestion.ServiceTokens));

                case OperationRange.DeviceToken:
                    return(CanReadQuestion.MatchesToken(this.parameter, CanControlQuestion.DeviceTokens));

                case OperationRange.UserToken:
                    return(CanReadQuestion.MatchesToken(this.parameter, CanControlQuestion.UserTokens));

                default:
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
        public override void PopulateDetailsDialog(QuestionView QuestionView, ProvisioningClient ProvisioningClient)
        {
            StackPanel Details = QuestionView.Details;
            TextBlock  TextBlock;
            ListBox    ListBox;
            Button     Button;

            this.client       = ProvisioningClient;
            this.questionView = QuestionView;

            Details.Children.Add(new TextBlock()
            {
                FontSize   = 18,
                FontWeight = FontWeights.Bold,
                Text       = "Allowed to control?"
            });

            Details.Children.Add(TextBlock = new TextBlock()
            {
                TextWrapping = TextWrapping.Wrap,
                Margin       = new Thickness(0, 6, 0, 6)
            });

            TextBlock.Inlines.Add("Device: ");
            this.AddJidName(this.JID, ProvisioningClient, TextBlock);

            this.AddNodeInfo(Details);

            Details.Children.Add(TextBlock = new TextBlock()
            {
                TextWrapping = TextWrapping.Wrap,
                Margin       = new Thickness(0, 6, 0, 6)
            });

            TextBlock.Inlines.Add("Caller: ");
            this.AddJidName(this.RemoteJID, ProvisioningClient, TextBlock);


            Details.Children.Add(new Label()
            {
                Content = "Parameter restriction:",
                Margin  = new Thickness(0, 6, 0, 0)
            });

            Details.Children.Add(ListBox = new ListBox()
            {
                MaxHeight     = 150,
                SelectionMode = SelectionMode.Multiple,
                Margin        = new Thickness(0, 0, 0, 6)
            });

            this.parametersListBox = ListBox;

            if (this.availableParameterNames == null)
            {
                if (this.parameterNames != null)
                {
                    foreach (string ParameterName in this.parameterNames)
                    {
                        ListBox.Items.Add(new ListBoxItem()
                        {
                            Content    = ParameterName,
                            IsSelected = true,
                            Tag        = ParameterName
                        });
                    }
                }
            }
            else
            {
                foreach (string ParameterName in this.availableParameterNames)
                {
                    ListBox.Items.Add(new ListBoxItem()
                    {
                        Content    = ParameterName,
                        IsSelected = (this.parameterNames == null || Array.IndexOf <string>(this.parameterNames, ParameterName) >= 0),
                        Tag        = ParameterName
                    });
                }
            }

            StackPanel StackPanel = CanReadQuestion.AddAllClearButtons(Details, ListBox);

            if (this.availableParameterNames == null)
            {
                StackPanel.Children.Add(Button = new Button()
                {
                    Margin  = new Thickness(6, 6, 6, 6),
                    Padding = new Thickness(20, 0, 20, 0),
                    Content = "Get List",
                    Tag     = ListBox
                });

                Button.Click += GetListButton_Click;
            }

            Details.Children.Add(TextBlock = new TextBlock()
            {
                TextWrapping = TextWrapping.Wrap,
                Margin       = new Thickness(0, 6, 0, 6),
                Text         = "Is the caller allowed to control your device?"
            });

            Details.Children.Add(Button = new Button()
            {
                Margin  = new Thickness(0, 6, 0, 6),
                Content = "Yes"
            });

            Button.Click += YesButton_Click;

            Details.Children.Add(Button = new Button()
            {
                Margin  = new Thickness(0, 6, 0, 6),
                Content = "No"
            });

            Button.Click += NoButton_Click;

            string s = this.RemoteJID;
            int    i = s.IndexOf('@');

            if (i >= 0)
            {
                s = s.Substring(i + 1);

                Details.Children.Add(Button = new Button()
                {
                    Margin  = new Thickness(0, 6, 0, 6),
                    Content = "Yes, to anyone from " + s
                });

                Button.Click += YesDomainButton_Click;

                Details.Children.Add(Button = new Button()
                {
                    Margin  = new Thickness(0, 6, 0, 6),
                    Content = "No, to no one from " + s
                });

                Button.Click += NoDomainButton_Click;
            }

            Details.Children.Add(Button = new Button()
            {
                Margin  = new Thickness(0, 6, 0, 6),
                Content = "Yes, to anyone"
            });

            Button.Click += YesAllButton_Click;

            Details.Children.Add(Button = new Button()
            {
                Margin  = new Thickness(0, 6, 0, 6),
                Content = "No, to no one"
            });

            Button.Click += NoAllButton_Click;

            this.AddTokens(Details, this.client, this.YesTokenButton_Click, this.NoTokenButton_Click);
        }