private void AddChildren(ExtractionConfigurationsNode extractionConfigurationsNode, DescendancyList descendancy)
        {
            HashSet <object> children = new HashSet <object>();

            //Create a frozen extraction configurations folder as a subfolder of each ExtractionConfigurationsNode
            var frozenConfigurationsNode = new FrozenExtractionConfigurationsNode(extractionConfigurationsNode.Project);

            //Make the frozen folder appear under the extractionConfigurationsNode
            children.Add(frozenConfigurationsNode);

            //Add children to the frozen folder
            AddChildren(frozenConfigurationsNode, descendancy.Add(frozenConfigurationsNode));

            //Add ExtractionConfigurations which are not released (frozen)
            if (ExtractionConfigurationsByProject.TryGetValue(extractionConfigurationsNode.Project.ID, out List <ExtractionConfiguration> result))
            {
                foreach (ExtractionConfiguration config in result.Where(c => !c.IsReleased))
                {
                    AddChildren(config, descendancy.Add(config));
                    children.Add(config);
                }
            }

            AddToDictionaries(children, descendancy);
        }
        private void AddChildren(FrozenExtractionConfigurationsNode frozenExtractionConfigurationsNode, DescendancyList descendancy)
        {
            HashSet <object> children = new HashSet <object>();

            //Add ExtractionConfigurations which are not released (frozen)
            if (ExtractionConfigurationsByProject.TryGetValue(frozenExtractionConfigurationsNode.Project.ID, out List <ExtractionConfiguration> result))
            {
                foreach (ExtractionConfiguration config in result.Where(c => c.IsReleased))
                {
                    AddChildren(config, descendancy.Add(config));
                    children.Add(config);
                }
            }

            AddToDictionaries(children, descendancy);
        }