e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
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;
|
|
}
|
|
}
|
|
}
|
|
}
|