/// <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);
        }
Beispiel #2
0
        /// <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;
        }