File: RuleSetCollection.cs

package info (click to toggle)
mono 6.8.0.105%2Bdfsg-3.3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,284,512 kB
  • sloc: cs: 11,172,132; xml: 2,850,069; ansic: 671,653; cpp: 122,091; perl: 59,366; javascript: 30,841; asm: 22,168; makefile: 20,093; sh: 15,020; python: 4,827; pascal: 925; sql: 859; sed: 16; php: 1
file content (165 lines) | stat: -rw-r--r-- 5,103 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
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
}