Quantcast
Channel: VBForums - Visual Basic .NET
Viewing all articles
Browse latest Browse all 27417

VS 2010 [RESOLVED] Reducing class coupling/complexity in this method

$
0
0
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?


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


Viewing all articles
Browse latest Browse all 27417

Latest Images

Trending Articles



Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>