I'm trying to streamline my project a little bit today and the Code Analysis shows that this method has a maintainability index of 30 and Class Coupling of 37. From what I've read, that's pretty poor but I don't really see how else I can improve the method.
The method populates a Listview (yeah yeah I know) with various properties of an Active Directory user object.
Should I define the ListviewItems individually and then just use the Listview AddRange method instead of adding the ListViewItems one by one?
The method populates a Listview (yeah yeah I know) with various properties of an Active Directory user object.
Should I define the ListviewItems individually and then just use the Listview AddRange method instead of adding the ListViewItems one by one?
Code:
Public Sub GetUserInfo()
Me.Cursor = Cursors.WaitCursor
Dim lv As ListView = Nothing
Dim FMBSelected As Boolean = False
'Clear listview
Me.AccountInfoListView.BeginUpdate()
'Clear listview
ListViewHandler.ClearListView(Me.AccountInfoListView)
Select Case Me.UserListTabControl.SelectedIndex
Case 0
Me.ActionsDropDownButton.DropDown = Me.ContextMenuUsers
lv = Me.UserList
Case 1
Me.ActionsDropDownButton.DropDown = Me.ContextMenuUsers
lv = Me.TransferUserList
Case 2
Me.ActionsDropDownButton.DropDown = Me.ContextMenuStripMailboxes
lv = Me.MailboxList
FMBSelected = True
End Select
Dim lvi As ListViewItem
If lv.SelectedItems.Count > 0 Then
lvi = lv.SelectedItems(0)
'Get the most recent user details from AD
Me.SelectedUser = ExtendedUserPrincipal.FindByIdentity(CurrentPrincipalContext, IdentityType.SamAccountName, lvi.SubItems(1).Text)
SharedRoutines.WriteLog("Getting information for account: " + Me.SelectedUser.Name, False)
If Me.SelectedUser.PasswordNeverExpires = True Then
Me.tsmiSetPasswordExpiration.Text = "Set password to normal expiration"
Else
Me.tsmiSetPasswordExpiration.Text = "Set password to never expire"
End If
'If an FMB was selected, get slightly different information
If FMBSelected Then
Me.GetFMBINfo(Me.SelectedUser)
Else
'If a user was selected, get relevant information
Dim UserDetailsListViewGroup As ListViewGroup = ListViewHandler.CreateGroup("Summary", Me.AccountInfoListView)
Dim UserGroupsListViewGroup As ListViewGroup = ListViewHandler.CreateGroup("Group membership", Me.AccountInfoListView)
Dim ManagedUsersListViewGroup As ListViewGroup = ListViewHandler.CreateGroup("Users managed", Me.AccountInfoListView)
ListViewHandler.AddListViewItem(Me.AccountInfoListView, "user", UserDetailsListViewGroup, "Full name", Me.SelectedUser.Name)
ListViewHandler.AddListViewItem(Me.AccountInfoListView, "user", UserDetailsListViewGroup, "Last name", Me.SelectedUser.Surname)
ListViewHandler.AddListViewItem(Me.AccountInfoListView, "user", UserDetailsListViewGroup, "First name", Me.SelectedUser.GivenName)
ListViewHandler.AddListViewItem(Me.AccountInfoListView, "info", UserDetailsListViewGroup, "User ID", Me.SelectedUser.SamAccountName)
ListViewHandler.AddListViewItem(Me.AccountInfoListView, "info", UserDetailsListViewGroup, "Distinguished name", Me.SelectedUser.DistinguishedName)
If Me.SelectedUser.EmailAddress = String.Empty Then
ListViewHandler.AddListViewItem(Me.AccountInfoListView, "email", UserDetailsListViewGroup, "Email address", "Not specified")
Else
Dim EmailLVI As ListViewItem = ListViewHandler.AddListViewItem(Me.AccountInfoListView, "email", UserDetailsListViewGroup, "Email address", Me.SelectedUser.EmailAddress)
ListViewHandler.ConvertListViewItemToHyperlink(EmailLVI)
End If
ListViewHandler.AddListViewItem(Me.AccountInfoListView, "phone", UserDetailsListViewGroup, "Telephone", Me.SelectedUser.VoiceTelephoneNumber)
If Not String.IsNullOrEmpty(Me.SelectedUser.MobilePhone) Then
ListViewHandler.AddListViewItem(Me.AccountInfoListView, "gsm", UserDetailsListViewGroup, "Mobile phone", Me.SelectedUser.MobilePhone)
End If
ListViewHandler.AddListViewItem(Me.AccountInfoListView, "info", UserDetailsListViewGroup, "Office", Me.SelectedUser.Office)
ListViewHandler.AddListViewItem(Me.AccountInfoListView, "department", UserDetailsListViewGroup, "Department", Me.SelectedUser.Department)
ListViewHandler.AddListViewItem(Me.AccountInfoListView, "script", UserDetailsListViewGroup, "Logon script path", Me.SelectedUser.ScriptPath)
Dim dt As DataTable = SharedRoutines.QueryLandesk("SELECT [LDMS90].[dbo].[Computer].DeviceName, [LDMS90].[dbo].[Keyboard].Layout " _
+ "FROM [LDMS90].[dbo].[Computer] INNER JOIN [LDMS90].[dbo].[Keyboard] " _
+ "ON [LDMS90].[dbo].[Computer].Computer_Idn=[LDMS90].[dbo].[Keyboard].Computer_Idn " _
+ "WHERE LoginName ='" + Me.SelectedUser.SamAccountName.ToUpper(CultureInfo.CurrentCulture) + "'")
'dt = SharedRoutines.QueryLandesk("SELECT Computer_Idn,DeviceName FROM [LDMS90].[dbo].[Computer] WHERE LoginName ='" + Me.SelectedUser.SamAccountName.ToUpper(CultureInfo.CurrentCulture) + "'")
Dim OwnedComputer As String
Dim KeyboardLayout As String = "N/A"
If dt.Rows.Count > 0 AndAlso Not String.IsNullOrEmpty(dt.Rows(0).Item(0).ToString) Then
OwnedComputer = dt.Rows(0).Item("DeviceName").ToString
KeyboardLayout = dt.Rows(0).Item("Layout").ToString
Me.ManageComputerToolStripMenuItem.Enabled = SharedRoutines.PingComputer(OwnedComputer)
Else
OwnedComputer = "N/A"
Me.ManageComputerToolStripMenuItem.Enabled = False
End If
ListViewHandler.AddListViewItem(Me.AccountInfoListView, "computer", UserDetailsListViewGroup, "Computer name", OwnedComputer)
ListViewHandler.AddListViewItem(Me.AccountInfoListView, "keyboard", UserDetailsListViewGroup, "Keyboard layout", KeyboardLayout)
If Me.SelectedUser.PasswordNeverExpires Then
ListViewHandler.AddListViewItem(Me.AccountInfoListView, "info", UserDetailsListViewGroup, "Password expiration status", "Never expires")
Else
ListViewHandler.AddListViewItem(Me.AccountInfoListView, "info", UserDetailsListViewGroup, "Password expiration status", "Normal expiration")
End If
If Not Me.SelectedUser.LastPasswordSet Is Nothing Then
ListViewHandler.AddListViewItem(Me.AccountInfoListView, "info", UserDetailsListViewGroup, "Password expiration date", _
Me.SelectedUser.LastPasswordSet.Value.AddDays(90).Date.ToShortDateString)
Else
ListViewHandler.AddListViewItem(Me.AccountInfoListView, "info", UserDetailsListViewGroup, "Password expiration date", "N/A")
End If
Dim UserEnabledStatus As String
If Me.SelectedUser.Enabled Then
UserEnabledStatus = "Enabled"
Me.tsmiDisable.Text = "Disable account"
Me.tsmiDisable.Image = ImageList1.Images("DisabledUser")
ListViewHandler.AddListViewItem(Me.AccountInfoListView, "User", UserDetailsListViewGroup, "Status", UserEnabledStatus)
Else
UserEnabledStatus = "Disabled"
Me.tsmiDisable.Text = "Enable account"
Me.tsmiDisable.Image = ImageList1.Images("EnableUser")
ListViewHandler.AddListViewItem(Me.AccountInfoListView, "DisabledUser", UserDetailsListViewGroup, "Status", UserEnabledStatus)
End If
Me.tsmiUnlock.Enabled = Me.SelectedUser.IsAccountLockedOut
If Me.SelectedUser.IsAccountLockedOut Then
ListViewHandler.AddListViewItem(Me.AccountInfoListView, "locked", UserDetailsListViewGroup, "Lockout status", "User account is locked")
Else
ListViewHandler.AddListViewItem(Me.AccountInfoListView, "unlocked", UserDetailsListViewGroup, "Lockout status", "User account not locked")
End If
'Retrieve a sorted list of OLAF groups the user is a member of.
Dim SortedGroups As List(Of Principal) = GetSortedGroups(Me.SelectedUser.GetGroups).Where(Function(g) g.DistinguishedName.Contains("OU=OLAF")).ToList()
For Each p As Principal In SortedGroups
ListViewHandler.AddListViewItem(Me.AccountInfoListView, "group", UserGroupsListViewGroup, p.Name, p.DistinguishedName)
Next
Dim ManagedPeople As SearchResultCollection = adh.GetManagedObjects(Me.NOAPUserOU, Me.SelectedUser)
If ManagedPeople.Count = 0 Then
ListViewHandler.AddListViewItem(Me.AccountInfoListView, "info", ManagedUsersListViewGroup, "No managed people")
Else
For Each sr As SearchResult In ManagedPeople
ListViewHandler.AddListViewItem(Me.AccountInfoListView, "user", ManagedUsersListViewGroup, adh.GetProperty(sr, "name"))
Next
End If
End If
End If
ListViewHandler.AutoSizeColumns(Me.AccountInfoListView)
Me.AccountInfoListView.EndUpdate()
Me.Cursor = Cursors.Default
Me.UserActionsToolStrip.Enabled = True
Me.ActionsDropDownButton.Enabled = True
End Sub