Exemplo n.º 1
0
        /// <summary>
        /// Recursive method to save the Option's value and its variants'
        /// and children's values to the node.
        /// </summary>
        private void SaveNode(ValueStore.Node node, Option option, bool isDefaultNode = false)
        {
            if (!isDefaultNode && option.IsDefaultVariant)
            {
                var defaultVariant = node.GetOrCreateVariant(option.VariantDefaultParameter);
                SaveNode(defaultVariant, option, isDefaultNode: true);

                for (int i = node.variants.Count - 1; i >= 0; i--)
                {
                    if (option.GetVariant(node.variants[i].name, create:false) == null)
                    {
                        node.RemoveVariant(i);
                    }
                }

                foreach (var variantOption in option.Variants)
                {
                    var variantNode = node.GetOrCreateVariant(variantOption.VariantParameter);
                    SaveNode(variantNode, variantOption);
                }
            }
            else
            {
                node.Value = option.Save();

                foreach (var childOption in option.Children)
                {
                    var childNode = node.GetOrCreateChild(childOption.Name);
                    SaveNode(childNode, childOption);
                }
            }
        }
Exemplo n.º 2
0
        protected void CleanStoreRecursive(ValueStore.Node node, Option option, bool isDefaultNode = false)
        {
            if (!isDefaultNode && option.IsDefaultVariant)
            {
                // Value and children are stored in the default parameter sub-node
                node.Value = null;
                node.ClearChildren();

                if (node.VariantCount > 0)
                {
                    foreach (var variant in node.Variants.ToArray())
                    {
                        if (variant.Name.EqualsIgnoringCase(option.VariantDefaultParameter))
                        {
                            CleanStoreRecursive(variant, option, isDefaultNode: true);
                            continue;
                        }
                        var variantOption = option.GetVariant(variant.Name, create: false);
                        if (variantOption == null)
                        {
                            node.RemoveVariant(variant.Name);
                        }
                        else
                        {
                            CleanStoreRecursive(variant, variantOption);
                        }
                    }
                }
            }
            else
            {
                node.ClearVariants();
            }

            if (node.ChildCount > 0)
            {
                foreach (var child in node.Children.ToArray())
                {
                    var childOption = option.GetChild(child.Name);
                    if (childOption == null)
                    {
                        node.RemoveChild(child.Name);
                    }
                    else
                    {
                        CleanStoreRecursive(child, childOption);
                    }
                }
            }
        }