public IdentitySourceNode (IdentityProviderDto provider, string tenantName, bool systemDomain, string displayName, TenantConfigurationDto tenantConfigDto)
		{
			_provider = provider;
			_tenantName = tenantName;
			_systemDomain = systemDomain;
			_tenantConfigDto = tenantConfigDto;
			var isDefault = _tenantConfigDto.ProviderPolicy != null && _tenantConfigDto.ProviderPolicy.DefaultProvider == provider.Name;
			DisplayName = isDefault ? displayName + " (Default)" : displayName;
			IsDefaultDomain = isDefault;
		}
		public void SetAsDefault (object sender, EventArgs e)
		{
			ActionHelper.Execute (delegate() {
				var service = SnapInContext.Instance.ServiceGateway;
				var serverDto = GetServerDto ();
				var auth = SnapInContext.Instance.AuthTokenManager.GetAuthToken (serverDto.ServerName);
				_tenantConfigDto.ProviderPolicy = new ProviderPolicyDto { DefaultProvider = _provider.Name };
				_tenantConfigDto = service.Tenant.UpdateConfig (serverDto, _tenantName, _tenantConfigDto, auth.Token, TenantConfigType.PROVIDER);
				IsDefaultDomain = true;
				DisplayName = IsDefaultDomain ? DisplayName + " (Default)" : DisplayName.Replace (" (Default)", string.Empty);
				((IdentitySourcesNode)(this.Parent)).Refresh (sender, e);
			});
		}
		public override void Refresh (object sender, EventArgs e)
		{
			Children.Clear ();
			ActionHelper.Execute (delegate() {
				var auth = SnapInContext.Instance.AuthTokenManager.GetAuthToken (_serverDto.ServerName);
				var service = SnapInContext.Instance.ServiceGateway;
				var identityProviders = service.IdentityProvider.GetAll (_serverDto, _tenantName, auth.Token);
				var tenantConfig = new TenantConfigurationDto ();
				ActionHelper.Execute (delegate() {
					tenantConfig = service.Tenant.GetConfig (_serverDto, _tenantName, auth.Token, TenantConfigType.PROVIDER);
				});
				var systemDomains = identityProviders.Where (x => x.DomainType == DomainType.SYSTEM_DOMAIN.ToString ());
				if (systemDomains != null) {
					foreach (var provider in systemDomains) {
						var systemDomain = new IdentitySourceNode (provider, _tenantName, true, provider.Name + " (System Domain)", tenantConfig){ Parent = this };
						systemDomain.Refresh (this, EventArgs.Empty);
						Children.Add (systemDomain);
					}
				}

				var localOsDomains = identityProviders.Where (x => x.DomainType == DomainType.LOCAL_OS_DOMAIN.ToString ());
				((TenantNode)this.Parent).IsSystemTenant = (localOsDomains != null && localOsDomains.Count() > 0);

				if (localOsDomains != null) {
					foreach (var provider in localOsDomains) {
						var localOsDomain = new IdentitySourceNode (provider, _tenantName, false, provider.Name + " (Local OS Domain)", tenantConfig){ Parent = this };
						localOsDomain.Refresh (this, EventArgs.Empty);
						Children.Add (localOsDomain);
					}
				}

				var externalDomains = identityProviders.Where (x => x.DomainType == DomainType.EXTERNAL_DOMAIN.ToString ()).ToList ();
				var externalDomainNode = new ExternalDomainsNode (_tenantName, externalDomains){ Parent = this };
				externalDomainNode.PopulateChildren(externalDomains);
				Children.Add (externalDomainNode);
				NSNotificationCenter.DefaultCenter.PostNotificationName ("ReloadOutlineView", this);
			});
		}
        public TenantConfigurationDto UpdateConfig(ServerDto serverDto, string tenant, TenantConfigurationDto tenantConfig, Token token, TenantConfigType type)
        {
            tenant = Uri.EscapeDataString(tenant);
            var url = string.Format(ServiceConfigManager.TenantConfigEndPoint, serverDto.Protocol, serverDto.ServerName, serverDto.Port, tenant);
            url += "?type=" + type;
            var json = JsonConvert.Serialize(tenantConfig);
			json = Cleanup (json);
            ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
            var requestConfig = new RequestSettings
            {
                Method = HttpMethod.Put,
            };
            var headers = ServiceHelper.AddHeaders(ServiceConfigManager.JsonContentType);
            json = "access_token=" + token.AccessToken + "&token_type=" + token.TokenType.ToString().ToLower() + "&" + json;
            var response = _webRequestManager.GetResponse(url, requestConfig, headers, null, json);
            return JsonConvert.Deserialize<TenantConfigurationDto>(response);
        }