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,165 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Globalization;
|
||||
using System.Text;
|
||||
using System.Workflow.ComponentModel;
|
||||
|
||||
namespace System.Workflow.Activities.Rules
|
||||
{
|
||||
#region class RuleSetCollection
|
||||
|
||||
public sealed class RuleSetCollection : KeyedCollection<string, RuleSet>, IWorkflowChangeDiff
|
||||
{
|
||||
#region members and constructors
|
||||
|
||||
private bool _runtimeInitialized;
|
||||
[NonSerialized]
|
||||
private object syncLock = new object();
|
||||
|
||||
public RuleSetCollection()
|
||||
{
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region keyed collection members
|
||||
|
||||
protected override string GetKeyForItem(RuleSet item)
|
||||
{
|
||||
return item.Name;
|
||||
}
|
||||
|
||||
protected override void InsertItem(int index, RuleSet 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.RuleSetExists, 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, RuleSet item)
|
||||
{
|
||||
if (this._runtimeInitialized)
|
||||
throw new InvalidOperationException(SR.GetString(SR.Error_CanNotChangeAtRuntime));
|
||||
|
||||
base.SetItem(index, item);
|
||||
}
|
||||
|
||||
new public void Add(RuleSet 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.InvalidRuleSetName, "item.Name");
|
||||
throw new ArgumentException(message);
|
||||
}
|
||||
|
||||
base.Add(item);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region runtime initializing
|
||||
|
||||
internal void OnRuntimeInitialized()
|
||||
{
|
||||
lock (this.syncLock)
|
||||
{
|
||||
if (this._runtimeInitialized)
|
||||
return;
|
||||
|
||||
foreach (RuleSet ruleSet in this)
|
||||
{
|
||||
ruleSet.OnRuntimeInitialized();
|
||||
}
|
||||
_runtimeInitialized = true;
|
||||
}
|
||||
}
|
||||
|
||||
internal bool RuntimeMode
|
||||
{
|
||||
set { this._runtimeInitialized = value; }
|
||||
get { return this._runtimeInitialized; }
|
||||
}
|
||||
|
||||
internal string GenerateRuleSetName()
|
||||
{
|
||||
string nameBase = Messages.NewRuleSetName;
|
||||
string newName;
|
||||
int i = 1;
|
||||
do
|
||||
{
|
||||
newName = nameBase + i.ToString(CultureInfo.InvariantCulture);
|
||||
i++;
|
||||
} while (this.Contains(newName));
|
||||
|
||||
return newName;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IWorkflowChangeDiff Members
|
||||
|
||||
public IList<WorkflowChangeAction> Diff(object originalDefinition, object changedDefinition)
|
||||
{
|
||||
List<WorkflowChangeAction> listChanges = new List<WorkflowChangeAction>();
|
||||
|
||||
RuleSetCollection originalRuleSets = (RuleSetCollection)originalDefinition;
|
||||
RuleSetCollection changedRuleSets = (RuleSetCollection)changedDefinition;
|
||||
|
||||
if (null != changedRuleSets)
|
||||
{
|
||||
foreach (RuleSet changedRuleSet in changedRuleSets)
|
||||
{
|
||||
if ((originalRuleSets != null) && (originalRuleSets.Contains(changedRuleSet.Name)))
|
||||
{
|
||||
RuleSet originalRuleSet = originalRuleSets[changedRuleSet.Name];
|
||||
if (!originalRuleSet.Equals(changedRuleSet))
|
||||
{
|
||||
listChanges.Add(new UpdatedRuleSetAction(originalRuleSet, changedRuleSet));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
listChanges.Add(new AddedRuleSetAction(changedRuleSet));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (null != originalRuleSets)
|
||||
{
|
||||
foreach (RuleSet originalRuleSet in originalRuleSets)
|
||||
{
|
||||
if ((changedRuleSets == null) || (!changedRuleSets.Contains(originalRuleSet.Name)))
|
||||
{
|
||||
listChanges.Add(new RemovedRuleSetAction(originalRuleSet));
|
||||
}
|
||||
}
|
||||
}
|
||||
return listChanges;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
Reference in New Issue
Block a user