File: System\Activities\Tracking\ActivityInfo.cs
Project: ndp\cdf\src\NetFx40\System.Activities\System.Activities.csproj (System.Activities)
//-----------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//-----------------------------------------------------------------------------
 
namespace System.Activities.Tracking
{
    using System;
    using System.Runtime.Serialization;
    using System.Runtime;
    using System.Globalization;
    
    [Fx.Tag.XamlVisible(false)]
    [DataContract]
    public sealed class ActivityInfo
    {
        string name;
        string id;
        string instanceId;
        long instanceIdInternal;
        string typeName;
 
        public ActivityInfo(string name, string id, string instanceId, string typeName)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw FxTrace.Exception.ArgumentNullOrEmpty("name");
            }
            if (string.IsNullOrEmpty(id))
            {
                throw FxTrace.Exception.ArgumentNullOrEmpty("id");
            }
            if (string.IsNullOrEmpty(instanceId))
            {
                throw FxTrace.Exception.ArgumentNullOrEmpty("instanceId");
            }
            if (string.IsNullOrEmpty(typeName))
            {
                throw FxTrace.Exception.ArgumentNullOrEmpty("typeName");
            }
            this.Name = name;
            this.Id = id;
            this.InstanceId = instanceId;
            this.TypeName = typeName;
        }
 
        internal ActivityInfo(ActivityInstance instance)
            : this(instance.Activity, instance.InternalId)
        {
            this.Instance = instance;
        }
 
        internal ActivityInfo(Activity activity, long instanceId)
        {
            this.Activity = activity;
            this.instanceIdInternal = instanceId;
        }
 
        internal ActivityInstance Instance
        {
            get;
            private set;
        }
 
        [DataMember]
        public string Name
        {
            get
            {
                if (string.IsNullOrEmpty(this.name))
                {
                    Fx.Assert(this.Activity != null, "Activity not set");
                    this.name = this.Activity.DisplayName;
                }
                return this.name;
            }
            // Internal visibility for partial trust serialization purposes only.
            internal set
            {
                Fx.Assert(!string.IsNullOrEmpty(value), "Name cannot be null or empty");
                this.name = value;
            }
        }
 
        [DataMember]
        public string Id
        {
            get
            {
                if (String.IsNullOrEmpty(this.id))
                {
                    Fx.Assert(this.Activity != null, "Activity not set");
                    this.id = this.Activity.Id;
                }
                return this.id;
            }
            // Internal visibility for partial trust serialization purposes only.
            internal set
            {
                Fx.Assert(!string.IsNullOrEmpty(value), "Id cannot be null or empty");
                this.id = value;
            }
        }
 
        [DataMember]
        public string InstanceId
        {
            get
            {
                if (string.IsNullOrEmpty(this.instanceId))
                {
                    this.instanceId = this.instanceIdInternal.ToString(CultureInfo.InvariantCulture);
                }
                return this.instanceId;
            }
            // Internal visibility for partial trust serialization purposes only.
            internal set
            {
                Fx.Assert(!string.IsNullOrEmpty(value), "InstanceId cannot be null or empty");
                this.instanceId = value;
            }
        }
 
        [DataMember]
        public string TypeName
        {
            get
            {
                if (string.IsNullOrEmpty(this.typeName))
                {
                    Fx.Assert(this.Activity != null, "Activity not set");
                    this.typeName = this.Activity.GetType().FullName;
                }
                return this.typeName;
            }
            // Internal visibility for partial trust serialization purposes only.
            internal set
            {
                Fx.Assert(!string.IsNullOrEmpty(value), "TypeName cannot be null or empty");
                this.typeName = value;
            }
        }
 
        public override string ToString()
        {
            return string.Format(CultureInfo.CurrentCulture,
                "Name={0}, ActivityId = {1}, ActivityInstanceId = {2}, TypeName={3}",                
                this.Name,
                this.Id,
                this.InstanceId,
                this.TypeName);
        }
 
        internal Activity Activity
        {
            get; 
            private set;
        }
    }
}