DirectoryRedirect.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Activities / Role / DirectoryRedirect.cs / 1305376 / DirectoryRedirect.cs

                            #region Using directives 

using System;
using System.Collections.Generic;
using System.Text; 
using System.DirectoryServices;
 
#endregion 

namespace System.Workflow.Activities 
{
    [Serializable]
    sealed internal class DirectoryRedirect : IDirectoryOperation
    { 
        private String m_getPropertyName;
        private String m_searchPropertyName; 
        private bool m_recursive; 

        public DirectoryRedirect(String getPropertyName, String searchPropertyName) 
            : this( getPropertyName, searchPropertyName, false )
        {
        }
 
        public DirectoryRedirect(String getPropertyName, String searchPropertyName, bool recursive)
        { 
            if (getPropertyName == null) 
                throw new ArgumentNullException("getPropertyName");
            if (searchPropertyName == null) 
                throw new ArgumentNullException("searchPropertyName");

            this.m_getPropertyName = getPropertyName;
            this.m_searchPropertyName = searchPropertyName; 
            this.m_recursive = recursive;
        } 
 
        public void GetResult(DirectoryEntry rootEntry, DirectoryEntry currentEntry, List response)
        { 
            if (rootEntry == null)
                throw new ArgumentNullException("rootEntry");
            if (currentEntry == null)
                throw new ArgumentNullException("currentEntry"); 
            if (response == null)
                throw new ArgumentNullException("response"); 
 
            if (!this.m_recursive)
            { 
                using (DirectorySearcher searcher = CreateSearcher(rootEntry, currentEntry))
                {
                    foreach (SearchResult result in searcher.FindAll())
                    { 
                        response.Add(result.GetDirectoryEntry());
                    } 
                } 
            }
            else 
            {
                Dictionary dResponse = new Dictionary();
                Stack stack = new Stack();
                stack.Push(currentEntry); 

                while (stack.Count != 0) 
                { 
                    DirectoryEntry currentTop = stack.Pop();
                    using (DirectorySearcher searcher = CreateSearcher(rootEntry, currentTop)) 
                    {
                        foreach (SearchResult result in searcher.FindAll())
                        {
                            DirectoryEntry newEntry = result.GetDirectoryEntry(); 
                            if (!dResponse.ContainsKey(newEntry.Guid))
                                dResponse.Add(newEntry.Guid, newEntry); 
                            stack.Push(newEntry); 
                        }
                    } 
                }

                response.AddRange(dResponse.Values);
            } 
        }
 
        private DirectorySearcher CreateSearcher(DirectoryEntry rootEntry, DirectoryEntry currentEntry) 
        {
            DirectorySearcher searcher = new DirectorySearcher(rootEntry); 

            PropertyValueCollection values = currentEntry.Properties[this.m_getPropertyName];
            System.Diagnostics.Debug.Assert(values.Count == 1);
 
            searcher.Filter = "(" + this.m_searchPropertyName + "=" + values[0] + ")";
 
            return searcher; 
        }
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
#region Using directives 

using System;
using System.Collections.Generic;
using System.Text; 
using System.DirectoryServices;
 
#endregion 

namespace System.Workflow.Activities 
{
    [Serializable]
    sealed internal class DirectoryRedirect : IDirectoryOperation
    { 
        private String m_getPropertyName;
        private String m_searchPropertyName; 
        private bool m_recursive; 

        public DirectoryRedirect(String getPropertyName, String searchPropertyName) 
            : this( getPropertyName, searchPropertyName, false )
        {
        }
 
        public DirectoryRedirect(String getPropertyName, String searchPropertyName, bool recursive)
        { 
            if (getPropertyName == null) 
                throw new ArgumentNullException("getPropertyName");
            if (searchPropertyName == null) 
                throw new ArgumentNullException("searchPropertyName");

            this.m_getPropertyName = getPropertyName;
            this.m_searchPropertyName = searchPropertyName; 
            this.m_recursive = recursive;
        } 
 
        public void GetResult(DirectoryEntry rootEntry, DirectoryEntry currentEntry, List response)
        { 
            if (rootEntry == null)
                throw new ArgumentNullException("rootEntry");
            if (currentEntry == null)
                throw new ArgumentNullException("currentEntry"); 
            if (response == null)
                throw new ArgumentNullException("response"); 
 
            if (!this.m_recursive)
            { 
                using (DirectorySearcher searcher = CreateSearcher(rootEntry, currentEntry))
                {
                    foreach (SearchResult result in searcher.FindAll())
                    { 
                        response.Add(result.GetDirectoryEntry());
                    } 
                } 
            }
            else 
            {
                Dictionary dResponse = new Dictionary();
                Stack stack = new Stack();
                stack.Push(currentEntry); 

                while (stack.Count != 0) 
                { 
                    DirectoryEntry currentTop = stack.Pop();
                    using (DirectorySearcher searcher = CreateSearcher(rootEntry, currentTop)) 
                    {
                        foreach (SearchResult result in searcher.FindAll())
                        {
                            DirectoryEntry newEntry = result.GetDirectoryEntry(); 
                            if (!dResponse.ContainsKey(newEntry.Guid))
                                dResponse.Add(newEntry.Guid, newEntry); 
                            stack.Push(newEntry); 
                        }
                    } 
                }

                response.AddRange(dResponse.Values);
            } 
        }
 
        private DirectorySearcher CreateSearcher(DirectoryEntry rootEntry, DirectoryEntry currentEntry) 
        {
            DirectorySearcher searcher = new DirectorySearcher(rootEntry); 

            PropertyValueCollection values = currentEntry.Properties[this.m_getPropertyName];
            System.Diagnostics.Debug.Assert(values.Count == 1);
 
            searcher.Filter = "(" + this.m_searchPropertyName + "=" + values[0] + ")";
 
            return searcher; 
        }
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK