diff options
author | Justin Clarke Casey | 2008-11-27 19:28:04 +0000 |
---|---|---|
committer | Justin Clarke Casey | 2008-11-27 19:28:04 +0000 |
commit | 7c6c776ff783b30dfc26a065e63c267e46edc53b (patch) | |
tree | 3bd8b995d16d038e01de2d2167faee38488b0e1c /OpenSim/Framework/PluginLoader.cs | |
parent | * minor: remove the ability to change the client in ScenePresence to reduce t... (diff) | |
download | opensim-SC-7c6c776ff783b30dfc26a065e63c267e46edc53b.zip opensim-SC-7c6c776ff783b30dfc26a065e63c267e46edc53b.tar.gz opensim-SC-7c6c776ff783b30dfc26a065e63c267e46edc53b.tar.bz2 opensim-SC-7c6c776ff783b30dfc26a065e63c267e46edc53b.tar.xz |
* test: Add the ability to add a plugin directory to the user and inventory services in order to extend unit tests for user and inventory information
* I can't spend any longer in trying to get Mono.Addins to work with the unit tests, so this is not a proper plugin at this time
Diffstat (limited to 'OpenSim/Framework/PluginLoader.cs')
-rw-r--r-- | OpenSim/Framework/PluginLoader.cs | 103 |
1 files changed, 52 insertions, 51 deletions
diff --git a/OpenSim/Framework/PluginLoader.cs b/OpenSim/Framework/PluginLoader.cs index 440e0d5..baf9c57 100644 --- a/OpenSim/Framework/PluginLoader.cs +++ b/OpenSim/Framework/PluginLoader.cs | |||
@@ -51,7 +51,7 @@ namespace OpenSim.Framework | |||
51 | public interface IPluginConstraint | 51 | public interface IPluginConstraint |
52 | { | 52 | { |
53 | string Message { get; } | 53 | string Message { get; } |
54 | bool Apply (string extpoint); | 54 | bool Apply(string extpoint); |
55 | } | 55 | } |
56 | 56 | ||
57 | /// <summary> | 57 | /// <summary> |
@@ -60,7 +60,7 @@ namespace OpenSim.Framework | |||
60 | /// </summary> | 60 | /// </summary> |
61 | public interface IPluginFilter | 61 | public interface IPluginFilter |
62 | { | 62 | { |
63 | bool Apply (PluginExtensionNode plugin); | 63 | bool Apply(PluginExtensionNode plugin); |
64 | } | 64 | } |
65 | 65 | ||
66 | /// <summary> | 66 | /// <summary> |
@@ -99,89 +99,90 @@ namespace OpenSim.Framework | |||
99 | get { return (loaded.Count == 1)? loaded [0] : default (T); } | 99 | get { return (loaded.Count == 1)? loaded [0] : default (T); } |
100 | } | 100 | } |
101 | 101 | ||
102 | public PluginLoader () | 102 | public PluginLoader() |
103 | { | 103 | { |
104 | Initialiser = new PluginInitialiserBase(); | 104 | Initialiser = new PluginInitialiserBase(); |
105 | initialise_plugin_dir_ ("."); | 105 | initialise_plugin_dir_("."); |
106 | } | 106 | } |
107 | 107 | ||
108 | public PluginLoader (PluginInitialiserBase init) | 108 | public PluginLoader(PluginInitialiserBase init) |
109 | { | 109 | { |
110 | Initialiser = init; | 110 | Initialiser = init; |
111 | initialise_plugin_dir_ ("."); | 111 | initialise_plugin_dir_("."); |
112 | } | 112 | } |
113 | 113 | ||
114 | public PluginLoader (PluginInitialiserBase init, string dir) | 114 | public PluginLoader(PluginInitialiserBase init, string dir) |
115 | { | 115 | { |
116 | Initialiser = init; | 116 | Initialiser = init; |
117 | initialise_plugin_dir_ (dir); | 117 | initialise_plugin_dir_(dir); |
118 | } | 118 | } |
119 | 119 | ||
120 | public void Add (string extpoint) | 120 | public void Add(string extpoint) |
121 | { | 121 | { |
122 | if (extpoints.Contains (extpoint)) | 122 | if (extpoints.Contains(extpoint)) |
123 | return; | 123 | return; |
124 | 124 | ||
125 | extpoints.Add (extpoint); | 125 | extpoints.Add(extpoint); |
126 | } | 126 | } |
127 | 127 | ||
128 | public void Add (string extpoint, IPluginConstraint cons) | 128 | public void Add(string extpoint, IPluginConstraint cons) |
129 | { | 129 | { |
130 | Add (extpoint); | 130 | Add(extpoint); |
131 | AddConstraint (extpoint, cons); | 131 | AddConstraint(extpoint, cons); |
132 | } | 132 | } |
133 | 133 | ||
134 | public void Add (string extpoint, IPluginFilter filter) | 134 | public void Add(string extpoint, IPluginFilter filter) |
135 | { | 135 | { |
136 | Add (extpoint); | 136 | Add(extpoint); |
137 | AddFilter (extpoint, filter); | 137 | AddFilter(extpoint, filter); |
138 | } | 138 | } |
139 | 139 | ||
140 | public void AddConstraint (string extpoint, IPluginConstraint cons) | 140 | public void AddConstraint(string extpoint, IPluginConstraint cons) |
141 | { | 141 | { |
142 | constraints.Add (extpoint, cons); | 142 | constraints.Add(extpoint, cons); |
143 | } | 143 | } |
144 | 144 | ||
145 | public void AddFilter (string extpoint, IPluginFilter filter) | 145 | public void AddFilter(string extpoint, IPluginFilter filter) |
146 | { | 146 | { |
147 | filters.Add (extpoint, filter); | 147 | filters.Add(extpoint, filter); |
148 | } | 148 | } |
149 | 149 | ||
150 | public void Load (string extpoint) | 150 | public void Load(string extpoint) |
151 | { | 151 | { |
152 | Add (extpoint); | 152 | Add(extpoint); |
153 | Load(); | 153 | Load(); |
154 | } | 154 | } |
155 | 155 | ||
156 | public void Load () | 156 | public void Load() |
157 | { | 157 | { |
158 | foreach (string ext in extpoints) | 158 | foreach (string ext in extpoints) |
159 | { | 159 | { |
160 | log.Info("[PLUGINS]: Loading extension point " + ext); | 160 | log.Info("[PLUGINS]: Loading extension point " + ext); |
161 | 161 | ||
162 | if (constraints.ContainsKey (ext)) | 162 | if (constraints.ContainsKey(ext)) |
163 | { | 163 | { |
164 | IPluginConstraint cons = constraints [ext]; | 164 | IPluginConstraint cons = constraints[ext]; |
165 | if (cons.Apply (ext)) | 165 | if (cons.Apply(ext)) |
166 | log.Error ("[PLUGINS]: " + ext + " failed constraint: " + cons.Message); | 166 | log.Error("[PLUGINS]: " + ext + " failed constraint: " + cons.Message); |
167 | } | 167 | } |
168 | 168 | ||
169 | IPluginFilter filter = null; | 169 | IPluginFilter filter = null; |
170 | 170 | ||
171 | if (filters.ContainsKey (ext)) | 171 | if (filters.ContainsKey(ext)) |
172 | filter = filters [ext]; | 172 | filter = filters[ext]; |
173 | 173 | ||
174 | List<T> loadedPlugins = new List<T>(); | 174 | List<T> loadedPlugins = new List<T>(); |
175 | foreach (PluginExtensionNode node in AddinManager.GetExtensionNodes (ext)) | 175 | foreach (PluginExtensionNode node in AddinManager.GetExtensionNodes(ext)) |
176 | { | 176 | { |
177 | log.Info("[PLUGINS]: Trying plugin " + node.Path); | 177 | log.Info("[PLUGINS]: Trying plugin " + node.Path); |
178 | 178 | ||
179 | if ((filter != null) && (filter.Apply (node) == false)) | 179 | if ((filter != null) && (filter.Apply(node) == false)) |
180 | continue; | 180 | continue; |
181 | 181 | ||
182 | T plugin = (T) node.CreateInstance(); | 182 | T plugin = (T)node.CreateInstance(); |
183 | loadedPlugins.Add(plugin); | 183 | loadedPlugins.Add(plugin); |
184 | } | 184 | } |
185 | |||
185 | // We do Initialise() in a second loop after CreateInstance | 186 | // We do Initialise() in a second loop after CreateInstance |
186 | // So that modules who need init before others can do it | 187 | // So that modules who need init before others can do it |
187 | // Example: Script Engine Component System needs to load its components before RegionLoader starts | 188 | // Example: Script Engine Component System needs to load its components before RegionLoader starts |
@@ -193,28 +194,28 @@ namespace OpenSim.Framework | |||
193 | } | 194 | } |
194 | } | 195 | } |
195 | 196 | ||
196 | public void Dispose () | 197 | public void Dispose() |
197 | { | 198 | { |
198 | foreach (T plugin in Plugins) | 199 | foreach (T plugin in Plugins) |
199 | plugin.Dispose (); | 200 | plugin.Dispose(); |
200 | } | 201 | } |
201 | 202 | ||
202 | private void initialise_plugin_dir_ (string dir) | 203 | private void initialise_plugin_dir_(string dir) |
203 | { | 204 | { |
204 | if (AddinManager.IsInitialized == true) | 205 | if (AddinManager.IsInitialized == true) |
205 | return; | 206 | return; |
206 | 207 | ||
207 | log.Info("[PLUGINS]: Initializing"); | 208 | log.Info("[PLUGINS]: Initializing addin manager"); |
208 | 209 | ||
209 | AddinManager.AddinLoadError += on_addinloaderror_; | 210 | AddinManager.AddinLoadError += on_addinloaderror_; |
210 | AddinManager.AddinLoaded += on_addinloaded_; | 211 | AddinManager.AddinLoaded += on_addinloaded_; |
211 | 212 | ||
212 | clear_registry_(); | 213 | clear_registry_(); |
213 | 214 | ||
214 | suppress_console_output_ (true); | 215 | suppress_console_output_(true); |
215 | AddinManager.Initialize (dir); | 216 | AddinManager.Initialize(dir); |
216 | AddinManager.Registry.Update (null); | 217 | AddinManager.Registry.Update(null); |
217 | suppress_console_output_ (false); | 218 | suppress_console_output_(false); |
218 | } | 219 | } |
219 | 220 | ||
220 | private void on_addinloaded_(object sender, AddinEventArgs args) | 221 | private void on_addinloaded_(object sender, AddinEventArgs args) |
@@ -233,7 +234,7 @@ namespace OpenSim.Framework | |||
233 | + args.Exception.StackTrace); | 234 | + args.Exception.StackTrace); |
234 | } | 235 | } |
235 | 236 | ||
236 | private void clear_registry_ () | 237 | private void clear_registry_() |
237 | { | 238 | { |
238 | // The Mono addin manager (in Mono.Addins.dll version 0.2.0.0) | 239 | // The Mono addin manager (in Mono.Addins.dll version 0.2.0.0) |
239 | // occasionally seems to corrupt its addin cache | 240 | // occasionally seems to corrupt its addin cache |
@@ -259,7 +260,7 @@ namespace OpenSim.Framework | |||
259 | } | 260 | } |
260 | 261 | ||
261 | private static TextWriter prev_console_; | 262 | private static TextWriter prev_console_; |
262 | public void suppress_console_output_ (bool save) | 263 | public void suppress_console_output_(bool save) |
263 | { | 264 | { |
264 | if (save) | 265 | if (save) |
265 | { | 266 | { |
@@ -295,15 +296,15 @@ namespace OpenSim.Framework | |||
295 | return typeobj; | 296 | return typeobj; |
296 | 297 | ||
297 | if (type.Length == 0) | 298 | if (type.Length == 0) |
298 | throw new InvalidOperationException ("Type name not specified."); | 299 | throw new InvalidOperationException("Type name not specified."); |
299 | 300 | ||
300 | return typeobj = Addin.GetType (type, true); | 301 | return typeobj = Addin.GetType(type, true); |
301 | } | 302 | } |
302 | } | 303 | } |
303 | 304 | ||
304 | public object CreateInstance () | 305 | public object CreateInstance() |
305 | { | 306 | { |
306 | return Activator.CreateInstance (TypeObject); | 307 | return Activator.CreateInstance(TypeObject); |
307 | } | 308 | } |
308 | } | 309 | } |
309 | 310 | ||
@@ -315,13 +316,13 @@ namespace OpenSim.Framework | |||
315 | private int min; | 316 | private int min; |
316 | private int max; | 317 | private int max; |
317 | 318 | ||
318 | public PluginCountConstraint (int exact) | 319 | public PluginCountConstraint(int exact) |
319 | { | 320 | { |
320 | min = exact; | 321 | min = exact; |
321 | max = exact; | 322 | max = exact; |
322 | } | 323 | } |
323 | 324 | ||
324 | public PluginCountConstraint (int minimum, int maximum) | 325 | public PluginCountConstraint(int minimum, int maximum) |
325 | { | 326 | { |
326 | min = minimum; | 327 | min = minimum; |
327 | max = maximum; | 328 | max = maximum; |
@@ -338,10 +339,10 @@ namespace OpenSim.Framework | |||
338 | 339 | ||
339 | public bool Apply (string extpoint) | 340 | public bool Apply (string extpoint) |
340 | { | 341 | { |
341 | int count = AddinManager.GetExtensionNodes (extpoint).Count; | 342 | int count = AddinManager.GetExtensionNodes(extpoint).Count; |
342 | 343 | ||
343 | if ((count < min) || (count > max)) | 344 | if ((count < min) || (count > max)) |
344 | throw new PluginConstraintViolatedException (Message); | 345 | throw new PluginConstraintViolatedException(Message); |
345 | 346 | ||
346 | return true; | 347 | return true; |
347 | } | 348 | } |