Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Metadata / MetadataArtifactLoaderCompositeFile.cs / 1305376 / MetadataArtifactLoaderCompositeFile.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System.Collections.Generic; using System.Collections; using System.Diagnostics; using System.Globalization; using System.Reflection; using System.Text; using System.Xml; using System.Data.Mapping; using System.IO; using System.Security; using System.Security.Permissions; using System.Threading; using System.Collections.ObjectModel; using System.Runtime.Versioning; namespace System.Data.Metadata.Edm { ////// This class represents a collection of artifact files to be loaded from one /// filesystem folder. /// internal class MetadataArtifactLoaderCompositeFile : MetadataArtifactLoader { private ReadOnlyCollection_csdlChildren; private ReadOnlyCollection _ssdlChildren; private ReadOnlyCollection _mslChildren; private readonly string _path; private readonly ICollection _uriRegistry; /// /// Constructor - loads all resources into the _children collection /// /// The path to the (collection of) resources /// The global registry of URIs [ResourceExposure(ResourceScope.Machine)] //Exposes the file path which is a Machine resource public MetadataArtifactLoaderCompositeFile(string path, ICollectionuriRegistry) { _path = path; _uriRegistry = uriRegistry; } public override string Path { get { return _path; } } [ResourceExposure(ResourceScope.Machine)] //Exposes the file paths which are a Machine resource public override void CollectFilePermissionPaths(List paths, DataSpace spaceToGet) { IList files; if(TryGetListForSpace(spaceToGet, out files)) { foreach(var loader in files) { loader.CollectFilePermissionPaths(paths, spaceToGet); } } } public override bool IsComposite { get { return true; } } internal ReadOnlyCollection CsdlChildren { get { LoadCollections(); return _csdlChildren; } } internal ReadOnlyCollection SsdlChildren { get { LoadCollections(); return _ssdlChildren; } } internal ReadOnlyCollection MslChildren { get { LoadCollections(); return _mslChildren; } } /// /// Load all the collections at once so we have a "fairly" matched in time set of files /// otherwise we may end up loading the csdl files, and then not loading the ssdl, and msl /// files for sometime later. /// [ResourceExposure(ResourceScope.None)] [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)] //For GetArtifactsInDirectory method call. We pick the paths from class variable. //so this method does not expose any resource. void LoadCollections() { if (_csdlChildren == null) { ReadOnlyCollectioncsdlChildren = GetArtifactsInDirectory(_path, XmlConstants.CSpaceSchemaExtension, _uriRegistry).AsReadOnly(); Interlocked.CompareExchange(ref _csdlChildren, csdlChildren, null); } if (_ssdlChildren == null) { ReadOnlyCollection ssdlChildren = GetArtifactsInDirectory(_path, XmlConstants.SSpaceSchemaExtension, _uriRegistry).AsReadOnly(); Interlocked.CompareExchange(ref _ssdlChildren, ssdlChildren, null); } if (_mslChildren == null) { ReadOnlyCollection mslChildren = GetArtifactsInDirectory(_path, XmlConstants.CSSpaceSchemaExtension, _uriRegistry).AsReadOnly(); Interlocked.CompareExchange(ref _mslChildren, mslChildren, null); } } /// /// Get paths to artifacts for a specific DataSpace, in the original, unexpanded /// form. /// ///A filesystem folder can contain any kind of artifact, so we simply /// ignore the parameter and return the original path to the folder. /// The DataSpace for the artifacts of interest ///A List of strings identifying paths to all artifacts for a specific DataSpace public override ListGetOriginalPaths(DataSpace spaceToGet) { return GetOriginalPaths(); } /// /// Get paths to artifacts for a specific DataSpace. /// /// The DataSpace for the artifacts of interest ///A List of strings identifying paths to all artifacts for a specific DataSpace public override ListGetPaths(DataSpace spaceToGet) { List list = new List (); IList files; if (!TryGetListForSpace(spaceToGet, out files)) { return list; } foreach (MetadataArtifactLoaderFile file in files) { list.AddRange(file.GetPaths(spaceToGet)); } return list; } private bool TryGetListForSpace(DataSpace spaceToGet, out IList files) { switch (spaceToGet) { case DataSpace.CSpace: files = CsdlChildren; return true; case DataSpace.SSpace: files = SsdlChildren; return true; case DataSpace.CSSpace: files = MslChildren; return true; default: Debug.Assert(false, "Invalid DataSpace value."); files = null; return false; } } /// /// Get paths to all artifacts /// ///A List of strings identifying paths to all resources public override ListGetPaths() { List list = new List (); foreach (MetadataArtifactLoaderFile resource in CsdlChildren) { list.AddRange(resource.GetPaths()); } foreach (MetadataArtifactLoaderFile resource in SsdlChildren) { list.AddRange(resource.GetPaths()); } foreach (MetadataArtifactLoaderFile resource in MslChildren) { list.AddRange(resource.GetPaths()); } return list; } /// /// Aggregates all resource streams from the _children collection /// ///A List of XmlReader objects; cannot be null public override ListGetReaders(Dictionary sourceDictionary) { List list = new List (); foreach (MetadataArtifactLoaderFile resource in CsdlChildren) { list.AddRange(resource.GetReaders(sourceDictionary)); } foreach (MetadataArtifactLoaderFile resource in SsdlChildren) { list.AddRange(resource.GetReaders(sourceDictionary)); } foreach (MetadataArtifactLoaderFile resource in MslChildren) { list.AddRange(resource.GetReaders(sourceDictionary)); } return list; } /// /// Get XmlReaders for a specific DataSpace. /// /// The DataSpace corresponding to the requested artifacts ///A List of XmlReader objects public override ListCreateReaders(DataSpace spaceToGet) { List list = new List (); IList files; if (!TryGetListForSpace(spaceToGet, out files)) { return list; } foreach (MetadataArtifactLoaderFile file in files) { list.AddRange(file.CreateReaders(spaceToGet)); } return list; } [ResourceExposure(ResourceScope.Machine)] //Exposes the directory name which is a Machine resource [ResourceConsumption(ResourceScope.Machine)] //For Directory.GetFiles method call but we do not create the directory name in this method private static List GetArtifactsInDirectory(string directory, string extension, ICollection uriRegistry) { List loaders = new List (); string[] fileNames = Directory.GetFiles( directory, MetadataArtifactLoader.wildcard + extension, SearchOption.TopDirectoryOnly ); foreach (string fileName in fileNames) { string fullPath = System.IO.Path.Combine(directory, fileName); if (uriRegistry.Contains(fullPath)) continue; // We need a second filter on the file names verifying the right extension because // a file name with an extension longer than 3 characters might still match the // given extension. For example, if we look for *.msl, abc.msl_something would match // because the 8.3 name format matches it. if (fileName.EndsWith(extension, StringComparison.OrdinalIgnoreCase)) { loaders.Add(new MetadataArtifactLoaderFile(fullPath, uriRegistry)); // the file is added to the registry in the MetadataArtifactLoaderFile ctor } } return loaders; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- StickyNoteHelper.cs
- BuildManagerHost.cs
- ClientUtils.cs
- RequestCacheEntry.cs
- ExtenderControl.cs
- ListViewDataItem.cs
- MouseGestureValueSerializer.cs
- EnvironmentPermission.cs
- ToolboxItemAttribute.cs
- DesignerVerbCollection.cs
- AddInProcess.cs
- PassportIdentity.cs
- IssuanceTokenProviderBase.cs
- DictationGrammar.cs
- IconHelper.cs
- ListView.cs
- HybridDictionary.cs
- FunctionNode.cs
- EntityContainer.cs
- ToolbarAUtomationPeer.cs
- WebBrowser.cs
- AuthenticationService.cs
- CompilationUtil.cs
- XmlSchemaSimpleTypeUnion.cs
- Ray3DHitTestResult.cs
- unsafenativemethodstextservices.cs
- EmptyCollection.cs
- DisplayMemberTemplateSelector.cs
- WriteableBitmap.cs
- LayoutEvent.cs
- RoleGroupCollection.cs
- AccessibleObject.cs
- ImageEditor.cs
- DataPager.cs
- WebPartCancelEventArgs.cs
- StructuralType.cs
- ThumbAutomationPeer.cs
- RtType.cs
- Table.cs
- DataColumnChangeEvent.cs
- InternalSafeNativeMethods.cs
- Compiler.cs
- ExitEventArgs.cs
- Vector3DCollectionConverter.cs
- CheckedListBox.cs
- BinaryFormatter.cs
- HttpResponseInternalWrapper.cs
- XmlWrappingReader.cs
- WmlImageAdapter.cs
- SourceFileInfo.cs
- ConnectionStringsExpressionBuilder.cs
- QueryCacheKey.cs
- WindowsListViewItemCheckBox.cs
- BitmapSourceSafeMILHandle.cs
- SqlPersistenceWorkflowInstanceDescription.cs
- XmlAttributeHolder.cs
- EncryptedXml.cs
- DefaultHttpHandler.cs
- OpacityConverter.cs
- WindowPatternIdentifiers.cs
- ActivityExecutionFilter.cs
- TagMapCollection.cs
- XmlSchemaSimpleContentExtension.cs
- Util.cs
- ProfessionalColors.cs
- ResourceSetExpression.cs
- ToolboxItemImageConverter.cs
- SqlAliaser.cs
- StrokeCollection2.cs
- NumericPagerField.cs
- Pkcs9Attribute.cs
- WindowsTokenRoleProvider.cs
- UnionCodeGroup.cs
- WindowsFormsHelpers.cs
- NumericUpDown.cs
- TypeDependencyAttribute.cs
- ReaderWriterLock.cs
- DataGridViewControlCollection.cs
- X509Certificate2Collection.cs
- PopupEventArgs.cs
- PingReply.cs
- FixedPosition.cs
- SpAudioStreamWrapper.cs
- SelectedCellsCollection.cs
- ScriptIgnoreAttribute.cs
- TextEditorContextMenu.cs
- DbParameterHelper.cs
- EntityAdapter.cs
- ObjectStateFormatter.cs
- EnumBuilder.cs
- DiscardableAttribute.cs
- Dispatcher.cs
- XmlNodeChangedEventArgs.cs
- TemplateBindingExtension.cs
- Brush.cs
- DataGridViewCellFormattingEventArgs.cs
- FloaterBaseParaClient.cs
- BamlBinaryReader.cs
- Win32SafeHandles.cs
- LabelLiteral.cs