/// <summary>
        /// Performs checking out documents from source control</summary>
        /// <param name="doing">True iff doing the command</param>
        /// <returns>True iff any documents checked out or can be checked out</returns>
        protected virtual bool DoCheckOut(bool doing)
        {
            if (SourceControlService == null || !SourceControlService.Enabled ||
                SourceControlContext == null)
            {
                return(false);
            }

            int checkedOutCount = 0;

            foreach (IResource resource in SourceControlContext.Resources)
            {
                if (GetStatus(resource) != SourceControlStatus.CheckedIn)
                {
                    return(false);
                }

                if (SourceControlService.IsLocked(resource.Uri))
                {
                    return(false);
                }
                checkedOutCount++;
                if (doing)
                {
                    SourceControlService.CheckOut(resource.Uri);
                }
            }
            return(checkedOutCount != 0);
        }
        /// <summary>
        /// Tests if the resource is checked-in and needs checking out</summary>
        private void TestCheckedIn(object obj)
        {
            if (SourceControlService == null)
            {
                return;
            }
            IResource resource = obj.As <IResource>();

            if (resource == null)
            {
                return;
            }

            if (SourceControlService.GetStatus(resource.Uri) == SourceControlStatus.CheckedIn)
            {
                SourceControlService.CheckOut(resource.Uri);
            }
        }