File: cdf\src\NetFx40\Tools\System.Activities.Presentation\System\Activities\Presentation\Base\Core\Internal\PropertyEditing\State\AggregateStateContainer.cs
Project: ndp\System.Data.csproj (System.Data)
//----------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//----------------------------------------------------------------
namespace System.Activities.Presentation.Internal.PropertyEditing.State 
{
    using System;
    using System.Diagnostics;
 
    // <summary>
    // Aggregate of IStateContainer objects
    // </summary>
    internal class AggregateStateContainer : IStateContainer 
    {
 
        private IStateContainer[] _containers;
 
        public AggregateStateContainer(params IStateContainer[] containers) {
            _containers = containers;
        }
 
        public object RetrieveState() 
        {
            object[] states = null;
 
            if (_containers != null) 
            {
                states = new object[_containers.Length];
                for (int i = 0; i < _containers.Length; i++)
                {
                    states[i] = _containers[i] == null ? null : _containers[i].RetrieveState();
                }
            }
 
            return states;
        }
 
        public void RestoreState(object state) 
        {
            if (_containers != null) 
            {
 
                object[] states = state as object[];
                if (states == null || states.Length != _containers.Length) 
                {
                    Debug.Fail("Invalid state to restore: " + (state == null ? "null" : state.ToString()));
                    return;
                }
 
                for (int i = 0; i < _containers.Length; i++)
                {
                    if (_containers[i] != null)
                    {
                        _containers[i].RestoreState(states[i]);
                    }
                }
            }
        }
    }
}