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, Listresponse) { 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

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DashStyle.cs
- ConnectionManagementElement.cs
- DiagnosticsConfiguration.cs
- CompressEmulationStream.cs
- TextSpan.cs
- SafeArchiveContext.cs
- SoapReflectionImporter.cs
- HttpCapabilitiesBase.cs
- CellParagraph.cs
- connectionpool.cs
- VisualStyleElement.cs
- WebConfigurationFileMap.cs
- WebScriptMetadataFormatter.cs
- MaskedTextBoxDesigner.cs
- DataBinder.cs
- ToolStripPanelRenderEventArgs.cs
- FieldTemplateFactory.cs
- SocketStream.cs
- TextFragmentEngine.cs
- CommandPlan.cs
- Add.cs
- InputBuffer.cs
- SoapHeader.cs
- Nodes.cs
- DateTimeFormat.cs
- InputScopeAttribute.cs
- Rule.cs
- XmlAttribute.cs
- EntityWrapperFactory.cs
- DependencyObjectPropertyDescriptor.cs
- CodeTypeParameterCollection.cs
- DNS.cs
- SortDescription.cs
- querybuilder.cs
- DataBoundControlHelper.cs
- LinkClickEvent.cs
- DifferencingCollection.cs
- EnumValidator.cs
- MetadataExporter.cs
- FormViewUpdatedEventArgs.cs
- ProtectedConfigurationSection.cs
- CallSite.cs
- VisualState.cs
- ComponentDispatcherThread.cs
- MergePropertyDescriptor.cs
- MgmtConfigurationRecord.cs
- Image.cs
- XmlTextReaderImplHelpers.cs
- DataObjectCopyingEventArgs.cs
- Visual3D.cs
- MachineSettingsSection.cs
- Rect.cs
- WebPartUserCapability.cs
- QilBinary.cs
- UnsettableComboBox.cs
- StackBuilderSink.cs
- CroppedBitmap.cs
- FixedElement.cs
- SqlBulkCopyColumnMappingCollection.cs
- RectConverter.cs
- DetailsViewRowCollection.cs
- _NegoState.cs
- CompositeActivityDesigner.cs
- IisTraceWebEventProvider.cs
- StylusLogic.cs
- LinkTarget.cs
- DataSourceView.cs
- WSHttpSecurityElement.cs
- COM2PictureConverter.cs
- FreezableDefaultValueFactory.cs
- EventSinkHelperWriter.cs
- Funcletizer.cs
- HttpsHostedTransportConfiguration.cs
- PinProtectionHelper.cs
- AndCondition.cs
- CodeStatementCollection.cs
- Site.cs
- DbTransaction.cs
- TextBoxBaseDesigner.cs
- Int32AnimationUsingKeyFrames.cs
- UIntPtr.cs
- serverconfig.cs
- BasicCommandTreeVisitor.cs
- SubpageParagraph.cs
- VirtualizingPanel.cs
- XPathSelectionIterator.cs
- GridViewAutomationPeer.cs
- AssemblyCollection.cs
- PersonalizationProviderHelper.cs
- FixedBufferAttribute.cs
- CodeGroup.cs
- ListSourceHelper.cs
- ResourcePool.cs
- StaticTextPointer.cs
- EventNotify.cs
- ImplicitInputBrush.cs
- ServiceCredentialsSecurityTokenManager.cs
- TypeProvider.cs
- ContentPlaceHolder.cs
- Html32TextWriter.cs