WorkflowViewStateService.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / Tools / System.Activities.Presentation / System / Activities / Presentation / View / WorkflowViewStateService.cs / 1305376 / WorkflowViewStateService.cs

                            //---------------------------------------------------------------- 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//---------------------------------------------------------------

namespace System.Activities.Presentation.View 
{
    using System.Collections.Generic; 
    using System.Diagnostics.CodeAnalysis; 
    using System.Xaml;
    using System.Activities.Presentation.Model; 
    using System.Runtime;

    //ViewState is stored as a Dictionary on the CFx object.
    //ModelItem is passed in StoreViewState to get a handle to the CFx object. 
    [Fx.Tag.XamlVisible(false)]
    public class WorkflowViewStateService : ViewStateService 
    { 
        EditingContext context;
 
        public override event ViewStateChangedEventHandler ViewStateChanged;

        public override event ViewStateChangedEventHandler UndoableViewStateChanged;
 
        [SuppressMessage(FxCop.Category.Security, FxCop.Rule.DoNotDeclareReadOnlyMutableReferenceTypes)]
        public static readonly AttachableMemberIdentifier ViewStateName = new AttachableMemberIdentifier(typeof(WorkflowViewStateService), "ViewState"); 
 
        UndoEngine UndoEngine
        { 
            get
            {
                return this.context.Services.GetService();
            } 
        }
 
        public WorkflowViewStateService(EditingContext context) 
        {
            this.context = context; 
        }

        public static Dictionary GetViewState(object instance)
        { 
            if (instance == null)
            { 
                throw FxTrace.Exception.AsError(new ArgumentNullException("instance")); 
            }
            Dictionary viewState; 
            AttachablePropertyServices.TryGetProperty(instance, ViewStateName, out viewState);
            return viewState;
        }
 
        public static void SetViewState(object instance, Dictionary value)
        { 
            if (instance == null) 
            {
                throw FxTrace.Exception.AsError(new ArgumentNullException("instance")); 
            }
            AttachablePropertyServices.SetProperty(instance, ViewStateName, value);
        }
 

        public override object RetrieveViewState(ModelItem modelItem, string key) 
        { 
            if (modelItem == null)
            { 
                throw FxTrace.Exception.AsError(new ArgumentNullException("modelItem"));
            }
            if (key == null)
            { 
                throw FxTrace.Exception.AsError(new ArgumentNullException("key"));
            } 
 
            object viewStateObj = null;
            Dictionary viewState = WorkflowViewStateService.GetViewState(modelItem.GetCurrentValue()); 
            if (viewState != null)
            {
                viewState.TryGetValue(key, out viewStateObj);
            } 
            return viewStateObj;
        } 
 
        public override void StoreViewState(ModelItem modelItem, string key, object value)
        { 
            if (modelItem == null)
            {
                throw FxTrace.Exception.AsError(new ArgumentNullException("modelItem"));
            } 
            if (key == null)
            { 
                throw FxTrace.Exception.AsError(new ArgumentNullException("key")); 
            }
 
            object oldValue = null;
            Dictionary viewState = WorkflowViewStateService.GetViewState(modelItem.GetCurrentValue());
            if (viewState == null)
            { 
                viewState = new Dictionary();
                WorkflowViewStateService.SetViewState(modelItem.GetCurrentValue(), viewState); 
            } 
            viewState.TryGetValue(key, out oldValue);
            if (value != null) 
            {
                viewState[key] = value;
            }
            else 
            {
                RemoveViewState(modelItem, key); 
            } 
            if (this.ViewStateChanged != null && value != oldValue)
            { 
                this.ViewStateChanged(this, new ViewStateChangedEventArgs(modelItem, key, value, oldValue));
            }
        }
 
        public override bool RemoveViewState(ModelItem modelItem, string key)
        { 
            if (modelItem == null) 
            {
                throw FxTrace.Exception.AsError(new ArgumentNullException("modelItem")); 
            }
            if (key == null)
            {
                throw FxTrace.Exception.AsError(new ArgumentNullException("key")); 
            }
            bool itemRemoved = false; 
            Dictionary viewState = WorkflowViewStateService.GetViewState(modelItem.GetCurrentValue()); 
            if (viewState != null && key != null && viewState.ContainsKey(key))
            { 
                itemRemoved = viewState.Remove(key);
                if (viewState.Keys.Count == 0)
                {
                    AttachablePropertyServices.RemoveProperty(modelItem.GetCurrentValue(), ViewStateName); 
                }
            } 
            return itemRemoved; 
        }
 
        public override Dictionary RetrieveAllViewState(ModelItem modelItem)
        {
            if (modelItem == null)
            { 
                throw FxTrace.Exception.AsError(new ArgumentNullException("modelItem"));
            } 
            return WorkflowViewStateService.GetViewState(modelItem.GetCurrentValue()); 
        }
 

        public override void StoreViewStateWithUndo(ModelItem modelItem, string key, object value)
        {
            object oldValue = RetrieveViewState(modelItem, key); 
            ViewStateChange vsChange = new ViewStateChange(this)
                                        { 
                                            Item = modelItem, 
                                            Key = key,
                                            OldValue = oldValue, 
                                            NewValue = value,
                                        };
            ModelTreeManager modelTreeManager = this.context.Services.GetService();
            if (modelTreeManager != null) 
            {
                modelTreeManager.AddToCurrentEditingScope(vsChange); 
            } 
        }
 

        void RaiseUndoableViewStateChangedEvent(ModelItem modelItem, string key, object newValue, object oldValue)
        {
            if (this.UndoableViewStateChanged != null) 
            {
                this.UndoableViewStateChanged(this, new ViewStateChangedEventArgs(modelItem, key, newValue, oldValue)); 
            } 
        }
 

        internal class ViewStateChange : Change
        {
            protected WorkflowViewStateService viewStateService; 

            public ModelItem Item { get; set; } 
            public string Key { get; set; } 
            public object OldValue { get; set; }
            public object NewValue { get; set; } 

            public ViewStateChange(WorkflowViewStateService viewStateService)
            {
                this.viewStateService = viewStateService; 
            }
 
 
            public override string Description
            { 
                get { return SR.ViewStateUndoUnitDescription; }
            }

            public override bool Apply() 
            {
                viewStateService.StoreViewState(Item, Key, NewValue); 
                this.viewStateService.RaiseUndoableViewStateChangedEvent(Item, Key, NewValue, OldValue); 
                return true;
            } 

            public override Change GetInverse()
            {
                return new ViewStateChange(this.viewStateService) 
                    {
                        Item = this.Item, 
                        Key = this.Key, 
                        OldValue = this.NewValue,
                        NewValue = this.OldValue 
                    };
            }
        }
 

    } 
 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//---------------------------------------------------------------- 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//---------------------------------------------------------------

namespace System.Activities.Presentation.View 
{
    using System.Collections.Generic; 
    using System.Diagnostics.CodeAnalysis; 
    using System.Xaml;
    using System.Activities.Presentation.Model; 
    using System.Runtime;

    //ViewState is stored as a Dictionary on the CFx object.
    //ModelItem is passed in StoreViewState to get a handle to the CFx object. 
    [Fx.Tag.XamlVisible(false)]
    public class WorkflowViewStateService : ViewStateService 
    { 
        EditingContext context;
 
        public override event ViewStateChangedEventHandler ViewStateChanged;

        public override event ViewStateChangedEventHandler UndoableViewStateChanged;
 
        [SuppressMessage(FxCop.Category.Security, FxCop.Rule.DoNotDeclareReadOnlyMutableReferenceTypes)]
        public static readonly AttachableMemberIdentifier ViewStateName = new AttachableMemberIdentifier(typeof(WorkflowViewStateService), "ViewState"); 
 
        UndoEngine UndoEngine
        { 
            get
            {
                return this.context.Services.GetService();
            } 
        }
 
        public WorkflowViewStateService(EditingContext context) 
        {
            this.context = context; 
        }

        public static Dictionary GetViewState(object instance)
        { 
            if (instance == null)
            { 
                throw FxTrace.Exception.AsError(new ArgumentNullException("instance")); 
            }
            Dictionary viewState; 
            AttachablePropertyServices.TryGetProperty(instance, ViewStateName, out viewState);
            return viewState;
        }
 
        public static void SetViewState(object instance, Dictionary value)
        { 
            if (instance == null) 
            {
                throw FxTrace.Exception.AsError(new ArgumentNullException("instance")); 
            }
            AttachablePropertyServices.SetProperty(instance, ViewStateName, value);
        }
 

        public override object RetrieveViewState(ModelItem modelItem, string key) 
        { 
            if (modelItem == null)
            { 
                throw FxTrace.Exception.AsError(new ArgumentNullException("modelItem"));
            }
            if (key == null)
            { 
                throw FxTrace.Exception.AsError(new ArgumentNullException("key"));
            } 
 
            object viewStateObj = null;
            Dictionary viewState = WorkflowViewStateService.GetViewState(modelItem.GetCurrentValue()); 
            if (viewState != null)
            {
                viewState.TryGetValue(key, out viewStateObj);
            } 
            return viewStateObj;
        } 
 
        public override void StoreViewState(ModelItem modelItem, string key, object value)
        { 
            if (modelItem == null)
            {
                throw FxTrace.Exception.AsError(new ArgumentNullException("modelItem"));
            } 
            if (key == null)
            { 
                throw FxTrace.Exception.AsError(new ArgumentNullException("key")); 
            }
 
            object oldValue = null;
            Dictionary viewState = WorkflowViewStateService.GetViewState(modelItem.GetCurrentValue());
            if (viewState == null)
            { 
                viewState = new Dictionary();
                WorkflowViewStateService.SetViewState(modelItem.GetCurrentValue(), viewState); 
            } 
            viewState.TryGetValue(key, out oldValue);
            if (value != null) 
            {
                viewState[key] = value;
            }
            else 
            {
                RemoveViewState(modelItem, key); 
            } 
            if (this.ViewStateChanged != null && value != oldValue)
            { 
                this.ViewStateChanged(this, new ViewStateChangedEventArgs(modelItem, key, value, oldValue));
            }
        }
 
        public override bool RemoveViewState(ModelItem modelItem, string key)
        { 
            if (modelItem == null) 
            {
                throw FxTrace.Exception.AsError(new ArgumentNullException("modelItem")); 
            }
            if (key == null)
            {
                throw FxTrace.Exception.AsError(new ArgumentNullException("key")); 
            }
            bool itemRemoved = false; 
            Dictionary viewState = WorkflowViewStateService.GetViewState(modelItem.GetCurrentValue()); 
            if (viewState != null && key != null && viewState.ContainsKey(key))
            { 
                itemRemoved = viewState.Remove(key);
                if (viewState.Keys.Count == 0)
                {
                    AttachablePropertyServices.RemoveProperty(modelItem.GetCurrentValue(), ViewStateName); 
                }
            } 
            return itemRemoved; 
        }
 
        public override Dictionary RetrieveAllViewState(ModelItem modelItem)
        {
            if (modelItem == null)
            { 
                throw FxTrace.Exception.AsError(new ArgumentNullException("modelItem"));
            } 
            return WorkflowViewStateService.GetViewState(modelItem.GetCurrentValue()); 
        }
 

        public override void StoreViewStateWithUndo(ModelItem modelItem, string key, object value)
        {
            object oldValue = RetrieveViewState(modelItem, key); 
            ViewStateChange vsChange = new ViewStateChange(this)
                                        { 
                                            Item = modelItem, 
                                            Key = key,
                                            OldValue = oldValue, 
                                            NewValue = value,
                                        };
            ModelTreeManager modelTreeManager = this.context.Services.GetService();
            if (modelTreeManager != null) 
            {
                modelTreeManager.AddToCurrentEditingScope(vsChange); 
            } 
        }
 

        void RaiseUndoableViewStateChangedEvent(ModelItem modelItem, string key, object newValue, object oldValue)
        {
            if (this.UndoableViewStateChanged != null) 
            {
                this.UndoableViewStateChanged(this, new ViewStateChangedEventArgs(modelItem, key, newValue, oldValue)); 
            } 
        }
 

        internal class ViewStateChange : Change
        {
            protected WorkflowViewStateService viewStateService; 

            public ModelItem Item { get; set; } 
            public string Key { get; set; } 
            public object OldValue { get; set; }
            public object NewValue { get; set; } 

            public ViewStateChange(WorkflowViewStateService viewStateService)
            {
                this.viewStateService = viewStateService; 
            }
 
 
            public override string Description
            { 
                get { return SR.ViewStateUndoUnitDescription; }
            }

            public override bool Apply() 
            {
                viewStateService.StoreViewState(Item, Key, NewValue); 
                this.viewStateService.RaiseUndoableViewStateChangedEvent(Item, Key, NewValue, OldValue); 
                return true;
            } 

            public override Change GetInverse()
            {
                return new ViewStateChange(this.viewStateService) 
                    {
                        Item = this.Item, 
                        Key = this.Key, 
                        OldValue = this.NewValue,
                        NewValue = this.OldValue 
                    };
            }
        }
 

    } 
 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK