public override void AwakeFromNib ()
        {
            base.AwakeFromNib ();

            ResetToolBarItems ();

            //Load SplitView
            splitViewController = new SplitViewMMCController ();
            splitViewController.MainOutlineView = new TreeView ();
            splitViewController.MainOutlineView.OutlineTableColumn = new NSTableColumn ();
            this.MainCustomView.AddSubview (splitViewController.View);
            var userController = new DefaultViewController ();
            this.DetailedCustomView.AddSubview (userController.View);

            AddToolbarItem.Activated += AddToolbarItem_Activated;
            DeleteToolbarItem.Activated += DeleteToolbarItem_Activated;
            PropertiesToolbarItem.Activated += PropertiesToolbarItem_Activated;
            RefreshToolbarItem.Activated += RefreshToolbarItem_Activated;
            TokenWizardToolbarItem.Activated += TokenWizardToolbarItem_Activated;
            ADToolbarItem.Activated += ADToolbarItem_Activated;
            ComputerToolbarItem.Activated += ComputerToolbarItem_Activated;
            HttptransportToolbarItem.Activated += HttpTransportToolbarItem_Activated;
            (NSApplication.SharedApplication.Delegate as AppDelegate).OpenConnectionMenuItem.Hidden = true;


            //Notifications for OutlineView and Tableview to reload
            NSNotificationCenter.DefaultCenter.AddObserver ((NSString)"ReloadOutlineView", ReloadOutlineView);
            NSNotificationCenter.DefaultCenter.AddObserver ((NSString)"ReloadTableView", ReloadTableView);
            NSNotificationCenter.DefaultCenter.AddObserver ((NSString)"RefreshTableView", RefreshTableView);
            NSNotificationCenter.DefaultCenter.AddObserver ((NSString)"LoggedInSessionExpired", LoggedInSessionExpired);
            NSNotificationCenter.DefaultCenter.AddObserver ((NSString)"RefreshToken", RefreshToken);
        }
            public override void SelectionDidChange (NSNotification notification)
			{
				ActionHelper.Execute (delegate() {
					var row = (int)ob.splitViewController.MainTableView.SelectedRow;
					AppKit.NSViewController controller = null;
					if (row >= 0) {
						ActionHelper.Execute (delegate() {
							if (ob.CurrentSelectedNode is UsersNode) {
								var node = ob.CurrentSelectedNode as UsersNode;
								var tenant = node.GetTenant ();
								var user = ((UsersDataSource)ob.splitViewController.MainTableView.DataSource).Entries [row];
								var groups = new List<GroupDto>();
								try
								{
									var auth = SnapInContext.Instance.AuthTokenManager.GetAuthToken (ob._serverDto.ServerName);
									groups = SnapInContext.Instance.ServiceGateway.User.GetUserGroups (ob._serverDto, tenant, user, auth.Token);
									user.ActAsUsers = groups != null && groups.Exists (x => x.GroupName == "ActAsUsers" && x.GroupDomain == user.Domain);
									user.IsIdpAdmin = groups != null && groups.Exists (x => x.GroupName == "IdpProvisioningAdmin" && x.GroupDomain == user.Domain);
									var isAdmin = groups != null && groups.Exists (x => x.GroupName == "Administrators" && x.GroupDomain == user.Domain);
									var isUser = groups != null && groups.Exists (x => x.GroupName == "Users" && x.GroupDomain == user.Domain);
									user.Role = isAdmin ? UserRole.Administrator : isUser ? UserRole.RegularUser : UserRole.GuestUser;
								}
								catch(Exception exc)
								{
									user.ActAsUsers = false;
									user.IsIdpAdmin = false;
									user.Role = UserRole.GuestUser;
								}
								controller = new UserDetailsViewController () {
									UserDtoOriginal = user,
									GroupsOriginal = groups,
									ServerDto = ob._serverDto,
									TenantName = tenant,
									IsSystemDomain = node.IsSystemDomain
								};

							} else if (ob.CurrentSelectedNode is SolutionUsersNode) {
								var node = ob.CurrentSelectedNode as SolutionUsersNode;
								var tenant = node.GetTenant ();
								var user = ((SolutionUsersDataSource)ob.splitViewController.MainTableView.DataSource).Entries [row];
								controller = new SolutionUserDetailsViewController () {
									SolutionUserDtoOriginal = user,
									ServerDto = ob._serverDto,
									TenantName = tenant,
									IsSystemDomain = node.IsSystemDomain
								};
							} else if (ob.CurrentSelectedNode is GroupsNode) {
								var node = ob.CurrentSelectedNode as GroupsNode;
								var tenant = node.GetTenant ();
								var user = ((GroupsDataSource)ob.splitViewController.MainTableView.DataSource).Entries [row];
								var auth = SnapInContext.Instance.AuthTokenManager.GetAuthToken (ob._serverDto.ServerName);
								//var groupMembership = SnapInContext.Instance.ServiceGateway.Group.GetMembers (ob._serverDto, tenant, user, Vmware.Tools.RestSsoAdminSnapIn.Service.Group.GroupMemberType.ALL, auth.Token);
								var memberInfo = new GroupMembershipDto ();
								var userInfo = SnapInContext.Instance.ServiceGateway.Group.GetMembers (ob._serverDto, tenant, user, GroupMemberType.USER, auth.Token);
								memberInfo.Users = userInfo.Users == null ? new List<UserDto> () : new List<UserDto> (userInfo.Users);
								if (node.IsSystemDomain) {
									userInfo = SnapInContext.Instance.ServiceGateway.Group.GetMembers (ob._serverDto, tenant, user, GroupMemberType.SOLUTIONUSER, auth.Token);
									memberInfo.SolutionUsers = userInfo.SolutionUsers == null ? new List<SolutionUserDto> () : new List<SolutionUserDto> (userInfo.SolutionUsers);
								}
								userInfo = SnapInContext.Instance.ServiceGateway.Group.GetMembers (ob._serverDto, tenant, user, GroupMemberType.GROUP, auth.Token);
								memberInfo.Groups = userInfo.Groups == null ? new List<GroupDto> () : new List<GroupDto> (userInfo.Groups);

								controller = new GroupDetailsViewController () {
									GroupDtoOriginal = user,
									GroupsMembershipDtoOriginal = memberInfo,
									ServerDto = ob._serverDto,
									TenantName = tenant,
									IsSystemDomain = node.IsSystemDomain
								};
							} else if (ob.CurrentSelectedNode is TrustedCertificateNode) {
								var certificate = ((TrustedCertificatesDataSource)ob.splitViewController.MainTableView.DataSource).Entries [row];
								controller = new CertificateDetailsViewController () {
									CertificateDto = certificate
								};
							} else if (ob.CurrentSelectedNode is RelyingPartyNode) {
								var node = ob.CurrentSelectedNode as RelyingPartyNode;
								var tenant = node.GetTenant ();
								var rp = ((RelyingPartyDataSource)ob.splitViewController.MainTableView.DataSource).Entries [row];
								controller = new RelyingPartyDetailsViewController () { 
									RelyingPartyDtoOriginal = rp, 
									ServerDto = ob._serverDto,
									TenantName = tenant
								};
							} else if (ob.CurrentSelectedNode is OidcClientNode) {
								var node = ob.CurrentSelectedNode as OidcClientNode;
								var rp = ((OidcClientDataSource)ob.splitViewController.MainTableView.DataSource).Entries [row];
								var tenant = node.GetTenant ();
								controller = new OidcClientDetailsViewController () {
									OidcClientDtoOriginal = rp,
									ServerDto = ob._serverDto,
									TenantName = tenant
								};
							} else if (ob.CurrentSelectedNode is IdentityProvidersNode) {
								var node = ob.CurrentSelectedNode as IdentityProvidersNode;
								var rp = ((IdentityProvidersDataSource)ob.splitViewController.MainTableView.DataSource).Entries [row];
								var rpLatest = node.GetIdentityProvider (rp);
								controller = new ExtenalIdpDetailsViewController () {
									ExternalIdentityProviderDto = rpLatest
								};
							} else {
								controller = new DefaultViewController ();
							}
						});
						if (controller == null)
							controller = new DefaultViewController ();

						AppKit.NSView oldView = null;
						if (ob.DetailedCustomView.Subviews.Count () > 0) {
							oldView = ob.DetailedCustomView.Subviews [0];
						}
						if (oldView != null)
							ob.DetailedCustomView.ReplaceSubviewWith (oldView, controller.View);
						else
							ob.DetailedCustomView.AddSubview (controller.View);
					
					}
				});
			}
 void SetDefaultView ()
 {
     AppKit.NSView oldView = null;
     var controller = new DefaultViewController ();
     if (DetailedCustomView.Subviews.Count () > 0) {
         oldView = DetailedCustomView.Subviews [0];
     }
     if (oldView != null)
         DetailedCustomView.ReplaceSubviewWith (oldView, controller.View);
     else
         DetailedCustomView.AddSubview (controller.View);
 }