2010-04-06 Jb Evain <jbevain@novell.com>
[mcs.git] / class / System.ServiceModel / System.ServiceModel.Security / ScopedMessagePartSpecification.cs
bloba517fc718e27b47e02b1a52a9b81806d86dc1c2b
1 //
2 // ScopedMessagePartSpecification.cs
3 //
4 // Author:
5 // Atsushi Enomoto <atsushi@ximian.com>
6 //
7 // Copyright (C) 2005-2006 Novell, Inc. http://www.novell.com
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 //
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 //
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 using System;
29 using System.Collections.Generic;
30 using System.Collections.ObjectModel;
31 using System.ServiceModel;
32 using System.Xml;
34 namespace System.ServiceModel.Security
36 public class ScopedMessagePartSpecification
38 public ScopedMessagePartSpecification ()
40 table = new Dictionary<string,MessagePartSpecification> ();
41 parts = new MessagePartSpecification ();
44 public ScopedMessagePartSpecification (
45 ScopedMessagePartSpecification other)
47 XmlQualifiedName [] array = new XmlQualifiedName [other.parts.HeaderTypes.Count];
48 other.parts.HeaderTypes.CopyTo (array, 0);
49 parts = new MessagePartSpecification (
50 other.parts.IsBodyIncluded, array);
51 table = new Dictionary<string,MessagePartSpecification> (other.table);
54 Dictionary<string,MessagePartSpecification> table;
55 MessagePartSpecification parts;
56 bool is_readonly;
58 public ICollection<string> Actions {
59 get { return table.Keys; }
62 public MessagePartSpecification ChannelParts {
63 get { return parts; }
66 public bool IsReadOnly {
67 get { return is_readonly; }
70 public void AddParts (MessagePartSpecification parts)
72 if (parts == null)
73 throw new ArgumentNullException ("parts");
74 if (IsReadOnly)
75 throw new InvalidOperationException ("This ScopedMessagePartSpecification is read-only.");
76 ChannelParts.Union (parts);
79 public void AddParts (MessagePartSpecification parts,
80 string action)
82 if (parts == null)
83 throw new ArgumentNullException ("parts");
84 if (action == null)
85 throw new ArgumentNullException ("action");
86 if (IsReadOnly)
87 throw new InvalidOperationException ("This ScopedMessagePartSpecification is read-only.");
89 MessagePartSpecification existing;
90 if (table.TryGetValue (action, out existing))
91 existing.Union (parts);
92 else
93 table.Add (action, parts);
96 public void MakeReadOnly ()
98 is_readonly = true;
101 public bool TryGetParts (
102 string action, out MessagePartSpecification parts)
104 return TryGetParts (action, false, out parts);
107 public bool TryGetParts (
108 string action, bool excludeChannelScope,
109 out MessagePartSpecification parts)
111 return table.TryGetValue (action, out parts);