Exemplo n.º 1
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);
                    }
                }
            }
        }