2006-05-15 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / FeatureSupport.cs
1 // Permission is hereby granted, free of charge, to any person obtaining
2 // a copy of this software and associated documentation files (the
3 // "Software"), to deal in the Software without restriction, including
4 // without limitation the rights to use, copy, modify, merge, publish,
5 // distribute, sublicense, and/or sell copies of the Software, and to
6 // permit persons to whom the Software is furnished to do so, subject to
7 // the following conditions:
8 // 
9 // The above copyright notice and this permission notice shall be
10 // included in all copies or substantial portions of the Software.
11 // 
12 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
13 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
14 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
15 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
16 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
17 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
18 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
19 //
20 // Copyright (c) 2005 Novell, Inc. (http://www.novell.com)
21 //
22 // Authors:
23 //      Peter Bartok    (pbartok@novell.com)
24 //
25 //
26
27 // COMPLETE
28
29 using System.Reflection;
30
31 namespace System.Windows.Forms {
32         public abstract class FeatureSupport : IFeatureSupport {
33                 #region Public Constructors
34                 protected FeatureSupport() {
35                 }
36                 #endregion      // Public Constructors
37
38                 #region Private and Internal Methods
39                 private static IFeatureSupport FeatureObject(string class_name) {
40                         Type    class_type;
41
42                         class_type = Type.GetType(class_name);
43                         if ((class_type != null) && (typeof(IFeatureSupport).IsAssignableFrom(class_type))) {
44                                 ConstructorInfo ctor;
45
46                                 ctor = class_type.GetConstructor(Type.EmptyTypes);
47                                 if (ctor != null) {
48                                         return ((IFeatureSupport)ctor.Invoke(new Object[0]));
49                                 }
50                         }
51
52                         return null;
53                 }
54                 #endregion      // Private and Internal Methods
55
56                 #region Public Static Methods
57                 public static Version GetVersionPresent(string featureClassName, string featureConstName) {
58                         IFeatureSupport obj;
59
60                         obj = FeatureObject(featureClassName);
61                         if (obj != null) {
62                                 return obj.GetVersionPresent(featureConstName);
63                         }
64                         return null;
65                 }
66
67                 public static bool IsPresent(string featureClassName, string featureConstName) {
68                         IFeatureSupport obj;
69
70                         obj = FeatureObject(featureClassName);
71                         if (obj != null) {
72                                 return obj.IsPresent(featureConstName);
73                         }
74
75                         return false;
76                 }
77
78                 public static bool IsPresent(string featureClassName, string featureConstName, Version minimumVersion) {
79                         IFeatureSupport obj;
80
81                         obj = FeatureObject(featureClassName);
82                         if (obj != null) {
83                                 return obj.IsPresent(featureConstName, minimumVersion);
84                         }
85
86                         return false;
87                 }
88                 #endregion      // Public Static Methods
89
90                 #region Public Instance Methods
91                 public abstract Version GetVersionPresent(object feature);
92
93                 public virtual bool IsPresent(object feature) {
94                         if (GetVersionPresent(feature) != null) {
95                                 return true;
96                         }
97
98                         return false;
99                 }
100
101                 public virtual bool IsPresent(object feature, Version minimumVersion) {
102                         Version version;
103                         bool    retval;
104
105                         retval = false;
106                         version = GetVersionPresent(feature);
107
108                         if ((version != null) && (version >= minimumVersion)) {
109                                 retval = true;
110                         }
111
112                         return retval;
113                 }
114                 #endregion      // Public Instance Methods
115         }
116 }