/// <summary> /// Function to deserialize a dependency collection from an XML node. /// </summary> /// <param name="dependenciesNode">The list of nodes that contain the dependencies.</param> /// <returns>The deserialized dependencies.</returns> internal static GorgonEditorDependencyCollection Deserialize(IEnumerable <XElement> dependenciesNode) { var result = new GorgonEditorDependencyCollection(); foreach (GorgonEditorDependency dependency in dependenciesNode.Select(GorgonEditorDependency.Deserialize)) { result._dependencies[new DependencyKey(dependency.Path, dependency.Type)] = dependency; } return(result); }
/// <summary> /// Function to retrieve the dependencies file and process it. /// </summary> private void GetDependencies() { if ((_hasMetaData != null) && (!_hasMetaData.Value)) { return; } // If we've already loaded the file system meta data for this file system, then leave. if (_metaDataFile != null) { return; } GorgonFileSystemFileEntry file = FileSystem.GetFile(MetaDataFile); if (file == null) { _hasMetaData = false; return; } // Create and load the object. using (Stream metaFile = file.OpenStream(false)) { _metaDataFile = XDocument.Load(metaFile); } XElement rootNode = _metaDataFile.Element(MetaDataRootName); if (rootNode == null) { _hasMetaData = false; return; } XElement dependencyNode = rootNode.Element(ContentDependencyFiles); if (dependencyNode == null) { _hasMetaData = false; return; } IEnumerable <XElement> fileNodes = dependencyNode.Elements(FileNode); var dependencies = new Dictionary <string, GorgonEditorDependencyCollection>(); // Lock here because we're updating a collection that's not thread safe. foreach (XElement fileNode in fileNodes) { XAttribute path = fileNode.Attribute(NameAttr); if ((path == null) || (string.IsNullOrWhiteSpace(path.Value))) { continue; } dependencies.Add(path.Value, GorgonEditorDependencyCollection .Deserialize(fileNode.Elements(GorgonEditorDependency.DependencyNode))); } Dependencies = dependencies; _hasMetaData = Dependencies.Count > 0; }