File: ProxyWebPartConnectionCollection.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 (154 lines) | stat: -rw-r--r-- 5,574 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
//------------------------------------------------------------------------------
// <copyright file="ProxyWebPartConnectionCollection.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
//------------------------------------------------------------------------------

namespace System.Web.UI.WebControls.WebParts {

    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Drawing.Design;
    using System.Globalization;
    using System.Web.Util;

    [
    Editor("System.ComponentModel.Design.CollectionEditor, " + AssemblyRef.SystemDesign, typeof(UITypeEditor))
    ]
    public sealed class ProxyWebPartConnectionCollection : CollectionBase {

        private WebPartManager _webPartManager;

        public bool IsReadOnly {
            get {
                if (_webPartManager != null) {
                    return _webPartManager.StaticConnections.IsReadOnly;
                }
                else {
                    // This collection is never read-only before _webPartManager is set
                    return false;
                }
            }
        }

        public WebPartConnection this[int index] {
            get {
                return (WebPartConnection)List[index];
            }
            set {
                List[index] = value;
            }
        }

        // Returns the WebPartConnection with the specified id, performing a case-insensitive comparison.
        // Returns null if there are no matches.
        public WebPartConnection this[string id] {
            // PERF: Use a hashtable for lookup, instead of a linear search
            get {
                foreach (WebPartConnection connection in List) {
                    if (connection != null && String.Equals(connection.ID, id, StringComparison.OrdinalIgnoreCase)) {
                        return connection;
                    }
                }

                return null;
            }
        }

        public int Add(WebPartConnection value) {
            return List.Add(value);
        }

        private void CheckReadOnly() {
            if (IsReadOnly) {
                throw new InvalidOperationException(SR.GetString(SR.ProxyWebPartConnectionCollection_ReadOnly));
            }
        }

        public bool Contains(WebPartConnection value) {
            return List.Contains(value);
        }

        public void CopyTo(WebPartConnection[] array, int index) {
            List.CopyTo(array, index);
        }

        public int IndexOf(WebPartConnection value) {
            return List.IndexOf(value);
        }

        public void Insert(int index, WebPartConnection value) {
            List.Insert(index, value);
        }

        protected override void OnClear() {
            CheckReadOnly();
            if (_webPartManager != null) {
                // Remove all of the connections in this collection from the main WebPartManager
                foreach (WebPartConnection connection in this) {
                    _webPartManager.StaticConnections.Remove(connection);
                }
            }
            base.OnClear();
        }

        protected override void OnInsert(int index, object value) {
            CheckReadOnly();
            if (_webPartManager != null) {
                _webPartManager.StaticConnections.Insert(index, (WebPartConnection)value);
            }
            base.OnInsert(index, value);
        }

        protected override void OnRemove(int index, object value) {
            CheckReadOnly();
            if (_webPartManager != null) {
                _webPartManager.StaticConnections.Remove((WebPartConnection)value);
            }
            base.OnRemove(index, value);
        }

        protected override void OnSet(int index, object oldValue, object newValue) {
            CheckReadOnly();
            if (_webPartManager != null) {
                int webPartManagerIndex = _webPartManager.StaticConnections.IndexOf((WebPartConnection)oldValue);
                // It is a bug if the main WebPartManager does not contain the oldValue
                Debug.Assert(webPartManagerIndex >= 0);
                _webPartManager.StaticConnections[webPartManagerIndex] = (WebPartConnection)newValue;
            }
            base.OnSet(index, oldValue, newValue);
        }

        // Validates that an object is a WebPartConnection.
        protected override void OnValidate(object value) {
            base.OnValidate(value);
            if (value == null) {
                throw new ArgumentNullException("value", SR.GetString(SR.Collection_CantAddNull));
            }
            if (!(value is WebPartConnection)) {
                throw new ArgumentException(SR.GetString(SR.Collection_InvalidType, "WebPartConnection"));
            }
        }

        public void Remove(WebPartConnection value) {
            List.Remove(value);
        }

        internal void SetWebPartManager(WebPartManager webPartManager) {
            // This method should only be called once in the lifetime of the ProxyWebPartConnectionCollection
            Debug.Assert(_webPartManager == null);

            Debug.Assert(webPartManager != null);

            _webPartManager = webPartManager;

            // When the _webPartManager is first set, add all the connections in this collection
            // to the main WebPartManager
            foreach (WebPartConnection connection in this) {
                _webPartManager.StaticConnections.Add(connection);
            }
        }
    }
}