move to from olive to mcs
[mono.git] / mcs / class / System.ServiceModel / System.ServiceModel.Description / ServiceDescription.cs
1 //
2 // ServiceDescription.cs
3 //
4 // Author:
5 //      Atsushi Enomoto <atsushi@ximian.com>
6 //
7 // Copyright (C) 2005 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.
27 //
28 using System;
29 using System.Collections.Generic;
30 using System.Collections.ObjectModel;
31 using System.Reflection;
32 using System.ServiceModel;
33 using System.ServiceModel.Channels;
34
35 namespace System.ServiceModel.Description
36 {
37         public class ServiceDescription
38         {
39                 ServiceEndpointCollection endpoints = new ServiceEndpointCollection ();
40                 KeyedByTypeCollection<IServiceBehavior> behaviors = new KeyedByTypeCollection<IServiceBehavior> ();
41                 Type service_type;
42                 object well_known;
43                 string name, ns, config_name;
44
45                 public ServiceDescription ()
46                 {
47                 }
48
49                 public ServiceDescription (IEnumerable<ServiceEndpoint> endpoints)
50                 {
51                         foreach (ServiceEndpoint se in endpoints)
52                                 this.endpoints.Add (se);
53                 }
54
55                 public string ConfigurationName {
56                         get { return config_name; }
57                         set { config_name = value; }
58                 }
59
60                 public KeyedByTypeCollection<IServiceBehavior> Behaviors {
61                         get { return behaviors; }
62                 }
63
64                 public ServiceEndpointCollection Endpoints {
65                         get { return endpoints; }
66                 }
67
68                 public string Name {
69                         get { return name; }
70                         set { name = value; }
71                 }
72
73                 public string Namespace {
74                         get { return ns; }
75                         set { ns = value; }
76                 }
77
78                 public Type ServiceType {
79                         get { return service_type; }
80                         set { service_type = value; }
81                 }
82
83                 public static ServiceDescription GetService (Type type)
84                 {
85                         // null Type is not rejected
86                         ServiceDescription sd = new ServiceDescription ();
87                         sd.ServiceType = type;
88                         return sd;
89                 }
90
91                 public static ServiceDescription GetService (object wellKnown)
92                 {
93                         // null instance is not rejected
94                         ServiceDescription sd = new ServiceDescription ();
95                         sd.ServiceType = wellKnown != null ? wellKnown.GetType () : null;
96                         return sd;
97                 }
98
99 /*
100                 internal ServiceEndpoint AddServiceEndpoint (Type contractType,
101                         Binding binding)
102                 {
103                         return AddServiceEndpoint (contractType, binding, null);
104                 }
105
106                 internal ServiceEndpoint AddServiceEndpoint (
107                         Type contractType, Binding binding,
108                         EndpointAddress address)
109                 {
110                         foreach (ServiceEndpoint i in Endpoints)
111                                 if (i.Address.Equals (address) &&
112                                     i.Binding.Equals (binding) &&
113                                     i.Contract.ContractType == contractType)
114                                         return i;
115
116                         ContractDescription cd;
117                         if (!contracts.Contains (contractType)) {
118                                 cd = ContractDescription.GetContract (contractType);
119                                 contracts.Add (contractType,
120                                         cd);
121                         }
122                         else
123                                 cd = contracts [contractType];
124
125                         ServiceEndpoint se = new ServiceEndpoint (
126                                 cd, binding, address);
127
128                         Endpoints.Add (se);
129
130                         return se;
131                 }
132 */
133         }
134 }