Ejemplo n.º 1
0
        private IMapWillChange <I, INode> WillChange(IMapWillChange <I, INode> change)
        {
            var node = change.Object.GetStateTreeNode() as ObjectNode;

            node.AssertWritable();

            var map = change.Object as IObservableMap <I, INode, T>;

            switch (change.Type)
            {
            case ChangeType.UPDATE:
            {
                var oldValue = map.GetValue(change.Name);

                if (change.NewValue == oldValue)
                {
                    return(null);
                }

                StateTreeUtils.Typecheck(SubType, change.NewValue.StoredValue);

                change.NewValue = SubType.Reconcile(node.GetChildNode(change.Name.ToString()), change.NewValue.StoredValue);

                ProcessIdentifier(change.Name.ToString(), change.NewValue);
            }
            break;

            case ChangeType.ADD:
            {
                StateTreeUtils.Typecheck(SubType, change.NewValue.StoredValue);

                change.NewValue = SubType.Instantiate(node, change.Name.ToString(), node.Environment, change.NewValue.StoredValue);

                ProcessIdentifier(change.Name.ToString(), change.NewValue);
            }
            break;
            }

            return(change);
        }