You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
parent
a569aebcfd
commit
e79aa3c0ed
@@ -0,0 +1,163 @@
|
||||
// ---------------------------------------------------------------------------
|
||||
// Copyright (C) 2005 Microsoft Corporation - All Rights Reserved
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.CodeDom;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.ComponentModel.Design.Serialization;
|
||||
using System.Collections.Generic;
|
||||
using System.Workflow.ComponentModel;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Workflow.ComponentModel.Serialization;
|
||||
|
||||
namespace System.Workflow.Activities.Rules
|
||||
{
|
||||
#region RuleConditionCollection Class
|
||||
[Serializable]
|
||||
public sealed class RuleConditionCollection : KeyedCollection<string, RuleCondition>, IWorkflowChangeDiff
|
||||
{
|
||||
private bool _runtimeInitialized;
|
||||
[NonSerialized]
|
||||
private object _runtimeInitializationLock = new object();
|
||||
|
||||
public RuleConditionCollection()
|
||||
{
|
||||
}
|
||||
|
||||
protected override string GetKeyForItem(RuleCondition item)
|
||||
{
|
||||
return item.Name;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Mark the DeclarativeConditionDefinitionCollection as Runtime Initialized to prevent direct runtime updates.
|
||||
/// </summary>
|
||||
internal void OnRuntimeInitialized()
|
||||
{
|
||||
lock (_runtimeInitializationLock)
|
||||
{
|
||||
if (_runtimeInitialized)
|
||||
return;
|
||||
|
||||
foreach (RuleCondition condition in this)
|
||||
{
|
||||
condition.OnRuntimeInitialized();
|
||||
}
|
||||
_runtimeInitialized = true;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void InsertItem(int index, RuleCondition item)
|
||||
{
|
||||
if (this._runtimeInitialized)
|
||||
throw new InvalidOperationException(SR.GetString(SR.Error_CanNotChangeAtRuntime));
|
||||
|
||||
if (item.Name != null && item.Name.Length >= 0 && this.Contains(item.Name))
|
||||
{
|
||||
string message = string.Format(CultureInfo.CurrentCulture, Messages.ConditionExists, item.Name);
|
||||
throw new ArgumentException(message);
|
||||
}
|
||||
|
||||
base.InsertItem(index, item);
|
||||
}
|
||||
|
||||
protected override void RemoveItem(int index)
|
||||
{
|
||||
if (this._runtimeInitialized)
|
||||
throw new InvalidOperationException(SR.GetString(SR.Error_CanNotChangeAtRuntime));
|
||||
|
||||
base.RemoveItem(index);
|
||||
}
|
||||
|
||||
protected override void SetItem(int index, RuleCondition item)
|
||||
{
|
||||
if (this._runtimeInitialized)
|
||||
throw new InvalidOperationException(SR.GetString(SR.Error_CanNotChangeAtRuntime));
|
||||
|
||||
base.SetItem(index, item);
|
||||
}
|
||||
|
||||
internal bool RuntimeMode
|
||||
{
|
||||
set { this._runtimeInitialized = value; }
|
||||
get { return this._runtimeInitialized; }
|
||||
}
|
||||
|
||||
new public void Add(RuleCondition item)
|
||||
{
|
||||
if (this._runtimeInitialized)
|
||||
throw new InvalidOperationException(SR.GetString(SR.Error_CanNotChangeAtRuntime));
|
||||
|
||||
if (null == item)
|
||||
{
|
||||
throw new ArgumentNullException("item");
|
||||
}
|
||||
|
||||
if (null == item.Name)
|
||||
{
|
||||
string message = string.Format(CultureInfo.CurrentCulture, Messages.InvalidConditionName, "item.Name");
|
||||
throw new ArgumentException(message);
|
||||
}
|
||||
|
||||
base.Add(item);
|
||||
}
|
||||
|
||||
public IList<WorkflowChangeAction> Diff(object originalDefinition, object changedDefinition)
|
||||
{
|
||||
List<WorkflowChangeAction> listChanges = new List<WorkflowChangeAction>();
|
||||
|
||||
RuleConditionCollection originalConditions = (RuleConditionCollection)originalDefinition;
|
||||
RuleConditionCollection changedConditions = (RuleConditionCollection)changedDefinition;
|
||||
|
||||
if (null != changedConditions)
|
||||
{
|
||||
foreach (RuleCondition cCondition in changedConditions)
|
||||
{
|
||||
if (null != originalConditions)
|
||||
{
|
||||
if (originalConditions.Contains(cCondition.Name))
|
||||
{
|
||||
RuleCondition oCondition = originalConditions[cCondition.Name];
|
||||
if (!oCondition.Equals(cCondition))
|
||||
{
|
||||
listChanges.Add(new UpdatedConditionAction(oCondition, cCondition));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
listChanges.Add(new AddedConditionAction(cCondition));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
listChanges.Add(new AddedConditionAction(cCondition));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (null != originalConditions)
|
||||
{
|
||||
foreach (RuleCondition oCondition in originalConditions)
|
||||
{
|
||||
if (null != changedConditions)
|
||||
{
|
||||
if (!changedConditions.Contains(oCondition.Name))
|
||||
{
|
||||
listChanges.Add(new RemovedConditionAction(oCondition));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
listChanges.Add(new RemovedConditionAction(oCondition));
|
||||
}
|
||||
}
|
||||
}
|
||||
return listChanges;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user