117 lines
4.0 KiB
C#
117 lines
4.0 KiB
C#
|
//-----------------------------------------------------------------------------
|
|||
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|||
|
//-----------------------------------------------------------------------------
|
|||
|
|
|||
|
namespace System.Activities.DynamicUpdate
|
|||
|
{
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Collections.ObjectModel;
|
|||
|
using System.Runtime.Serialization;
|
|||
|
using System.Text;
|
|||
|
using System.Security;
|
|||
|
using System.Runtime;
|
|||
|
|
|||
|
[Serializable]
|
|||
|
public class InstanceUpdateException : Exception
|
|||
|
{
|
|||
|
private ReadOnlyCollection<ActivityBlockingUpdate> blockingActivities;
|
|||
|
|
|||
|
public InstanceUpdateException()
|
|||
|
: base()
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
public InstanceUpdateException(string message)
|
|||
|
: base(message)
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
public InstanceUpdateException(string message, Exception innerException)
|
|||
|
: base(message, innerException)
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
public InstanceUpdateException(IList<ActivityBlockingUpdate> blockingActivities)
|
|||
|
: this(BuildMessage(blockingActivities), blockingActivities)
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
public InstanceUpdateException(string message, IList<ActivityBlockingUpdate> blockingActivities)
|
|||
|
: base(message)
|
|||
|
{
|
|||
|
if (blockingActivities != null)
|
|||
|
{
|
|||
|
this.blockingActivities = new ReadOnlyCollection<ActivityBlockingUpdate>(blockingActivities);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public InstanceUpdateException(string message, IList<ActivityBlockingUpdate> blockingActivities, Exception innerException)
|
|||
|
: base(message, innerException)
|
|||
|
{
|
|||
|
if (blockingActivities != null)
|
|||
|
{
|
|||
|
this.blockingActivities = new ReadOnlyCollection<ActivityBlockingUpdate>(blockingActivities);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
protected InstanceUpdateException(SerializationInfo info, StreamingContext context)
|
|||
|
: base(info, context)
|
|||
|
{
|
|||
|
this.blockingActivities = (ReadOnlyCollection<ActivityBlockingUpdate>)info.GetValue(
|
|||
|
"blockingActivities", typeof(ReadOnlyCollection<ActivityBlockingUpdate>));
|
|||
|
}
|
|||
|
|
|||
|
public IList<ActivityBlockingUpdate> BlockingActivities
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (this.blockingActivities == null)
|
|||
|
{
|
|||
|
this.blockingActivities = new ReadOnlyCollection<ActivityBlockingUpdate>(new ActivityBlockingUpdate[0]);
|
|||
|
}
|
|||
|
|
|||
|
return this.blockingActivities;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
[Fx.Tag.SecurityNote(Critical = "Critical because we are overriding a critical method in the base class.")]
|
|||
|
[SecurityCritical]
|
|||
|
public override void GetObjectData(SerializationInfo info, StreamingContext context)
|
|||
|
{
|
|||
|
base.GetObjectData(info, context);
|
|||
|
info.AddValue("blockingActivities", this.blockingActivities);
|
|||
|
}
|
|||
|
|
|||
|
private static string BuildMessage(IList<ActivityBlockingUpdate> blockingActivities)
|
|||
|
{
|
|||
|
if (blockingActivities != null && blockingActivities.Count > 0)
|
|||
|
{
|
|||
|
StringBuilder errorMsgs = new StringBuilder();
|
|||
|
for (int i = 0; i < blockingActivities.Count - 1; i++)
|
|||
|
{
|
|||
|
errorMsgs.AppendLine(GetMessage(blockingActivities[i]));
|
|||
|
}
|
|||
|
|
|||
|
errorMsgs.Append(GetMessage(blockingActivities[blockingActivities.Count - 1]));
|
|||
|
return errorMsgs.ToString();
|
|||
|
}
|
|||
|
|
|||
|
return null;
|
|||
|
}
|
|||
|
|
|||
|
private static string GetMessage(ActivityBlockingUpdate blockingActivity)
|
|||
|
{
|
|||
|
object activity = (object)blockingActivity.Activity ?? blockingActivity.UpdatedActivityId;
|
|||
|
if (activity != null)
|
|||
|
{
|
|||
|
return SR.ActivityBlockingUpdate(activity, blockingActivity.Reason);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
return blockingActivity.Reason;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|