File: AuthoringOM\Serializer\ActivityCodeDomReferenceService.cs
Project: ndp\cdf\src\WF\Common\System.Workflow.ComponentModel.csproj (System.Workflow.ComponentModel)
namespace System.Workflow.ComponentModel.Serialization
{
    using System;
    using System.CodeDom;
    using System.ComponentModel;
    using System.ComponentModel.Design;
    using System.ComponentModel.Design.Serialization;
    using System.Collections;
    using System.Resources;
    using System.Workflow.ComponentModel.Design;
    using System.Collections.Generic;
    using Microsoft.CSharp;
    using System.Workflow.ComponentModel;
    using System.Workflow.ComponentModel.Compiler;
    using System.CodeDom.Compiler;
    using System.IO;
    using System.Reflection;
    using System.Diagnostics;
 
    #region Class ActivityCodeDomReferenceService
    /// <summary>
    /// This class implements the IReferenceService interface and overrides the GetName
    /// method of the wrapped IReferenceService.
    /// </summary>
    /// <remarks>
    /// The CodeDomSerializer in System.Design uses the IReferenceService to generate an
    /// id for all code variables it create during serialization.  By default, the GetName
    /// method ends up returning the QualifiedName property of an Activity, and since that
    /// property always contains a '.', it is an invalid variable id.  This class overrides
    /// the GetName method to return a valid name in the case of an Activity class.
    /// </remarks>
    internal sealed class ActivityCodeDomReferenceService : IReferenceService
    {
        private IReferenceService refService;
 
        public ActivityCodeDomReferenceService(IReferenceService referenceService)
        {
            this.refService = referenceService;
        }
 
        public object[] GetReferences(System.Type baseType)
        {
            if (refService != null)
                return refService.GetReferences(baseType);
 
            return null;
        }
 
        public object[] GetReferences()
        {
            if (refService != null)
                return refService.GetReferences();
 
            return null;
        }
 
        public System.ComponentModel.IComponent GetComponent(object reference)
        {
            if (refService != null)
                return refService.GetComponent(reference);
 
            return null;
        }
 
        public object GetReference(string name)
        {
            if (refService != null)
                return refService.GetReference(name);
 
            return null;
        }
 
        public string GetName(object reference)
        {
            // If the object is an activity, generate a name of <Scope Name>_<Activity Name>, since
            // the default result of GetName is the activity's QualifiedName, which includes a '.'
            Activity a = reference as Activity;
            if (a != null)
                return a.QualifiedName.Replace('.', '_');
 
            if (refService != null)
                return refService.GetName(reference);
 
            return null;
        }
    }
    #endregion
 
}