protected void UpdateSettings(ParagoServiceApplication serviceApplication)
        {
            try
            {
                if (serviceApplication == null)
                {
                    throw new NullReferenceException("serviceApplication");
                }

                //serviceApplication.UpdateSettingInternal(ParagoServiceSettings.Code.Key, CodeTextBox.Text);
            }
            catch (Exception)
            {
                RedirectToErrorPage("Unable to update Parago Service Application settings.");
            }
        }
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            if (!Page.IsPostBack)
            {
                if (ServiceApplicationID == Guid.Empty)
                {
                    DialogMaster.OkButton.Text = "Create";
                }
                else
                {
                    ParagoServiceApplication serviceApplication = GetServiceApplication();

                    if (!AdminUIHelper.HasUserReadPermissionForCurrentPage(serviceApplication))
                    {
                        SPUtility.HandleAccessDenied(new UnauthorizedAccessException("You are not authorized to access this page."));
                    }

                    PopulateSettings(serviceApplication);
                }
            }
        }
        protected void PopulateSettings(ParagoServiceApplication serviceApplication)
        {
            try
            {
                if (serviceApplication == null)
                {
                    throw new NullReferenceException("serviceApplication");
                }

                // NOTE: Do not allow to edit service application name, because service application proxy name
                // is the same and we need to reset the default service application (see below)!
                ServiceApplicationNameTextBox.Text    = serviceApplication.Name;
                ServiceApplicationNameTextBox.Enabled = false;

                //CodeTextBox.Text = serviceApplication.GetSettingInternal(ParagoServiceSettings.Code.Key);

                ApplicationPoolSection.SetSelectedApplicationPool(serviceApplication.ApplicationPool);
            }
            catch (Exception)
            {
                RedirectToErrorPage("Unable to populate Parago Service Application settings.");
            }
        }
        protected void OnOkButtonClick(object sender, EventArgs e)
        {
            if (Page.IsValid && _applicationPool != null)
            {
                if (ServiceApplicationID == Guid.Empty)
                {
                    ParagoServiceApplication      serviceApplication      = null;
                    ParagoServiceApplicationProxy serviceApplicationProxy = null;

                    using (SPLongOperation operation = new SPLongOperation(this))
                    {
                        operation.Begin();

                        try
                        {
                            string name = ServiceApplicationNameTextBox.Text.Trim();

                            serviceApplication = ParagoServiceApplication.Create(name, ParagoService.Local, _applicationPool);

                            if (serviceApplication == null)
                            {
                                throw new NullReferenceException("ParagoServiceApplication");
                            }

                            serviceApplication.UpdateSettingInternal(ParagoServiceSettings.Code.Key, "PARAGO");

                            serviceApplication.Update(true);
                            serviceApplication.Provision();

                            serviceApplicationProxy = (ParagoServiceApplicationProxy)ParagoService.Local.CreateProxy(name, true, serviceApplication, null);

                            if (serviceApplicationProxy == null)
                            {
                                throw new NullReferenceException("ParagoServiceApplicationProxy");
                            }

                            serviceApplicationProxy.Update(true);
                            serviceApplicationProxy.Provision();

                            ServiceHelper.SetDefaultServiceApplicationProxy(serviceApplicationProxy);

                            serviceApplicationProxy.Update(true);

                            SendResponseForPopUI();
                        }
                        catch (Exception ex)
                        {
                            if (serviceApplicationProxy != null)
                            {
                                serviceApplicationProxy.Unprovision();
                                serviceApplicationProxy.Delete();
                            }

                            if (serviceApplication != null)
                            {
                                serviceApplication.Unprovision();
                                serviceApplication.Delete();
                            }

                            throw new SPException("Failed to create Parago Service Application", ex);
                        }
                    }
                }
                else
                {
                    ParagoServiceApplication serviceApplication = GetServiceApplication();
                    UpdateSettings(serviceApplication);
                    serviceApplication.Update(true);

                    SendResponseForPopUI();
                }
            }
        }