aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework/PluginLoader.cs
diff options
context:
space:
mode:
authorJustin Clarke Casey2008-11-27 19:28:04 +0000
committerJustin Clarke Casey2008-11-27 19:28:04 +0000
commit7c6c776ff783b30dfc26a065e63c267e46edc53b (patch)
tree3bd8b995d16d038e01de2d2167faee38488b0e1c /OpenSim/Framework/PluginLoader.cs
parent* minor: remove the ability to change the client in ScenePresence to reduce t... (diff)
downloadopensim-SC_OLD-7c6c776ff783b30dfc26a065e63c267e46edc53b.zip
opensim-SC_OLD-7c6c776ff783b30dfc26a065e63c267e46edc53b.tar.gz
opensim-SC_OLD-7c6c776ff783b30dfc26a065e63c267e46edc53b.tar.bz2
opensim-SC_OLD-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.cs103
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 }